收藏 分享(赏)

C教材习题答案.doc

上传人:gnk289057 文档编号:6797011 上传时间:2019-04-22 格式:DOC 页数:38 大小:259.50KB
下载 相关 举报
C教材习题答案.doc_第1页
第1页 / 共38页
C教材习题答案.doc_第2页
第2页 / 共38页
C教材习题答案.doc_第3页
第3页 / 共38页
C教材习题答案.doc_第4页
第4页 / 共38页
C教材习题答案.doc_第5页
第5页 / 共38页
点击查看更多>>
资源描述

1、C 教材习题答案习题 1一填空题1C 程序是由(函数 )构成的,一个 C 程序中至少包含( main 函数 ) 。因此,( 函数 ) 是 C 程序的基本单位。2C 程序注释是由(/* ) 和( */ ) 所界定的文字信息组成的。3函数体一般包括(声明部分 ) 和(执行部分 ) 。二判断题1一个 C 程序的执行总是从该程序的 main 函数开始,在 main 函数最后结束。 (正确)2main 函数必须写在一个 C 程序的最前面。 (错误)3一个 C 程序可以包含若干的函数。 (正确)4C 程序的注释部分可以出现在程序的任何位置,它对程序的编译和运行不起任何作用。但是可以增加程序的可读性。 (正

2、确)5C 程序的注释只能是一行。 (错误)6C 程序的注释不能是中文文字信息。 (错误)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)已知底和高,计算三角形的面积。#incl

3、ude “stdio.h” void main() int bottom,high,area; /*bottom 表示底,high 表示高,area 表示面积*/bottom=4;high=6;area=bottom*high/2;printf(“the area is %dn”,area);答案:the area is 12四、算法设计:请试着分别用自然语言或、程序流程图和 NS 图描述如下算法。1. 设计一个程序在屏幕上显示如下的文字HELLO WELCOME YOU2. 打印出所有的“水仙花数” ,所谓“水仙花数”是指一个三位数,其个位数字立方和等于该数本身。例如:153 是一个“水仙花

4、数” ,因为 153=1 的三次方5 的三次方3 的三次方。3. 对输入的某学生成绩,如果学习成绩=90 分的同学用 A 表示,60-89 分之间的用B 表示,60 分以下的用 C 表示。4. 一个数如果恰好等于它的因子之和,这个数就称为“完数” 。例如 6=123.编程找出 1000 以内的所有完数。5. 一只猴子摘了 N 个桃子第一天吃了一半又多吃了一个,第二天又吃了余下的一半又多吃了一个,到第十天的时候发现还有一个,问共有多少个桃子。答案:1#include “stdio.h”main() printf(“HELLO WELCOME YOU”);2水仙花数产生在 100 到 999 之间

5、,利用穷举法,对此范围之内的所有数一个个进行测试,关键是要对每一个三位数分离出它的三个数字。具体的算法是:n%10,得到个位, (n/10)%10,得到百位数字,n/100,得到个位数字。再利用水仙花数的含义来判断该数是否满足条件。#include “stdio.h”main()int n,i,j,k;for(n=100;n=90) printf(“An“);else if(grade=60 printf(“%dn”,y);A) 4 B) 3 C) 2 D) 1若希望当 A 的值为奇数时,表达式的值为 “真”,A 的值为偶数时,表达式的值为“假”。则以下不能满足要求的表达式是 C 。A) A%

6、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=ab)a=d/100%9;b=(-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(xy) z=x; x=y; y=z;A) x=10, y=20, z=30 B) x=20, y=30, z=30C) x=20, y=30, z=10 D) x=20, y=30, z=20以下程序的运行结果是 C 。main() int

7、 m=5;if(m+5) printf(“%dn”,m);else;printf(“%dn”,m-);A) 4 B) 5 C) 6 D) 7判断 char 型变量 ch 是否为大写字母的正确表达式是 C 。A) A=A)unsigned long w=5;double x=1, 42, y=5.2;则以下符合 C 语言语法的表达式是 AA) a+=a-=(b=4)*(a=3) B) x%(-3);C) a=a*3=2 D) y=float(i)假定有以下变量定义: int k=7,x=12;则能使值为 3 的表达式是 DA) x%=(k%=5) B) x%=(k-k%5) C) x%=k-k%

8、5 D) (x%=k)-(k%=5)设 x 和 y 均为 int 型变量,则以下语句:x+=y,y=x-y;x-=y;的功能是 DA) 把 x 和 y 按从大到小排列 B) 把 x 和 y 按从小到大排列C) 无确定结果 D) 交换 x 和 y 中的值以下程序的输出结果是 Dmain() int a=12,b=12;printf(“%d,%dn“,- -a,+ +b);A) 10 10 B) 12 12 C) 11 10 D) 11 13在 C 语言提供的合法的关键字是 DA) swicth B) cher C) Case D) default若已定义 x 和 y 为 double 类型,则表

9、达式:x=1,y=x+3/2 的值是 CA)1 B)2 C)2.0 D)2.5C 语言提供的合法的数据类型关键字是 BA) Double B) short C) integer D) Char在 C 语言中,合法的长整型常数是 AA) 0L B) 4962710 C) 0.054838743 D) 2.1869e10二、填空题scanf 函数的格式化字符串中,格式说明与输出项的个数必须相同。如果格式说明的个数小于输出项的个数,则多余的输出项_忽略_。如果格式说明的个数多于输出项的个数,则多余多余的格式将输出_。以下程序的运行结果是_52.00_。#include void main()int

10、i=5,j=9;float x=2.3,y=45.;printf(“%8.2fn”,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 型

11、变量,则表达式(a=4*5,a*2),a+6 的值为_26_。若 s 是 int 型变量,且 s6,则表达式 s%2+(s+1)%2 的值为_1_。在 VC+中,一个 int 型数据在内存中占 4 个字节,则 int 型数据的取值范围为_-21474836482147483647_。若有以下定义 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

12、 为什么要定义符号常量?4 变量名定义有什么规则?5 C 语言有哪些几类运算符号,又有哪几类表达式?习题 3一、选择题能正确表示 a 和 b 同时为正或同时为负的逻辑表达式是 DA) (a=0 | b=0) t=+x | +y A) 不定值 B) 4C) 1 D) 0 已知 int x=10,y=20,z=30,则执行if (xy)z=x;x=y;y=z;语句后,x、y、z 的值是( B )。A) x=10,y=20,z=30 B) x=20,y=30,z=30C) x=20,y=30,z=10 D) x=20,y=30,z=20 设 a 为整型变量,不能正确表达数学关系 1010的输出结果是

13、 DA)无输出 B)结果不确定C)-1 D)1 执行下列程序片段时输出结果是。 Cint x=13,y=5;printf(“%d”,x%=(y/=2);A)3 B)2 C)1 D)0下列程序的输出结果是。 Bmain ( ) int x=023;printf(“%d”,-x);A)17 B)18 C) 23 D)24已有如下定义和输入语句,若要求 a1,a2,c1,c2 的值分别为 10,20,A 和 B,当从第一列开始输入数据时,正确的输入方式是。 Dint a1,a2; char c1,c2;scanf(“%d%d”,scanf(“%c%c”,A)1020AB B)10 20ABC)10

14、20 AB D)10 20AB执行下列程序片段时输出结果是。 Bint 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 的值为 1,b 的值为 3,c 的值为 2,则正确的数据输入方式是 。 DA)132 B)1,3,2C)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);结果:2,E2 #include “stdio.h”main(

15、)char ch1,ch2;ch1=A+5-3 ;ch2=A+6-3;printf(“%d,%c”,ch1,ch2);结果:-87,D3. #include “stdio.h” main() int x;float y;scanf(“%3d%f”,printf(“x=%d,y=%f”,x,y);当执行时从第一列输入数据 1234 空格 678 回车,则 x 和 y 的值分别是多少?结果:x=123,y=4.0000004. main ( ) int a=12345;float b=-198.345, c=6.5;printf(“a=%4d,b=%-10.2e,c=%6.2fn”,a,b,c);

16、结果:a=12345,b=-1.98e+002,c= 6.505. main ( ) int x=-2345;float y=-12.3;printf(“%6d,%06.2f”,x,y);三、填空题1. C 语言的程序是由一个或者多个文件组成的,每个文件又是由一个或多个 函数 组成的。2.C 语句可以分为 表达式语句, 函数调用语句,复合语句,空语句和控制语句等 5 种类型。3.C 控制语句有 3 种。4.一个表达式要构成一个 C 语句,必须 加分号 。5.复合语句是用一对 大括号 界定的语句块。6.printf 函数和 scanf 函数的格式说明都使用 # 字符开始。7.scanf 处理输入

17、数据时,遇到下列情况时该数据认为结束:(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 ma

18、in() int a,b,c; double p,S; printf(“请输入三边长度(如 3,4,5): “); scanf(“%d,%d,%d“, if(a+bvoid main()double c,f;printf(“请输入一个华氏温度:“);scanf(“%lf“,c=(f-32.0)/1.8;printf(“摄氏温度为:%5.2fn“,c);3. 输入秒数,将它转换,用小时、分钟、秒来表示。例如输入 7278 秒,则输出:2 小时1 分 18 秒。答案:#include main()int s,f,m;m=7278;s=m/3600; f=m%3600/60;m=m%3600%60;

19、printf(“%d:%d:%d“,s,f,m);习题 41、 选择题: D B A A A D A C C B D B D D A2、读程序写结果 运行结果: 6 运行结果: s=2,t=3 运行结果: 4 第一次输入: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”, if

20、(a%2=1 else if(a%2=0 else printf(“n %d, %d”, a, b); 编程实现:输入 1 个不多于四位的正整数, 求出它是几位数; 分别打印出每一位数字; 按逆序打印出该数,例如原数是 321 输出 123程序:#includemain()int n,n1,n2,n3,m;printf(“input nnn:”);scanf(“%d”, if(n99) m=3;n1=n%10;n2=n%100/10;n3=n/100;printf(“n %d, %d, %d, %d ”, m, n1, n2, n3);printf(“n %d ”, n1*100+n2*10+

21、n3);else if(n9) m=2;n1=n%10;n2=n/10;printf(“n %d, %d, %d ”, m, n1, n2);printf(“n %d ”, n1*10+n2);else m=1;n1=n;printf(“n %d, %d ”, m, n1);printf(“n %d ”, n1); 有一分段函数:x (x1)y = 2x-1 (1x10)3x-11 (x10) 请编写一程序,输入一个 x,打印输出 y 值。程序:#includemain()float x,y;printf(“input x:”);scanf(“%f”, if(x=10) y=3*x-11;el

22、se if(x=1 for(i=101; imain( )int a,b;for(a=1; a#includemain( )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); 求 100 以内最小的自然数 n,使 1*1+2*2+3*3+n*n5500程序 1:#includemain( )(int n,s=0;for(n=1; smain( )(int n,s=0;for(n=1; n5500) break;printf(“%

23、dn ”, n); 求 1/1!+1/2!+.+1/10! (结果保留 10 位小数)程序:#includemain( )int i, n=1; double s=0.0;for(i=1; imain( )int a, i, s;for( a=1; amain( )int i, j;for(i=1; imain( )int i,j;for(i=1;i=1;i-)printf(“n”);for(j=1;jmain( ) int a , b , c ,t;printf ( “Input two integers (0) : “ ) ;scanf ( “%d%d“ , if(a 0 ) c = a

24、% b ;a = b ;b = c ;printf ( “n gys: %d“ , a ) ;printf ( “n gbs: %d“ , t/a ) ; 习题 61. 选择题:(1)B (2) () B ()B ()C ()D ()A ()C ()B (10)D ( 1)D (12)B2. 读程序:(1)2322 (2)a11:8 3. 程序填空:(1) a8=data; k=0 temp=ak; kmain( )float xscj6=90,85,92,77,80,62,ave,sum=0;int i=0;while (iave)printf(“%0.1f “,xscji); (2)#in

25、clude #define N 10main()int i,j,t,aN,k; for(i=0;iaj)k=j; if(k!=i) t=ai;ai=ak;ak=t;printf(“n“);for(i=0;imain( )int j,k,a34;printf(“n Input array a:“);for (j=0;jmax) max=aij; m2=i;n2=j; printf(“min=a%d%d:%5dn“,m1,n1,am1n1);printf(“max=a%d%d:%5dn“,m2,n2,am2n2);printf(“n“); ()#includevoid main( )int i,j

26、;int d44= 1,2,3,4,5,6,7,8,4,3,2,1,1,2,3,4;for(i=0;i=i) printf(“%6d“,dij);else printf(“%6c“, );(6)#include #define M 15#define N 40main() int aM,bM,cN,i,j,k;gets(a); gets(b);printf(“a=%s“,a); printf(“b=%s“,b);printf(“n“);for (i=0;ai!=0;i+) ci=ai; printf(“c=%s“, c);printf(“%d“,i);printf(“n“);for (j=i;

27、bj-i!=0;j+) cj=bj-i; printf(“c=%s“,c);printf(“n“);for (k=0;k#include“string.h“main()int i,count=0;char str40;printf(“inputs str1:“);gets(str);for(i=0;stri!=0;i+)if( stri=ai+;printf(“%d“,count);(8)#include#include“string.h“main()int i,max;char str1020,m20;printf(“inputs str:n“);for(i=0;i #include int

28、 Is_prime(int i) int j = 0; for(j = 2; j void shuixian(int s)int a,b,c,sum;for (sum=101;sumdouble pi( )double s=0.0,t=1.0;int n;for(n=1;t1e-4;n+)s=s+t;t=n*t/(2*n+1);return (2*s);main( )printf(“npi=%lf“,pi( );(4)#include#includetj(char s ,int t )int i; for (i=0; si!=0; i+)if (si=0 /*min 表示最小公倍数, max

29、表示最大公约数 */ scanf(“%d,%d“, max=m*n; while(r=mn ) m=n; n=r; min=r; max=max/r; (7)#include void convert(int n) int i; if(i=n/10)!=0) convert(i); putchar(n%10+0); main() int number; printf(“nInput an interger:“); scanf(“%d“, printf(“Output:“); if(number#include“string.h“fact(int n) int f=0;if(n#define N

30、 10void paixu(int a )int i,j,temp;for(i=0;iaj+1)/冒泡排序法temp=aj+1;aj+1=aj;aj=temp;void main() int i,aN;printf(“n 输入 10 个数:n“);for(i=0;i#include #define N 5struct personchar name10, address20, telephone20;main()struct person p1, pN=“刘一“,“ 武汉“,“027-11111111“,“张而“,“ 武汉“,“027-22222222“,“赵散“,“ 武汉“,“027-333

31、33333“,“李思“,“ 武汉“,“027-44444444“,“朝地“,“ 武汉“,“027-55555555“;char name10;int i, j;printf(“请输入人名:“);scanf(“%s“, name);for (i=0;i=N) printf(“该记录不存在!n“);2. 用结构体数组实现:输入 10 个学生的考试成绩(包括姓名、数学成绩、计算机成绩、英语成绩和总分) ,总分由程序自动计算。编写 fsort()函数实现按总分从高到低的排序,并输出排序后的学生成绩信息。#include #define N 10typedef struct _scorechar nam

32、e10;int math, computer, english;int total; SCORE;void fsort(SCORE s )int i, j, k;SCORE temp;for (i=0; inum, p-name, /建立新结点,并初始化if(p-num = 0) break; /学号为 0 时,终止循环elsep2 = head; if(head = NULL) head = p; head-next = NULL; /原表为空时插入为头结点else while(p-num p2-num) p2 = p2-next; /p1,p2 各后移一个结点if(p-num num) /

33、在 p1 与 p2 之间插入新结点if(head = p2) head = p;else p1-next = p;p-next = p2;else p2-next = p; p-next = NULL; /新结点插入为尾结点n+; /表长加 1while(1);free(p);return head; /返回链表头指针4. 在第 3 题的基础上,编写一个函数,查找特定学生的信息,并输出查找结果。函数如下:void search_stu(struct stu_node *head, int num) /查找学号为 num 的记录信息struct stu_node *p;p = head; if(

34、head = NULL)printf(“空表,无记录!n“);return;doif(num = p-num)printf(“n 学号 姓名 成绩n“);printf(“%4d %s %dn“, p-num, p-name, p-score); break;else p = p-next; while(p != NULL);if(p = NULL) printf(“该表中无此记录!n“);5. 有一个单向链表 old(结点信息为姓名、基本工资) ,编写一个函数将 old 复制到一个新链表 new 上。函数如下:struct empl_node char name20;float jbgz;struct empl_node * next;int new_n=0; /new 表的表长void copy_emp(struct empl_node *old, struct empl_node *new) struct empl_node *last, *p, *s;p = old; new = last = NULL; /last 是 new 表的表尾指针if(old = NULL)

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报