C语言教材习题答案(陈刚 - 主编)

更新时间:2024-03-20 04:45:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

教材习题答案

习题1

一.填空题

1.C程序是由(函数 )构成的,一个C程序中至少包含(main函数 ) 。因此,( 函数 ) 是C程序的基本单位。

2.C程序注释是由(/* ) 和( */ ) 所界定的文字信息组成的。

3.函数体一般包括(声明部分) 和(执行部分 ) 二.判断题

1.一个C程序的执行总是从该程序的main函数开始,在main函数最后结束。 (正确)

2.main函数必须写在一个C程序的最前面。 (错误) 3.一个C程序可以包含若干的函数。 (正确)

4.C程序的注释部分可以出现在程序的任何位置,它对程序的编译和运行不起任何作用。但是可以增加程序的可读性。 (正确)

5.C程序的注释只能是一行。 (错误) 6.C程序的注释不能是中文文字信息。 (错误)

8.可以使用Turbo C来编译和连接一个C程序。 (正确) 9.可以使用Turbo C来运行一个C程序。 (正确) 10.可以使用Turbo C来实时调试(即动态调试)一个C程序。

1

(正确)

三、在c++ 6.0中输入如下的程序,编译、连接通过后显示结果 (1) #include “stdio.h” void main() {

printf(“ * ”) printf(“ *** ”); printf(“ ***** ”); printf(“******* ”); } 答案:

* *** ***** *******

(2)已知底和高,计算三角形的面积。#include “stdio.h” void main()

2

{ int bottom,high,area; /*bottom 表示底,high 表示高,area表示面积*/ bottom=4; high=6;

area=bottom*high/2;

printf(“the area is %d\\n”,area); } 答案: the area is 12

四、算法设计:请试着分别用自然语言或、程序流程图和NS图描述如下算法。

1. 设计一个程序在屏幕上显示如下的文字 HELLO WELCOME YOU

2. 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其个位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。 3. 对输入的某学生成绩,如果学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 4. 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。

3

5. 一只猴子摘了N个桃子第一天吃了一半又多吃了一个,第二天又吃了余下的一半又多吃了一个,到第十天的时候发现还有一个,问共有多少个桃子。 答案:

1.#include “stdio.h” main() {

printf(“HELLO WELCOME YOU”); }

2.水仙花数产生在100到999之间,利用穷举法,对此范围之内的所有数一个个进行测试,关键是要对每一个三位数分离出它的三个数字。具体的算法是:

n,得到个位,(n/10),得到百位数字,n/100,得到个位数字。再利用水仙花数的含义来判断该数是否满足条件。 #include “stdio.h” main() {

int n,i,j,k;

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

4

{ i=n; j=(n/10); k=n/100;

if( i*i*i+j*j*j+k*k*k= =n)

printf(“%d是一个是水仙花数\\n”,n); } }

3.此题用if …else if 来实现。对于每次输入的成绩,判断它属于哪个等级。 #include \main() {

int grade;

printf(\ scanf(\ if (grade>=90) printf(\

else if(grade>=60 &&grade<=89) printf(\ else printf(\}

5

D) -123 abc TEMP

若x、i、j、k都是int型变量,则计算下面表达式后,x的值为 C 。 x=(i=4,j=16,k=32)

A) 4 B) 16 C) 32 D) 52

设有说明:char w; int x; float y; double z;则表达式w*x+z-y值的数据类型为 D 。

A) float B) char C) int D) double

设C语言中,一个int型数据在内存中占2个字节,则unsigned int 型数据的取值范围为 C 。

A) 0~255 B) 0~32767 C) 0~65535 D) 0~2147483647

若运行时给变量x输入12,则以下程序的运行结果是 。(有错误,应为0) main() { int x,y;

11

scanf(“%d”,&x); y=x>12 ? x+10 : x-12; printf(“%d\\n”,y); }

A) 4 B) 3 C) 2 D) 1

若希望当A的值为奇数时,表达式的值为“真”,A的值为偶数时,表达式的值为“假”。则以下不能满足要求的表达式是 C 。

A) A%2==1 B) !(A%2==0) C) !(A%2) D) A%2

设有:int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>d)后n的值为 B 。

A) 1 B) 2 C) 3 D) 4

以下程序的运行结果是 B 。 main()

{ int a,b,d=241; a=d/100%9; b=(-1)&&(-1); printf(“%d,%d”,a,b);

12

}

A) 6,1 B) 2,1 C) 6,0 D) 2,0

已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是 B 。 if(x>y) z=x; x=y; y=z;

A) x=10, y=20, z=30 B) x=20, y=30, z=30

C) x=20, y=30, z=10 D) x=20, y=30, z=20

以下程序的运行结果是 C 。 main() { int m=5; if(m++>5) printf(“%d\\n”,m); else;

printf(“%d\\n”,m--); }

A) 4 B) 5 C) 6 D) 7

判断char型变量ch是否为大写字母的正确表达式是 C 。 A) ?A?<=ch<=?Z? B) (ch>=?A?)&(ch<=?Z?)

13

C) (ch>=?A?)&&(ch<=?Z?) D) (?A?<= ch)AND(?Z?>= ch)

逻辑运算符两侧运算对象的数据类型 D 。 A) 只能是0和1 B) 只能是0或非0正数

C) 只能是整型或字符型数据 D) 可以是任何类型的数据

sizeof(float)是 B 。

A) 一个双精度型表达式 B) 一个整型表达式 C) 一种函数表达式 D) 一个不合法的表达式

设x、y、z和k都是int型变量,则执行表达式:x=(y=4,z=16,k=32)后,x的值为 C

A) 4 B) 16 C) 32 D) 52

设有如下的变量定义: int i=8, k, a, b; unsigned long w=5; double x=1, 42, y=5.2;

14

则以下符合C语言语法的表达式是 A A) a+=a-=(b=4)*(a=3) B) x%(-3);

C) a=a*3=2 D) y=float(i)

假定有以下变量定义: int k=7,x=12;则能使值为3的表达式是 D

A) x%=(k%=5) B) x%=(k-k%5) C) x%=k-k%5 D) (x%=k)-(k%=5)

设x和y均为int型变量,则以下语句:x+=y,y=x-y;x-=y;的功能是 D

A) 把x和y按从大到小排列 B) 把x和y按从小到大排列

C) 无确定结果 D) 交换x和y中的值

以下程序的输出结果是 D main()

{ int a=12,b=12; printf(\

15

}

A) 10 10 B) 12 12 C) 11 10 D) 11 13

在C语言提供的合法的关键字是 D

A) swicth B) cher C) Case D) default

若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是 C

A)1 B)2 C)2.0 D)2.5

C语言提供的合法的数据类型关键字是 B

A) Double B) short C) integer D) Char

在C语言中,合法的长整型常数是 A A) 0L B) 4962710 C) 0.054838743 D) 2.1869e10

16

二、填空题

scanf函数的格式化字符串中,格式说明与输出项的个数必须相同。如果格式说明的个数小于输出项的个数,则多余的输出项____忽略___。如果格式说明的个数多于输出项的个数,则多余多余的格式将输出______。

以下程序的运行结果是__52.00_____。 #include void main() {int i=5,j=9; float x=2.3,y=45.;

printf(“%8.2f\\n”,i%(int)(x+y)*j/2/3+y); }

若有定义:char c=?\\010?;则变量c中包含的字符个数为___1个___。

若x和n均是int型变量,且x和n的初值均为5,则计算表达式x+=n++后x的值为___10___,n的值为____6__。 若a是int型变量,则计算下面表达式A=25/3%3后a的值为__2____。

若x和a均是int型变量,则计算表达式x=(a=4,6*2)后的x值为_12_____,计算表达式x=a=4,6*2后的x 值为__4____。

17

若a是int型变量,则表达式(a=4*5,a*2),a+6的值为__26____。 若s是int型变量,且s=6,则表达式s%2+(s+1)%2的值为__1____。

在VC++中,一个int型数据在内存中占4个字节,则int型数据的取值范围为__-2147483648~2147483647___。

若有以下定义int m=5,y=2;,则计算表达式y+=y-=m*=y后的y值是___-16___。

设有定义语句:int i=3; float f=456.789; 则表达式1.2+i+?A?+f值的数据类型是__double____。

三、思考以下问题

1. 几种基本数据类型各占几个字节? 2. 标识符分哪几类,各有什么用途? 3. 为什么要定义符号常量? 4. 变量名定义有什么规则?

5. C语言有哪些几类运算符号,又有哪几类表达式?

习题3

18

一、选择题

能正确表示a和b同时为正或同时为负的逻辑表达式是 D A) (a>=0 || b>=0) && (a<0 || b<0) B) (a>=0 && b>=0) && (a<0 && b<0) C) (a+b>0 && a+b<=0) D) a*b>0

以下条件表达式中能完全等价于条件表达式x的是( B )。 A) (x==0) B) (x!=0) C) (x==1) D) (x!=1)

设ch是char型变量,值为'A',则表达式ch=(ch>='A' && ch<='Z')?ch+32:ch的值是: B A) Z B) a C) z D) A

设a,b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中,值为0的表达式是 D

A) 'a'&&'b' B) a<=b C) a||b+c&&b-c D) !((a

19

设a=5,b=6,c=5,d=8,m=2,n=2,执行 (m=a>b)&&(n=c>d) 后n的值为 B A) 1 B) 2 C) 3 D) 0

设x 、y 、z 、t均为int型变量,则执行以下语句后,t的值为 C x=y=z=1;

t=++x || ++y && ++z; A) 不定值 B) 4 C) 1 D) 0

已知 int x=10,y=20,z=30,则执行 if (x>y) z=x;x=y;y=z;

语句后,x、y、z 的值是( B )。 A) x=10,y=20,z=30 B) x=20,y=30,z=30 C) x=20,y=30,z=10 D) x=20,y=30,z=20

设a为整型变量,不能正确表达数学关系10

A) 10

20

C) a>10&&a<15 D) !(a<=10)&&!(a>=15)

语句:printf(\的输出结果是 D A)无输出 B)结果不确定 C)-1 D)1

执行下列程序片段时输出结果是。 C int x=13,y=5;

printf(“%d”,x%=(y/=2)); A)3 B)2 C)1 D)0

下列程序的输出结果是。 B main ( ) { int x=023; printf(“%d”,--x); }

A)17 B)18 C)23 D)24

已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的输入方式是。 D int a1,a2; char c1,c2; scanf(“%d%d”,&a1,&a2);

21

scanf(“%c%c”,&c1,&c2); A)1020AB↙ B)10 20↙

AB↙ C)10 20 AB↙ D)10 20AB↙

执行下列程序片段时输出结果是。 B int x=5,y;

y=2+(x+=x++,x+8,++x); printf(“%d”,y);

A)13 B)14 C)15 D)16

有输入语句:scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);为使变量 a的值为1,b的值为3,c的值为2,则正确的数据输入方式是 。 D

A)132↙ B)1,3,2↙ C)a=1 b=3 c=2↙ D)a=1,b=3,c=2↙

二、读程序或程序段,写出结果 1. char c1=?a?,c2=?c?;

printf(“%d,%c”,c2-c1,c2-?a?+?C?);

22

结果:2,E

2. #include “stdio.h” main() {

char ch1,ch2; ch1=?A?+?5-?3? ; ch2=?A?+?6?-?3?;

printf(“%d,%c”,ch1,ch2); }

结果:-87,D

3. #include “stdio.h” main() { int x;float y;

scanf(“=%f”,&x,&y); printf(“x=%d,y=%f”,x,y); }

当执行时从第一列输入数据1234空格678回车, 则x和y的值分别是多少?

结果:x=123,y=4.000000

23

4. main ( ) { int a=12345;

float b=-198.345, c=6.5;

printf(“a=M,b=%-10.2e,c=%6.2f\\n”,a,b,c); }

结果:a=12345,b=-1.98e+002,c= 6.50

5. main ( ) { int x=-2345; float y=-12.3;

printf(“m,.2f”,x,y); }

三、填空题

1. C语言的程序是由一个或者多个文件组成的,每个文件又是由一个或多个 函数 组成的。

2.C语句可以分为 表达式语句, 函数调用语句,复合语句,空语句和控制语句 等5种类型。

24

3.C控制语句有 3 种。

4.一个表达式要构成一个C语句,必须 加分号 。 5.复合语句是用一对 大括号 界定的语句块。 6.printf函数和scanf函数的格式说明都使用 # 字符开始。

7.scanf处理输入数据时,遇到下列情况时该数据认为结束:(1)遇空格、“回车”、“跳格”键。(2) 遇宽度结束 ,(3) 遇非法输入 。

8.已有int i,j; float x;为将-10赋给i,12赋给j,410.34赋给x;则对应以下scanf函数调用语句的数据输入形式是 。 9.C语言本身不提供输入输出语句,其输入输出操作是由 函数 来实现的。

10.一般地,调用标准字符或格式输入输出库函数时,文件开头应有以下预编译命令: #include

四、程序设计

1. 编写一个程序,从键盘接受3个整数,作为三角形的三边,求出三角形的 面积 答案:

#include #include

25

main() { int a,b,c; double p,S;

printf(\请输入三边长度(如3,4,5): \ scanf(\ if(a+b<=c||b+c<=a||a+c<=b)

printf(\您所输入的三边不构成三角形!\ else {

p=(a+b+c)/2;

S=sqrt(p*(p-a)*(p-b)*(p-c)); printf(\此三角形面积为:%f\ } }

2. 编写一个程序,输入华氏温度,输出相应的摄氏温度。转换公式是:

c=(f-32)/1.8 ,c表示摄氏温度,f表示华氏温度。 答案:

#include

26

void main() {

double c,f;

printf(\请输入一个华氏温度:\ scanf(\ c=(f-32.0)/1.8;

printf(\摄氏温度为:%5.2f\\n\}

3. 输入秒数,将它转换,用小时、分钟、秒来表示。例如输入7278秒,则输出:2小时1分18秒。 答案:

#include main() { int s,f,m; m=7278; s=m/3600; f=m600/60; m=m600`;

printf(\

27

}

1、 选择题:

⑴ D ⑵ B ⑶ A ⑻ C

⑼ C ⑽ B ⑾ D

2、读程序写结果 ⑴ 运行结果: 6

⑵ 运行结果: s=2,t=3

⑶ 运行结果: 4

习题4

⑷ A ⑸ A ⑿ B ⒀ D ⑹ D ⑺ A ⒁ D ⒂ A 28

⑷ 第一次输入:x=0; y=2; z=3; 运行结果: *# 第二次输入:x=1; y=2; z=1; 运行结果: $*

3、编写程序

⑴ 编程实现:输入2个一位的正整数,如果同是奇数,输出2个数的平方值;如果同是偶数,输出2个数的立方值;否则,输出原数。 程序:

#include main( ) { int a, b;

printf(“input a b:”); scanf(“%d %d”, &a, &b);

if(a%2==1 && b%2==1) printf(“\\n %d, %d”, a*a, b*b); else if(a%2==0 && b%2==0) printf(“\\n %d, %d”, a*a*a, b*b*b);

else printf(“\\n %d, %d”, a, b); }

⑵ 编程实现:输入1个不多于四位的正整数, ① 求出它是几位数;

29

② 分别打印出每一位数字;

③ 按逆序打印出该数,例如原数是321输出123 程序:

#include main() {

int n,n1,n2,n3,m; printf(“input nnn:”); scanf(“%d”, &n); if(n>99) { m=3; n1=n; n2=n0/10; n3=n/100;

printf(“\\n %d, %d, %d, %d ”, m, n1, n2, n3); printf(“\\n %d ”, n1*100+n2*10+n3); } else if(n>9) { m=2; n1=n; n2=n/10;

printf(“\\n %d, %d, %d ”, m, n1, n2);

30

printf(“\\n %d ”, n1*10+n2); } else { m=1; n1=n;

printf(“\\n %d, %d ”, m, n1); printf(“\\n %d ”, n1); } }

⑶ 有一分段函数:

x (x<1) y = 2x-1 (1≤x<10) 3x-11 (x≥10) 请编写一程序,输入一个x,打印输出y值。 程序:

#include main() { float x,y;

printf(“input x:”); scanf(“%f”, &x);

31

if(x>=10) y=3*x-11;

else if(x>=1 && x<10) y=2*x-1; else y=x; printf(“\\n %f”, y); }

1、 选择题:

⑴ C ⑵ B ⑶ B ⑻ B

⑼ A ⑽ C ⑾ C

2、读程序写结果: ⑴ 运行结果: *#*#

⑵ 运行结果: x=11111

习题5

⑷ C ⑿ C ⑸ C ⑹ B ⒀ A ⒁ D ⑺ B ⒂ C 32

x=1112 x=113 x=14 x=5

⑶ 运行结果: 011122 3、编程

⑴ 找出100~200之间的不能被3整除的数 程序:

#include main( ) { int i;

for(i=101; i<200; i++)

if(i%3!=0) printf(“ %d \\n”, i); }

⑵ 已知四位数a2b3能被23整除,编程求出此数 程序:

#include main( )

33

{ int a,b;

for(a=1; a<=9; a++) for(b=0; b<=9; b++)

if((a*1000+200+b*10+3)#==0) printf(“%d\\n ”, a*1000+200+b*10+3); }

⑶ 将输入的数字字串(回车结束)转换为对应的整数 程序:

#include #include main( ) {

char c=getchar( ); int n; long int s=0; while(c!=?\\n?)

{if(isdigit(c)){n=c-?0?; s=s*10+n;} c=getchar( );} printf(“s=%d ”, s); }

34

⑷ 求100以内最小的自然数n,使1*1+2*2+3*3+…+n*n>5500 程序1:

#include main( ) (

int n,s=0;

for(n=1; s<5500; n++) s=s+n*n; printf(“%d\\n ”, n); } 程序2:

#include main( ) (

int n,s=0;

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

{s=s+n*n; if(s>5500) break;} printf(“%d\\n ”, n); }

35

⑸ 求1/1!+1/2!+….+1/10! (结果保留10位小数) 程序:

#include main( ) {

int i, n=1; double s=0.0; for(i=1; i<=10; i++) { n=n*i; s=s+1.0/n; }

printf(“s=.10lf ”, s); }

⑹ 求1000以内的完数。完数就是其真因子的和等于其本身的数。 程序:

#include main( ) { int a, i, s;

for( a=1; a<1000; a++ )

36

{ s=0;

for( i=1; i

} }

⑺ 输出九九乘法表(正三角形式) 程序:

#include main( ) { int i, j;

for(i=1; i<=9; i++) {

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

printf(“ -*-=- ”, i, j, i*j); printf(“\\n ”); }

}

37

⑻ 输出如下图形。 # ### ##### ####### ##### ### # 程序:

#include main( ) { int i,j;

for(i=1;i<=4;i++) { printf(“\\n”);

for(j=1;j<=4-i;j++) putchar(? ?); for(j=1;j<=i*2-1;j++) putchar(?#?); }

for(i=3;i>=1;i--)

38

{ printf(“\\n”);

for(j=1;j<=4-i;j++) putchar(? ?); for(j=1;j<=i*2-1;j++) putchar(?#?); } }

⑼ 输入2个正整数,求两数的最大公约数和最小公倍数。 程序:

#include main( )

{ int a , b , c ,t;

printf ( \>0) : \ scanf ( \ if(a

while ( b > 0 ) { c = a % b ; a = b ; b = c ;

39

}

printf ( \ printf ( \ }

1. 选择题:

(1)B (2)D D

(7)A (8)C B

2. 读程序:

习题6

B (4)B (9)B (10)D C (11)D 12)40

(3)(5) (6) (

(1)2322 (2)a[1][1]:8

3. 程序填空:

(1) ① a[8]=data; ② k>=0 ③ temp=a[k]; ④ k<=8

(2) ① str[0]:str[1] ② str[2] ③ t 4. (1)

#include main( ) {

float xscj[6]={90,85,92,77,80,62},ave,sum=0; int i=0; while (i<6)

{ sum+=xscj[i]; i++; } ave=sum/6;

printf(\平均分: %0.1f\\n\ printf(\高于平均分有:\ for(i=0;i<6;i++) if (xscj[i]>ave)

printf(\ \ }

41

(2)

#include #define N 10 main()

{int i,j,t,a[N],k; for(i=0;ia[j])

k=j; if(k!=i)

{ t=a[i];a[i]=a[k];a[k]=t;} }

printf(\

for(i=0;i

#include main( )

42

{int j,k,a[3][4];

printf(\ Input array a:\ for (j=0;j<3;j++) for (k=0;k<4;k++)

scanf(\ printf(\

for (j=0;j<3;j++) { for (k=0;k<4;k++) printf(\

printf(\ } } (4) main( ) {

int a[3][4],max,min,i,j,m1,n1,m2,n2; for (i=0;i<3;i++) for (j=0;j<4;j++)

scanf(\ min=a[0][0]; max=a[0][0]; m1=n1=m2=n2=0;

43

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

if (a[i][j]max) { max=a[i][j]; m2=i;n2=j; } printf(\printf(\printf(\ } (5)

#include void main( ) {int i,j;

int d[4][4]= {{1,2,3,4},{5,6,7,8},{4,3,2,1},{1,2,3,4}}; for(i=0;i<4;i++) for(j=0;j<4;j++)

if(d[i][j]

if(j>=i) printf(\ else printf(\

44

} } (6)

#include #define M 15 #define N 40 main()

{ int a[M],b[M],c[N],i,j,k; gets(a); gets(b);

printf(\ for (i=0;a[i]!='\\0';i++) c[i]=a[i]; printf(\ printf(\ printf(\

for (j=i;b[j-i]!='\\0';j++) c[j]=b[j-i]; printf(\ printf(\

for (k=0;k

45

#include #include\main() {

int i,count=0; char str[40];

printf(\:\gets(str);

for(i=0;str[i]!='\\0';i++)

if( str[i]=='a'&&str[i+1]=='b'){count++;i++;} printf(\} (8)

#include #include\main() { int i,max;

char str[10][20],m[20]; printf(\:\\n

46

\for(i=0;i<10;i++)

gets(str[i]);strcpy(m,str[0]); for(i=1;i<10;i++)

if(strlen(m)

习题7

5. 选择题:

(1)C (2)B (3)D (4)A (5)B C

(7)C (8)B (9)D (10)C (11)D B

(13)D (14)C (15)D (16)C (17)C

12)18)

47

(6) ( (

D

(19)B (20)A

6. 编程题: (1)

#include #include int Is_prime(int i) { int j = 0;

for(j = 2; j < i; j++){ if(0 == (i%j)){ return 0; } } return 1; } main( ) { int i;

printf(\scanf(\ if(1 == Is_prime(i))

printf(\

48

else

printf(\ } (2)

#include void shuixian(int s) {

int a,b,c,sum;

for (sum=101;sum<=s;sum++) {a=sum/100; b=sum/10; c=sum;

if(sum==a*a*a+b*b*b+c*c*c) printf(\} }

void main() {int n;

scanf(\shuixian(n); }

49

(3)

#include double pi( )

{double s=0.0,t=1.0;int n; for(n=1;t>1e-4;n++) {s=s+t; t=n*t/(2*n+1); }

return (2*s); } main( ) {

printf(\} (4)

#include #include tj(char s[ ],int t[ ]) {int i;

for (i=0; s[i]!='\\0'; i++)

if (s[i]>='0'&&s[i]<='9')

t[1]++;

50

本文来源:https://www.bwwdw.com/article/jcx8.html

Top