C语言程序(一)


1. 输入5实数,输出其中的最大值、最小值(利用打擂台方法)。

输入: 1.0  30.0  12.5  0.0  -40.0

输出:max is  30.0,min is  -40.0

#include

int main()

{

float a[5],max,min;

int i;

for(i=0;<5;i++)

scanf("%f",&a[i]

max=a[0];

min=a[0];

for(i=1;i<5;i++)

{

if(a[i]

min=a[i];

if(a[i]>max)

max=a[i];

}

printf("max is:%.1f, min is:%.1f\n",max,min);

return 0;

}

2. 公司规定,男职工到65岁退休,女职工到60岁退休。编写一个程序,输入职工的性别和年龄,判断出该职工是“已退休”还是“在职”。

输入:m, 50      输出:在职

输入:f, 61      输出:已退休

#include

int main()

{

char x;

int age;

scanf("%c,%d",&x,&age);

if(x=='m')

{

if(age>=65)

printf("已退休\n");

else

printf("在职\n");

}

if(x=='f')

{

if(age>=60)

printf("已退休\n");

else

printf("在职\n");

}

return 0;

}

3. 求一元二次方程ax2+bx+c=0的解。(a为非零的值,考虑b2-4ac三种情况)

输入:1  2  1       输出x1=-1.00,x2=-1.00

输入:1  5  6       输出x1=-2.00,x2=-3.00

输入:3  4  5       输出“无实数解!”

#include

#include

int main()

{

    double a,b,c,disc,x1,x2 ;

    scanf("%lf%lf%lf",&a,&b,&c);

    if(fabs(a)<=1e-6)

        printf("不是一元二次方程\n");

    else

    {

        disc=b*b-4*a*c;

        if(fabs(disc)<=1e-6)

{

x1=-b/(2*a);

            printf("x1=%.2lf, x2=%.2lf\n",x1,x1);

}

        else if(disc>1e-6)

        {

            x1=(-b+sqrt(disc))/(2*a);

            x2=(-b-sqrt(disc))/(2*a);

            printf("x1=%.2lf,x2=%.2lf\n",x1,x2);

        }

        else

            printf("无实数解!\n");

    }

    return 0;

}

4. 输入某年某月某日,判断这一天是这一年的第几天?(注意是否为闰年)

输入: 2012-3-17    输出:这一天是这一年的第77天。

#include

int main()

{

int y,m,d,i,days=0,total=0;

scanf("%d-%d-%d",&y,&m,&d);

for(i=1;i

{

switch(i)

{

case 1: case 3: case 5: case 7:

case 8: case 10: case 12:

days=31;

break;

case 4: case 6: case 9: case 11:

days=30;

break;

case 2:

if((y%400==0)||(y%100!=0)&&(y%4==0))

days=29;

else

days=28;

break;

}

total=total+days;

}

total=total+d;

printf("这一天是这一年的第%d天\n",total);

return 0;

}

5. 分段计算水费

           0        x≤0

y=f(x)=    4x/3    0<x≤15

          2.5x-10.5   x>15

编程:输入消费的水的吨数,输出“应交水费为***”。(结果保留1位小数)

输入: 0      输出:该用户用水: 0.0吨,应交水费为0.0元。

输入:10      输出:该用户用水:10.0吨,应交水费为13.3元。

输入:20      输出:该用户用水:20.0吨,应交水费为39.5元。

#include

int main()

{

float x,y;

scanf("%f",&x);

if(x<=0)

{

y=0;

printf("该用户用水:%.1f吨,应交水费为%.1f元。\n",x,y);

}

else if(x>0&&x<=15)

{

y=4*x/3;

printf("该用户用水:%.1f吨,应交水费为%.1f元。\n",x,y);

}

else

{

y=2.5*x-10.5;

printf("该用户用水:%.1f吨,应交水费为%.1f元。\n",x,y);

}

return 0;

}

6. 输入成绩,要求输出成绩等级A、B、C、D、E或error。90分以上为优秀,80~89分为良好,70~79分为中等,60~69分为及格,0~60分为不及格。若输入成绩低于0分和高于100分则输出”Enter data error”。(利用switch语句)

输入:95.5        输出:grade=A

输入:123         输出:Enter data error!

#include

int main()

{

float grade;

scanf("%f",&grade);

if(grade<0||grade>100)

printf("Enter data error!\n");

else

{

  switch((int)grade/10)

{

case 10:

case 9:printf("grade=A\n");break;

case 8:printf("grade=B\n");break;

case 7:printf("grade=C\n");break;

case 6:printf("grade=D\n");break;

default:printf("grade=E\n");break;

}

}

return 0;

}

7. 输入三角形的三边a,b,c(都为正整数),判断a,b,c,能否构成三角形,若能,进一步判断三角形形状,输出“特殊三角形!”还是“一般三角形!”,否则输出“无法构成三角形”。

输入:1  2  3     输出“无法构成三角形!”

输入:3  4  5     输出“特殊三角形!”

输入:3  4  6     输出“一般三角形!”

#include

#include

#define EPS 1e-1

int main()

{

  float a,b,c;

  scanf("%f%f%f",&a,&b,&c);

  if (a+b>c&&b+c>a&&a+c>b)

  {

if (fabs(a-b)<=EPS||fabs(b-c)<=EPS||fabs(a-c)<=EPS)

printf("特殊三角形!");

else if (fabs(a*a+b*b-c*c)<=EPS||fabs(a*a+c*c-b*b)<=EPS||fabs(b*b+c*c-a*a)<=EPS)

printf("特殊三角形!\n");

else

printf("一般三角形!\n");

  }

  else

    printf("无法构成三角形!\n");

}

8. 输入一个整数,判断该数是否为素数。若是素数,则输出“?为素数!”,否则,输出“?不是素数!”

输入:26      输出:26不是素数!

输入:37      输出:37为素数!

方法1:

#include

int main()

{

int n,i;

scanf("%d",&n);

for(i=2;i

if(n%i==0)

break;

if(i==n)

printf("%d是素数!\n",n);

else

printf("%d不是素数!\n",n);

return 0;

}

方法2:

#include

#include

int main()

{

int m,k,n,i;

scanf("%d",&m);

k=sqrt(m);

for(i=2;i<=k;i++)

{

if(m%i==0)

break;

}

if(i==k+1)

printf("%d是回文数!",m);

else

printf("%d不是回文数!",m);

 }

9. 输入一行字符,分别统计出其中的英文字符、空格、数字和其他字符。

输入:My address is “#123 Anyang Road”.    

输出:letters=21,space=5,digit=3,other=4

#include

int main()

{

    int letter=0,space=0,digit=0,other=0;

    char c;

    while((c=getchar())!='\n')

    {

        if(c>='a'&&c<='z'||c>='A'&&c<='Z')

            letter++;

        else if(c==' ')

            space++;

        else if(c>='0'&&c<'9')

            digit++;

        else

            other++;

    }

    printf("letter=%d space=%d digit=%d other=%d\n",

           letter,space,digit,other);

    return 0;

}

10. 求Fibonacci数列的前20个数,并按每行5个数输出。

输出:  1      1      2      3      5

        8     13     21     34     55

       89    144    233    377    610

      987   1597   2584   4181   6765  

#include

int main()

{

    int i,a[20]={1,1};

    for(i=2;i<20;i++)

        a[i]=a[i-1]+a[i-2];

    for(i=0;i<20;i++)

    {

        printf("%6d",a[i]);

        if((i+1)%5==0)

            printf("\n");

    }

    return 0;

}

11. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第n次落地时,共经过多少米?第n次反弹多高?

输入:n=10

输出:第10次落地共经过299.609375米

第10次落地反弹0.097656米

#include

int main()

{

    float i,h=100,s=100;

int n;

scanf("%d",&n);

    for(i=1;i

    {

        h=h/2;

        s=s+2*h;

    }

    printf("第10次落地共经过%f米\n",s);

    printf("第10次落地反弹%f米\n",h/2);

    return 0;

}

12. 从键盘任意输入一个5位数x,编程计算x的每一位数字相加之和。(要求使用循环实现取每一位上的数字)

输入:x=51234

输出:x的每一位数字相加之和为:15

#include

int main()

{

    int i,a,n,sum=0;

    printf("x=");

    scanf("%d",&n);

    for(i=0;i<5;i++)

    {

        a=n%10;

        n=n/10;

        sum=sum+a;

    }

    printf("x的每一位数字相加之和为:%d\n",sum);

    return 0;

}

13. 求1+2!+4!+6!+n!的和(n<20)。

输入:n=8

输出:1+2!+4!+6!+8! = 41067

#include

int main()

{

int i,j,p,n;

long sum=1;

printf("n=");

scanf("%d",&n);

for(i=2;i<=n;i=i+2)

{

p=1;

for(j=1;j<=i;j++)

p=p*j;

sum=sum+p;

}

printf("1+2!+4!+6!+%d! = %ld\n",n,sum);

}

14. 输入两个正整数m和n,求其最大公约数和最小公倍数。(利用辗转相除法)

输入:8,12

输出:最大公约数为4,最小公倍数为24

#include

int main()

{

int m,n,c,d,t;

scanf("%d%d",&n,&m);

if(m

{

t=n;

n=m;

m=t;

}

d=n*m;

while(n!=0)

{

c=m%n;

m=n;

n=c;

}

printf("最大公约数为:%d, ",m);

printf("最小公倍数为:%d\n",d/m);

return 0;

}

15. 编写一个程序,计算1-1/3+1/5-1/7+1/9+...的前20项之和,小数点后保留5位数字。

输入:n=20

输出:前20项之和为0.77291

#include

int main()

{

    int i,n;

    double sum=0.0,a=1.0,flag;

    printf("n=");

    scanf("%d",&n);

    for(i=0;i

    {

        flag=a/(1+i*2);

        sum=sum+flag;

        a=-a;

    }

    printf("前20项之和为%.5lf\n",sum);

    return 0;

}

16. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字,n表示a的位数。

(例如:2+22+222+2222+22222,a为2,n为5)

输入:a,n =2,5    

输出:s=24690

#include

#include

int main()

{

int s=0,m,i,j,a,n,sum=0;

printf("a,n=");

scanf("%d,%d",&a,&n);

for(j=0;j

{

sum=0;

for(i=0;i<=j;i++)

{

m=a*pow(10,i);

sum=sum+m;

}

s=sum+s;

}

printf("s=%d\n",s);

}

17. 输入一个八进制数,并将其转换为十进制。(要求使用循环实现,如输入17,转换后为15)

输入:输入一个八进制数:17

输出:八进制17——>十进制为:15

#include

#include

int main()

{

int a,b,c=0,i,n,t;

printf("输入一个八进制数:");

scanf("%d",&n);

t=n;

for(i=0;n>0;i++)

{

a=n%10;

c=c+a*pow(8,i);

n=n/10;

}

printf("八进制%d——>十进制为:%d\n",t,c);

return 0;

}

18. 编程输出如下形式的九九乘法表。

输入:n=9

输出:

2       4

3       6       9

……

8       16      24    32      40     48     56    64    

9       18      27    36      45     54     63    72     81

#include

int main()

{

int i,j,n;

printf("n=");

scanf("%d",&n);

for(i = 1;i <= n;i++)

{

for(j = 1;j <= i;j++)

printf("%d\t",i * j);

printf("\n");

}

return 0;

}

19. 输出上三角图案。

输入:n=5

输出:

***

*****

*******

*********

#include

int main()

{

    int n,m,i,k;

    printf("n=");

    scanf("%d",&n);

    for(i=1;i<=n;i++)

    {

        for(k=1;k<=5-i;k++)

            printf(" ");

        for(m=1;m<=2*i-1;m++)

            printf("*");

        printf("\n");

    }

    return 0;

}

20. 输出倒三角形式的9*9口诀表。

输入:n=9

输出:

9*1=9  9*2=18  9*3=27  9*4=36……                  9*9=81

8*1=8  8*2=16  8*3=24  8*4=32               8*8=64

……

1*1=1

#include

int main()

{

    int n,i,j,result;

    printf("n=");

    scanf("%d",&n);

    for(i=n;i>=1;i--)

    {

        for(j=1;j<=i;j++)

        {

            result=i*j;

            printf("%d*%d=%-3d",i,j,result);

        }

        printf("\n");

    }

    return 0;

}

21. 输出下三角图案。

输入:n=5

输出:

*********

*******

*****

***

#include

int main()

{

    int n,m,i,j,k;

    printf("n=");

    scanf("%d",&n);

    for(i=1;i<=n;i++)

    {

        for(k=1;k<=i-1;k++)

            printf(" ");

        for(m=1;m<=(11-2*i);m++)

            printf("*");

        printf("\n");

    }

    return 0;

}

22. 输出国际象棋棋盘图案。

输入:n=8

输出:

#  #  #  #           

     #  #  #  #

#  #  #  #

  #  #  #  #

#  #  #  #

  #  #  #  #

#  #  #  #

  #  #  #  #

#include

int main()

{

int i,j,n;

printf("n=");

scanf("%d",&n);

for(i=1;i<=n;i++)

{

if(i%2==1)

{

for(j=1;j<=n;j++)

{

if(j%2==1)

printf("#");

else

printf("  ");

}

printf("\n");

}

else

{

for(j=1;j<=n;j++)

{

if(j%2==1)

printf("  ");

else

printf("#");

}

printf("\n");

}

}

return 0;

}

23. 输入5个整数放在一维数组中,编写程序打印下面的方阵:

输入:1  2  8  2  10

输出:

1  2  8  2   10

2  8  2  10  1

8  2  10  1  2

2  10  1  2  8

#include

int main()

{

int i,j,t,a[5];

for(i=0;i<5;i++)

scanf("%d",&a[i]);

printf("\n");

for(i=0;i<4;i++)

{

for(j=i;j<5+i;j++)

printf("%d ",a[j%5]);

printf("\n");

}

return 0;

}

24. 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6的因子为1,2,3,而6=1+2+3,因此6是完数。编写程序找出1000以内的所有完数。

输出:6是一个完数,它的因子是1 2 3

28是一个完数,它的因子是1 2 4 7 14

496是一个完数,它的因子是1 2 4 8 16 31 62 124 248

#include

int main()

{

    int i,j,k,sum;

    for(i=1;i<=1000;i++)

    {

        sum=0;

        for(j=1;j

        {

            if(i%j==0)

                sum=sum+j;

        }

        if(sum==i)

        {

            printf("%d 是一个完数,它的因子是 ",i);

            for(k=1;k

            {

                if(i%k==0)

                    printf("%d ",k);

            }

            printf("\n");

        }

    }

    return 0;

}

25. 验证哥德巴赫猜想,任何大于2的偶数可以分成两个素数之和。

输入:44

输出:44= 3+41

44= 7+37

44=13+31

#include

int main()

{

    int n1,n2,n,i,m;

    scanf("%d",&n);

    for(n1=2;n1<=n/2;n1++)

    {

        for(i=2;i

            if(n1%i==0)

                break;

        if(i==n1)

        {

            n2=n-n1;

            for(m=2;m

                if(n2%m==0)

                break;

            if(n2==m)

                printf("%d=%d+%d\n",n,n1,n2);

        }

    }

    return 0;

}

26. 猴子选大王:一群猴子要选新猴王。新猴王的选择方法是:让n只猴子围成一圈,从某位置顺序编号为1~n号。从第1号开始报数,报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来的第几号猴子当选猴王?

输入:17      输出:11号猴子当选猴王!

#include

int main()

{

int i,n,monkey[100]={0};

scanf("%d",&n);

for(i=1;i<=n;i++)

monkey[i]=i;

int flag=0,cout=n;

for(i=0;cout>1;i++)

{

if(monkey[i%n +1]!=-1)

flag++;

if(flag==3)

{

monkey[i%n +1]=-1;

cout--;

flag=0;

}

}

for(i=1;i<=n;i++)

if(monkey[i]!=-1)

printf("%d号猴子当选猴王!",i);

return 0;

}

27. 两个乒乓球队进行比赛,各出3人。甲队为A,B,C 3人,乙队为X,Y,Z 3人。已抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X,Z比,请编程序找出3对选手的名单。

输出:A---Z

B---X

C---Y

#include

int main()

{

int i;

char A,B,C;

for(A='X';A<='Z';A++)

for(B='X';B<='Z';B++)

for(C='X';C<='Z';C++)

if(A!='X'&&C!='X'&&C!='Z'&&A!=B&&A!=C&&B!=C)

printf("A---%2c\nB---%2c\nC---%2c\n",A,B,C);

return 0;

}

28. 有4个字符串{“Chinese”,” American”,” Swedish”,”Englishman”},要求按由小到大的顺序排列输出。(采用选择法排序)

输出:American

Chinese

Englishman

Swedish

#include

#include

int main()

{

char s[100],a[4][100];

int i,j,p;

for(i=0;i<4;i++)

gets(a[i]);

printf("\n");

for(i=0;i<4;i++)

{

p=i;

strcpy(s,a[i]);

for(j=i+1;j<4;j++)

if(strcmp(a[j],s)<0)

p=j;

if(p!=i)

{

strcpy(s,a[i]);

strcpy(a[i],a[p]);

strcpy(a[p],s);

}

}

for(i=0;i<4;i++)

puts(a[i]);

printf("\n");

}

29. 提取一个字符串中的所有数字字符(' 0'~'9')将其转换为一个整数输出。

输入:"zy5a2b0"

输出: 520

#include

#include

int main()

{

char a[100];

int i,l,j=0,s[100];

gets(a);

l=strlen(a);

for(i=0;i

{

if(a[i]>=48&&a[i]<=57)

s[j++]=a[i]-48;

}

for(i=0;i

printf("%d",s[i]);

}

30. 输入一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

输入:12321      输出:12321是回文数!

输入:12322      输出:12322不是回文数!

#include

int main()

{

int n,t,e,i=0,a[10];

scanf("%d",&n);

t=n;

while(t!=0)

{

e=t%10;

a[i++]=e;

t=t/10;

}

if(a[0]==a[4]&&a[1]==a[3])

printf("%d是回文数!\n",n);

else

printf("%d不是回文数!\n",n);

return 0;

}

31. 将任意一个4*4矩阵,将矩阵的外围元素顺时针旋转90度。

输入:             输出:

21 12 13 24            42 29 25 21

25 16 47 38            21 16 47 12

29 11 32 54            33 11 32 13

42 21 33 10            10 54 38 24

#include

int main()

{

int i,j,a[4][4],s[4][4];

for(i=0;i<4;i++)

for(j=0;j<4;j++)

scanf("%d",&a[i][j]);

for(i=0;i<4;i++)

for(j=0;j<4;j++)

{

if(i==1&&j==1||i==1&&j==2)

s[i][j]=a[i][j];

else if(i==2&&j==1||i==2&&j==2)

s[i][j]=a[i][j];

else

s[i][j]=a[3-j][i];

}

printf("\n");

for(i=0;i<4;i++)

{

for(j=0;j<4;j++)

printf("%d ",s[i][j]);

printf("\n");

}

}

32. 输入n个整数,用起泡法对这10个数排序,并该由小到大顺序在屏幕上输出。

输入:n=10

      原始数列:9  8  7  6  5  4  3  2  1  0

输出:由小到大排序后:0  1  2  3  4  5  6  7  8  9

#include

int main()

{

int n,i,j,t,a[100];

printf("n=");

scanf("%d",&n);

printf("原始数列:");

for(i=0;i

scanf("%d",&a[i]);

printf("\n");

for(j=0;j

for(i=0;i

if(a[i]>a[i+1])

{

t=a[i];

a[i]=a[i+1];

a[i+1]=t;

}

printf("由小到大排序后:");

for(i=0;i

printf(" %d",a[i]);

printf("\n");

}

33. 将一个数组中的值按逆序重新存放。

输入:n=5

      原始数列:8  6  5  4  1

输出:逆序为:1  4  5  6  8

#include

int main()

{

int i,n,t,a[10];

printf("n=");

scanf("%d",&n);

    printf("原始数列:");

    for(i=0; i

        scanf("%d",&a[i]);

    for(i=0; i

    {

        t=a[i];

        a[i]=a[n-1-i];

        a[n-1-i]=t;

    }

    printf("逆序为:");

    for(i=0; i

        printf(" %d",a[i]);

    printf("\n");

    return 0;

}

34. 有一个已降序排列的数组{0,10,20,30,40,50,60,70,80,90},要求输入一个数后,按原来排序的规律将它插入数组中。(不借助其他数组完成,不能使用排序)

输入:插入数据:56

输出:新数列:0  10  20  30  40  50  56  60  70  80  90

方法1   

#include

  int main()

  {

    int a[11]={0,10,20,30,40,50,60,70,80,90};

    int temp1,temp2,num,end,i,j;

    printf("array a:\n");

    for(i=0;i<10;i++)

        printf("%5d",a[i]);

    printf("\n");

    printf("insert data:");

    scanf("%d",&num);

    end=a[9];

    if(num>end)

        a[10]=num;

    else

    {

        for(i=0;i<10;i++)

        {

            if(a[i]>num)

            {

                temp1=a[i];

                a[i]=num;

                for(j=i+1;j<11;j++)        

                {

                    temp2=a[j];

                    a[j]=temp1;

                    temp1=temp2;

                }

                break;

            }

        }

    }

    printf("Now array:\n");

    for(i=0;i<11;i++)

        printf("%5d",a[i]);

    printf("\n");

    return 0;

  }

方法2:

#include

  int main()

  {

    int a[11]={0,10,20,30,40,50,60,70,80,90};

    int t,num,end,i,j;

    printf("array a:\n");

    for(i=0;i<10;i++)

        printf("%5d",a[i]);

    printf("\n");

    printf("insert data:");

    scanf("%d",&num);

    end=a[9];

    if(num>end)

        a[10]=num;

    else

        for(i=0;i<10;i++)

        if(a[i]>num)

        {

            t=a[i];

            a[i]=num;    

            for(j=9;j>i;j--)                

               a[j+1]=a[j];

            a[j+1]=t;    

        break;               

        }

    printf("Now array:\n");

    for(i=0;i<11;i++)

        printf("%5d",a[i]);

    printf("\n");

    return 0;

  }

35. 输入10个整数{0,1,2,3,4,5,6,7,8,9},用选择法优化算法对这10个数排序,并该由大到小顺序在屏幕上输出。

输入:n=10

      原始数列:0  1  2  3  4  5  6  7  8  9

输出:由大到小排序后:9  8  7  6  5  4  3  2  1  0

#include

int main()

{

int n,i,j,min,t,a[100];

printf("n=");

scanf("%d",&n);

printf("原始数列:");

for(i=0;i

scanf("%d",&a[i]);

printf("\n");

for(i=0;i

{

min=i;

for(j=i+1;j

if(a[min]<a[j])

min=j;

if(min!=i)

{

t=a[i];

a[i]=a[min];

a[min]=t;

}

}

printf("由大到小排序后:");

for(i=0;i

printf(" %d",a[i]);

printf("\n");

}

36. 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。

输入:I am a superman!

输出:4个单词。

#include

#include

int main()

{

char a[100];

int i,l,total=1;

gets(a);

l=strlen(a);

for(i=0;i

if(a[i]==' ')

total++;

printf("%d个单词。\n",total);

return 0;

 }

37. 编程实现:一个长度为10 的整型{-3,4,7,9,13,45,67,89,100,180}数组,利用折半查找实现查询功能。

输入:9      输出:a[3]=9

  输入:10     输出:没有此数!

方法1:

#include

int main()

{

int a[11]={-3,4,7,9,13,45,67,89,100,180};

int low=0,high=9,mid=(low+high)/2;

int b;

scanf("%d",&b);

while(b!=a[mid])

{

if(b>a[mid])

{

low=mid+1;

mid=(low+high)/2;

}

else if(b

{

high=mid-1;

mid=(low+high)/2;

}

if(mid==low)

break;

}

if(b==a[mid])

printf("a[%d]=%d\n",mid,a[mid]);

else if(b==a[high])

printf("a[%d]=%d\n",high,a[high]);

else

printf("没有此数!\n");

return 0;

}

方法2:

#include

int main()

{

int a[11]={-3,4,7,9,13,45,67,89,100,180};

int low=0,high=9,mid=(high+low)/2,flag=0;

int b;

scanf("%d",&b);

while(low<=high)

{

if(b>a[mid])

{

low=mid+1;

mid=(low+high)/2;

}

else if(b

{

high=mid-1;

mid=(low+high)/2;

}

else

{

flag=1;

break;

}

}

if(flag==1)

printf("a=[%d]=%d\n",mid,a[mid]);

else

printf("没有此数!\n");

return 0;

}

38. 删除一个字符串{“I am a superman!”}中指定的字符。

输入:要删除的字符: (一个空格)

输出:删除后新字符串:Iamasuperman!

#include

#include

int main()

{

char x,s[100],a[100]="I am a superman!";

int l,i,j=0;

printf("要删除的字符:");

scanf("%c",&x);

l=strlen(a);

for(i=0;i

{

if(a[i]==x)

continue;

else

s[j++]=a[i];

}

s[j]='\0';

puts(s);

printf("\n");

return 0;

}

39. 删除一个升序排列的数组{2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10}中重复的数字,重复数字只保留一个。

输出:2,3,4,5,6,7,8,9,10

#include

int main()

{

int i,j=1,s[20],a[20]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10};

s[0]=a[0];

for(i=1;i<20;i++)

{

if(a[i]!=a[i-1])

s[j++]=a[i];

else

continue;

}

for(i=0;i

printf("%d ",s[i]);

printf("\n");

}

40.一次考试中,共考了5门课,有10名学生,统计10个学生中至少有2门课成绩高于88分的人数。

score[10][5]={{89,76,78,90,77},{82,86,78,89,79},{92,87,88,84,80},{84,86,88,82,90},{80,76,78,89,87},{81,77,78,91,79},{79,85,90,85,78},{85,84,76,91,100},{84,83,78,92,91},{87,93,90,88,85}};

输出:至少有2门课成绩高于88分的人数为4人。

#include

int main()

{

int i,j,k=0,s=0;

int a[10][5]={{89,76,78,90,77},{82,86,78,89,79},{92,87,88,84,80},{84,86,88,82,90},

{80,76,78,89,87},{81,77,78,91,79},{79,85,90,85,78},

{85,84,76,91,100},{84,83,78,92,91},{87,93,90,88,85}};

for(i=0;i<10;i++)

{

k=0;

for(j=0;j<5;j++)

if(a[i][j]>88)

k++;

if(k>=2)

s++;

}

printf("至少有2门课成绩高于88分的人数为%d人。\n",s);

return 0;

}

41. 求一个3行4列数组中的鞍点及所在位置(鞍点即某个数在所在行值最大,同时在所在列最小)。如果有鞍点,输出“鞍点是**,位置是*行*列!”;如果没有鞍点,输出“没有鞍点”

输入:                            输入:

1  2  3  4                         1  2  3  11

2  4  6  8                         2  4  6  12

3  6  8  12                        3  6  9   7

输出:鞍点是4,位置是0行3列!    输出:没有鞍点

#include

int main()

{

int i,j,h,row,list,max,flag=0,k=0,a[3][4];

for(i=0;i<3;i++)

for(j=0;j<4;j++)

scanf("%d",&a[i][j]);

for(i=0;i<3;i++)

{

flag=0;

max=a[i][0];

for(j=0;j<4;j++)

if(max

{

max=a[i][j];

row=i;

list=j;

}

for(h=0;h<3;h++)

if(max>a[h][list])

flag=1;

if(flag==0)

printf("鞍点是%d,位置是%d行%d列!",max,row,list);

else if(flag==1)

k++;

}

if(k==3)

printf("没有鞍点");

return 0;

}

42. 编程:输入n,输出对应的杨辉三角形。如输入6,输出如下:

                         1     1

                      1     2      1

                   1     3     3      1

               1      4     6      4     1

            1     5     10     10     5     1

#include

int main()

{

int n,i,j,k;

scanf("%d",&n);

int a[n][n];

for(i=0;i

{

a[i][0]=1;

a[i][i]=1;

}

for(i=2;i

for(j=1;j<=i-1;j++)

a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=0;i

{

        for(k=0;k

  printf("   ");

for(j=0;j<=i;j++)

printf("%-6d",a[i][j]);

printf("\n");

}

return 0;

}

43. 一个班5个人,每人有4门课程成绩,编写程序,求每个人的平均分和每门课的平均分。(数据进行初始化)

英语 高数 计算机 物理 平均分

张  88   79    89    70    81.5

王  90   86    72    74    80.5

李  81   89    85    91    86.5

    赵  77   82    72    88    79.8

    刘  78   87    89    93    86.8

平均分 82.8  84.6   82    83.2

#include

int main()

{

float sum,a[5][4],r[5],k[4];

int i,j;

for(i=0;i<5;i++)

for(j=0;j<4;j++)

scanf("%f",&a[i][j]);

for(i=0;i<5;i++)

{

sum=0;

for(j=0;j<4;j++)

sum=sum+a[i][j];

r[i]=sum/4;

}

printf("\n");

for(i=0;i<4;i++)

{

sum=0;

for(j=0;j<5;j++)

sum=sum+a[j][i];

k[i]=sum/5;

}

printf("个人平均分:\n");

printf("张:%.1f 王:%.1f 李:%.1f 赵:%.1f 刘:%.1f\n",r[0],r[1],r[2],r[3],r[4]);

printf("各科平均分:\n");

printf("英语:%.1f 高数%.1f 计算机%.1f 物理%.1f\n",k[0],k[1],k[2],k[3]);

return 0;

}

44. 开灯问题:有n盏灯,编号为1~n,第一个人把所有灯打开,第2个人按下所有是2的倍数的开关,第3个人按下所有编号为3的倍数的开关(其中关着的灯将被打开,打开的灯将被关闭),以此类推,一共有k个人,问最后哪些灯开着?输入n和k,输出开着灯的编号。(k<=n<=1000)。

输入:7  3      

输出:开着灯的编号为:1  5  6  7

#include

int main()

{

int n,k,i,j,m=0,a[1000];

scanf("%d%d",&n,&k);

for(i=1;i<=n;i++)

a[i]=1;

for(i=2;i<=k;i++)

for(j=i;j<=n;j=j+i)

{

if(a[j]==1)

a[j]=0;

else

a[j]=1;

}

printf("开着灯的编号为:");

for(i=1;i<=n;i++)

if(a[i]==1)

printf("%d ",i);

}

45. 电梯的故事:电梯每向上运行一层需要6秒钟,向下运行一层需要4秒钟,每开门一次需要5秒钟(如果有人到达才开门),并且每下一个人需要加1秒。

电梯最开始在0层,并且最后必须再回到0层才算一趟任务结束。假设在开始时一直电梯内的每个人要去的楼层,你能计算出完成本趟任务需要的总时间吗?

输入:人数为:4,分别去的楼层为:2  4  3  2

输出:总时间为59秒!

输入:人数3,分别去的楼层为:10  10  10

输出:总时间为108秒!

#include

int main()

{

int r,i,j,x,temp,time;

printf("人数为:");

scanf("%d",&r);

int a[r];

printf("分别去的楼层为:");

for(i=0;i

scanf("%d",&a[i]);

for(i=0;i

for(j=0;j

if(a[i]>a[i+1])

{

temp=a[i];

a[i]=a[i+1];

a[i+1]=temp;

}

for(i=0;i

if(a[i]!=a[i+1])

x++;

time=6*a[r-1]+4*a[r-1]+r+5*x;

printf("总时间为%d秒!",time);

 }