C语言教材后习题及答案.docx

上传人:b****4 文档编号:3709965 上传时间:2023-05-06 格式:DOCX 页数:33 大小:51.59KB
下载 相关 举报
C语言教材后习题及答案.docx_第1页
第1页 / 共33页
C语言教材后习题及答案.docx_第2页
第2页 / 共33页
C语言教材后习题及答案.docx_第3页
第3页 / 共33页
C语言教材后习题及答案.docx_第4页
第4页 / 共33页
C语言教材后习题及答案.docx_第5页
第5页 / 共33页
C语言教材后习题及答案.docx_第6页
第6页 / 共33页
C语言教材后习题及答案.docx_第7页
第7页 / 共33页
C语言教材后习题及答案.docx_第8页
第8页 / 共33页
C语言教材后习题及答案.docx_第9页
第9页 / 共33页
C语言教材后习题及答案.docx_第10页
第10页 / 共33页
C语言教材后习题及答案.docx_第11页
第11页 / 共33页
C语言教材后习题及答案.docx_第12页
第12页 / 共33页
C语言教材后习题及答案.docx_第13页
第13页 / 共33页
C语言教材后习题及答案.docx_第14页
第14页 / 共33页
C语言教材后习题及答案.docx_第15页
第15页 / 共33页
C语言教材后习题及答案.docx_第16页
第16页 / 共33页
C语言教材后习题及答案.docx_第17页
第17页 / 共33页
C语言教材后习题及答案.docx_第18页
第18页 / 共33页
C语言教材后习题及答案.docx_第19页
第19页 / 共33页
C语言教材后习题及答案.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言教材后习题及答案.docx

《C语言教材后习题及答案.docx》由会员分享,可在线阅读,更多相关《C语言教材后习题及答案.docx(33页珍藏版)》请在冰点文库上搜索。

C语言教材后习题及答案.docx

C语言教材后习题及答案

第一章

1.什么是程序?

什么是程序设计语言?

2.C语言有什么特点?

3.什么是算法?

算法的描述有哪些基本方法?

第一章主要关注两个概念:

一是程序的三种结构(顺序、分支或叫选择、循环);二是函数,主函数main()

第二章

1.指出下列哪些是C语言合法的用户识别符。

voida3_b3For2adefine_123_abcDO

2.指出下列哪些是C语言合法的常量。

"3'4""0x1g33"a"E20'\18'\0xa'1.E-53.F'\0'.12'\a'

"3'4""双引号内表示字符串,但要在一个串内含有单引号、双引号要用转义字符正确的是:

"3\’4\""

0x是十六进制的表示形式之一,但十六进制里没有g这个数值

\0xa'带一个单引号、0开头,无意义.这里要注意\ddd,1-3位八进制数,\xhh,1-2位十进制数,他们都表示对应的ASCII值

E20,E表示指数形式,但两边必须都有数字。

将此题全部弄懂,所有关于常量的分基本跑不掉了。

3.指出下列定义变量语句中的错误。

inta;b=5;//同类型的两个变量,中间不能用分号。

doubelh;//double

intx,floaty;//中间要用分号

floatf(x);//非法符号

定义变量要注意,数据类型的关键字,还有就是变量名称必须是合法标识符。

4.写出能表示数学式子1╱(2a+1╱2a)的C语言表达式。

1.0/(2*a+1/(2*a))

5.⑴#include

intmain()

{

doublex=1,y;

y=x+3/2;

printf("y=%f\n",y);

return0;

}结果是:

2.000000,注意3/2=1

(2)

#include

intmain()

{

floatx=2.9,y=3.2,z;

inta=8;

z=x+a%3*(int)(x+y)/2;

printf("z=%f\n",z);

return0;

}

结果是:

8.900000,注意(int)(x+y)=6。

(3)

#include

intmain()

{

inta=65,b=-20;

charch='A';

floatx=12.345678f;

printf("abc\n\101\t\x41\\101\n");

printf("a=%d,%c,%o,%x\n",a,a,a,a);

printf("b=%d,%o,%x,%u\n",b,b,b,b);

printf("ch=%d,%c\n",ch,ch);

printf("x=%f,%.2f,%10.2f,%-10.f\n",x,x,x,x);

return0;

}

此题包含的内容较多,都是细节,希望对照教材仔细分析结果。

6程序设计。

(1)输出如下的图形。

*

***

*****

***

*

此题答案参考实验指导书。

这题在这章出现,主要是练习printf(),

(2)已知铁的比重是7.86,计算并输出直径为100毫米的铁球重量

#include

#definePI3.1415926

voidmain()

{doublew,r=100.0/20,p=7.86;

w=p*4.0*PI*r*r*r/3.0;

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

}

第三章

1.写出表示变量x的值在[0,100]范围内的逻辑表达式。

x>=0&&x<=100

2.写出表示整型变量x的值能被5或7整除的逻辑表达式。

x%5==0||x%7==0

3.已知变量a、b、c的值分别是3、2、1,逻辑表达式a>b>c的值是多少?

0

4.已知变量x,y的值分别为5,9,逻辑表达式x&&y-9)*6-!

x的值是多少?

0

5.已知变量m,n的值都为1,逻辑表达式m--&&n++执行后,m,n的值是多少?

m=0,n=2,逻辑表达式的值是真。

6

(1):

#include

intmain()

{

intx=2,y;

if(x)y=x;

elsey=3*x-1;

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

return0;

}

运行结果是:

y=2

(2)

#include

intmain()

{

inta=2,b=2,c=3;

if(a==b)

if(b==c)printf("a==b==c\n");

elseprintf("a!

=b\n");

return0;

}

运行结果是:

a!

=b

(3)

#include

intmain()

{

intx=1,y=0,a=0,b=0;

switch(x)

{

case1:

switch(y)

{

case0:

a++;break;

case1:

b++;break;

}

case2:

a++;b++;break;

case3:

a++;b++;

}

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

return0;

}

运行结果是:

a=2,b=1

(4)

#include

intmain()

{intn=5;

while(n>2)

{n--;

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

return0;}

运行结果是:

4

3

2

(5):

#include

intmain()

{

inta,b;

for(a=1,b=1;a<=100;a++)

{

if(b>=20)break;

if(b%3==1)

{

b+=3;

continue;

}

b-=5;

}

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

return0;

}

运行结果是:

8

7.程序设计

(1)从键盘输入一个字符。

若该字符是小写,输出相应的大写字母;若该字符是大写字母,输出对应的小写字母;若是其他字符,则原样输出。

#include

intmain()

{chars;

scanf("%c",&s);

if(s>='A'&&s<='Z')

s=s+32;

elseif(s>='a'&&s<='z')

s=s-32;

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

return0;

}

(2)从键盘输入3个整数,输出其中的最大值。

#include

voidmain()

{inta,b,c;

intm;

printf("Pleaseinputabc\n");

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

m=a>b?

a:

b;

m=m>c?

m:

c;

printf("Maxis%d\n",m);

}

本题解法比较多。

注意此题的逻辑关系。

(3)从键盘输入一个整数,输出分段函数f(x)的值。

1-x^2(x<2)

f(x)=1+2x-x^2(2<=x<10)

1-x+x^2(x>=10)

#include

intmain()

{

floatx,y;

scanf("%f",&x);

if(x<2)

y=1-x*x;

elseif(x<10)

y=1+2*x-x*x;

else

y=1-x+x*x;

printf("a=%f\n",y);

return0;

}

此类题,注意数轴方向。

从一边为起点。

(4)从键盘上输入一个整数,求其中每个数位的数字之和。

#include

intmain(){

intsum=0,a;

scanf("%d",&a);

if(a<10)

sum=a;

else

{

do{

sum=sum+a%10;

a=a/10;

}while(a>0);

}

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

return0;

}

此题答案只考虑输入的是正整数,如果输入的是小于0的整数,加个判读,用绝对值函数处理下即可。

(5)将100元换成1元,5元,10元的零钱有多少种换法?

#include

intmain()

{intx,y,z,i=0;

for(x=0;x<=10;x++)

for(y=0;y<=20;y++)

for(z=0;z<=100;z++)

{if(x*10+5*y+z==100)

{printf("%5d,%5d,%5d\n",x,y,z);

i++;}}

printf("Thereare%dways.\n",i);

return0;

}

(6)计算方程X^2+Y^2=1989的所有整数解。

#include

#include

voidmain()

{intv,i,j;

v=(int)sqrt(1989);

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

for(j=0;j<=v;j++)

{if(i*i+j*j==1989)

{printf("%5d,%5d\n",i*i,j*j);}

}

}

(7)输出所有的3位水仙花数。

3位水仙花数是指一个整数的每个数位上的数字的3次方之和等于它本身,例如:

1^3+5^3+3^3=153.

#include

voidmain()

{

inta,b,c,d;

for(a=100;a<=999;a++)

{b=a/100;

c=a%10;

d=(a/10)%10;

if(b*b*b+c*c*c+d*d*d==a)printf("%5d\n",a);

}

}

(8)在印度有一个古老的传说:

舍罕王打算奖赏国际象棋的发明人——宰相西萨班达依尔。

国王问他想要什么,他对国王说:

“陛下,请你在这张棋盘的第1个小格里,赏给我一粒麦子,在第二个格子里给2粒,第三格给4粒,以后每一小格都比前一小格加一一倍。

陛下啊,把这样摆满棋盘上所有64个小方格的麦粒,都赏赐给你的仆人吧!

”。

请帮国王计算一下,放完整个棋盘要多少颗小麦。

#include

voidmain()

{inti;

doublen,s;

i=1;n=1.0;s=1.0;

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

{n=n*2;s=s+n;

printf("%lf\n",n);}

printf("s=%lf\n",s);

getch();

}

(9)验证哥德巴赫猜想:

任何充分大(>=4)的偶数都可以用2个素数之和表示,将4~100所有偶数分别用两个素数之和的形式输出。

(例如:

4=2+2,100=3+97)

#include

#include

intss(intn)/*检查n是否为素数,如果是则返回1,否则返回0*/

{inti;

for(i=2;i<=(int)sqrt(n);i++)

if(n%i==0)return0;

return1;}

intmain(void)

{inti,j,k=0;/*k用来控制打印换行*/

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

for(j=2;j

{if(ss(j)&&ss(i-j))

{printf("%d=%d+%d",i,j,i-j);

k++;

if(k%5==0)putchar('\n');

break;}

}

return0;}

注意判断素数的3种方法。

n-1,n/2,(int)sqrt(n)

(10)一球从100米高度自由落下,每次漏地后反跳回原高度的一半,求在第10次落地时,共经过多少米?

第10次反弹多高?

#include

intmain()

{floatsn=100.0,hn=sn/2;

intn;

for(n=2;n<=10;n++)

{sn=sn+2*hn;/*第n次落地时共经过的米数*/

hn=hn/2;}/*第n次反跳高度*/

printf("thetotalofroadis%f\n",sn);

printf("thetenthis%fmeter\n",hn);

return0;}

第4章

1.程序填空。

(1)请在横线上填空,使程序输出数组s中最大元素的下标。

#include

intmain()

{

intk,p,s[]={1,-9,7,2,-10,3};

for(p=0,k=0;p<6;p++)

if(s[p]>s[k])k=p;

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

return0;

}

注意:

红色部分为原题填空部分,下同。

(2)请在横线

上填空,使程序输出以下形式的图标。

1234

678

1112

16

#include

intmain()

{

intnum[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},i,j;

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

{

for(j=i;j<4;j++)printf("%-5d",num[i][j]);

printf("\n");

}

return0;

}

2.阅读下列程序,写出程序运行结果。

(1)#include

intmain()

{

inti,k,a[10],p[3];

k=5;

for(i=0;i<10;i++)a[i]=i;

for(i=0;i<3;i++)p[i]=a[i*(i+1)];

for(i=0;i<3;i++)k+=p[i]*2;

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

return0;

}

运行结果:

21

(2)#include

intmain()

{

intp[7]={11,13,14,15,16,17,18},i=0,k=0;

while(i<7&&p[i]%2)

{

k=k+p[i];

i++;

}

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

return0;

}

运行结果:

24

(3)#include

intmain()

{

inti;

inta[3][3]={1,2,3,4,5,6,7,8,9};

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

printf("%d",a[2-i][i]);

return0;

}

运行结果:

753

3.程序设计。

(1)从键盘输入10个成绩,输出最高分和最低分。

(2)在一次评奖中有10个评委对5个参赛选手打分,选手的最终得分为:

去掉一个最高分、一个最低分后剩余8个分数的平均值。

从键盘输入每个选手的得分,输出每个选手最终得分。

(3)从键盘输入5门课程6个同学的成绩,。

输出每门课程的最高分。

(4)从键盘上输入一个4x5的矩阵,输出矩阵个周边元素的和。

例如输入以下矩阵,输出:

32。

10203

04891

70970

80451

第五章

1、程序填空。

(1)请在横线上填空,使fun()函数实现

的功能。

intfun(inta,intb)

{

intmul;

mul=(a+b)*(a+b);

returnmul;

}

注意:

红色部分就是原来需要填空的地方,下同

(2)请在横线上填空,使fun()函数返回参数s所表示的数组中各元素的和,其中参数len表示数组s的长度。

doublefun(doubles[],intn)

{

inti;

doubley=0;

for(i=0;i

y+=s[i];

returny;

}

2、阅读下列程序,写出程序运行结果。

#include

#defineLEN10

voidreverse(inta[],intn)

{

inti,t;

for(i=0;i

{

t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;

}

return;

}

intmain()

{intb[LEN]={1,2,3,4,5,6,7,8,9,10},i,s=0;

reverse(b,8);

for(i=6;i<10;i++)s+=b[i];

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

return0;

}

运行结果:

s=34

(2)#include

intd=1;

voidfun(intp)

{

intd=5;

d+=p++;

printf("%d",d);

return;

}

intmain()

{

inta=3;

fun(a);

d+=a++;

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

return0;

}

运行结果:

84

(3)#include

voidfun(intx,inty,intz)

{

z=x*x+y*y;

return;

}

intmain()

{

inta=31;

fun(5,2,a);

printf("%d",a);

return0;

}

运行结果:

31

(4)#include

#defineMAX(x,y)(x)>(y)?

(x):

(y)

intmain()

{

inta=5,b=2,c=3,d=3,t;

t=MAX(a+b,c+d)*10;

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

return0;

}

运行结果:

7

3、程序设计。

(1)编写函数sum,计算m到n的累加和(m小于n),在主函数中调用sum()函数,计算并输出

+

+

的值。

(2)编写函数item,计算1到n的累加和的倒数,在主函数中调用item()函数,计算并输出

+

+

+

+

的值。

(3)一个正整数如果等于它的因子(包括1,但不包括自身)之和,则称为“完数”(例如6是一个“完数”,6=1+2+3)。

编写函数fun,计算n的因子之和(不包括n),在主函数中调用fun()函数,输出1000以内的所有完数。

(4)已知数列的递归关系如下,编写函数fun,计算数列的第n项,在主函数中调用fun()函数,输出该数列的前20项。

f(n)=

第六章

1.程序填空。

(1)请在横线上填空,使程序完成计算数组a中元素的平均值并输出。

floataverage(int*pa,intn)

{

inti,avg;

avg=0;

for(i=0;i

avg+=pa[i];

return(float)avg/n;

}

intmain()

{

inta[5]={2,4,6,8,10};

floatmean;

mean=average(a,5);

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

}

注意:

红色部分即为原题填空部分,下同。

2.请在横线上填空,使函数实现计算指针p所指向的字符串的长度。

intmyStrlen(char*p){

intlen=0;

for(;*p!

='\0';p++)

len++;

returnlen;

}

阅读下列程序,写出程序运行结果。

(1)#include

intmain()

{

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

int*p1=&a,*p2=&b,*p=&c;

*p=(*p1)*(*p2);

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

return0;

}

运行结果:

3

(2)#include

intmain()

{

inta[3][3],*p,i;

p=&a[0][0];

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

p[i]=i+1;

printf("%d\n",a[1][2]);

return0;

}

运行结果:

6

(3)#include

intmain()

{

inta[]={2,4,6,8,10},y=1,i,*p;

p=&a[1];

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

y+=*(p+1);

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

return0;

}

运行结果:

19

(4)

#include

#include

intmain()

{

charp1[]="abcd",p2[]="efgh",str[50]="ABCDEFG";

strcat(str,p1);

strcat(str,p2);

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

return0;

运行结果:

ABCDEFGabcdefgh

(5)

#include

intmain()

{

charstr[]="1a2b3c";

inti;

for(i=0;str[i]!

='\0';i++)

if(str[i]<'0'||str[i]>'9')printf("%c",str[i]);

printf("\n");

return0;}

运行结果:

abc

3.程序设计

(1)编写函数Mystrcmp(char*str1,char*str2),该函数的功能是比较字符串str1和str2,如果相同返回0,否则返回两个字符串中第1个不相同的ASCII码值之差作为函数值返回,要求不采用库函数strcmp()实现。

(2)编函数fun(int*a,intn,int*odd,int*even),函数的功能是分别求出形参a所指向的数组中所有奇数、偶数之和,并分别保存在Odd、even所指向的变量中形参n表示形参a所指向的数组的长度。

(3)从键盘输入英文的星期几,输出对应的中文星期几。

(4)从键盘输入一个字符串,然后将字符串按照如下规则重新排列:

字母排在前面,数字排在后面,并不改变原来字母之间以及数字之间的字符顺序。

例如输入字符串“a12bcd45”,则排列后的字符串为”abcd1234”.

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2