c程序设计教程习题参考答案_第1页
c程序设计教程习题参考答案_第2页
c程序设计教程习题参考答案_第3页
c程序设计教程习题参考答案_第4页
c程序设计教程习题参考答案_第5页
已阅读5页,还剩15页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言程序设计教程习题参考答案祝胜林 主编华南理工大学出版社【习题1】1【习题2】2【习题3】3【习题4】5【习题5】7【习题6】9【习题7】11【习题8】13【习题9】14【习题10】1519 / 20【习题1】一、简答题(在课本中寻找答案,略)1.1 C程序的基本结构包括哪些内容?1.2 如何定义标识符?1.3 输入格式、输出格式的组成包括哪些内容?1.4 C语言函数分为哪两类?1.5 计算表达式的值应该考虑哪些方面?1.6 上机调试程序的步骤如何?二、判断并改错1.7 C程序执行的入口是main()函数,所以main函数必须放在程序的开头。错误:main函数可以放在程序的任何位置。并不限

2、定在程序的开头。1.8 定义一个函数包括数据说明部分和执行语句部分,两者可以交叉出现。错误:不可以交叉出现,数据说明部分在执行语句部分的前面。1.9 编辑与编译不是一回事。错误:不是一回事。编辑完成源程序的输入和修改;编译是对源程序进行语法检查,如果无语法错误,则生成目标程序。1.10 scanf("%d,%d",&x,&y);的正确输入格式:3,4<回车>。正确1.11 注释内容太多会影响程序的执行效率。 错误:不会影响程序的执行效率。因为在编译时,编译系统将注释内容删除或用空格代替,所以注释内容不会编译到目标程序中。1.12 所有的数学公式可

3、以直接出现在源程序中。错误:数学公式需要转换成C语言能够接受的公式才能出现在源程序中。三、编程题1.13 在屏幕上输出自己名字的拼音。提示:中文名字叫“张三”,对应的拼音为“Zhang San”,输出用printf()函数。1.14 输入圆的半径,求圆的周长,并将结果保留两位小数输出到屏幕上。提示:定义圆的半径r,圆的周长:2*3.14*r,输出结果保留2位小数可以用%.2f1.15 输入两个整数,输出其中最大者。提示:模仿例1.31.16 输入三个整数,输出其中最小者。提示: min(min(a,b),c); 【习题2】一、简答题(在课本中寻找答案,略)2.1 常量与变量的区别?2.2 C语

4、言中的标识符的定义规则?2.3 变量为什么要“先定义,后使用”?2.4 字符常量'a'与字符串常量"a"有何区别?2.5 大小写字母转换的规则是什么?2.6 变量的具有哪三种属性?二、单项选择题2.7C语言中,int型数据在内存中的存储形式是(D)。A)ASCII码 B)原码 C)反码 D)补码2.8下面四个选项中,均是不合法的用户标识符的选项是(C)。)BA 、x_0、do)float、1a0、_Y)x-y、goto、123)_123、tmp、CHAR2.9下列选项中不正确的常数的选项是(D)。)0x12F )-1.23E-2 )12.0 )03882.1

5、0下面正确的字符常量是(B)。)"a" )'' )"n" )"376"2.11下面正确的字符串常量是(C)。)'a' )'376' )"n" )3762.12表达式'A'+4*25.0-'b'的正确结果是(B)。)67 )67.0 )不确定 )67L2.13执行printf("%x",100);后的输出结果是(C)。)100 )0x100 )0X64 )642.14int型的-1在内存中的存储形式是(A)。)1111

6、 1111 1111 1111)0000 0000 0000 0001)1111 1111 1111 1110)1000 0000 0000 00012.15存储字符串"'abc376"需要的字节数是(D)。)11 )13 )6 )7【习题3】一、计算题3.1 2.8+7%3*11%2/4 (答案:2.8)3.2 5/2+5.0/2+7%6 (答案:5.5)3.3 a=12,a*=2+3 (答案:a=60)3.4 a=3,b=4,c=5,a+b>c&&b= =c (答案:0)3.5 3>5?3:5<8?25:40 (答案:25)3.

7、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设int b=7;float a=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*8 B)8*x*y/b/c C)8*x*y/b*c D)x*y/c/b*83.9有如下类型说明:int k,a,b;unsigned long w=8;double x=2.9则以下不符合C语言语

8、法的表达式是(A)。)x%(-3) )w*=-2)k=(a=6,b=4,a-b) )a*=a+=a-=(b=4)*(a=3)3.10有如下类型说明: float n; int m; 则以下能实现将n中的数值保留小数点后两位,第三位四舍五入的表达式是(B)。)n=(n*100+0.5)/100.0 )m=n*100+0.5,n=m/100.0)n=n*100+0.5/100.0 )n=(n/100+0.5)*100.03.11设k=7,x=12;则下列表达式值为3的是(D)。)x%=(k%=5) )x%=(k-k%5))x%=k-k%5 )(x%=k)-(k%=5)3.12已知m=48,ch=&

9、#39;a',n=0;则表达式(m>=n&&ch<'b'&&!n)的值是(B)。)0 )1 )真 )非03.13下面哪个式子在b为奇数时结果为假(C)。)a%2=1 )!(a%2=0) )!(a%2) )a%23.13执行printf("%f",(x=3,y=5,x>y?1:1.5);后的输出结果是(D)。)语法错误 )1 )1.5 )1.5000003.14能表示条件0x100的表达式是(D)。)0<=x<=100 )x>=0,x<=100)0x100 )x>=0&am

10、p;&x<=1003.15判断char型变量ch为数字的正确表达式是(B)。)ch>="0"&&ch<="9" )ch>='0'&&ch<='9')'0'ch'9' )ch>='0'|ch<='9'三、编程题(应用条件运算)3.16 输入一个整型成绩x,如果大于等于60分,输出“pass”,否则输出“fail”。提示:printf("%s",x>60?&

11、quot;pass":"fail");3.17输入一个年份y,如果是闰年,输出“y is a leap year”,否则输出“y is not a leap year.”提示:printf("%d is %s",y%4=0&&y%100!=0|y%400=0?"a leap year.":"not a leap year.");3.18输入三条边a,b,c,如果它们能构成一个三角形,输出“Yes”,否则输出“No”。提示:printf("%s",a+b>c&

12、;&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<y?x:y)<z?(x<y?x:y):z;mid0=x+y+z-max0-min0;3.20输入一个平面上的点坐标,判断它是否落在圆心(0,0),半径为1的圆内,如果在圆内,输出“Yes”,否则输出“No”。提示:分别用x,y代表平面上一个

13、点。printf("%s",x*x+y*y<=0?"Yes":"No");【习题4】以下的编程题目要求首先画出程序的传统流程图或N-S流程图,再编写程序代码。上机实验时再输入到计算机中进行调试,并将调试过程中出现的问题和测试情况记录下来。(流程图请读者自己参考课本自己画,略)4.1编程实现,输入一个整数,判断它是否为偶数,并显示相应的信息。提示:x代表输入的整数,if(x%2=0) printf("neven");else printf("nodd");4.2 编程实现,输入一个平面上的点

14、,判断它是否落在单位圆上,并显示相应的信息。提示:x,y代表平面坐标,if(x*x+y*y=1) printf("nYes");else printf("nNo");4.3 编程实现,输入一个成绩等级(A-E),显示相应的百分制成绩段。 A: 90-100 B: 80-89 C: 70-79 D: 60-69 E: <60提示:char grade; if(grade='A') printf("n90-100"); else if(grade='B') printf("n80-89&qu

15、ot;); .4.4 写出下面程序的运行结果: #include<stdio.h> main() int a=-1,b=1,c=5; switch(a>0) case 1:switch(b-2<0) case 1:printf("&");break; case 2:printf("*");break; case 0:switch(c= =5) case 0:printf("!");break; case 1:printf("#");break; default:printf(&quo

16、t;%"); default:printf("");运行结果:&#4.5 将以下语句改写成switch语句。 if(t>0)&&(t<=10) if(t>=3)&&(t<=6) x=2; else if(t>1)|(t>8) x=3; else x=1; else x=0;提示:int t; if(t<=0|t>10) c=0; else c=t;switch(t) case 0: x=0;break; case 1: case 2: x=3; case 3:case 4:ca

17、se 5: case 6: x=2; case 7:case 8: case 9: x=3; case 10: x=2; 4.7 编程实现一个具有简单四则运算功能的计算器。提示:参照例4.18,随机产生3个数,其中一个数用来判断是哪种运算。4.8 编程实现,输入一行字符,将其中的数字字符对应的整数值加起来并输出结果。如: a45b8&*3 则是4+5+8+3,结果为20。提示:char c; int sum=0;while(c=getchar()!='n') if(c>='0'&&c<='9') sum=sum

18、+c-'0'4.9 编程实现,求的值。提示:先计算n!,再在计算阶乘的外面套上一层循环。注意:20!是一个很大的值,float s=1;int i;例如:计算6!:for(i=1;i<=6;i+) s=s*i;4.10 编程实现,找出1000之内的所有完数,并按下面格式输出其因子: 6 its factors are 1,2,3, 所谓“完数”是指一个数如果恰好等于它的因子之和,因子是指能够整除该数的数。提示:先判断数是否为完数,如果是再考虑输出因子。以6为例输出因子: for(i=1;i<6;i+) if(6%i=0) printf("%d,"

19、,i);4.11 编程实现,计算序列的前20项之和, ,.提示:这是一个累加式,每项是一个分式,用a、b分别表示分子、分母。注意:如果a、b都是整数,则是整除。float sum=0,a=2,b=1; int i;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 编程实

20、现,把从键盘输入的金额数(以圆为单位)按人民币面额划分,然后显示支付该金额的各种面额人民币的数量。提示:譬如:123.58元可以表示100元:1张;20元:1张;2元:1张;1元:1张;5角:1张;5分:1枚;2分:1枚;1分:1枚。为了简单可以只完成整数部分转换,即输入的金额数为整数。4.14 编程实现,使用循环结构打印以下图案。 * * * * * * * * * * * * * * * * * * * * * * * * *提示:输出时,本图案要按向上三角形和向下三角形进行输出。每行输出中包括空格输出,*号输出。输出空格和*号个数要与行循环控制变量关联起来。4.15 编程实现,以菜单方式

21、实现猜数游戏系统。(功能自己设定)提示:模仿例4.14和例4.18完成。功能可以包括猜数范围,人数等设置。4.16 编程实现,以菜单方式实现四则运算辅助教学系统。提示:随机产生两个操作数和运算符+、-、*、/,由使用者输入一个数,判断计算结果与输入的数是否相等,如果相等,表示正确,否则是错误的。【习题5】一、 填空题5.1 若有定义int a35;则排列在数组中的第9个元素是( a13 )。5.2 strlen("How are youn")的值是( 12 )。5.3 C语言中字符串结束的标志是( '0' )。5.4 写出一个名为s的单精度实型一维数组,长度

22、是6,所有元素初值均为0,其数组定义语句是(float s6=0; )。5.5 strcmp("how","How")的值是(32 或>0 )。二、 选择题5.6 若有int s4=1,2,3,4;,则ss0+2*s2-s3的值是( D ) A.1B.2C.3D.45.7 对数组的描述正确的是( B )。 A数组一旦定义其大小是固定的,但数组元素的类型可以不同。 B数组一旦定义其大小是固定的,但数组元素的类型必须相同。 C数组一旦定义其大小是可变的,但数组元素的类型可以不同。 D数组一旦定义其大小是可变的,但数组元素的类型必须相同。5.8 对字符串

23、"Boy"进行完整赋值的操作是( B )。 Achar s3 = 'B','o','y' B. char s = "Boy" Cchar s3 = "Boy"D.char s3; s="Boy"5.9在c语言中引用数组元素时,其数组下标的数据类型允许是( C)。 A整型常量 B.整型表达式 C整型常量或整型表达式D.任何类型的表达式5.10对以下说明语句的正确理解是( B )。 int a10=6,7,8,9,10; A将5个初值依次赋给a1至a5 B将5个初值依次赋

24、给a0至a4 C将5个初值依次赋给a6至a10 D因为数组长度与初值的个数不相同,所以此语句不正确三、看程序写结果5.11main()int a33 = 1,0,2, 2,2,0,2, c33,i,j; for(i=0; i<3; i+) for(j=0; j<3; j+) cij = aaijaji; printf("%5d",cij);printf("n");运行结果为: 2 2 0 0 0 2 2 0 1 5.12当运行以下程序时,从键盘输入:Ah2MA A3ha,请写出输出结果。main() char s80, c='a

25、9; int i=0; scanf("%s",s); while(si+!='0') if(si = c) si=si-32; else if(si=c-32) si=si+32; puts(s); 运行结果为:AH2Ma四、编程题5.13 用数组方法定义一个矩阵,求其转置矩阵。提示:已知a32,转置后的结果存放在b23; 则bji=aij;5.15 从键盘输入9个不同的整数,组成三行三列的二元数组,找出每一列中的最大元素,并输出其行、列下标。提示:已知a33,max,row,col分别用来存放一列的最大值,行下标和列下标。5.15利用一个二维数组,打印出以

26、下杨辉三角形,要求打印出10行。11112113311464115101051 提示:定义一个10行10列的二维数组,并且通过两重循环对第1列所有元素赋值1,主对角线也赋值。根据aij=ai-1j+ai-1j-1求出其它元素的值。5.16 从键盘上输入一串字符(长度小于50个字符),找出其中最前面的一个X和最后面的一个X之间的子串,并输出子串的长度。提示:定义一个长度为81的字符数组,从左边查找第一字符'X'的下标,从右边查找第一个字符'X'的下标。5.17 矩阵A是一个3×3的矩阵,B是一个3×2的矩阵,编程求C=A´B。提示:定

27、义一个3X2的数组c32,该数组的元素值由A数组的一行元素分别与B的一列元素相乘得到。譬如:c00=a00*b00+a01*b10+a02*b20。5.18 把30个学生的学号和两门课程的成绩输入到一个二维数组中,求出的每个学生的两门课程的总成绩也放于此数组中,请按学生总分的高低打印出成绩单(包括学号、两门课程成绩和总分)。提示:定义一个30行4列的数组。为了先快速测试算法是否正确?可以定义一个3行4列的数组,并且通过赋初始值,减少调试程序时反复输入数据的麻烦,算法调试成功后在加上输入数据部分。实现从高到低打印出成绩可以通过排序(降序);也可以通过另外定义1个一维数组作为索引,再通过索引打印成

28、绩。5.19 不用现有的函数求计算字符串长度的程序。提示:通过循环从前到后计算字符个数,遇到字符串结束标志'0'结束。5.20 从键盘上输入一串字符,将其逆向显示。提示:首先计算字符串的长度,在从右边逐一显示字符,直到下标等于0为止。5.21 找出一个二位数组中的鞍点的位置,即该位置上的元素在该行上最大,在该列上最小。如果有,输出其所在的行、列号,如果没有,则输出提示信息。提示:先找出行的最大元素,根据列下标找出列的最大元素。5.22 从键盘上输入一串字符,将字符串中的所有A去掉后组成新的字符串,并将两字符串输出。提示:简单的方法是通过定义两个一维数组,逐个读出原字符串的字符,

29、如果不为'A',则存入目的数组。当然也可以只用一个一维数组实现,通过两个下标指示来实现。【习题6】一、 填空题6.1 C语言程序执行的开始处是 main函数 。6.2 C程序中的一个函数由两部分组成,即 声明部分 和 执行部分 。6.3为了保证被调用函数不返回任何值,其函数定义的类型应为 void 。6.4若一个局部变量的存储类型是static,则该变量的值在 程序执行完成 时被释放。6.5预处理命令#include的作用是 文件包含 。6.6定义一个宏,功能是判断两个数是否相等,相等为1,不等为0。 #define EQU(a,b) (a)=(b)?1:0 6.7 变量的存储

30、类别有 自动型 、 静态型 、 寄存器型 、和 外部类型 共4种,它们分别用 auto 、 static 、 register 、 extern 标识。二、 选择题6.8下述函数定义形式正确的是(C)。A. int f(int x; int y)B. int f(int x,y)C. int f(int x, int y)D. int f(x,y: int)6.9 关于函数参数,说法正确的是(A)。A. 实参与其对应的形参各自占用独立的内存单元B. 实参与其对应的形参共同占用一个内存单元C. 只有当实参和形参同名时才占用同一个内存单元D. 形参是虚拟的,不占用内存单元6.10 用数组名作为函数

31、的实参时,传递给形参的是(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若定义的函

32、数没有参数,则函数名后的圆括号可以省略。(´)6.15函数的函数体可以是空语句(Ö)。6.16只有main函数才能调用其他函数。(Ö)6.17return语句中表达式的类型必须与函数定义的类型一致。(´)6.18函数的实参和形参可以是相同的名字。(Ö)6.19函数调用中,形参与实参的类型和个数必须保持一致。(Ö)6.20外部类型的变量只能定义一次,但可在不同地方声明多次。(Ö)6.21外部类型的变量作用范围大,编程中应多用外部变量。(´)6.22预处理命令行必须以开头,且最后要用分号结尾。(´)6.23宏

33、命令的处理占用编译时间,而不占用运行时间。(Ö)四、 看程序写结果 6.24int fun(int n)int f=1; f = f*n*2; return(f);main() int i,j; for(i=1; i<=5; i+) printf("%dt", fun(i);程序运行结果:2 4 6 8 106.25int x1=30, x2=40;main()int x3=10,x4=20; sub(x3,x4); sub(x2,x1); printf("x1=%d,x2=%d,x3=%d,x4=%d", x1,x2,x3,x4);su

34、b(int x,int y)int x1=x; x=y; y=x1;程序运行结果:x1=30,x2=40,x3=10,x4=206.26#define A 4#define B(x) A*x/2main()float c, a = 4.5; c=B(a); printf("c=%5.1f", c);程序运行结果:c= 9.0五、 编程题6.25写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。提示:最大公约数可以采用“辗转相除法”,最小公倍数将两数乘积除于最大公约数。“辗转相除法”:设两个数分别用m,n表示且m>

35、;n,临时变量t,t=m%n;m=n;n=t;直到n等于0。6.26有3´3的矩阵A和3´2的矩阵B,编制一个函数,求C=AX´B。提示:参照习题5.17,A,B,C三个数组作为函数参数。 6.27编写一函数,使输入的一个字符串按反序存放,在主函数中输入输出字符串。提示:一维字符数组用来存放字符串,并且将它传递到函数,在函数中通过元素值交换来完成反序存放。 6.28编制一个函数,由参数传入一个字符串,统计此字串中字母、数字、和其他字符的个数,在主函数中输入字符串并显示统计结果。提示:参照例题6.10。 6.29 定义一个宏,实现将两个数互换,并写出程序,输入两个数

36、作为使用参数,并显示结果。提示:带参数宏,swap(a,b,t).6.30编写以下函数:输入职工的姓名和职工号;按职工号由小到大排序,姓名顺序也随之调整;输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。提示:定义一个二维数组来存放职工信息;用数组名作函数的参数传递;通过“起泡算法”或“选择算法”;折半查找法先决条件是数据已经有序。【习题7】1.1 语句int a,*p=&a;的含义是什么? 答:定义整型变量a,和整型指针变量p,并且p指向变量a。1.2 写出下列数组元素的指针法表示。 (1)num3 (2) data42 答:(1)*(num+3)

37、 (2) *(*(data+4)+2)1.3 写出下列数组元素的下标法表示。 (1) *(*(a+1)+2) (2) (*(a+3)4 (3) *(a2+5) 答:(1)a12 (2) a34 (3) a251.4 分析程序,写出程序输出结果。(1) main() int a5=1,2,3,4,5; int *p=&a1; printf("%d",p2); 输出结果:4(2) main() char a="I love China!" char *p=a; p=p+2; printf("%s",p); 输出结果:love Ch

38、ina!(3) main() int a34=1,2,3,4,5,6,7,8,9,10,11,12; int (*pa)4=a; pa+; printf("%d",*(*(pa+1)+2);输出结果:11(4) main() char *str="zhao","qian","sun","li" int i; for (i=0;i<4;i+) printf("%c",stri0); 输出结果:zqsl(5) void sub(int x,int y,int *z) *z=

39、y-x; main() int a,b,c;sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf("%4d,%4d,%4dn",a,b,c); 输出结果: -5, -12, -7(6) #include <stdio.h> fun(char *s) char *p=s; while (*p) p+; return(p-s);main() char *str="abcd" int i; i=fun(str); printf("%d",i);输出结果:41.5 定

40、义语句int *f(); 和int (*f)();的含义分别是什么?答:int *f();表示函数返回一个整型指针;int (*f)();表示f是函数指针,指向整型函数。1.6 在二维数组中存放有4个学生,5门课程的成绩,用指针编程实现:(1)求出每门课程的平均成绩。(2)求每个学生的总成绩和平均成绩。(3)在屏幕上列出各课成绩在85分以上的学生名单。(4)在屏幕上列出补考通知单。提示:(1)(2)(3)略,(4)根据成绩小于60分,由于有5门课程的成绩,所以需要使用else if结构。1.7 输入一个字符串,内有数字和非数字字符,例如:a345dsaf412 x?371+89tah74编程将

41、其中连续的数字作为一个证书,一次存放到一个数组d中,例如:345放在d0,412放在d1,.。统计共有多少个证书,并输出这些整数。提示:从字符串中提取"345":t=ch-'0't=t*10+(ch-'0');t=t*10+(ch-'0');t='3'-'0'=3;t=3*10+('4'-'0')=34;t=34*10+('5'-'0')=3451.8 编写把十六进制数字字符串变换成整数的函数: int htoi(char *s)。

42、提示:同1.7 1.9 编写把十进制整数变换成二进制数字字符串的函数: char *itob(int n)。提示:同1.7 1.10 用字符指针实现字符串拷贝功能,不能使用库函数。提示:定义两个字符数组a,b,复制操作bi=ai;1.11 用字符指针实现字符串连接功能,不能使用库函数。提示:定义两个字符数组a,b,先将下标定位到a的末尾'0',在将b的元素赋值给a的对应元素,注意:别忘了添加字符串结束标志'0'。1.12 用指向指针的指针的方法对5个字符串排序并输出。提示:一个指针数组和一个指向指针的指针变量。【习题8】8.1 定义复数结构体,并写出复数的加、减

43、、乘、除、的计算函数。提示:复数包括两个部分:实部和虚部。8.2 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天。注意闰年问题。提示:计算该日是本年中的第几天,是从本年1月1日起。8.3 有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学生数据,要求在屏幕上显示出3门课程的平均成绩,以及最高分数的学生的数据(包括学号、姓名、3门课程成绩、平均分)。提示:定义结构体数组。最高分数是指每个学生3门课程的平均分最高。8.4 编写求链表长度的函数。提示:从链表指针头往表尾移动计算结点的个数。8.5 已有两个链表a、b,每个链表的结点包括学号、成绩。要求把两个链表合

44、并,按学号升序排列。提示:可以定义一个新的链表,先从链表a,再从链表b中取出结点,依次按学号升序插入到新的链表中。8.6 利用8.8节中的struct card结构编写一个程序实现5个人员数据输入和在屏幕上显示的功能:如果job项为't',则在position项为教师的职称(助教、讲师、副教授、教授);如果job项为's',则class项为学生的班级号,如501。提示:在结构体中嵌入共用体position,根据job成员确定position的具体值。8.7 口袋中有红、黄、兰3中颜色的球若干个。每次从口袋中取出1个球,根据颜色的不同,输入相应的颜色英文字符串。要

45、求用枚举变量实现。提示:参照例8.8。【习题9】一、简答题9.1文件分为哪些类型?各有何特点?答:文件分为二进制文件和文本(ASCII码)文件。二进制文件在内存和外存的形式是一样的,无需进行数据转换,用记事本打开该文件,看到得可能是乱码;文本(ASCII码)文件在内存是按二进制形式存在,在外存是以文本(ASCII码)形式存在,存在数据的转换,用记事本打开该文件,可以读懂其中的内容。9.2什么是文件类型指针?什么是文件位置指针?各有何用途?答:文件类型指针就是用FILE结构体定义的指针变量。文件位置指针是文件存取操作的位置。前者指向被打开的文件;后者在文件存取操作后移动到下一个存取位置。9.3什么是设备文件?常用的设备文件有哪些?答:在操作系统中,设备也被看作一个文件进行管理,即设备文件。常用的设备文件有:stdin,stdout,PRN等。二、选择题9.4 若想对文本文件只进行读操作,打开此文件的方式为(A)。A"r"B."W"C."a"D."r+"9.5如果要打开C盘file文件夹下的abc.dat文件,fopen函数中第一个参数应为(D )。A. c:fileabc.datB. c:fileabc.datC. "c:fileabc.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论