C语言题解.docx

上传人:b****6 文档编号:7929060 上传时间:2023-01-27 格式:DOCX 页数:56 大小:59.12KB
下载 相关 举报
C语言题解.docx_第1页
第1页 / 共56页
C语言题解.docx_第2页
第2页 / 共56页
C语言题解.docx_第3页
第3页 / 共56页
C语言题解.docx_第4页
第4页 / 共56页
C语言题解.docx_第5页
第5页 / 共56页
点击查看更多>>
下载资源
资源描述

C语言题解.docx

《C语言题解.docx》由会员分享,可在线阅读,更多相关《C语言题解.docx(56页珍藏版)》请在冰豆网上搜索。

C语言题解.docx

C语言题解

第4章

4.1C语言中的语句有哪几类?

C语句与其他语言中的语句有哪些不同?

(1)控制语句

(2)函数调用语句

(3)表达式语句

(4)空语句

(5)复合语句

C语言允许一行写几个语句,也允许一个语句拆开写在几行上,书写格式无固定要求,而其他语言一般对书写格式有严格要求。

4.2怎样区分表达式和表达式语句?

C语言为什么要设表达式语句?

什么时候用表达式,什么时候用表达式语句?

表达式没有分号,语句是有分号的,将表达式加上一个分号就成了表达式语句。

两者最大的区别是,表达式只是一个值,而表达式语句是指令,完成指定的操作。

C语言设表达式语句的作用是用简短的指令代替了复杂的函数运算,程序运行效率高。

表达式是为了进行求值运算而设定的计算公式,用于语句中,但不构成完整的语句。

如果要完成该运算,必须使用表达式语句。

4.3C语言为什么要把输入输出的功能用函数来实现,而不作为语言的基本部分?

因为输入输出的对象是数据,而数据是以介质为载体的,因此进行输入输出就要与各种外部设备打交道。

由于不同的系统进行输入输出的差异较大,所以必须使用函数和操作系统进行交互,以便存取不同的设备文件。

4.4若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=‘a’,c2=‘b’。

想得到以下的输出格式和结果,请写出程序。

要求输出结果如下:

a=3b=4c=5

x=1.200000,y=2.400000,z=-3.600000

x+y=3.60y+z=-1.20z+x=-2.40

u=51274n=128765

c1=’a’or97(ASCII)

c2=’b’or98(ASCII)

intmain()

{

inta=3,b=4,c=5;

doublex=1.2,y=2.4,z=-3.6;

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;

}

4.5请写出下面程序的输出结果:

intmain()

{

inta=5,b=7;

floatx=67.8564,y=-789.124;

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,%10.2e\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,%5.3s\n","COMPUTER","COMPUTER");

return0;

}

57

57

67.856400,-789.124023

67.856400,-789.124023

67.86,-789.12,67.8564,-789.1240,67.856400,-789.124023

6.785640e+001,-7.89e+002

A,65,101,41

1234567,4553207,12d687

65535,177777,ffff,65535

COMPUTER,COM

4.6用下面的scanf函数输入数据,使a=3,b=7,x=8.5,7=71.82,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;

}

4.7用下面的scanf函数输入数据,使a=10,b=20,c1=’A’,c2=’a’,x=1.5,y=-3.75,z=67.8,请问在键盘上如何输入数据?

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;

}

4.8设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。

用scanf输入数据,然后输出计算结果。

输出时要求有文字说明并取小数点后两位数字,请编程序。

#definePi3.1415926

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;

}

4.9输入一个华氏温度的取值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;

}

4.10编程序:

用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.1什么是算术运算?

什么是关系运算?

什么是逻辑运算?

算术运算:

+-*/%++--

关系运算:

<>==>=<=!

=

逻辑运算:

!

&&||

5.2C语言中如何表示真假?

系统如何判断一个量的真假?

C语言用整数1和0表示真假

5.3写出下面各逻辑表达式的值,设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

5.4有三个整数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>b?

a:

b;

returntemp>c?

temp:

c;

}

5.5有一函数:

编写一程序,输入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;

}

5.6给出百分制成绩,要求输出成绩等级’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.7给一个不多于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;

}

5.8企业发放的奖金根据利润提成。

利润(I)低于或等于10万元的,奖金可提10%;利润高于10万元,低于20万元(100000

从键盘输入当月利润I,求应发奖金总数。

intmain()

{

doubleI,bouns;

printf("请输入本月利润(万元):

");

scanf("%lf",&I);

if(I<0)return0;

if(I<=10)bouns=I*0.1;

else

if(I<=20)

bouns=10*0.1+(I-10)*0.75;

else

if(I<=40)

bouns=10*0.1+10*0.75+(I-20)*0.05;

else

if(I<=60)

bouns=10*0.1+10*0.75+20*0.05+(I-40)*0.03;

else

if(I<=100)

bouns=10*0.1+10*0.75+20*0.05+

20*0.03+(I-60)*0.15;

else

bouns=10*0.1+10*0.75+20*0.05+

20*0.03+40*0.15+(I-100)*0.01;

printf("本月总奖金数为%lf万元\n",bouns);

return0;

}

5.9输入四个整数,要求按大小顺序输出

#defineN4

intbubble(inta[],intk);

intmain()

{

inti;

inta[N];

for(i=0;i

if(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;

}

5.10有四个圆塔,圆心分别为(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章

6.1输入两个正整数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);

}

6.2输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

#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;

}

6.3求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);

}

6.4求

(即求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);

}

6.5求

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=0.0;

if(k<1)return0;

for(i=1;i<=k;i++)sum+=1.0/i;

returnsum;

}

6.6打印出所有“水仙花数”。

所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。

例如,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.7一个数如果恰好等于它的因子之和,这个数就称之为“完数”。

例如,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;i

if(k%i==0){/*i是因子*/

a[m++]=i;/*因子送数组保存*/

}

}

returnm;

}

intOverNum(intk)

{

inta[100];

intj,m;

intsum=0;

m=AllFactors(a,k);/*记录因子个数*/

for(j=0;j

if(k==sum)/*是完数*/

return1;

else

return0;

}

6.8有一分数序列:

求出这个序列的前20项之和。

#defineN20

doubleSumFractions(intk);

intmain()

{

pr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1