C语言题解49.docx
《C语言题解49.docx》由会员分享,可在线阅读,更多相关《C语言题解49.docx(44页珍藏版)》请在冰豆网上搜索。
![C语言题解49.docx](https://file1.bdocx.com/fileroot1/2023-7/5/60742703-f181-4814-835a-5991a00be434/60742703-f181-4814-835a-5991a00be4341.gif)
C语言题解49
第4章
4.1C语言中的语句有哪几类C语句与其他语言中的语句有哪些不同
(1)控制语句
(2)函数调用语句
(3)表达式语句
(4)空语句
(5)复合语句
C语言允许一行写几个语句,也允许一个语句拆开写在几行上,书写格式无固定要求,而其他语言一般对书写格式有严格要求。
怎样区分表达式和表达式语句C语言为什么要设表达式语句什么时候用表达式,什么时候用表达式语句
表达式没有分号,语句是有分号的,将表达式加上一个分号就成了表达式语句。
两者最大的区别是,表达式只是一个值,而表达式语句是指令,完成指定的操作。
C语言设表达式语句的作用是用简短的指令代替了复杂的函数运算,程序运行效率高。
表达式是为了进行求值运算而设定的计算公式,用于语句中,但不构成完整的语句。
如果要完成该运算,必须使用表达式语句。
4.3C语言为什么要把输入输出的功能用函数来实现,而不作为语言的基本部分
因为输入输出的对象是数据,而数据是以介质为载体的,因此进行输入输出就要与各种外部设备打交道。
由于不同的系统进行输入输出的差异较大,所以必须使用函数和操作系统进行交互,以便存取不同的设备文件。
若a=3,b=4,c=5,x=,y=,z=,u=51274,n=128765,c1=‘a’,c2=‘b’。
想得到以下的输出格式和结果,请写出程序。
要求输出结果如下:
a=3b=4c=5
x=,y=,z=
x+y=y+z=z+x=
u=51274n=128765
c1=’a’or97(ASCII)
c2=’b’or98(ASCII)
intmain()
{
inta=3,b=4,c=5;
doublex=,y=,z=;
unsignedintu=51274,n=128765;
charc1='a',c2='b';
printf("a=%2db=%2dc=%2d\n",a,b,c);
printf("x=%f,y=%f,z=%f\n",x,y,z);
printf("x+y=%5.2fy+z=%5.2fz+x=%5.2f\n",x+y,y+z,z+x);
printf("u=%6un=%10u\n",u,n);
printf("c1=%cor%d(ASCII)\n",c1,c1);
printf("c2=%cor%d(ASCII)\n",c2,c2);
return0;
}
请写出下面程序的输出结果:
intmain()
{
inta=5,b=7;
floatx=,y=;
charc='A';
longn=1234567;
unsignedu=65535;
printf("%d%d\n",a,b);
printf("%3d%3d\n",a,b);
printf("%f,%f\n",x,y);
printf("%-10f,%-10f\n",x,y);
printf("%8.2f,%8.2f,%.4f,%.4f,%3f,%3f\n",x,y,x,y,x,y);
printf("%e,%\n",x,y);
printf("%c,%d,%o,%x\n",c,c,c,c);
printf("%ld,%lo,%x\n",n,n,n);
printf("%u,%o,%x,%d\n",u,u,u,u);
printf("%s,%\n","COMPUTER","COMPUTER");
return0;
}
57
57
,,,,
+001,+002
A,65,101,41
1234567,4553207,12d687
65535,177777,ffff,65535
COMPUTER,COM
用下面的scanf函数输入数据,使a=3,b=7,x=,7=,c1=’A’,c2=’a’,问在键盘上如何输入
intmain()
{
inta,b;
floatx,y;
charc1,c2;
scanf("%d%d%f%f%c%c",&a,&b,&x,&y,&c1,&c2);
printf("%d%d\n",a,b);
printf("%f%f\n",x,y);
printf("%c%c\n",c1,c2);
return0;
}
用下面的scanf函数输入数据,使a=10,b=20,c1=’A’,c2=’a’,x=,y=,z=,请问在键盘上如何输入数据
intmain()
{
inta,b;
charc1,c2;
floatx,y,z;
scanf("%d%d%c%c%f%f%f",&a,&b,&c1,&c2,&x,&y,&z);
printf("%d%d\n",a,b);
printf("%f%f%f\n",x,y,z);
printf("%c%c\n",c1,c2);
return0;
}
设圆半径r=,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。
用scanf输入数据,然后输出计算结果。
输出时要求有文字说明并取小数点后两位数字,请编程序。
#definePi
intmain()
{
doubler,h;
scanf("%lf%lf",&r,&h);
printf("圆的周长=%.2f\n",2*Pi*r);
printf("圆的面积=%.2f\n",Pi*r*r);
printf("圆球表面积=%.2f\n",Pi*r*r/6);
printf("圆球体积=%.2f\n",4*Pi*r*r*r/3);
printf("圆柱体积=%.2f\n",Pi*r*r*h);
return0;
}
输入一个华氏温度的取值F,要求输出摄氏温度的取值C。
公式为
C=5(F-32)/9
输出要有文字说明,取两位小数。
#include<>
doubleCentigradeTemperture(doubleFahrenheit);
intmain()
{
doubleF;
printf("请输入华氏温度:
");
scanf("%lf",&F);
printf("摄氏温度为%.2f\n",CentigradeTemperature(F));
return0;
}
doubleCentigradeTemperature(doubleFahrenheit)
{
return5*(Fahrenheit-32)/9;
}
编程序:
用getchar函数读入两个字符c1,c2,然后分别用putchar函数和printf函数输出这两个字符,并思考以下问题:
(1)变量c1,c2应定义为字符型还是整型,或二者皆可
(2)要求输出c1和c2的ASCII码,应如何处理用putchar函数还是printf函数(3)整型变量与字符变量是否在任何情况下都可以互相代替如:
charc1,c2;
与intc1,c2;
是否无条件等价
intmain()
{
charc1,c2;
c1=getchar();
c2=getchar();
putchar(c1);
putchar(c2);
printf("\n%c%c\n",c1,c2);
return0;
}
(1)二者皆可。
(2)用printf函数将printf("\n%c%c\n",c1,c2)改成printf("\n%d%d\n",c1,c2)即可。
(3)不是,整型可以代替字符型,但字符无法完全替代整型。
第5章
什么是算术运算什么是关系运算什么是逻辑运算
算术运算:
+-*/%++--
关系运算:
<>==>=<=!
=
逻辑运算:
!
&&||
5.2C语言中如何表示真假系统如何判断一个量的真假
C语言用整数1和0表示真假
写出下面各逻辑表达式的值,设a=3,b=4,c=5。
(1)a+b>c&&b==c
(2)a||b+c&&b-c
(3)!
(a>b)&&!
c&&!
1
(4)!
(x=a)&&(y=b)&&0
(5)!
(a+b)+c-1&&b+c/2
(1)0
(2)1(3)0(4)0(5)1
有三个整数a,b,c,由键盘输入,输出其中最大的数。
intMax3(inta,intb,intc);
intmain()
{
inta,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("最大的数是%d\n",Max3(a,b,c));
return0;
}
intMax3(inta,intb,intc)
{
inttemp;
temp=a>ba:
b;
returntemp>ctemp:
c;
}
有一函数:
编写一程序,输入x,输出y值。
doublefuncy(doublex);
intmain()
{
doublex,y;
scanf("%lf",&x);
y=funcy(x);
printf("最大的数是%lf\n",y);
return0;
}
doublefuncy(doublex)
{
if(x<1)returnx;
else
if(x<10)return2*x-1;
elsereturn3*x-11;
}
给出百分制成绩,要求输出成绩等级’A’,’B’,’C’,’D’,’E’。
90分以上为’A’,81~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’。
intmain()
{
doublescore;
scanf("%lf",&score);
if(score>100||score<0)return0;
if(score>=90)printf("A\n");
else
if(score>=80)printf("B\n");
else
if(score>=70)printf("C\n");
else
if(score>=60)printf("D\n");
elseprintf("E\n");
return0;
}
给一个不多于5位的正整数,要求:
(1)求出它是几位数;
(2)分别打印出每一位数字;(3)按逆序打印出各位数字,例如原数为321,应输出123。
intmain()
{
inti,k;
inta[5];
unsignedintx;
scanf("%u",&x);
if(x>99999||x<0)return0;
a[0]=x/10000;
a[1]=(x-a[0]*10000)/1000;
a[2]=(x-a[0]*10000-a[1]*1000)/100;
a[3]=(x-a[0]*10000-a[1]*1000-a[2]*100)/10;
a[4]=x-a[0]*10000-a[1]*1000-a[2]*100-a[3]*10;
/*求出它的几位数*/
printf("
(1):
");
if(a[0])printf("5位数\n");
else
if(a[1])printf("4位数\n");
else
if(a[2])printf("3位数\n");
else
if(a[1])printf("2位数\n");
elseprintf("1位数\n");
/*计算无效0的个数*/
k=0;
while(k<5&&a[k]==0)k++;
/*打印每一位数字*/
printf("
(2):
");
for(i=k;i<5;i++)printf("%d",a[i]);
printf("\n");
/*逆序打印每一位数字*/
printf("(3):
");
for(i=4;i>=k;i--)printf("%d",a[i]);
printf("\n");
return0;
}
企业发放的奖金根据利润提成。
利润(I)低于或等于10万元的,奖金可提10%;利润高于10万元,低于20万元(100000
从键盘输入当月利润I,求应发奖金总数。
intmain()
{
doubleI,bouns;
printf("请输入本月利润(万元):
");
scanf("%lf",&I);
if(I<0)return0;
if(I<=10)bouns=I*;
else
if(I<=20)
bouns=10*+(I-10)*;
else
if(I<=40)
bouns=10*+10*+(I-20)*;
else
if(I<=60)
bouns=10*+10*+20*+(I-40)*;
else
if(I<=100)
bouns=10*+10*+20*+
20*+(I-60)*;
else
bouns=10*+10*+20*+
20*+40*+(I-100)*;
printf("本月总奖金数为%lf万元\n",bouns);
return0;
}
输入四个整数,要求按大小顺序输出
#defineN4
intbubble(inta[],intk);
intmain()
{
inti;
inta[N];
for(i=0;iif(bubble(a,N)){
for(i=0;i<4;i++)printf("%d",a[i]);
printf("\n");
}
return0;
}
intbubble(inta[],intk)
{
inti,j;
intt,temp;
if(k<1)return0;
for(i=1;i<=k-1;i++){
t=k-i;
for(j=0;j<=t-1;j++)
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
return1;
}
有四个圆塔,圆心分别为(2,2),(-2,2),(-2,-2),(2,-2),圆半径为1。
这四个塔的高度都为10米,塔以外无建筑物。
今输入任一点的坐标,求该点相应的高度(塔外的高度为0)。
doubleTowerHeight(doublex,doubley,doublez);
intmain()
{
doublex,y,z;
scanf("%lf%lf%lf",&x,&y,&z);
printf("该点的高度为%lf\n",TowerHeight(x,y,z));
return0;
}
doubleTowerHeight(doublex,doubley,doublez)
{
if((x-2)*(x-2)+(y-2)*(y-2)<=1||
(x+2)*(x+2)+(y-2)*(y-2)<=1||
(x-2)*(x-2)+(y+2)*(y+2)<=1||
(x+2)*(x+2)+(y+2)*(y+2)<=1)
returnz;
else
return0;
}
第6章
输入两个正整数m和n,求其最大公约数和最小公倍数。
intGreatestCommonDivisor(intm,intn)/*返回最大公约数*/
{
intu,v,r;
if(m==0||n==0)return0;
u=m;
v=n;
while(r=u%v){
u=v;
v=r;
}
returnv;
}
intLeastCommonMultiple(intm,intn)/*返回最小公倍数*/
{
intu;
u=GreatestCommonDivisor(m,n);
if(!
u)return0;
returnu*(m/u)*(n/u);
}
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
#defineN100
intmain()
{
chars[N];
char*p;
inti=0,j=0,k=0,m=0;
gets(s);
p=s;
while(*p!
='\0'){
if(*p<123&&*p>64)i++;
else
if(*p==32)j++;
else
if(*p<58&&*p>47)k++;
elsem++;
p++;
}
printf("英文字符个数为:
%d\n",i);
printf("空格数为:
%d\n",j);
printf("数字个数为:
%d\n",k);
printf("其它字符个数为:
%d\n",m);
return0;
}
求Sn=a+aa+aaa+…+aa…a(n个a)之值,其中a是一个数字。
longintSumOfaa(inta,intk)
{
if(a<1||k<1)return0;
if(k==1)returna;
else
return10*(SumOfaa(a,k-1)-SumOfaa(a,k-2))+a+SumOfaa(a,k-1);
}
求
(即求1!
+2!
+3!
+…+20!
)。
longintSumOfRfact(intk)
{
if(k<1)return0;
else
if(k<2)return1;
else
returnk*(SumOfRfact(k-1)-SumOfRfact(k-2))+SumOfRfact(k-1);
}
求
longintSumOfk(intk)
{
inti,sum=0;
if(k<1)return0;
for(i=1;i<=k;i++)sum+=i;
returnsum;
}
longintSumOfk2(intk)
{
inti,sum=0;
if(k<1)return0;
for(i=1;i<=k;i++)sum+=i*i;
returnsum;
}
doubleSumOfk1(intk)
{
inti;
doublesum=;
if(k<1)return0;
for(i=1;i<=k;i++)sum+=i;
returnsum;
}
打印出所有“水仙花数”。
所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。
例如,153=13+53+33。
intmain()
{
inti=0;
intx,y,z;
for(x=1;x<10;x++)
for(y=0;y<10;y++)
for(z=0;z<10;z++)
if(x*x*x+y*y*y+z*z*z==x*100+y*10+z){
printf("%d\n",x*100+y*10+z);
i++;
}
printf("共有%d个水仙花数\n",i);
return0;
}
一个数如果恰好等于它的因子之和,这个数就称之为“完数”。
例如,6的因子为1,2,3,而6=1+2+3,因此6是“完数”。
编程序找出1000之内的所有完数。
并按下面的格式输出其因子。
#defineN1000
intAllFactors(inta[],intk);
intOverNum(intk);
intmain()
{
inti,k=0;
for(i=1;i<=N;i++){
if(OverNum(i)){
printf("%disOverNum\n",i);
k++;
}
}
printf("Thereare%dOverNums\n",k);
return0;
}
/*求k的所有因子,因子保存在数组a中,返回因子的个数*/
intAllFactors(inta[],intk)
{
inti;
intm=1;/*用以记录因子的个数*/
if(k<1)return0;
a[0]=1;
for(i=2;iif(k%i==0){/*i是因子*/
a[m++]=i;/*因子送数组保存*/
}
}
returnm;
}
intOverNum(intk)
{
inta[100];
intj,m;
intsum=0;
m=AllFactors(a,k);/*记录因子个数*/
for(j=0;jif(k==sum)/*是完数*/
return1;
else
return0;
}
有一分数序列:
…
求出这个序列的前20项之和。
#defineN20
doubleSumFractions(intk);
intmain()
{
printf("%lf\n",SumFractions(N));
return0;
}
doubleSumFractions(intk)
{
inti;
doublesum=;
doublea=,b=,temp;
for(i=0;isum=sum+a/b;
temp=a;
a=a+b;
b=temp;
}
returnsum;
}
一个球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。
求它在第10次落地时,共经过多少米第10次反弹多高
doubleTotalDistance(doubleHeight,doubleTimes,doubleRatio);
doubleReboundingDistance(doubleHeight,doubleTimes,doubleRatio);
intm