C语言练习题

发布于 26 天前  134 次阅读


本文仅供参考,若有错误,请联系修改。(注:微信小程序由于部分原因,显示的效果不怎么好,建议点击小程序下方的“阅读原文”到浏览器打开更佳哦!)

1、编写程序,输入2个整数,求其中最大数(不能使用条件表达式)。

#include <stdio.h>
main(){
int a,b,max;
scanf("%d%d",&a,&b);
if(a>b) max=a;
else max=b;
printf("max=%d",max);
}

2、编写程序,输入3个整数,求其中最大数(不能使用条件表达式)。

#include <stdio.h>
main(){
  int a,b,c,max;
  scanf("%d%d%d",&a,&b,&c);
  if(a>b) max=a;
  else max=b;
  if(max<c) max=c;
  printf("max=%d",max);
}

3、编写程序,输入3个整数,按从小到大顺序输出。

#include <stdio.h>
main(){
  int a,b,c,t;
  scanf("%d%d%d",&a,&b,&c);
  if(a>b){t=a;a=b;b=t;}
  if(a>c){t=a;a=c;c=t;}
  if(b>c){t=b;b=c;c=t;}
  printf("%d,%d,%d",a,b,c);
}

4、编写程序,输入3个整数,判断是否可以组成三角形。如果不能,提示不能组成三角形;如果能,判断是否可以组成直角三角形,如果能组成直角三角形,计算改直角三角形面积,否则提示不能组成直角三角形。

#include <stdio.h>
#include <math.h>
main(){
  int a,b,c;
  float p,s;
  scanf("%d%d%d",&a,&b,&c);
  if(a+b>c&&b+c>a&&a+c>b)//求面积使用海伦公式
  {
    if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a)
    {
      p=(a+b+c)/2.0;
      s=sqrt(p*(p-a)*(p-b)*(p-c));
      printf("s=%f",s);
      }
    else
      printf("不能组成直角三角形");
  }
  else
    printf("不能组成三角形");
}

5、输入1个整数,判断是否能被13和15同时整除并且十位以上是6。

#include <stdio.h>
main(){
  int x;
  scanf("%d",&x);
  if(x%13==0&&x%15==0&&x/10%10==6)
    printf("yes");
  else
    printf("no");
}

6、编写程序,输入1个3位数正整数,判断是否能为3位水仙花数。

#include <stdio.h>
main(){
  int x,a,b,c;
  scanf("%d",&x);
  a=x%10;
  b=x/10%10;
  c=x/100;
  if(x==a*a*a+b*b*b+c*c*c)
    printf("yes");
  else
    printf("no");
}

7、编写程序,输入一个年份,判断是否为平年。

#include <stdio.h>
main(){
  int year;
  scanf("%d",&year);
  if(!(year%400==0||year%4==0&&year%100!=0))
    printf("是平年");
  else
    printf("不是平年");
}

8、编写程序,求0到50整数的和。

#include <stdio.h>
main(){
  int sum=0,i=0;
  while(i<=50)
  {
  sum+=i;
  i++;
  }
printf("sum=%d",sum);
}

9、编写程序,用for求0到50的整数的和。

#include <stdio.h>
main(){
  int sum=0,i=0;
  for(;i<=50;sum+=i,i++);
printf("sum=%d",sum);
}

10、输入整数n,求n!。

#include <stdio.h>
main(){
  int n,i;
  long fac;
  scanf("%d",&n);
  for(i=1,fac=1;i<=n;i++);
    fac=fac*i;
printf("fac=%ld",fac);
}

11、编写程序,输入10个整数,求这些数的和。

#include <stdio.h>
main(){
  int n,i,sum=0;
  for(i=0;i<10;i++);
  {
    scanf("%d",&n):
    sum+=n;
  }
printf("sum=%d",sum);
}

12、编写程序,输入整数n,计算1+1/2+1/3+...+1/n。

#include <stdio.h>
main(){
  int n,i;
  float sum=0;
  scanf("%d",&n);
  for(i=1;i<=n;i++);
    sum+=1.0/i;
printf("sum=%f",sum);
}

13、编写程序,计算1+1/2+2/3+3/4+...+99/100。

#include <stdio.h>
main(){
  float i,sum=1;
  scanf("%d",&n);
  for(i=1;i<100;i++);
    sum+=i/(i+1);
printf("sum=%f",sum);
}

14、编写程序,计算1*2*3+2*3*4+3*4*5+...+98*99*100。

#include <stdio.h>
main(){
  int i,sum=0;
  for(i=1;i<99;i++);
    sum+=i*(i+1)*(i+2);
printf("sum=%d",sum);
}

15、编写程序,输入10个整数,求其中正数、负数以及零的个数。

#include <stdio.h>
main(){
  int n,i,a=0,b=0,c=0;
  for(i=0;i<10;i++)
  {
    scanf("%d",&n);
    if(n>0) a++;
    else if(n==0) b++;
    else c++;
  }
printf("%d,%d,%d",a,b,c);
}

16、编写程序,输入80个字符,判断其中数字字符、字母字符以及其他字符的个数。

#include <stdio.h>
main(){
  int a=0,b=0,c=0,i;
  char ch;
  for(i=0;i<80;i++)
  {
    ch=getchar();
    if(ch>='0'&&ch<='9') a++;
    else if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z') b++;
    else c++;
  }
printf("%d,%d,%d",a,b,c);
}

17、编写程序,输入一行字符(以'\n'结束),将其中的小写字母转换为对应的大写字母并输出,将其中的数字字符对应的数字求和后输出(如'5'对应数字5)。

#include <stdio.h>
main(){
  int sum=0;
  char ch;
  while((ch=getchar())!='\n')
  {
    if(ch>='a'&&ch<='z')
    {
    ch=ch-32;
    printf("%c\n",ch);
    }
  if(ch>='0'&&ch<='9')
    sum+=ch-'0';
  }
printf("sum=%d",sum);
}

18、编写程序,输出200到500之间所有以6结尾并且能被13和18同时整除的数以及这些数的和。

#include <stdio.h>
main(){
  int i,sum=0;
  for(i=200;i<=500;i++)
  if(i%10==6&&i%13==0&&i%18==0)
  {
    sum+=i;
    printf("%d\n",i);
  }
printf("sum=%d",sum);
}

19、编写程序,输出2000年到3000年之间所有的平年。

#include <stdio.h>
main(){
  int y;
  for(y=2000;i<=3000;y++)
  if(!(y%400==0||y%4==0&&y%100==0))
printf("%d\n",y);
}

20、编写程序,输出所有的3位水仙花数。

#include <stdio.h>
main(){
  int i,a,b,c;
  for(i=100;i<1000;i++)
  {
    a=i%10;
    b=i/10%10;
    c=i/100;
    if(i==a*a*a+b*b*b+c*c*c)
      printf("%d\n",i);
  }
}

21、编写程序,输入一个正整数,判断是否为完数。

#include <stdio.h>
main(){
  int n,sum=0,i;
  scanf("%d",&n);
  for(i=1;i<n;i++)
    if(n%i==0) sum+=i;
  if(sum==n)
    printf("yes");
  esle
    printf("no");
}

22、某移动公司月度资费计算方法如下:当通讯时长为100分钟以内,资费28元/月;当通讯时长超出100分钟以内,超出部分每分钟0.3元;当通讯时长超出200分钟以内,超出部分每分钟0.15元;输入一年中每个月的通讯时长,计算该年资费的总和。

#include <stdio.h>
main(){
  int i;
  float sum=0,x,y;
  for(i=0;i<12;i++)
  {
    scanf("%f",x);
    if(x<=100) y=28;
    if(x>=100&&x<=200) y=28+(x-100)*0.3;
    if(x>200) y=28+(200-100)*0.3+(x-200)*0.15;
    sum+=y;
  }
  printf("sum=%f",sum);
}

23、编写程序,第1行1个*,第2行2个*,依次类推,第100行100个*。

#include <stdio.h>
main(){
  int i,j;
  for(i=1;i<=100;i++)
  {
    for(j=1;j<=i;j++)
      printf("*");
      printf("\n");
  }
}

24、 编写程序,第10行10个*,第9行9个*,依次类推,第1行1个*。

#include <stdio.h>
main(){
  int i,j;
  for(i=1;i<=10;i--)
  {
    for(j=1;j<=i;j++)
      printf("*");
      printf("\n");
  }
}

25、编写程序,输入整数n,求1!+2!+3!+...+n!。

//第一种解法
#include <stdio.h>
main(){
  int n,i,j;
  long fac,sum=0;
  scanf("%d",&n);
  for(i=1;i<=n;i++)
  {
    for(fac=1,j=1;j<=i;j++)
      fac*=j;
    sum+=fac;
  }
  printf("sum=%ld",sum);
}
//第二种解法
#include <stdio.h>
main(){
  int n,i;
  long fac,sum=0;
  scanf("%d",&n);
  for(i=1,fac=1;i<=n;i++)
  {
    fac*=j;
    sum+=fac;
  }
  printf("sum=%ld",sum);
}
//第三种解法
#include <stdio.h>
long fac(int n){
if(n==1||n==0) return 1;
else return n*fac(n-1);
}
main(){
  int n,i;
  long ,sum=0;
  scanf("%d",&n);
  for(i=1;i<=n;i++)
    sum+=fac(i);
  printf("sum=%ld",sum);
}

26、计算1+(1+2)+(1+2+3)+...+(1+2+3+...+n)。

#include <stdio.h>
main(){
  int n,i;
  long fac,sum=0;
  scanf("%d",&n);
  for(i=1,fac=0;i<=n;i++)
  {
    fac*=i;
    sum+=fac;
  }
  printf("sum=%ld",sum);
}

27、编写程序,输入整数n,求:n1+n2+n3+...+nn。

#include <stdio.h>
main(){
  int n,i;
  long fac,sum=0;
  scanf("%d",&n);
  for(i=1,fac=1;i<=n;i++)
  {
    fac*=n;
    sum+=fac;
  }
  printf("sum=%ld",sum);
}

28、一只小蚕从树下往树顶上爬,想吃到树顶的树叶,树高h(h>m>n)米,小蚕一个白天爬m米,晚上掉下来n米,问小蚕几天可以吃到树顶上的树叶。

#include <stdio.h>
main(){
  int h,m,n,s=0,t=0;
  scanf("%d%d%d",&h,&m,&n);
  while(s<h)
  {
    s=s+m;
    t++;
    if(s>=h) break;
    s=s-n;
  }
  printf("%d",t);
}

29、编写程序,输入一个大于2的正整数,判断是否为素数。

//第一种解法
#include <stdio.h>
main(){
  unsigned n,i;
  int flag=0;
  scanf("%u",&n);
  for(i=2;i<n/2;i++)
    if(n%i==0) {flag=1;break;}
  if(flag==0)
    printf("yes");
  else
    printf("no");
}
//第二种解法
#include <stdio.h>
main(){
  unsigned n,i;
  scanf("%u",&n);
  for(i=2;i<n;i++)
    if(n%i==0) break;
  if(i<n)
    printf("no");
  else
    printf("yes");
}

30、编写程序,输出200到400之间所有的素数。

#include <stdio.h>
main(){
  unsigned n,i;
  for(n=200;n<=400;n++)
  {
    for(i=2;i<n;i++)
      if(n%i==0) break;
    if(i==n)
    printf("%d",n);
  }
}

31、编写程序,输入两个正整数,求他们的最大公约数和最小公倍数。

#include <stdio.h>
main(){
  unsigned a,b,k=1;
  int i;
  scanf("%u%u",&a,&b);
  for(i=2;i<=b;i++)
    if(a%i==0&&b%i==0) k=i;
  printf("%u和%u的最小公倍数是%d,最大公约数是%u",a,b,b*a/k,k);
}

32、输入1个正整数,判断是几位数,并计算各个位上数的和。

#include <stdio.h>
main(){
  unsigned n;
  int i=0,sum=0;
  scanf("%u",&n);
  while(n)
  {
    sum+=n%10;
    i++;
    n=n/10;
  }
  printf("%d,%d",sum,i);
}

33、输入1个正整数,反序输出该数。例如:输入8421,输出1248。

#include <stdio.h>
main(){
  unsigned n;
  int i=0,sum=0;
  scanf("%u",&n);
  while(n)
  {
    printf("%d",n%10);
    n=n/10;
  }
  printf("%d,%d",sum,i);
}

34、输入1个正整数,把它转换成反序读出的数。例如:输入8421,变成1248。

#include <stdio.h>
main(){
  unsigned n;
  int i=0,s=0;
  scanf("%u",&n);
  while(n)
  {
    s=s*10+n%10;
    n=n/10;
  }
  printf("%d",s);
}

35、编写程序,计算1/2,2/3,3/5,5/8...前30项的和。

#include <stdio.h>
main(){
  float a=1,b=2,sum=0;
  int i;
  for(i=0;i<30;i++)
  {
    sum+=a/b;
    b=a+b;
    a=b-a;
  }
  printf("%f",sum);
}

36、计算:1-1/2+1/3-1/4+...-1/100。

#include <stdio.h>
main(){
  float i,sum=0;
  int sign=1;
  for(i=1;i<=100;i++)
  {
    sum+=sign*1/i;
    sign=-sign;
  }
  printf("sum=%f",sum);
}

37、已知公式:π/4=1-1/3+1/5-1/7+1/9......,最后一项的值不小于0.000001的最大值时,求π的值。

#include <stdio.h>
main(){
  double pi,i=1,sum=0;
  int sign=1;
  while((1/i)>0.000001)
  {
    sum+=sign*1/i;
    sign=-sign;
    i=i+2;
  }
  pi=4*sum;
  printf("pi=%f",pi);
}

38、编写程序,定义一个整型数组a[10],输入各个元素的值,求各个元素的平均值(结果小数点后保留2位)。

#include <stdio.h>
main(){
  int a[10],i;
  float sum=0;
  for(i=0;i<10;i++)
  {
    scanf("%d",&a[i]);
    sum+=a[i];
  }
  printf("%.2f",sum/10);
}

39、编写程序,定义一个整型数组a[10],输入各个元素的值,求其中的最大值及下标。

#include <stdio.h>
main(){
  int a[10],i,k=0;
  for(i=0;i<10;i++)
  {
    scanf("%d",&a[i]);
    if(a[k]<a[i]) k=i;
  }
  printf("max=%d,i=%d",a[k],k);
}

40、编写程序,定义一个整型数组a[10],输入各个元素的值,计算并输出其中能被13和15同时整除的数的个数及这些数的和。

#include <stdio.h>
main(){
  int a[10],i,sum=0,t=0;
  for(i=0;i<10;i++)
  {
    scanf("%d",&a[i]);
    if(a[i]%13==0&&a[i]%15==0)
    {
      t++;
      sum==a[i];
    }
  }
  printf("sum=%d,t=%d",sum,t);
}

41、 某移动公司月度资费计算方法如下:当通讯时长为100分钟以内,资费28元/月;当通讯时长超出100分钟以内,超出部分每分钟0.5元;当通讯时长超出200分钟以内,超出部分每分钟0.3元;编写程序,定义一个数组a[12]用来保存每个月的通讯费用,输入一年中每个月的通讯时长(分钟),计算当年资费的总和以及均值(小数点后保留2位)。

#include <stdio.h>
main(){
  float a[12],sum=0,n;
  int i;
  for(i=0;i<12;i++)
  {
    scanf("%d",&n);
    if(n<=100) a[i]=28;
    if(n>=100&&n<=200) a[i]=28+(x-100)*0.5;
    if(n>200) a[i]=28+(200-100)*0.5+(x-200)*0.3;
    sum==a[i];
  }
  printf("sum=%.2f,avg=%.2f",sum,sum/12);
}

42、 编写程序,定义一个整型数组a[10],输入各个元素的值,反序存放(逆置)后输出。

#include <stdio.h>
main(){
  int i,j,a[10],t;
  for(i=0;i<10;i++)
  scanf("%d",&a[i]);
  for(i=0,j=9;i<j;i++,j--)
  {
    t=a[i];a[i]=a[j];a[j]=t;
  }
  for(i=0;i<10;i++)
  printf("%d",a[i]);
}

43、甲乙二人距离100公里,同向而行,乙在前甲在后,甲的速度是28公里/小时,乙的速度17公里/小时。用数组记录每一小时后二者的距离变化直到甲追上乙为止,并输出每个小时后二者的距离。最后输出甲乙二人各自走过的路程是多少公里。

#include <stdio.h>
main(){
  float s=100,v1=28,v2=17,a[100],i=0,s1,s2;
  while(s>0){
    a[i]=s;
    printf("第%d小时后甲乙的距离为%f公里",i,s);
    s=s+17-28;
    if(s<0) s=0;
    i++;
  }
  s1=100/(v1-v2)*v1;
  s2=s1+100;
  printf("甲走了%f公里,乙走了%f公里",s2,s1);
}

44、编写程序,定义一个二维数组a[3][4],输入每个元素的值,求这些元素的均值。

#include <stdio.h>
main(){
  int a[3][4],i,j,sum=0;
  for(i=0;i<3;i++)
    for(j=0;j<4;j++)
    {
      scanf("%d",&a[i][j]);
      sum+=a[i][j];
    }
  printf("%f",sum/12.0);
}

45、编写程序,定义一个二维数组a[10][10],输入每个元素的值,求其中最大元素及其下标。

#include <stdio.h>
main(){
  int a[10][10],i,j,m=0,n=0;
  for(i=0;i<10;i++)
    for(j=0;j<10;j++)
    {
      scanf("%d",&a[i][j]);
      if(a[m][n]<a[i][j]){m=i;n=j};
    }
  printf("max=%d,m=%d,n=%d",a[m][n],m,n);
}

46、编写程序,定义一个二维数组a[10][10],输入每个元素的值,求对角线上的元素的和。

#include <stdio.h>
main(){
  int a[10][10],i,j,sum=0;
  for(i=0;i<10;i++)
    for(j=0;j<10;j++)
    {
      scanf("%d",&a[i][j]);
      if(i==j||i+j==9)
        sum+=a[i][j];
    }
  printf("sum=%d",sum);
}

47、定义一个二维整型数组a[3][4],编程输入每个元素,然后将每一行的最小值输出。

#include <stdio.h>
main(){
  int a[3][4],i,j,k;
  for(i=0;i<3;i++)
    for(j=0,k=0;j<4;j++)
      scanf("%d",&a[i][j]);
    for(i=0;i<3;i++)
    {
      for(j=0,k=0;j<4;j++)
      if(a[i][k]>a[i][j])
        k=j;
    }
  printf("第%d行的最小值是%d",i,a[i][k]);
}

平淡无趣的人。