C语言程序(一)


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

输入: 1.0  30.0  12.5  0.0  -40.0

输出:max is  30.0min 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:%.1fmin 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.00x2=-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    0x≤15

          2.5x-10.5   x15

编程:输入消费的水的吨数,输出应交水费为***”。(结果保留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. 输入成绩,要求输出成绩等级ABCDEerror90分以上为优秀,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. 输入两个正整数mn,求其最大公约数和最小公倍数。(利用辗转相除法)

输入: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+22222a2n5

输入: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人。甲队为ABC 3人,乙队为XYZ 3人。已抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和XZ比,请编程序找出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. 求一个34列数组中的鞍点及所在位置(鞍点即某个数在所在行值最大,同时在所在列最小)。如果有鞍点,输出鞍点是**,位置是**列!;如果没有鞍点,输出没有鞍点

输入:                            输入:

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,位置是03列!    输出:没有鞍点

#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个人,问最后哪些灯开着?输入nk,输出开着灯的编号。(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);

 }