C语言习题.docx

上传人:b****9 文档编号:25624080 上传时间:2023-06-10 格式:DOCX 页数:45 大小:31.03KB
下载 相关 举报
C语言习题.docx_第1页
第1页 / 共45页
C语言习题.docx_第2页
第2页 / 共45页
C语言习题.docx_第3页
第3页 / 共45页
C语言习题.docx_第4页
第4页 / 共45页
C语言习题.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

C语言习题.docx

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

C语言习题.docx

C语言习题

《C语言程序设计》习题集

第1章C语言概述

1.1c语言程序的总体结构是怎样的。

解:

一个完整的c语言程序,是由一个、且只能由一个main()函数(又称主函数)和若

干个其他函数结合而成的,或仅由一个main()函数构成。

1.2c语言程序的基本单位是什么?

它的结构又如何?

解:

函数是c语言程序的基本模块单元。

任何函数(包括主函数main())都是由函数说明和函数体两部分组成。

其一般结构如下:

[函数类型]函数名(函数参数表)

{说明语句部分;

执行语句部分;}

1.3主函数main()在程序中的地位如何。

程序总是从哪个函数开始执行,到哪个函数执行完后结束?

解:

main()函数的作用相当于其他高级语言中的主程序;其他函数的作用相当于子程序。

一个c语言程序,总是从main()函数开始执行,而不论其在程序中的位置。

当主函数执

行完毕时,亦即程序执行完毕。

习惯上,将主函数main()放在最前头。

1.4c语言的语句分为哪几类?

解:

按照语句功能或构成的不同,可将c语言的语句分为五类。

控制语句、函数调用语句、表达式语句、空语句和复合语句。

1.5执行一个c语言程序的一般过程是什么?

解:

运行一个c语言程序的一般过程,如下图所示。

1)启动Tc,进入Tc集成环境。

2)编辑(或修改)源程序。

3)编译。

如果编译成功,则可进行下一步操作;否则,返回2)修改源程序,再重新编译,直至编译成功。

4)连接。

如果连接成功,则可进行下一步操作;否则,根据系统的错误提示进行相应修改,再重新连接,直至连接成功。

5)运行。

通过观察程序运行结果,验证程序的正确性。

6)退出Tc集成环境,结束本次程序运行。

1.6在Tc集成环境下,下列操作的快捷键分别是什么

解:

存盘:

F2;编译与连接:

F9;运行:

nF9;查看运行结果:

Alt+F5。

 

第2章 数据类型、运算符与表达式

2.1指出下列变量名中,哪些是合法的,哪些是非法的。

如果非法,为什么?

Int,char,345,ABdf,c&d,string*,_322,alpf_beat,JOHN.smith,3ab

解:

ABdf,_322,alpf_beat合法,其它的非法

Int,char非法是因为它们都是C语言关键字;

345,3ab非法是因为变量名不能以阿拉伯数字开头;

c&d,string*,JOHN.smith非法是因为变量名中只能由字母、数字和下划线组成。

2.2计算下列表达式的值

(1)a+b%3*(int)(a-b)/4(设a=13.6,b=8)

(2)(x+y)/2+(int)x%(int)y(设x=4.5,y=2.5)

(3)z*=3+6,z/z=z/2,z+=z-=z*=z(设z=6)

解:

(1)15.600000;

(2)3.500000;(3)0。

第3章顺序结构程序设计

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

想得到以下输出格式和结果,请写出程序(包括定义变量类型和设计输出)。

a=□3□□b=□4□□c=□5

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

x+y=□3.600□□y+z=-1.20□□z+x=-2.40

c1=ˊaˊ□or□97(ASCII)

c2=ˊbˊ□or□98(ASCII)

(□表示空格,下同)

参考源程序如下:

main()

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

longintu=51274,n=128765;

floatx=1.2,y=2.4,z=3.6;

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=%6ldn=%9ld\n",u,n);

printf("%s%s%d%s\n","c1='a'","or",c1,"(ASCII)");

printf("%s%s%d%s\n","c2='a'","or",c2,"(ASCII)");

}

3.2用scanf下面的函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=ˊAˊ,c2=ˊaˊ,问在键盘上如何输入?

main()

{

inta,b;floatx,y;charc1c2;

scanf("a=%d_b=%d",&a,&b);

scanf("_x=%f_y=%e",&x,&y);

scanf("_c1=%c_c2=%c",&c1,&c2);

}

输入方法如下:

a=3□b=7

□x=8.5□y=71.82

□c1=A□c2=a

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

用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。

请编程序。

参考源程序:

main()

{floatr,h,C1,Sa,Sb,Va,Vb;

scanf("%f,%f",&r,&h);

C1=2*3.14*r;

Sa=3.14*r*r;

Sb=4*Sa;

Va=4*3.14*r*r*r/3;

Vb=Sa*h;

printf("C1=%.2f\n",C1);

printf("Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n",Sa,Sb,Va,Vb);

}

3.3输入一个华氏温度,要求输出摄氏温度。

公式为c=5(F-32)/9,输出要求有文字说明,取位2小数。

参考源程序如下:

main()

{floatF,c;

scanf("%f",&F);

c=5*(F-32)/9;

printf("输入的华氏温度为:

%.2f,则摄氏温度为%.2f",f,c);

}

3.4已知三角形的三边长,求其面积。

解:

假设输入的三边能构成三角形,三角形的面积公式为:

Area=

其中S=(a+b+c)/2。

参考源程序如下:

#include“math.h”

Main()

{

Floata,b,c,s,area;

Printf(“请输入三角形的三边:

”);

Scanf(“%f,%f,%f”,&a,&b,&c);

S=(a+b+c)/2.0;

Area=sqrt(s*(s-a)*(s-b)*(s-c));

Printf(“三角形的三边为:

%7.2f,%7.2f,%7.2f\n”,a,b,c);

Prinft(“三角形的面积为:

%7.2f\n”,area);

}

第4章选择结构程序设计

4.1写出下面表达式的值(设a=1,b=2,c=3,x=4,y=3)

(1)a+b>c&&b==c

(2)!

a

=c||x+y<=3

(3)a+(b>=x+y)?

c-a:

y-x

(4)!

(x=a)&&(y=b)&&0

(5)!

(a+b)+c-1&&b+c/2

(6)a||1+’a’&&b&&’c’

解:

(1)0;

(2)1;(3)2;(4)0;(5)1;(6)1。

4.2有三个整数a、b、c,由键盘输入,输出其中最大的数。

参考源程序:

main()

{inta,b,c,t;

scanf("%d%d%d",&a,&b,&c);

if(a>b)

if(a>c)t=a;

elset=c;

elseif(b>c)t=b;

elset=c;

printf("%d\n",t);

}

4.3给出一百分制成绩,要求输出成绩等级'A'、'B'、'C'、'D'、'E'。

90分以上为'A',80~89分为'B',70~79分为'C',60~69分为'D',60分以下为'E'。

参考源程序:

main()

{intnumber,md;charc1;

scanf("%d",&number);

md=number/10;

switch(md)

{

case10:

case9:

c1='A';break;

case8:

c1='B';break;

case7:

c1='C';break;

case6:

c1='D';break;

case5:

case4:

case3:

case2:

case1:

case0:

c1='E';break;

printf("%c\n",c1);

}

4.4给一个不多于5位的正整数,要求:

①求出它是几位数;②分别打印出每一位数字;③按逆顺序打印出各位数字,例如原来为321,应输出123。

参考源程序:

main()

{inta,b,c,d,e,n;longm;

scanf("%ld",&m);

a=0.0001*m;

b=10*(0.0001*m-a);

c=100*(0.0001*m-a-0.1*b);

d=1000*(0.0001*m-a-0.1*b-0.01*c);

e=m-10000*a-1000*b-100*c-10*d;

if(a!

=0)

n=5,printf("%d%d,%d,%d,%d,%d%d%d%d%d%d\n",n,a,b,c,d,e,e,d,c,b,a);

elseif(b!

=0)n=4,printf("%d%d,%d,%d,%d%d%d%d%d\n",n,b,c,d,e,e,d,c,b);

elseif(c!

=0)n=3,printf("%d%d,%d,%d%d%d%d\n",n,c,d,e,e,d,c);

elseif(d!

=0)n=2,printf("%d%d,%d%d%d\n",n,d,e,e,d);

elsen=1,printf("%d%d%d\n",n,e,e);

}

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

利润(I)低于或等于10万元的,奖金可提10%;利润高于10万元,低20万元(10000010000000时,超过100万元的部分按1%提成。

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

要求:

⑴用if语句编程序;⑵用switch语句编程序。

⑴用if语句编程序:

main()

{inta,b,c,d,e;floatd1=0.01,d2=0.015,d3=0.03,d4=0.05,d5=0.075,d6=0.10;

doublejj,k;longi;

scanf("%ld",&i);

k=0.00001*i;a=k-10;b=k-6;c=k-4;d=k-2;e=k-0;

if(a<0)a=0;

if(b<0)b=0;

if(c<0)c=0;

if(d<0)d=0;

jj=a*d1+(b-a)*d2+(c-b)*d3+(d-c)*d4+(e-d)*d5+(k-e)*d6;

printf("jj=%.3f\n",100000*jj);

}

⑵用switch语句编程序:

main()

{inta,b,c,d,e,n,x;

floatd1=0.01,d2=0.015,d3=0.03,d4=0.05,d5=0.075,d6=0.10;

doublejj,k;longi;

scanf("%ld",&i);

k=0.00001*i;a=k-10;b=k-6;c=k-4;d=k-2;e=k-0;x=k;

switch(x)

{case0:

e=0;

case1:

d=0;

case3:

c=0;

case5:

b=0;

case9:

a=0;

default:

n=0;

}

jj=a*d1+(b-a)*d2+(c-b)*d3+(d-c)*d4+(e-d)*d5+(k-e)*d6;

printf("jj=%.3f\n",100000*jj);

}

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

参考源程序:

main()

{inta,b,c,d,t;scanf("%d,%d,%d,%d",&a,&b,&c,&d);

if(a

if(a

if(a

if(b

if(b

if(c

printf("%d,%d,%d,%d\n",a,b,c,d);

}

4.7有四个圆塔,圆心分别为(2,2),(-2,2),(-2,-2),(2,-2),圆半径为1。

见下图。

这四个塔的高度为10米,塔外无建筑物。

今输入任一点的坐标,求该点的建筑物高度(塔外高度为零)。

参考源程序:

#include"math.h"

main()

{floatx,y,n,m,r;inth;

scanf("%f,%f",&x,&y);

n=fabs(x);m=fabs(y);

r=sqrt((n-2)*(n-2)+(m-2)*(m-2));

if(r>1)h=0;

elseh=10;

printf("%d\n",h);

}

第5章循环结构程序设计

5.1求∑n!

(n=1->20),(即求1!

+2!

+3!

+4!

+5!

+…+20!

参考源程序:

main()

{intn,i=1;longsum=0,s=1;

scanf("%d",&n);

while(i<=n)

{s=s*i;sum=sum+s;i++;}

printf("sum=%ld\n",sum);

}

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

main()

{longm,n,i=1,j,s;

scanf("%ld,%ld",&m,&n);

for(;i<=m&&i<=n;i++)

{

if(m%i==0&&n%i==0)s=i;

}

if(m>=n)j=m;

elsej=n;

for(;!

(j%m==0&&j%n==0);j++);

printf("s=%ld,j=%ld\n",s,j);

}

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

参考源程序:

#include"stdio.h"

main()

{charc;inti=0,j=0,k=0,l=0;

while((c=getchar())!

='\n')

{if(c>=65&&c<=90||c>=97&&c<=122)i++;

elseif(c>=48&&c<=57)j++;

elseif(c==32)k++;

elsel++;

}

printf("i=%d,j=%d,k=%d,l=%d\n",i,j,k,l);

}

5.4求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。

例如:

2+22+222+2222+22222(n=5),n由键盘输入。

参考源程序:

#include"math.h"

main()

{intn,sum=0,i=1,s=2;

scanf("%d",&n);

while(i<=n)

{sum=sum+s;s=s+2*pow(10,i);i++;}

printf("sum=%d\n",sum);

}

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

例如:

153是一个水仙花数,因为153=1^3+5^3+3^3。

参考源程序:

#include"math.h"

main()

{intx=100,a,b,c;

while(x>=100&&x<1000)

{a=0.01*x;b=10*(0.01*x-a);c=x-100*a-10*b;

if(x==(pow(a,3)+pow(b,3)+pow(c,3)))printf("%5d",x);

x++;

}

}

5.6一个数如果恰好等于它的因子之和,这个数就称为"完数"。

例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。

编程序找出1000之内的所有完数,并按下面格式输出其因子:

6 its factors are 1、2、3

参考源程序:

main()

{intm,i,j,s;

for(m=6;m<1000;m++)

{

s=1;

for(i=2;i

if(m%i==0)s=s+i;

if(m-s==0)

{printf("%5ditsfastorsare1",m);for(j=2;j

printf("%d",j);printf("\n");}

}

}

main()

{intm,i,j,s;

for(m=6;m<1000;m++)

{s=m-1;

for(i=2;i

if(m%i==0)s=s-i;

if(s==0)

{printf("%5ditsfastorsare1",m);for(j=2;j

printf("%d",j);printf("\n");}

}

}

5.7有一分数序列:

  2/1,3/2,5/3,8/5,13/8,21/13…

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

参考源程序:

main()

{inti=1,n;doublet,x=1,y=2,s,sum=0;

scanf("%ld",&n);

while(i<=n){s=y/x;sum=sum+s;t=y;y=y+x;x=t;i++;}

printf("%f\n",sum);

}

5.8一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。

求它在第10次落地时共经过多少米?

第10次反弹多高?

参考源程序:

 

main()

{inti,n;doubleh=100,s=100;

scanf("%d",&n);

for(i=1;i<=n;i++)

{h*=0.5;

if(i==1)continue;s=2*h+s;

}

printf("h=%f,s=%f\n",h,s);

}

5.9猴子吃桃问题。

猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。

第二天早上又将剩下的桃子吃掉一半,又多吃一个。

以后每天早上都吃了前一天剩下的一半零一个。

到第10天早上想再吃时,见只剩下一个桃子了。

求第一天共摘多少桃子。

参考源程序:

main()

{inti=1,sum=0;

for(;i<=10;i++);sum=2*sum+1;

printf("sum=%d\n",sum);

}

5.10用迭代法求x=。

求平方根的迭代公式为:

Xn+1=(Xn+1/Xn)/2

要求前后两次求出的得差的绝对值少于0.00001。

参考源程序:

#include"math.h"

main()

{floatx0,x1,a;

scanf("%f",&a);

x1=a/2;

do

{x0=x1;x1=(x0+a/x0)/2;}while(fabs(x0-x1)>=0.00001);

printf("%.3f\n",x1);

}

5.11用二分法求方程在(-10,10)之间的根

2x3-4x2+3x-6=0

参考源程序:

main()

{doublex1,x2,y1,y2;x1=-10;x2=10;

do{y1=2*x1*x1*x1-4*x1*x1+3*x1-6;

x1=x1-y1/(6*x1*x1-8*x1+3);}while(y1!

=0);

do{y2=2*x2*x2*x2-4*x2*x2+3*x2-6;

x2=x2-y2/(6*x2*x2-8*x2+3);}while(y2!

=0);

printf("x1=%.3f,x2=%.3f\n",x1,x2);

}

5.12打印以下图案

*

***

*****

*******

*****

***

*

参考源程序:

#include"math.h"

main()

{inti=1,k,l,m;

for(;i<=49;i++)

{k=i%7;l=3-fabs((i-1)/7-3);m=fabs(i-4-7*((i-1)/7));

if(k==1)printf("\n");

if(m<=l)printf("*");

elseprintf("");}

printf("\n");

}

第6章数组

6.1用筛选法求100以内的素数。

参考源程序:

main()

{inti,j,a[100];

for(i=2;i<100;i++)

{a[i]=i;

for(j=2;j<=i;j++)

{if(j

if(a[i]-j==0)printf("%5d",a[i]);}

}

printf("\n");

}

#include"math.h"

main()

{staticinti,j,k,a[98];

for(i=2;i<100;i++)

{a[i]=i;k=sqrt(i);

for(j=2;j<=a[i];j++)

if(j

if(j>=k+1)printf("%5d",a[i]);

}

printf("\n");

}

6.2求一个矩阵对角线元素之和。

解:

以3*3矩阵为例,参考源程序如下:

main()

{inti=0,j=0,a[3][3],s1,s2;

for(i=0;i<3;i++)

for(j=0;j<3;j++)scanf("%d",&a[i][j]);

s1=a[0][0]+a[1][1]+a[2][2];

s2=a[0][2]+a[1][1]+a[2][0];

printf("s1=%d,s2=%d\n",s1,s2);

}

6.3一个已按从小到大的顺序排好的数组,今输入一个数要求按原来排序的规律将它插入数组中。

解:

我们以一个10元素的数组为例,参考源程序如下:

main()

{staticinta[10]={1,7,8,17,23,

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

当前位置:首页 > 表格模板 > 调查报告

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

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