c程序设计教程习题参考答案.docx

上传人:b****2 文档编号:1041121 上传时间:2023-04-30 格式:DOCX 页数:28 大小:38.74KB
下载 相关 举报
c程序设计教程习题参考答案.docx_第1页
第1页 / 共28页
c程序设计教程习题参考答案.docx_第2页
第2页 / 共28页
c程序设计教程习题参考答案.docx_第3页
第3页 / 共28页
c程序设计教程习题参考答案.docx_第4页
第4页 / 共28页
c程序设计教程习题参考答案.docx_第5页
第5页 / 共28页
c程序设计教程习题参考答案.docx_第6页
第6页 / 共28页
c程序设计教程习题参考答案.docx_第7页
第7页 / 共28页
c程序设计教程习题参考答案.docx_第8页
第8页 / 共28页
c程序设计教程习题参考答案.docx_第9页
第9页 / 共28页
c程序设计教程习题参考答案.docx_第10页
第10页 / 共28页
c程序设计教程习题参考答案.docx_第11页
第11页 / 共28页
c程序设计教程习题参考答案.docx_第12页
第12页 / 共28页
c程序设计教程习题参考答案.docx_第13页
第13页 / 共28页
c程序设计教程习题参考答案.docx_第14页
第14页 / 共28页
c程序设计教程习题参考答案.docx_第15页
第15页 / 共28页
c程序设计教程习题参考答案.docx_第16页
第16页 / 共28页
c程序设计教程习题参考答案.docx_第17页
第17页 / 共28页
c程序设计教程习题参考答案.docx_第18页
第18页 / 共28页
c程序设计教程习题参考答案.docx_第19页
第19页 / 共28页
c程序设计教程习题参考答案.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

c程序设计教程习题参考答案.docx

《c程序设计教程习题参考答案.docx》由会员分享,可在线阅读,更多相关《c程序设计教程习题参考答案.docx(28页珍藏版)》请在冰点文库上搜索。

c程序设计教程习题参考答案.docx

c程序设计教程习题参考答案

《C语言程序设计教程》习题参考答案

祝胜林主编

华南理工大学出版社

【习题1】1

【习题2】2

【习题3】3

【习题4】5

【习题5】7

【习题6】9

【习题7】11

【习题8】13

【习题9】14

【习题10】15

【习题1】

一、简答题(在课本中寻找答案,略)

1.1C程序的基本结构包括哪些内容?

1.2如何定义标识符?

1.3输入格式、输出格式的组成包括哪些内容?

1.4C语言函数分为哪两类?

1.5计算表达式的值应该考虑哪些方面?

1.6上机调试程序的步骤如何?

二、判断并改错

1.7C程序执行的入口是main()函数,所以main函数必须放在程序的开头。

错误:

main函数可以放在程序的任何位置。

并不限定在程序的开头。

1.8定义一个函数包括数据说明部分和执行语句部分,两者可以交叉出现。

错误:

不可以交叉出现,数据说明部分在执行语句部分的前面。

1.9编辑与编译不是一回事。

错误:

不是一回事。

编辑完成源程序的输入和修改;编译是对源程序进行语法检查,如果无语法错误,则生成目标程序。

1.10scanf("%d,%d",&x,&y);的正确输入格式:

3,4<回车>。

正确

1.11注释内容太多会影响程序的执行效率。

错误:

不会影响程序的执行效率。

因为在编译时,编译系统将注释内容删除或用空格代替,所以注释内容不会编译到目标程序中。

1.12所有的数学公式可以直接出现在源程序中。

错误:

数学公式需要转换成C语言能够接受的公式才能出现在源程序中。

三、编程题

1.13在屏幕上输出自己名字的拼音。

提示:

中文名字叫“张三”,对应的拼音为“ZhangSan”,输出用printf()函数。

1.14输入圆的半径,求圆的周长,并将结果保留两位小数输出到屏幕上。

提示:

定义圆的半径r,圆的周长:

2*3.14*r,输出结果保留2位小数可以用%.2f

1.15输入两个整数,输出其中最大者。

提示:

模仿例1.3

1.16输入三个整数,输出其中最小者。

提示:

min(min(a,b),c);

【习题2】

一、简答题(在课本中寻找答案,略)

2.1常量与变量的区别?

2.2C语言中的标识符的定义规则?

2.3变量为什么要“先定义,后使用”?

2.4字符常量'a'与字符串常量"a"有何区别?

2.5大小写字母转换的规则是什么?

2.6变量的具有哪三种属性?

二、单项选择题

2.7 C语言中,int型数据在内存中的存储形式是(D)。

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

2.8 下面四个选项中,均是不合法的用户标识符的选项是(C)。

A)BA、x_0、do

B)float、1a0、_Y

C)x-y、goto、123

D)_123、tmp、CHAR

2.9 下列选项中不正确的常数的选项是(D)。

A)0x12FB)-1.23E-2C)12.0D)0388

2.10 下面正确的字符常量是(B)。

A)"a"B)'\\'C)"\n"D)"\376"

2.11 下面正确的字符串常量是(C)。

A)'a'B)'376'C)"\\n"D)376

2.12 表达式'A'+4*25.0-'b'的正确结果是(B)。

A)67B)67.0C)不确定D)67L

2.13 执行printf("%x",100);后的输出结果是(C)。

A)100B)0x100C)0X64D)64

2.14 int型的-1在内存中的存储形式是(A)。

A)1111111111111111

B)0000000000000001

C)1111111111111110

D)1000000000000001

2.15 存储字符串"\\\'abc\376"需要的字节数是(D)。

A)11B)13C)6D)7

【习题3】

一、计算题

3.12.8+7%3*11%2/4(答案:

2.8)

3.25/2+5.0/2+7%6(答案:

5.5)

3.3a=12,a*=2+3(答案:

a=60)

3.4a=3,b=4,c=5,a+b>c&&b==c(答案:

0)

3.53>5?

3:

5<8?

25:

40(答案:

25)

3.6设a=1,b=2,c=3,d=4,m=n=1,有表达式(m=a>b)&&(n=c>d),计算表达式后m,n的值?

(答案:

m=0,n=1)

3.7 设intb=7;floata=2.5,c=4.7;求下面表达式的值。

a+(int)(b/2*(int)(a+c)/2)%4(答案:

4.5)

二、单项选择题

3.8 若有代数式

,则不正确的C语言表达式是(C)。

A)x/b/c*y*8B)8*x*y/b/c

C)8*x*y/b*cD)x*y/c/b*8

3.9 有如下类型说明:

intk,a,b;

unsignedlongw=8;

doublex=2.9

则以下不符合C语言语法的表达式是(A)。

A)x%(-3)B)w*=-2

C)k=(a=6,b=4,a-b)D)a*=a+=a-=(b=4)*(a=3)

3.10 有如下类型说明:

floatn;

intm;

则以下能实现将n中的数值保留小数点后两位,第三位四舍五入的表达式是(B)。

A)n=(n*100+0.5)/100.0B)m=n*100+0.5,n=m/100.0

C)n=n*100+0.5/100.0D)n=(n/100+0.5)*100.0

3.11 设k=7,x=12;则下列表达式值为3的是(D)。

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

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

3.12 已知m=48,ch='a',n=0;则表达式(m>=n&&ch<'b'&&!

n)的值是(B)。

A)0B)1C)真D)非0

3.13 下面哪个式子在b为奇数时结果为假(C)。

A)a%2==1B)!

(a%2==0)C)!

(a%2)D)a%2

3.13 执行printf("%f",(x=3,y=5,x>y?

1:

1.5));后的输出结果是(D)。

A)语法错误B)1C)1.5D)1.500000

3.14 能表示条件0≤x≤100的表达式是(D)。

A)0<=x<=100B)x>=0,x<=100

C)0≤x≤100D)x>=0&&x<=100

3.15 判断char型变量ch为数字的正确表达式是(B)。

A)ch>="0"&&ch<="9"B)ch>='0'&&ch<='9'

C)'0'≤ch≤'9'D)ch>='0'||ch<='9'

三、编程题(应用条件运算)

3.16输入一个整型成绩x,如果大于等于60分,输出“pass”,否则输出“fail”。

提示:

printf("%s",x>60?

"pass":

"fail");

3.17 输入一个年份y,如果是闰年,输出“yisaleapyear”,否则输出“yisnotaleapyear.”

提示:

printf("%dis%s",y%4==0&&y%100!

=0||y%400==0?

"aleapyear.":

"notaleapyear.");

3.18 输入三条边a,b,c,如果它们能构成一个三角形,输出“Yes”,否则输出“No”。

提示:

printf("%s",a+b>c&&a+c>b&&b+c>a?

"Yes":

"No");

3.19 输入三个数x,y,z,按从小到大的输出结果。

提示:

分别用max0,min0代表最大、最小值,mid0表示中间值。

max0=(x>y?

x:

y)>z?

(x>y?

x:

y):

z;max0=(x

x:

y)

(x

x:

y):

z;

mid0=x+y+z-max0-min0;

3.20 输入一个平面上的点坐标,判断它是否落在圆心(0,0),半径为1的圆内,如果在圆内,输出“Yes”,否则输出“No”。

提示:

分别用x,y代表平面上一个点。

printf("%s",x*x+y*y<=0?

"Yes":

"No");

【习题4】

以下的编程题目要求首先画出程序的传统流程图或N-S流程图,再编写程序代码。

上机实验时再输入到计算机中进行调试,并将调试过程中出现的问题和测试情况记录下来。

(流程图请读者自己参考课本自己画,略)

4.1 编程实现,输入一个整数,判断它是否为偶数,并显示相应的信息。

提示:

x代表输入的整数,if(x%2==0)printf("\neven");elseprintf("\nodd");

4.2编程实现,输入一个平面上的点,判断它是否落在单位圆上,并显示相应的信息。

提示:

x,y代表平面坐标,if(x*x+y*y==1)printf("\nYes");elseprintf("\nNo");

4.3编程实现,输入一个成绩等级(A-E),显示相应的百分制成绩段。

A:

90-100

B:

80-89

C:

70-79

D:

60-69

E:

<60

提示:

chargrade;

if(grade=='A')printf("\n90-100");

elseif(grade=='B')printf("\n80-89");

....

4.4写出下面程序的运行结果:

#include

main()

{

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

switch(a>0){

case1:

switch(b-2<0){

case1:

printf("&");break;

case2:

printf("*");break;

}

case0:

switch(c==5){

case0:

printf("!

");break;

case1:

printf("#");break;

default:

printf("%%");

}

default:

printf("@");

}

}

运行结果:

&#@

4.5将以下语句改写成switch语句。

if((t>0)&&(t<=10))

if((t>=3)&&(t<=6))x=2;

elseif((t>1)||(t>8))x=3;

elsex=1;

elsex=0;

提示:

intt;

if(t<=0||t>10)c=0;

elsec=t;

switch(t)

{case0:

x=0;break;

case1:

case2:

x=3;

case3:

case4:

case5:

case6:

x=2;

case7:

case8:

case9:

x=3;

case10:

x=2;

}

4.7编程实现一个具有简单四则运算功能的计算器。

提示:

参照例4.18,随机产生3个数,其中一个数用来判断是哪种运算。

4.8编程实现,输入一行字符,将其中的数字字符对应的整数值加起来并输出结果。

如:

a45b8&*3则是4+5+8+3,结果为20。

提示:

charc;intsum=0;

while((c=getchar())!

='\n')if(c>='0'&&c<='9')sum=sum+c-'0';

4.9编程实现,求

的值。

提示:

先计算n!

,再在计算阶乘的外面套上一层循环。

注意:

20!

是一个很大的值,floats=1;inti;例如:

计算6!

for(i=1;i<=6;i++)s=s*i;

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

6itsfactorsare1,2,3,

所谓“完数”是指一个数如果恰好等于它的因子之和,因子是指能够整除该数的数。

提示:

先判断数是否为完数,如果是再考虑输出因子。

以6为例输出因子:

for(i=1;i<6;i++)if(6%i==0)printf("%d,",i);

4.11编程实现,计算序列的前20项之和,

,...

提示:

这是一个累加式,每项是一个分式,用a、b分别表示分子、分母。

注意:

如果a、b都是整数,则是整除。

floatsum=0,a=2,b=1;inti;

for(i-1;i<=20;i++){sum=sum+a/b;a=a+b;b=a-b;}

4.12编程实现,求Sn=a+aa+aaa+...+

aa...a之值,其中a是一个数字。

如:

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

提示:

这是一个累加式,后1项可以由前一项表示,譬如:

第2项可以由第1项表示:

第1项t=a;第2项:

t=t*10+a;

4.13编程实现,把从键盘输入的金额数(以圆为单位)按人民币面额划分,然后显示支付该金额的各种面额人民币的数量。

提示:

譬如:

123.58元可以表示100元:

1张;20元:

1张;2元:

1张;1元:

1张;5角:

1张;5分:

1枚;2分:

1枚;1分:

1枚。

为了简单可以只完成整数部分转换,即输入的金额数为整数。

4.14编程实现,使用循环结构打印以下图案。

*

***

*****

*******

*****

***

*

提示:

输出时,本图案要按向上三角形和向下三角形进行输出。

每行输出中包括空格输出,‘*’号输出。

输出空格和‘*’号个数要与行循环控制变量关联起来。

4.15编程实现,以菜单方式实现猜数游戏系统。

(功能自己设定)

提示:

模仿例4.14和例4.18完成。

功能可以包括猜数范围,人数等设置。

4.16编程实现,以菜单方式实现四则运算辅助教学系统。

提示:

随机产生两个操作数和运算符+、-、*、/,由使用者输入一个数,判断计算结果与输入的数是否相等,如果相等,表示正确,否则是错误的。

【习题5】

一、填空题

5.1若有定义inta[3][5];则排列在数组中的第9个元素是(a[1][3])。

5.2strlen("Howareyou\n")的值是(12)。

5.3C语言中字符串结束的标志是('\0')。

5.4写出一个名为s的单精度实型一维数组,长度是6,所有元素初值均为0,其数组定义语句是(floats[6]={0};)。

5.5strcmp("how","How")的值是(32或>0)。

二、选择题

5.6若有ints[4]={1,2,3,4};,则s[s[0]+2*s[2]-s[3]]的值是(D)

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

5.7对数组的描述正确的是(B)。

A.数组一旦定义其大小是固定的,但数组元素的类型可以不同。

B.数组一旦定义其大小是固定的,但数组元素的类型必须相同。

C.数组一旦定义其大小是可变的,但数组元素的类型可以不同。

D.数组一旦定义其大小是可变的,但数组元素的类型必须相同。

5.8对字符串"Boy"进行完整赋值的操作是(B)。

A.chars[3]={'B','o','y'};B.chars[]="Boy";

C.chars[3]={"Boy"};D.chars[3];s="Boy";

5.9在c语言中引用数组元素时,其数组下标的数据类型允许是(C)。

A.整型常量B.整型表达式

C.整型常量或整型表达式D.任何类型的表达式

5.10对以下说明语句的正确理解是(B)。

inta[10]={6,7,8,9,10};

A.将5个初值依次赋给a[1]至a[5]

B.将5个初值依次赋给a[0]至a[4]

C.将5个初值依次赋给a[6]至a[10]

D.因为数组长度与初值的个数不相同,所以此语句不正确

三、看程序写结果

5.11

main()

{inta[3][3]={{1,0,2},{2,2},{0,2}},c[3][3],i,j;

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

{

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

{

c[i][j]=a[a[i][j]][a[j][i]];

printf("%5d",c[i][j]);

}

}

printf("\n");

}

运行结果为:

220002201

5.12当运行以下程序时,从键盘输入:

Ah2MAA3ha,请写出输出结果。

main()

{chars[80],c='a';

inti=0;

scanf("%s",s);

while(s[i++]!

='\0')

if(s[i]==c)s[i]=s[i]-32;

elseif(s[i]==c-32)s[i]=s[i]+32;

puts(s);

}

运行结果为:

AH2Ma

四、编程题

5.13用数组方法定义一个矩阵,求其转置矩阵。

提示:

已知a[3][2],转置后的结果存放在b[2][3];则b[j][i]=a[i][j];

5.15从键盘输入9个不同的整数,组成三行三列的二元数组,找出每一列中的最大元素,并输出其行、列下标。

提示:

已知a[3][3],max,row,col分别用来存放一列的最大值,行下标和列下标。

5.15利用一个二维数组,打印出以下杨辉三角形,要求打印出10行。

1

1  1

1  2  1

1  3  3  1

1  4  6  4  1

1  5  10 10  5  1

提示:

定义一个10行10列的二维数组,并且通过两重循环对第1列所有元素赋值1,主对角线也赋值。

根据a[i][j]=a[i-1][j]+a[i-1][j-1]求出其它元素的值。

5.16从键盘上输入一串字符(长度小于50个字符),找出其中最前面的一个X和最后面的一个X之间的子串,并输出子串的长度。

提示:

定义一个长度为81的字符数组,从左边查找第一字符'X'的下标,从右边查找第一个字符'X'的下标。

5.17矩阵A是一个3×3的矩阵,B是一个3×2的矩阵,编程求C=AB。

提示:

定义一个3X2的数组c[3][2],该数组的元素值由A数组的一行元素分别与B的一列元素相乘得到。

譬如:

c[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0]。

5.18把30个学生的学号和两门课程的成绩输入到一个二维数组中,求出的每个学生的两门课程的总成绩也放于此数组中,请按学生总分的高低打印出成绩单(包括学号、两门课程成绩和总分)。

提示:

定义一个30行4列的数组。

为了先快速测试算法是否正确?

可以定义一个3行4列的数组,并且通过赋初始值,减少调试程序时反复输入数据的麻烦,算法调试成功后在加上输入数据部分。

实现从高到低打印出成绩可以通过排序(降序);也可以通过另外定义1个一维数组作为索引,再通过索引打印成绩。

5.19不用现有的函数求计算字符串长度的程序。

提示:

通过循环从前到后计算字符个数,遇到字符串结束标志'\0'结束。

5.20从键盘上输入一串字符,将其逆向显示。

提示:

首先计算字符串的长度,在从右边逐一显示字符,直到下标等于0为止。

5.21找出一个二位数组中的鞍点的位置,即该位置上的元素在该行上最大,在该列上最小。

如果有,输出其所在的行、列号,如果没有,则输出提示信息。

提示:

先找出行的最大元素,根据列下标找出列的最大元素。

5.22从键盘上输入一串字符,将字符串中的所有A去掉后组成新的字符串,并将两字符串输出。

提示:

简单的方法是通过定义两个一维数组,逐个读出原字符串的字符,如果不为'A',则存入目的数组。

当然也可以只用一个一维数组实现,通过两个下标指示来实现。

【习题6】

一、填空题

6.1C语言程序执行的开始处是main函数。

6.2C程序中的一个函数由两部分组成,即声明部分和执行部分。

6.3为了保证被调用函数不返回任何值,其函数定义的类型应为void。

6.4若一个局部变量的存储类型是static,则该变量的值在程序执行完成时被释放。

6.5预处理命令#include的作用是文件包含。

6.6定义一个宏,功能是判断两个数是否相等,相等为1,不等为0。

#defineEQU(a,b)(a)==(b)?

1:

0

6.7变量的存储类别有自动型、静态型、寄存器型、和外部类型共4种,它们分别用auto、static、register、extern标识。

二、选择题

6.8下述函数定义形式正确的是(C)。

A.intf(intx;inty)B.intf(intx,y)

C.intf(intx,inty)D.intf(x,y:

int)

6.9关于函数参数,说法正确的是(A)。

A.实参与其对应的形参各自占用独立的内存单元

B.实参与其对应的形参共同占用一个内存单元

C.只有当实参和形参同名时才占用同一个内存单元

D.形参是虚拟的,不占用内存单元

6.10用数组名作为函数的实参时,传递给形参的是(A)。

A.数组的首地址B.数组的第1个元素

C.数组中的全部元素D.数组的元素个数

6.11复合语句中定义的变量的作用范围是(D)。

A.整个源文件B.整个函数

C.整个程序D.所定义的复合语句

6.12一个函数的返回值由(D)确定。

A.return语句中的表达式B.调用函数的类型

C.系统默认的类型D.被调用函数的类型

6.13在一个C源文件中,若要定义一个只允许本源文件所有函数使用的全局变量,其他文件中不允许使用,则该变量需要使用的存储类别是(D)。

A.autoB.registerC.externD.static

三、判断题

6.14若定义的函数没有参数,则函数名后的圆括号可以省略。

()

6.15函数的函数体可以是空语句()。

6.16只有main函数才能调用其他函数。

()

6.17return语句中表达式的类型必须与函数定义的类型一致。

()

6.18函数的实参和形参可以是相同的名字。

()

6.19函数调用中,形参与实参的类型和个数必须保持一致。

()

6.20外部类型的变量只能定义一次,但可在不同地方声明多次。

()

6.21外部类型的变量作用范围大,编程中应多用外部变量。

()

6.22预处理命令行必须以#开头,且最后要用分号结尾。

()

6.23宏命令的处理占用编译时间,而不占用运行时间。

()

四、看程序写结果

6.24

intfun(intn)

{intf=1;

f=f*n*2;

return(f);

}

main()

{inti,j;

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

printf("%d\t",fun(i));

}

程序运行结果:

246810

6.25

intx1=30,x2=40;

main()

{intx3=10,x4=20;

sub(x3,x4);

su

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

当前位置:首页 > 小学教育 > 语文

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

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