【经典】113道C语言题目(一)

1.输入两个正整数,m和n,求其最大公约数和最小公倍数。

#include<stdio.h>
void main()
{
 int hcf(int,int);      /*函数声明*/
 int lcd(int,int,int);  /*函数声明*/
 int u,v,h,l;
 printf("Please input two numbers:\n");
 scanf("%d,%d",&u,&v);
 h=hcf(u,v);
 printf("H.C.F=%d\n",h);
 l=lcd(u,v,h);
 printf("L.C.D=%d\n",l);
}
int hcf(int u,int v)
{
 int t,r;
 if(v>u)
 {t=u;u=v;v=t;}
 while((r=u%v)!=0)
 {u=v;v=r;}
 return(v);
}
int lcd(int u,int v,int h)
{
 return(u*v/h);
}


2.输入一行字符,分别统计出其中字母、空格、数字和其他字符的个数。

#include<stdio.h>
int letter,digit,space,others;
void main()
{
 void count(char[]);
 char text[80];
 printf("Please input string:\n");
 gets(text);
 printf("string:\n");
 puts(text);
 letter=0;
 digit=0;
 space=0;
 others=0;
 count(text);
 printf("letter:%d,digit:%d,space:%d,others:%d\n",letter,digit,space,others);
}
void count(char str[])
{
 int i;
 for(i=0;str[i]!='\0';i++)
  if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
   letter++;
  else if(str[i]>='0'&&str[i]<='9')
   digit++;
  else if(str[i]==32)
   space++;
  else
   others++;
}


3.输入一个正整数求出它是几位数;输出原数和位数。

#include<stdio.h>
int digit;
void main()
{
 void count(char[]);
 char text[80];
 printf("Please input numbers:\n");
 gets(text);
 printf("Numbers:\n");
 puts(text);
 digit=0;
 count(text);
 printf("digit:%d\n",digit);
}
void count(char str[])
{
 int i;
 for(i=0;str[i]!='\0';i++)
   if(str[i]>='0'&&str[i]<='9')
   digit++;
}


4.输入一个正整数,输出原数并逆序打印出各位数字。

#include<stdio.h>
void invertLongInt(long);
void main()
{
 unsigned long iNumber;
 printf("Please input a number:\n");
 scanf("%ld",&iNumber);
 printf("The input number is:%ld\n",iNumber);
 printf("The inverse number is:");
 invertLongInt(iNumber);
}
void invertLongInt(long x)
{
 if(x>=0&&x<=9)
  printf("%d\n",x);
 else
 {
  printf("%d",x%10);
  invertLongInt(x/10);
 }
}


5.求1!+2!+3!+……+20!,将结果输出。

#include<stdio.h>
void main()
{
 float s=0,t=1;
 int n;
 for(n=1;n<=20;n++)
 {
  t=t*n;
  s=s+t;
 }
 printf("1!+2!+3!+……+20!=%e\n",s);
}


6.求下列试子的值:1-1/2+1/3-1/4+……+1/99-1/100,将结果输出。

#include<stdio.h>
void main()
{
 float sum=1.0,t,s=1;
 int i;
 for(i=1;i<=100;i++)
 {
  t=s/i;
  sum=sum+t;
  s=-s;
 }
 printf("1-1/2+1/3-1/4+……+1/99-1/100=%5.4f\n",sum);
}


7.打印出100~999之间的所有水仙花数。

#include<stdio.h>
void main()
{
 int i,j,k,n;
 printf("100~999之间的所有水仙花数 are:\n");
 for(n=100;n<1000;n++)
 {
  i=n/100;
  j=n/10-i*10;
  k=n%10;
  if(n==i*i*i+j*j*j+k*k*k)
   printf("%d  ",n);
 }
 printf("\n");
}


8.求Sn=a+aa+aaa+…+aa…a之值,n,a由键盘输入。

#include<stdio.h>
void main()
{
 int a,n,i=1,sn=0,tn=0;
 printf("a,n=:");
 scanf("%d,%d",&a,&n);
 while(i<=n)
 {
  tn=tn+a;
  sn=sn+tn;
  a=a*10;
  ++i;
 }
 printf("a+aa+aaa+…+aa…a=%d\n",sn);
}


9.打印以下图案:
  *******
   *******
    *******
     *******

 #include<stdio.h>
void main()
{
 char a[7]={'*','*','*','*','*','*','*'};
 int i,j,k;
 char space=' ';
 printf("The picture is:");
 for(i=0;i<4;i++)
 {
  printf("\n");
  printf("    ");
  for(j=1;j<=i;j++)
   printf("%c",space);
  for(k=0;k<7;k++)
   printf("%c",a[k]);
 }
 printf("\n");
}


10.编写一个统计学生成绩程序,完成以下功能:输入4个学生的2门课成绩;求出全班的总平均分,将结果输出。

#include<stdio.h>
#define N 4
struct student
{
 char num[3];
 char name[4];
 float score[2];
 float avr;
}
stu[N];

void main()
{
 int i,j;
 float sum,average;
 for(i=0;i<N;i++)            /*输入数据*/
 {
  printf("input scores of student%d:\n",i+1);
  printf("name:");
  scanf("%s",stu[i].name);
  for(j=0;j<2;j++)
  {
   printf("score %d:",j+1);
   scanf("%f",&stu[i].score[j]);
  }
 }

 average=0;              /*计算*/
 for(i=0;i<N;i++)
 {
  sum=0;
  for(j=0;j<2;j++)
   sum+=stu[i].score[j];
  stu[i].avr=sum/2;
  average+=stu[i].avr;
 }
 average/=N;
 printf("   Name    score1   score2   average\n");
 for(i=0;i<N;i++)
 {
  printf("%5s%10s",stu[i].num,stu[i].name);
  for(j=0;j<2;j++)
   printf("%9.2f",stu[i].score[j]);
  printf("   %8.2f\n",stu[i].avr);
 }
 printf("average=%5.2f\n",average);
}


11.给出年、月、日,计算该日是该年的第几天。

#include<stdio.h>
void main()
{
 int sum_day(int,int);
 int leap(int year);
 int year,month,day,days;
 printf("input date(year,month,day):");
 scanf("%d,%d,%d",&year,&month,&day);
 printf("%d/%d/%d",year,month,day);
 days=sum_day(month,day);
 if(leap(year)&&month>=3)
  days=days+1;
 printf("is the %dth day in this year.\n",days);
}
int sum_day(int month,int day)
{
 int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
 int i;
 for(i=1;i<month;i++)
  day+=day_tab[i];
 return(day);
}
int leap(int year)
{
 int leap;
 leap=year%4==0&&year%100!=0||year%400==0;
 return(leap);
}


12.求一个3*3的整型矩阵对角线元素之和。将原矩阵和求出的和输出。

#include<stdio.h>
void main() 
{ 
float a[3][3],sum=0; 
int i,j; 
printf("请输入元素:\n"); 
for(i=0;i<3;i++) 
for(j=0;j<3;j++) 
scanf("%f",&a[i][j]); 
for(i=0;i<3;i++) 
sum=sum+a[i][i]; 
printf("对角线之和是:%6.2f\n",sum); 
for(i=0;i<=3;i++)
{
 for(j=0;j<=3;j++)
  printf("%5.2f",a[i][j]);
 printf("\n");
} 
}


13.求一个4*3的矩阵各行元素的平均值;将原矩阵和求出的平均值全部输出。

#include<stdio.h>
void main()  
{  
 int a[4][3],s[4],i,j,k;  
 for(i=0;i<4;i++)  
  for(j=0;j<3;j++)
   scanf("%d",*(a+i)+j);
  
  for(i=0;i<4;i++)
  {
   k=0;
   for(j=0;j<3;j++)
    k+=a[i][j];
   printf("第%d行的平均值是%d",i+1,k);
   printf("\n");
  }
}


14.有一篇文章,有三行文字,每行有80个字符。要求统计出其中英文大写字母、消协字母、数字、空格以及其他字符的个数。

#include<stdio.h>
void main()
{
 int i,j,big=0,sma=0,num=0,spa=0,oth=0;
 char text[3][80];
 for(i=0;i<3;i++)
 {
  printf("请输入行%d:\n",i+1);
  gets(text[i]);
  for(j=0;j<80&&text[i][j]!='\0';j++)
  {
   if(text[i][j]>='A'&&text[i][j]<='Z')
    big++;
   else if(text[i][j]>='a'&&text[i][j]<='z')
    sma++;
   else if(text[i][j]>='0'&&text[i][j]<='9')
    num++;
   else if(text[i][j]==' ')
    spa++;
   else
    oth++;
  }
 }
 printf("大写字母:%d\n",big);
 printf("小写字母:%d\n",sma);
 printf("数字:%d\n",num);
 printf("空格:%d\n",spa);
 printf("其它:%d\n",oth);
}


15.将20个整数放到一维数组中,输出该数组的最大值和最小值。

#include<stdio.h>
void main()
{
 int i,j,min,max,a[21];
 printf("请输入数据:\n");
 for(i=1;i<=20;i++)
 {
  printf("a[%d]=",i);
  scanf("%d",&a[i]);
 }
 for(i=1;i<=19;i++)
 {
  min=i;
  for(j=2;j<=19;j++)
   if(a[min]>a[j]);
   a[min]=a[j];
 }
 for(i=1;i<=19;i++)
 {
  max=i;
  for(j=2;j<=19;j++)
   if(a[max]<a[j]);
   a[max]=a[j];
 }
 printf("最大数为:%d\n",a[max]);
 printf("最小数为:%d\n",a[min]);
}


16.将15个整数放到一维数组中,输出该数组中的最大值它的下标,然后将它和数组中的最前面的元素对换。

#include<stdio.h>
void main()
{
 int i,j,min,max,a[16],m,n;
 printf("请输入数据:\n");
 for(i=1;i<=15;i++)
 {
  printf("a[%d]=",i);
  scanf("%d",&a[i]);
 }
 for(i=1;i<=14;i++)
 {
  max=i;
  for(j=2;j<=14;j++)
   if(a[max]<a[j]);
   a[max]=a[j];
            m=I,n=j
 }
 printf("最大数下标为:%d,%d\n",m,n);
}


17.将字符数组str1种下标为偶数的元素赋给另一字符数组str2,并输出str1和str2。

#include<stdio.h>   
#include<string.h>
#define N 10
void main()  
{  
 int i,n;
 char str1[N],str2[N];
     gets(str1);
  for(n=0;n<N;n++)
  {
  i=2*n;
  str2[n]=str1[i];
  }
     puts(str1);
  puts(str2);
}



18.编写一个程序,将两个字符串连接起来,不要使用strcat函数。

#include<stdio.h>
void main()
{
 char str1[20],str2[20];
 int i=0,j=0;
 printf("请输入字符串1:\n");
 scanf("%s",str1);
 printf("请输入字符串2:\n");
 scanf("%s",str2);
 while (str1[i]!='\0')
  i++;
 while (str2[j]!='\0')
  str1[i++]=str2[j++];
 str1[i]='\0';
 printf("合并之后的字符串为:%s\n",str1);
}



19.编写一个程序,将字符数组a中的全部字符复制到字符数组b中。不要使用strcpy函数。

#include<stdio.h>
#include<string.h>
void main()
{
 char a[40],b[40];
 int i;
 printf("请输入a:\n");
 scanf("%s",a);
 for(i=0;i<=strlen(a);i++)
  b[i]=a[i];
 printf("b:%s\n",b);
}


20.编写一个程序,找出3个字符串中的最大者,将它输出。

#include<stdio.h>
#include<string.h>
void main()
{
 char string[20];
 char str[3][20];
 int i;
 for(i=0;i<3;i++)
  gets (str[i]);
 if(strcmp(str[0],str[1])>0)
  strcpy(string,str[0]);
 else
  strcpy(string,str[1]);
 if(strcmp(str[2],string)>0)
  strcpy(string,str[2]);
 printf("最大的字符串是:\n%s\n",string);
}




21.编写程序,输入任意一个1~7之间的整数,将他们转换成对应的英文单词。例如:1转换成Monday,7转换成Sunday。

 #include<stdio.h>
void main()
{
 int a;
 printf("输入一个整数:\n");
 scanf("%d",&a);
 if(a==1) printf("Monday\n");
 else if(a==2) printf("Tuesday\n");
 else if(a==3) printf("Wendesday\n");
 else if(a==4) printf("Thursday\n");
 else if(a==5) printf("Friday\n");
 else if(a==6) printf("Saturday\n");
 else if(a==7) printf("Sunday\n");
 else printf("错误\n");
}



22.编写程序,输入两个整数,和+、-、*、/之中的任意一个运算符,输出计算结果。

#include<stdio.h>
void main()
{
 float a,b;
 char c;
        printf("请输入一个运算符:\n");
 scanf("%c",&c);
 printf("请输入两个整数:\n");
 scanf("%d,%d",&a,&b);
 switch(c)
 {
   case'+':printf("%f\n",a+b);break;
   case'-':printf("%f\n",a-b);break;
   case'*':printf("%f\n",a*b);break;
   case'/':printf("%f\n",a/b);break;
   default:printf("错误");
    }
}



23.输入年号,计算这一年的2月份的天数,将结果输出。

#include<stdio.h>
void main()
{
 int year,leap;
 printf("请输入年份:\n");
 scanf("%d",&year);
 if(year%4==0)
 {
  if(year%100==0)
  {
   if(year%400==0)
    leap=1;
   else
    leap=0;
  }
  else
   leap=1;
 }
 else
  leap=0;
 if(leap)
  printf("%d年的2月有29天",year);
 else
  printf("%d年的2月有28天",year);
}



24.输入三角形的三边a,b,c,判断a,b,c,能否构成三角形,若能,计算面积。

#include<stdio.h>
#include<math.h>
void main()
{
 float a,b,c,area;
 double s;
 printf("Please enter three sides of a triangle:\n");
 scanf("%f,%f,%f",&a,&b,&c);
 s=(a+b+c)/2.0;
 area=sqrt(s*(s-a)*(s-b)*(s-c));
 if(a+b<c||b+c<a||a+c<b)
  printf("They can't form a triangle.\n");
 else
     printf("The area of the triangle is:%f\n",area);
}



25.输入三角形的三边a,b,c,判断a,b,c,能否构成三角形,何种类型的三角形:等腰、等边、直角、等腰直角、一般。

#include<stdio.h>
#include<math.h>
void main()
{
 float a,b,c;
 printf("请输入三角形边长:\n");
 scanf("%f%f%f",&a,&b,&c);
 if((a-b>=c)||(b-c>=a)||(c-a>=b)) printf("不能够成三角形\n");
 else if ((a*a+b*b==c*c)||(b*b+c*c==a*a)||(c*c+a*a==b*b))
  if ((a==b)||(b==c)||(c==a)) printf("等腰直角三角形\n");
  else printf("直角三角形\n");
 else if ((a==b)&&(b==c)) printf("等边三角形\n");
 else if ((a==b)&&(b!=c)||(c==b)&&(b!=a)||(a==c)&&(c!=a)) printf("等腰三角形\n");
 else printf("一般三角形\n");
}



26.输入学生的成绩,利用计算机将学生的成绩划分出等级并输出:
   90~100:A级;  80~89:B级;  70~79:C级;  60~69:D级;  0~59:E级;

#include<stdio.h>
void main()
{
 float m;
 printf("输入学生成绩:\n");
 scanf("%f",&m);
 if ((m>100)||(m<0)) printf("数据有误\n");
 else if (m>=90) printf("A级\n");
 else if (m>=80) printf("B级\n");
 else if (m>=70) printf("C级\n");
 else if (m>=60) printf("D级\n");
 else printf("E级\n");
}



27.编程序,求方程aX2+bX+c=0的解;输入a,b,c.

#include <stdio.h>
#include <math.h>
void main()
{
 float a,b,c,t;
 double x1,x2;
 printf("请由高次到低次顺序输入系数:\n");
 scanf("%f%f%f",&a,&b,&c);
 t=b*b-4*a*c;
 if (t<0) printf("方程无实根\n");
 if (t==0) 
 {
  x1=-(b/2/a);
  printf("方程有两个相等实根,x1=x2=%5.2f\n",x1);
 };
 if (t>0)
 {
  x1=-(b+sqrt(t))/2/a;
  x2=-(b-sqrt(t))/2/a;
  printf("方程有两个不等实根,x1=%5.2f,x2=%5.2f\n",x1,x2);
 }
}




28.编程序,输入4个整数,按由小到大的顺序输出。

#include <stdio.h>
#define N 4
void main()
{
 int a[N],t,i,j;
 printf("输入四个整数:\n");
 for (i=0;i<N;i++)
  scanf("%d",&a[i]);
 printf("\n");
 for (i=0;i<N-1;i++)
 {
  for (j=0;j<N-i-1;j++)
   if (a[j]>a[j+1])
   {
    t=a[j];
    a[j]=a[j+1];
    a[j+1]=t;
   }
 }
 printf("排序后:\n");
 for (i=0;i<N;i++)
  printf("%d\n",a[i]);
}



29.求满足1+2+3+…+n<500中最大的N,并求其和,编写程序实现。

#include <stdio.h>
void main()
{
 int n=0,sum=0;
 while(sum<500)
 {
  ++n;
  sum+=n;
 }
 printf("N??:%d\n",n-1);
 printf("1+2+3+4+......+%d<500\n",n-1);
}



30.把100~200之间的不能被3整除的数输出。

#include <stdio.h>
void main()
{
 int a;
 for (a=100;a<=200;a++)
  if (a%3!=0) printf("%d\t",a);
}











  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值