C语言13道题目.docx
《C语言13道题目.docx》由会员分享,可在线阅读,更多相关《C语言13道题目.docx(15页珍藏版)》请在冰豆网上搜索。
C语言13道题目
这十三个题目我用的编译器是MicrosoftVisualStudio中编译的所以在任何一个后面都加了两行getchar();如果你用的编译器是VC++6.0;后面两行getchar();完全可以不加。
其中绿颜色的全为注释部分。
1、编写程序,分行输出一个三位数的每一个数字,即分三行输出个位数字、十位数字、百位数字
#include"stdio.h"/*头文件*/
voidmain()/*主函数*/
{
intb,x,y,z;/*定义三个变量b(b用来存输入的一个三位数),x(百位数),y(十位数),z(个位数)*/
scanf("%d",&b);/*从键盘输入一个三数存入变量b*/
x=b/100;/*用这个三位数除以100(两个整型相除得到还是一个整型,只会取整数部分)从而得到百位数*/
y=b%100/10;/*用这个三位数对100取余(取余所得的余数)用这个余数除以10(两个整型相除得到还是一个整型,只会取整数部分)从而得到十位数*/
z=b%10;/*用这个三位数对10取余(取余所得的余数)从而得到个位数*/
printf("个位为%d\n",z);/*输出个数上的数字*/
printf("十位为%d\n",y);/*输出十数上的数字*/
printf("百位为%d\n",x);/*输出百数上的数字*/
getchar();
getchar();
}
2、鸡与兔共100只,鸡的脚数比兔的脚数少28.问鸡与兔各几只?
#include"stdio.h"/*头文件*/
voidmain()/*主函数*/
{
intx;/*定义变量x(鸡的数量为x)*/
for(x=0;x<=100;x++)/*循环(x的值可以从0取到100)*/
{
if(x+(100-x)==100&&4*(100-x)-2*x==28)/*判断鸡兔的总数和要达到100;还有判断鸡的脚要比兔的脚少28只,要两个要求同时满足时才执行下面的输出语句*/
{
printf("鸡的只数为%d\n兔子的只数为%d\n",x,100-x);/*要上面条件满足时才输出鸡都数量级兔子的数量(因为鸡的数量是x,所以兔的数量就为100-x)*/
}
}
getchar();
getchar();
}
3、有30个人在饭馆吃饭,其中有男人、女人、小孩,每个男人花3块钱,女人花2块钱,小孩花1块钱,一共50块钱,问男人、女人和小孩各多少人?
(男人、女人、小孩都存在)
#include"stdio.h"/*头文件*/
voidmain()/*主函数*/
{
intX,Y,Z;/*定义变量X,Y,Z(男人数量为X,女人的数量为Y,小孩的数量为Z)*/
for(X=1;X<=15;X++)/*循环体(X的值可以从1取到16,因为前提因素是男人、女人、小孩都存在的,所以至少存在1个,而后面的条件是共只有50元,小孩、女人至少有1人存在就用了3元,而乘下的都是男人为37元,从而循环只能取1至16了,)*/
{
for(Y=1;Y<=23;Y++)/*循环体(Y的值可以从1取到23,因为前提因素是男人、女人、小孩都存在的,所以至少存在1个,而后面的条件是共只有50元,小孩、男人至少有1人存在就用了4元,而乘下的都是男人为46元,从而循环只能取1至23了,)*/
{
Z=30-X-Y;/*从上面的循环体内得出了男人及女人的数量,总人数是30人,得知小孩就为30减去男人再减去女人*/
if(3*X+2*Y+1*Z==50)/*判断总钱数是否等于50元*/
printf("男人%d,女人%d,小孩%d\n",X,Y,Z);/*输出每一次满足条件的结果*/
}
}
getchar();
getchar();
}
4、编写函数求n的阶乘n!
(利用循环和递归两种方法)
函数原型为:
longfactn(intn)
循环方法:
#include"stdio.h"/*头文件*/
voidmain()/*主函数*/
{
longd=factn(5);/*对自定义函数的调用*/
printf("%d\n",d);/*输出调用所得的到结果*/
getchar();
getchar();
}
longfactn(intn)/*对自定义函数的说明*/
{
longresult=1;/*定义一个长整型变量result并赋初始值为1*/
inti;/*定义一个整型变量i用来控制循环体的初始值*/
for(i=1;i<=n;i++)/*循环体(用n来控制阶乘的循环次数)*/
{
result=result*i;/*将result乘以i的值赋给result*/
}
returnresult;
}
递归方法:
这个方法不解释,自己都被搞晕了。
#include"stdio.h"
voidmain()
{
longd=factn(5);
printf("%d\n",d);
getchar();
getchar();
}
longfactn(intn)
{
if(n==1)
{
return1;
}
else
{
returnn*factn(n-1);
}
}
5、编写程序,实现从键盘输入两个整数,输出它们的加、减、乘、除、取余5种算术运算结果
#include/*头文件*/
voidmain()/*主函数*/
{
inta,b;/*定义两个整型变量a(a同是是加、减、乘、除数及取余的数)与b(同时是被加、减、乘、除数及取余的数)*/
printf("请输入两个数:
\n");/*提示用户要输入两个数*/
scanf("%d%d",&a,&b);/*接收用户要键盘输入的两个数,分别存入a与b中*/
printf("a+b=%d\n",a+b);/*输出a+b的结果*/
printf("a-b=%d\n",a-b);/*输出a-b的结果*/
printf("a*b=%d\n",a*b);/*输出a*b的结果*/
printf("a/b=%.3f\n",(float)a/(float)b);/*输出a/b的结果(此处a除以b的结果有可能是个小数,所以数据类型在强置转换成浮点型)*/
printf("a%%b=%d\n",a%b);/*输出a%%(求余)b的结果*/
getchar();
getchar();
}
6、给出一个百分制成绩,要求输出成绩等级'A','B','C','D','E',90分以上为'A',80~89分为'B',70~79分为‘C’,60~69分为'D',60分以下为‘E’。
(用if和switch分别实现)
用if方法:
#include"stdio.h"/*头文件*/
intmain()/*主函数*/
{
intscore;/*定义整型变量score*/
printf("输入成绩:
");/*提示用“输入成绩”*/
scanf("%d",&score);/*从键盘上输入一个数并且存在变量score里面*/
if(score<=100&&score>=0)/*判断输入的这个数是否在0~100之间*/
{
if(score>=90)/*判断输入的数是否大于或等于90*/
printf("你的成绩等级为A\n");/*如果上面条件成立就输出“你的成绩等级为A”*/
elseif(score>=80)/*判断输入的数是否大于或等于80并且是小于90的*/
printf("你的成绩等级为B\n");/*如果上面条件成立就输出“你的成绩等级为B”*/
elseif(score>=70)/*判断输入的数是否大于或等于70并且是小于80的*/
printf("你的成绩等级为C\n");/*如果上面条件成立就输出“你的成绩等级为C”*/
elseif(score>=60)/*判断输入的数是否大于或等于60并且是小于70的*/
printf("你的成绩等级为D\n");/*如果上面条件成立就输出“你的成绩等级为D”*/
else/*判断输入的数是否小于60*/
printf("你的成绩等级为E\n");/*如果上面条件成立就输出“你的成绩等级为E”*/
}
else/*这个else与最上面的if语句(判断成绩是否在于0~100之间的)配套,判断输入的数是否在100以外或者是在0以下*/
printf("哥你输入的数字有误\n");/*如果上面条件成立就提示你输出有误*/
getcahr()
getcahr;
}
用switch方法:
#include/*头文件*/
intmain()/*主函数*/
{
doublegrade;/*定义符点型变量(因为成绩有可以带小数的),用来存放输入的成绩*/
intint_grade;/*定义整型变量,用来存将double型转成int型的变量*/
printf("yourscore:
");/*提示用“yourscore”*/
scanf("%d,\n",&grade);/*从键盘上输入一个数并且存在变量score里面*/
int_grade=(int)grade;/*将符点型数grade强制转换成整型并赋值给变量int_grade*/
if(grade<=100&&grade>=0)/*判断输入的这个数是否在0~100之间*/
switch(int_grade/10)/*switch语句后面可以带一个表达式,也可是int型数据,也可以是char型,(后面用int_grade/10两个整型相除得到的还是一个整型)因为成绩的关系都是10的倍数*/
{
case10:
case9:
printf("youscore:
A\n");/*如果上面表达式得到的结果是10和9,就都输出“youscore:
A”*/
break;/*如果上面语句执行完就,结束switch语句*/
case8:
printf("youscore:
B\n");/*如果上面表达式得到的结果是8,就都输出“youscore:
B”*/
break;/*如果上面语句执行完就,结束switch语句*/
case7:
printf("youscore:
C\n");/*如果上面表达式得到的结果是7,就都输出“youscore:
C”*/
break;/*如果上面语句执行完就,结束switch语句*/
case6:
printf("youscore:
D\n");/*如果上面表达式得到的结果是6,就都输出“youscore:
D”*/
break;/*如果上面语句执行完就,结束switch语句*/
case5:
case4:
case3:
case2:
case1:
case0:
printf("youscore:
E\n");/*如果上面表达式得到的结果是5,4,3,2,1,就都输出“youscore:
E”*/
break;/*如果上面语句执行完就,结束switch语句*/
}
else/*这个else与最上面的if语句(判断成绩是否在于0~100之间的)配套,判断输入的数是否在100以外或者是在0以下*/
printf("哥你输入有误啊!
");/*如果上面条件成立就提示你输出有误*/
getchar();
getchar();
}
7、共有1000瓶汽水,每喝完一瓶得到一个空瓶子,每3个空瓶子又能换1瓶汽水,喝掉以后又得到一个空瓶子,问总共能喝多少瓶汽水,最后还剩多少个空瓶子?
#include"stdio.h"/*头文件*/
voidmain()/*主函数*/
{
intx=1000,y=0,z=0;/*定义变量X,Y,Z(之前汽水数量为X并赋初值为1000,空瓶子的数量为Y,喝掉汽水的总数量为Z)*/
while(x>0)/*当X大于0时进行循环*/
{
x--;/*当每一次喝掉一瓶汽水就从X中减去1*/
y++;/*当每一次喝掉一瓶汽水,空瓶子就加1*/
z++;/*当每一次喝掉一瓶汽水,喝掉汽水的总数量就加1*/
if(y==3)/*如果空瓶子的数量达到3个时,就可以用3个空瓶子去换一瓶汽水*/
{
x++;/*用3个空瓶子去换一瓶汽水,所以汽水的数量又得加1*/
y=0;/*当用3个空瓶子换了汽水之后,空瓶子的数量就为0了*/
}
}
printf("共%d,空%d\n",z,y);/*输出共喝了多少瓶汽水及最后乘多少个空瓶子*/
getchar();
getchar();
}
8、每只母鸡3元,每只公鸡4元,每只小鸡0.5元,如果花100元买100只鸡,请问有哪些可能?
(每种鸡的数量都可以为0)
#include/*头文件*/
voidmain()/*主函数*/
{
intx=0,y=0,z=0;/*定义三个变量x(公鸡),y(母鸡),z(小鸡);并且每个都赋初值为0*/
for(x=0;x<=25;x++)/*X的初值为0,可是X的最大值只能到25(因为公鸡是4元,25只就100元,)所以只能在这个范围内取值,X的值累加*/
{
for(y=0;y<=33;y++)/*Y的初值为0,可是Y的最大值只能到33(因为母鸡是3元,33只就99元,)所以只能在这个范围内取值,Y的值累加*/
{
z=100-x-y;/*前面确定的X与Y的取值范围,后面Z就等于总数减去前面两项,所得到的*/
if(4*x+3*y+0.5*z==100)/*前面三个循环确定了X,Y,Z值的范围,如果表达式成立,则运行下列输出结果*/
printf("母鸡数为%d:
公鸡数为%d:
小鸡数为%d:
\n",x,y,z);/*输出每一次满足条件的结果。
*/
}
}
getchar();
getchar();
}
9、输出9*9乘法表
#include"stdio.h"/*头文件*/
voidmain()/*主函数*/
{
inti,j,result;/*定义三个变量i(用来控制行数),j(用来控制列数),result(用来存乘积)*/
for(i=1;i<=9;i++)/*给i赋初始值为1,当i小等于9时,i递增*/
{for(j=1;j<=i;j++)/*给j赋初始值为1,当j小等于i时,j递增;j的循环次数由i来决定*/
{
result=i*j;/*当i与j每一次进行取值时,把其值相乘得到的结果赋给result*/
printf("%d*%d=%-3d",i,j,result);/*将i乘j的值按左对齐,占3位的形式输出*/
}
printf("\n");/*当每执行完一次内循环之后就输出一个换行*/
}
getchar();
getchar();
}
10、设计一个程序,从键盘输入3个整数,输出其中不大不小的那个数,输出宽度为五位。
#include/*头文件*/
voidmain()/*主函数*/
{
intX(intx,inty,intz);/*对X函数的声明*/
inta,b,c,d;/*定义三个整型变量a,b,c,d*/
printf("请输入三个值\n");/*提示用户从键盘输入三个数*/
scanf("%d%d%d",&a,&b,&c);/*从键盘输入三个数分别存入a,b,c中*/
d=X(a,b,c);/*对X函数的调用*/
printf("中间值为%5d\n",d);/*输出调用函数后的结果,所得到的中间那个数*/
getchar();
getchar();
}
intX(intx,inty,intz)/*定义X函数*/
{
intm;/*定义一个整型变量m*/
if(xelseif(x>y&&x>z&&y>z)m=y;/*当x大于y而且x又要大于z和y又要大于z时,则y就为当中值*/
elseif(x>y&&xelseif(xz&&y>z)m=x;/*当x小于y而且x又要大于z和y又要大于z时,则x就为当中值*/
elseif(xz)m=z;/*当x小于y而且x又要小于z和y又要大于z时,则z就为当中值*/
elseif(x>y&&x>z&&yreturn(m);/*将得到的结果返回出去*/
}
11、编程求1+3+5+7+……95+97+99的和
#include/*头文件*/
intmain()/*主函数*/
{
inti,m=0;/*定义两个变量i(用来控制加数的循环),m(用来得到最后的累加和)*/
for(i=1;i<100;i=i+2)/*i的初值为1,当i小于100时;i累计加2*/
m=m+i;/*将100以内的的奇数和累加起来*/
printf("m=%d\n",m);/*将得到最后的结果输出*/
getchar();
getchar0;
}
12、输出100-200之间,能被3整除但不能被7整除的数
#include/*头文件*/
intmain()/*主函数*/
{
intn,j=0;/*定义两个变量n(用来控制循环),j(用来控制每行输出的个数及数量)*/
for(n=100;n<=200;n++)/*变量n的初值为100,终值为200,在这个数之间判断能被3整除但不能被7整除的每一个数,每次判断一个数之后累加*/
{
if(n%3==0&&n%7!
=0)/*如果这个数能被3整除,但不能被7整除*/
{
printf("n=%-8d",n);/*则按左对齐,占8个宽度,输出这个数*/
j++;/*每次输出一个数之后,j的值就加1*/
if(j%5==0)/*当j等于5或是5的倍数时(就是当j对5取余等于0时)*/
printf("\n");/*则输出换行*/
}
}
printf("个数=%d\n",j);/*输出总共有多少个数*/
getchar();
getchar();
}
13、有100匹马,驼100担货,大马担3担,中马担2担,两匹小马担一担,共有多少种驼法。
#include"stdio.h"/*头文件*/
voidmain()/*主函数*/
{
intX,Y,Z;/*定义三个变量X(表示大马),Y(表示中马),Z(表示小马)*/
for(X=0;X<=33;X++)/*X的初值为0,可是X的最大值只能到33(因为一匹大马担3担,33匹就是99担,总数才100担,)所以只能在这个范围内取值,X的值累加*/
{
for(Y=0;Y<=50;Y++)/*Y的初值为0,可是Y的最大值只能到50(因为一匹中马担2担,50匹就是100担,总数才100担,)所以只能在这个范围内取值,Y的值累加*/
{
Z=100-X-Y;/*前面确定的X与Y的取值范围,后面Z就等于总数减去前面两项,所得到的*/
{
if(3*X+2*Y+0.5*Z==100)/*前面三个循环确定了X,Y,Z值的范围,如果表达式成立,则运行下列输出结果*/
printf("大马%d,中马%d,小马%d\n",X,Y,Z);/*将每一次符合条件的结果输出来*/
}
}
}
getchar();
getchar();
}