文档库 最新最全的文档下载
当前位置:文档库 › C语言教材习题答案(陈刚_主编)[1]

C语言教材习题答案(陈刚_主编)[1]

教材习题答案

习题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程序。

(正确)

三、在c++ 6.0中输入如下的程序,编译、连接通过后显示结果

(1) #include “stdio.h”

void main()

{

printf(“ * ”)

printf(“ *** ”);

printf(“ ***** ”);

printf(“******* ”);

}

答案:

*

***

*****

*******

(2)已知底和高,计算三角形的面积。

#include “stdio.h”

void main()

{ 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以内的所有完数。

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

答案:

1.#include “stdio.h”

main()

{

printf(“HELLO WELCOME YOU”);

}

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

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

main()

{

int n,i,j,k;

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

{

i=n%10;

j=(n/10)%10;

k=n/100;

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

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

}

}

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

#include "stdio.h"

main()

{

int grade;

printf("input grade=");

scanf("%d",&grade);

if (grade>=90) printf("A\n");

else if(grade>=60 &&grade<=89) printf("B\n");

else printf("C\n");

}

4.先考虑一个整数m,如何判断它是否为完数。从数学知识可知:一个数m除该数本身外的所有因子都在1~m/2之间。算法中要取得因子之和,只要在1~m/2之间找到所有的整数m的数,将其累加起来即可。如果累加起来与m本身相等,则表示m是一个完数,可以将m输出。

#include "stdio.h"

main()

{

int m,i,s;

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

{ s=0;

for(i=1;i<=m/2;i++)

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

if(m==s)

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

}

printf("\n");

}

5.找出前后两天的数量关系,然后用递推法求解。设第十天的桃子数目为t,昨天的数为y,则t=y/2-1,得到y=2t+2,这样由今日数目可以求出昨日数目,从最后一天开始,倒退到第一天,倒退的循环次数比天数少1。所以,若已知第n天只留下一个,问第一天有多少个时,则倒退循环n-1次得到结果。

天数:10 9 8 7 6 5 4 3 2 1

桃子数目:1 4 10 22 46 94 190 382 766 1534

#include "stdio.h"

main()

{

int i,t,y,n;

t=1;

printf("\ninput number n:\n");

scanf("%d",&n);

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

{

y=2*t+2;

t=y;

}

printf("the total is :%d\n",y);

}

习题2

一、选择题

C语言基本类型包括( D )

A) 整型、实型、逻辑型B) 整型、实型、字符型、逻辑型C) 整型、字符型、逻辑型D) 整型、实型、字符型

下列四组选项中,均不是C语言关键字的选项是

A 。

A) define IF type

B) getc char printf

C) include case scanf

D) while go

pow

语言的字符型数据在内存中的存储形式是( D )

A)原码B)补码C) 反码D) ASCII码

C 语言的整型数据在内存中的存储形式是( B )

A)原码B)补码C) 反码D) ASCII码

已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2=…A?+…6?-…3?后,c2中的值为 A 。

A) D B) 68

C) 不确定的值D) C

以下叙述正确的是 C 。

A) 在C程序中,每行只能写一条语句

B) 若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数

C) 在C程序中,%是只能用于整数运算的运算符

D) 在C程序中,无论是整数还是实数,都能被准确无误地表示

以下叙述不正确的是 D 。

A) 在C程序中,逗号运算符的优先级最低

B) 在C程序中,MAX和max是两个不同的变量

C) 若a和b类型相同,在计算了赋值表达式a=b后,b中的值将放入a中,二b中的值不变

D) 当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值

下面正确的字符常量是 A 。

A) “c” B) …\\??

C) …? D) …K?

下列四组选项中,均是合法转义字符的选项是 A 。

A) …\”?…\\?…\n?

B) …\?…\017?…\”?

C) …\018?…\f?…xab?

D) …\\0?…\101?…xlf?

下列四组选项中,均是不合法的用户标识符的选项是

B 。

A) W P_0 do

B) b-a goto int

C) float la0

_A

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;

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

}

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?)

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;

则以下符合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("%d,%d\n",- -a,+ +b);

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

二、填空题

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____。

若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

一、选择题

能正确表示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

设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

相关文档