C语言练习题
本文仅供参考,若有错误,请联系修改。(注:微信小程序由于部分原因,显示的效果不怎么好,建议点击小程序下方的“阅读原文”到浏览器打开更佳哦!)
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;
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]);
}
Your blog is a wonderful resource for anyone curious in learning about a variety of topics. Thanks for all that you do.