《C语言》答案
更新时间:2024-01-31 23:13:01 阅读量: 教育文库 文档下载
《C语言程序设计教程》习题参考答案
祝胜林 主编 华南理工大学出版社
【习题1】 ................................................................................................................. 1 【习题2】 ................................................................................................................. 2 【习题3】 ................................................................................................................. 3 【习题4】 ................................................................................................................. 5 【习题5】 ................................................................................................................. 8 【习题6】 ............................................................................................................... 11 【习题7】 ............................................................................................................... 14 【习题8】 ............................................................................................................... 17 【习题9】 ............................................................................................................... 17 【习题10】 ............................................................................................................. 20
1
【习题1】
一、简答题(在课本中寻找答案,略) 1.1 C程序的基本结构包括哪些内容? 1.2 如何定义标识符?
1.3 输入格式、输出格式的组成包括哪些内容? 1.4 C语言函数分为哪两类?
1.5 计算表达式的值应该考虑哪些方面? 1.6 上机调试程序的步骤如何? 二、判断并改错
1.7 C程序执行的入口是main()函数,所以main函数必须放在程序的开头。
错误:main函数可以放在程序的任何位置。并不限定在程序的开头。 1.8 定义一个函数包括数据说明部分和执行语句部分,两者可以交叉出现。
错误:不可以交叉出现,数据说明部分在执行语句部分的前面。 1.9 编辑与编译不是一回事。
错误:不是一回事。编辑完成源程序的输入和修改;编译是对源程序进行语法检查,如果无语法错误,则生成目标程序。
1.10 scanf(\的正确输入格式:3,4<回车>。
正确
1.11 注释内容太多会影响程序的执行效率。
错误:不会影响程序的执行效率。因为在编译时,编译系统将注释内容删除或用空格代替,所以注释内容不会编译到目标程序中。 1.12 所有的数学公式可以直接出现在源程序中。
错误:数学公式需要转换成C语言能够接受的公式才能出现在源程序中。 三、编程题
1.13 在屏幕上输出自己名字的拼音。
提示:中文名字叫?张三?,对应的拼音为?Zhang San?,输出用printf()函数。
1.14 输入圆的半径,求圆的周长,并将结果保留两位小数输出到屏幕上。
提示:定义圆的半径r,圆的周长:2*3.14*r,输出结果保留2位小数可以用%.2f
1.15 输入两个整数,输出其中最大者。
提示:模仿例1.3
1.16 输入三个整数,输出其中最小者。
提示: min(min(a,b),c);
1
【习题2】
一、简答题(在课本中寻找答案,略) 2.1 常量与变量的区别?
2.2 C语言中的标识符的定义规则?
2.3 变量为什么要“先定义,后使用”? 2.4 字符常量'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)0x12F B)-1.23E-2 C)12.0 D)0388 2.10 下面正确的字符常量是(B)。
A)\ B)'\\\\' C)\ D)\2.11 下面正确的字符串常量是(C)。
A)'a' B)'376' C)\ D)376 2.12 表达式'A'+4*25.0-'b'的正确结果是(B)。
A)67 B)67.0 C)不确定 D)67L 2.13 执行printf(\后的输出结果是(C)。
A)100 B)0x100 C)0X64 D)64 2.14 int型的-1在内存中的存储形式是(A)。
A)1111 1111 1111 1111 B)0000 0000 0000 0001 C)1111 1111 1111 1110 D)1000 0000 0000 0001
2.15 存储字符串\需要的字节数是(D)。
A)11 B)13 C)6 D)7
2
【习题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.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) 二、单项选择题
8xy3.8 若有代数式,则不正确的C语言表达式是(C)。
bcA)x/b/c*y*8 B)8*x*y/b/c C)8*x*y/b*c D)x*y/c/b*8 3.9 有如下类型说明:
int k,a,b;
unsigned long w=8; double x=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 有如下类型说明: float n; int m;
则以下能实现将n中的数值保留小数点后两位,第三位四舍五入的表达式是(B)。
A)n=(n*100+0.5)/100.0 B)m=n*100+0.5,n=m/100.0 C)n=n*100+0.5/100.0 D)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%5 D)(x%=k)-(k%=5)
3.12 已知m=48,ch='a',n=0;则表达式(m>=n&&ch<'b'&&!n)的值是(B)。
A)0 B)1 C)真 D)非0 3.13 下面哪个式子在b为奇数时结果为假(C)。
A)a%2==1 B)!(a%2==0) C)!(a%2) D)a%2 3.13 执行printf(\后的输出结果是(D)。
A)语法错误 B)1 C)1.5 D)1.500000 3.14 能表示条件0≤x≤100的表达式是(D)。
A)0<=x<=100 B)x>=0,x<=100 C)0≤x≤100 D)x>=0&&x<=100
3.15 判断char型变量ch为数字的正确表达式是(B)。
3
A)ch>=\ B)ch>='0'&&ch<='9' C)'0'≤ch≤'9' D)ch>='0'||ch<='9' 三、编程题(应用条件运算) 3.16 输入一个整型成绩x,如果大于等于60分,输出“pass”,否则输出“fail”。
提示:printf(\
3.17 输入一个年份y,如果是闰年,输出“y is a leap year”,否则输出“y
is not a leap year.”
提示:printf(\is %s\leap year.\
3.18 输入三条边a,b,c,如果它们能构成一个三角形,输出“Yes”,否则输出“No”。
提示:printf(\ 3.19 输入三个数x,y,z,按从小到大的输出结果。
提示:分别用max0,min0代表最大、最小值,mid0表示中间值。 max0=(x>y?x:y)>z?(x>y?x:y):z;max0=(x 如果在圆内,输出“Yes”,否则输出“No”。 提示:分别用x,y代表平面上一个点。 printf(\ 4 【习题4】 以下的编程题目要求首先画出程序的传统流程图或N-S流程图,再编写程序代码。上机实验时再输入到计算机中进行调试,并将调试过程中出现的问题和测试情况记录下来。 (流程图请读者自己参考课本自己画,略) 4.1 编程实现,输入一个整数,判断它是否为偶数,并显示相应的信息。 提示:x代表输入的整数,if(x%2==0) printf(\printf(\ 4.2 编程实现,输入一个平面上的点,判断它是否落在单位圆上,并显示相应的信息。 提示:x,y代表平面坐标,if(x*x+y*y==1) printf(\printf(\ 4.3 编程实现,输入一个成绩等级(A-E),显示相应的百分制成绩段。 A: 90-100 B: 80-89 C: 70-79 D: 60-69 E: <60 提示:char grade; if(grade=='A') printf(\ else if(grade=='B') printf(\ .... 4.4 写出下面程序的运行结果: #include { int a=-1,b=1,c=5; switch(a>0){ case 1:switch(b-2<0){ case 1:printf(\ case 2:printf(\ } case 0:switch(c= =5){ case 0:printf(\ case 1:printf(\ default:printf(\ } default:printf(\ } } 运行结果:@ 4.5 将以下语句改写成switch语句。 if((t>0)&&(t<=10)) if((t>=3)&&(t<=6)) x=2; 5 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:case 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+c-'0'; 4.9 编程实现,求?n!的值。 120提示:先计算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(\4.11 编程实现,计算序列的前20项之和, 23581321 ,,,,,,... 1235813提示:这是一个累加式,每项是一个分式,用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是一个数字。如: 2+22+222+2222+22222(此时n=5),n,a由键盘输入。 提示:这是一个累加式,后1项可以由前一项表示,譬如:第2项可以由第1项表示: 6 第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 编程实现,以菜单方式实现四则运算辅助教学系统。 提示:随机产生两个操作数和运算符+、-、*、/,由使用者输入一个数,判断计算结果与输入的数是否相等,如果相等,表示正确,否则是错误的。 7 【习题5】 一、 填空题 5.1 若有定义int a[3][5];则排列在数组中的第9个元素是( a[1][3] )。 5.2 strlen(\的值是( 12 )。 5.3 C语言中字符串结束的标志是( '\\0' )。 5.4 写出一个名为s的单精度实型一维数组,长度是6,所有元素初值均为0,其数组定义语句是( float s[6]={0}; )。 5.5 strcmp(\的值是( 32 或>0 )。 二、 选择题 5.6 若有int s[4]={1,2,3,4};,则s[s[0]+2*s[2]-s[3]]的值是( D ) A.1 B.2 C.3 D.4 5.7 对数组的描述正确的是( B )。 A.数组一旦定义其大小是固定的,但数组元素的类型可以不同。 B.数组一旦定义其大小是固定的,但数组元素的类型必须相同。 C.数组一旦定义其大小是可变的,但数组元素的类型可以不同。 D.数组一旦定义其大小是可变的,但数组元素的类型必须相同。 5.8 对字符串\进行完整赋值的操作是( B )。 A.char s[3] = {'B','o','y'}; B. char s[] = \ C.char s[3] = {\ D.char s[3]; s=\ 5.9在c语言中引用数组元素时,其数组下标的数据类型允许是( C )。 A.整型常量 B.整型表达式 C.整型常量或整型表达式 D.任何类型的表达式 5.10对以下说明语句的正确理解是( B )。 int a[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() {int a[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(\} } printf(\} 运行结果为: 2 2 0 0 0 2 2 0 1 5.12当运行以下程序时,从键盘输入:Ah2MA A3ha,请写出输出结果。 8 main() { char s[80], c='a'; int i=0; scanf(\ while(s[i++]!='\\0') if(s[i] == c) s[i]=s[i]-32; else if(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=A?B。 提示:定义一个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个一维数组作为索引,再通过索引打印成 9 绩。 5.19 不用现有的函数求计算字符串长度的程序。 提示:通过循环从前到后计算字符个数,遇到字符串结束标志'\\0'结束。 5.20 从键盘上输入一串字符,将其逆向显示。 提示:首先计算字符串的长度,在从右边逐一显示字符,直到下标等于0为止。 5.21 找出一个二位数组中的鞍点的位置,即该位置上的元素在该行上最大,在 该列上最小。如果有,输出其所在的行、列号,如果没有,则输出提示信息。 提示:先找出行的最大元素,根据列下标找出列的最大元素。 5.22 从键盘上输入一串字符,将字符串中的所有A去掉后组成新的字符串,并 将两字符串输出。 提示:简单的方法是通过定义两个一维数组,逐个读出原字符串的字符,如果不为'A',则存入目的数组。当然也可以只用一个一维数组实现,通过两个下标指示来实现。 10 【习题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 变量的存储类别有 自动型 、 静态型 、 寄存器型 、和 外部类型 共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 用数组名作为函数的实参时,传递给形参的是(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. auto B. register C. extern D. static 三、 判断题 6.14若定义的函数没有参数,则函数名后的圆括号可以省略。(?) 6.15函数的函数体可以是空语句(?)。 6.16只有main函数才能调用其他函数。(?) 6.17return语句中表达式的类型必须与函数定义的类型一致。(?) 6.18函数的实参和形参可以是相同的名字。(?) 6.19函数调用中,形参与实参的类型和个数必须保持一致。(?) 6.20外部类型的变量只能定义一次,但可在不同地方声明多次。(?) 6.21外部类型的变量作用范围大,编程中应多用外部变量。(?) 6.22预处理命令行必须以#开头,且最后要用分号结尾。(?) 6.23宏命令的处理占用编译时间,而不占用运行时间。(?) 11 四、 看程序写结果 6.24 int fun(int n) {int f=1; f = f*n*2; return(f); } main() { int i,j; for(i=1; i<=5; i++) printf(\} 程序运行结果:2 4 6 8 10 6.25 int x1=30, x2=40; main() {int x3=10,x4=20; sub(x3,x4); sub(x2,x1); printf(\} sub(int x,int y) {int x1=x; x=y; y=x1; } 程序运行结果:x1=30,x2=40,x3=10,x4=20 6.26 #define A 4 #define B(x) A*x/2 main() {float c, a = 4.5; c=B(a); printf(\} 程序运行结果:c= 9.0 五、 编程题 6.25写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。 提示:最大公约数可以采用?辗转相除法?,最小公倍数将两数乘积除于最大公约数。?辗转相除法?:设两个数分别用m,n表示且m>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三个数组作为函数参数。 12 6.27编写一函数,使输入的一个字符串按反序存放,在主函数中输入输出字符串。 提示:一维字符数组用来存放字符串,并且将它传递到函数,在函数中通过元素值交换来完成反序存放。 6.28编制一个函数,由参数传入一个字符串,统计此字串中字母、数字、和其他字符的个数,在主函数中输入字符串并显示统计结果。 提示:参照例题6.10。 6.29 定义一个宏,实现将两个数互换,并写出程序,输入两个数作为使用参数,并显示结果。 提示:带参数宏,swap(a,b,t).... 6.30编写以下函数:①输入职工的姓名和职工号;②按职工号由小到大排序,姓名顺序也随之调整;③输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。 提示:定义一个二维数组来存放职工信息;用数组名作函数的参数传递;通过?起泡算法?或?选择算法?;折半查找法先决条件是数据已经有序。 13 【习题7】 1.1 语句int a,*p=&a;的含义是什么? 答:定义整型变量a,和整型指针变量p,并且p指向变量a。 1.2 写出下列数组元素的指针法表示。 (1)num[3] (2) data[4][2] 答:(1)*(num+3) (2) *(*(data+4)+2) 1.3 写出下列数组元素的下标法表示。 (1) *(*(a+1)+2) (2) (*(a+3))[4] (3) *(a[2]+5) 答:(1)a[1][2] (2) a[3][4] (3) a[2][5] 1.4 分析程序,写出程序输出结果。 (1) main() { int a[5]={1,2,3,4,5}; int *p=&a[1]; printf(\ } 输出结果:4 (2) main() { char a[]=\ char *p=a; p=p+2; printf(\ } 输出结果:love China! (3) main() { int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*pa)[4]=a; pa++; printf(\} 输出结果:11 (4) main() { char *str[]={\ int i; for (i=0;i<4;i++) printf(\ } 输出结果:zqsl (5) void sub(int x,int y,int *z) { *z=y-x; } main() { int a,b,c; sub(10,5,&a); sub(7,a,&b); 14 sub(a,b,&c); printf(\ } 输出结果: -5, -12, -7 (6) #include while (*p) p++; return(p-s); } main() { char *str=\ int i; i=fun(str); printf(\} 输出结果:4 1.5 定义语句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 编程将其中连续的数字作为一个证书,一次存放到一个数组d中,例如:345放在d[0],412放在d[1],......。统计共有多少个证书,并输出这些整数。 提示:从字符串中提取\: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')=345 1.8 编写把十六进制数字字符串变换成整数的函数: int htoi(char *s)。 提示:同1.7 1.9 编写把十进制整数变换成二进制数字字符串的函数: char *itob(int n)。 提示:同1.7 1.10 用字符指针实现字符串拷贝功能,不能使用库函数。 提示:定义两个字符数组a,b,复制操作b[i]=a[i]; 1.11 用字符指针实现字符串连接功能,不能使用库函数。 提示:定义两个字符数组a,b,先将下标定位到a的末尾'\\0',在将b的元素赋值给a的对应元素,注意:别忘了添加字符串结束标志'\\0'。 1.12 用指向指针的指针的方法对5个字符串排序并输出。 15 提示:一个指针数组和一个指向指针的指针变量。 16 【习题8】 8.1 定义复数结构体,并写出复数的加、减、乘、除、的计算函数。 提示:复数包括两个部分:实部和虚部。 8.2 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天。注意闰年问题。 提示:计算该日是本年中的第几天,是从本年1月1日起。 8.3 有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入 5个学生数据,要求在屏幕上显示出3门课程的平均成绩,以及最高分数的学生的数据(包括学号、姓名、3门课程成绩、平均分)。 提示:定义结构体数组。最高分数是指每个学生3门课程的平均分最高。 8.4 编写求链表长度的函数。 提示:从链表指针头往表尾移动计算结点的个数。 8.5 已有两个链表a、b,每个链表的结点包括学号、成绩。要求把两个链表合 并,按学号升序排列。 提示:可以定义一个新的链表,先从链表a,再从链表b中取出结点,依次按学号升序插入到新的链表中。 8.6 利用8.8节中的struct card结构编写一个程序实现5个人员数据输入和在屏 幕上显示的功能:如果job项为't',则在position项为教师的职称(助教、讲师、副教授、教授);如果job项为's',则class项为学生的班级号,如501。 提示:在结构体中嵌入共用体position,根据job成员确定position的具体值。 8.7 口袋中有红、黄、兰3中颜色的球若干个。每次从口袋中取出1个球,根据 颜色的不同,输入相应的颜色英文字符串。要求用枚举变量实现。 提示:参照例8.8。 17 【习题9】 一、简答题 9.1文件分为哪些类型?各有何特点? 答:文件分为二进制文件和文本(ASCII码)文件。二进制文件在内存和外存的形式是一样的,无需进行数据转换,用记事本打开该文件,看到得可能是乱码;文本(ASCII码)文件在内存是按二进制形式存在,在外存是以文本(ASCII码)形式存在,存在数据的转换,用记事本打开该文件,可以读懂其中的内容。 9.2什么是文件类型指针?什么是文件位置指针?各有何用途? 答:文件类型指针就是用FILE结构体定义的指针变量。文件位置指针是文件存取操作的位置。前者指向被打开的文件;后者在文件存取操作后移动到下一个存取位置。 9.3什么是设备文件?常用的设备文件有哪些? 答:在操作系统中,设备也被看作一个文件进行管理,即设备文件。常用的设备文件有:stdin,stdout,PRN等。 二、选择题 9.4 若想对文本文件只进行读操作,打开此文件的方式为( A)。 A.\ B.\C.\ D.\ 9.5如果要打开C盘file文件夹下的abc.dat文件,fopen函数中第一个参数应为(D )。 A. c:file\\abc.dat B. c:\\file\\abc.dat C. \ D. \ 9.6用(A)函数打开文件,操作完毕后用(C)函数关闭它。 A.fopen B.open C.fclose D.close 三、编程题 9.7 有两个磁盘文件a.dat和b.dat,要求产生一个新的文件c.dat,将b.dat中的 数据追加到a.dat后面,并存入到c.dat中。 提示:设两个磁盘文件为文本文件。以读的方式打开a.dat和b.dat,以写的方式创建c.dat。先将b.dat的数据复制到c.dat,再将a.bat的数据复制到c.dat。 9.8 从键盘输入一些字符,逐个把它们存入磁盘文件test中去,直到输入一个# 为止。 提示:利用fputc函数将字符写入到磁盘文件中。 9.9 读入一个文件,输出其中最长的一行的行号和内容。 提示:以硬回车键'\\n'作为行的结束标志。 9.10 .编写程序将全班同学的姓名、地址和电话号码写到一个文件class.dat中。 提示:学生的信息可以存放到结构体数组,以fwrite函数写数据到文件中。 9.11将9.10题产生的class.dat文件中的数据按姓名从低到高排列输出到显示器 上,并把排了序的数据重新写入到文件class1.dat中。 提示:以fread函数从文件中读入学生的信息,并存放到结构体数组,在数组中进行排序。排序完毕再写入文件中。 9.12 利用9.11题产生的class1.dat文件,编程实现从中直接读取第三个同学的 数据。 提示:参照例9.5 9.13 在9.11题产生的class1.dat文件中插入一个新生的数据,要求插入后的文 18 件数据仍然按姓名顺序排列。 提示:先将数据读入到数组中,插入新的数据后,再写入到文件中。 19 【习题10】 一、编程题: 10.1 绘制y=x2的曲线。其中变量x的变化范围在-2~2之间,变化步长为0.01。 提示:屏幕的左上角是图形系统的绝对坐标原点(0,0),向右表示x坐标,向下表示y坐标。为了正确显示图形,需要另外定义相对坐标原点(0,0),譬如以绝对坐标(300,200)表示相对坐标的原点。 10.2 改进例10.2,在模拟实时时钟合适的位置加上3、6、9、12的时钟数字。 提示:参照例10.2,在第15行处恰当添加数字输出的程序。 10.3 编程实现图形菜单。菜单的功能自定。 提示:菜单用图形方式显示,菜单选择时确定当前位置,在根据键盘按键重画菜单。 10.4 BIOS功能调用INT 10H的09H号功能用于显示彩色字符,要求使用的寄存器如下: 调用前: AH=09H BH=当前显示页(图形方式下为0) AL=要显示字符的ASCII码 BL=字符及其背景颜色 CX=字符显示次数 利用系统调用函数编制彩色字符显示函数:void write_char(int asc,int atr)。其中参数asc为要显示字符的ASCII代码,art为字符颜色。该函数每次显示一个字符。 提示:参照例10.5 10.5 有如下C语言程序: main() { int x, y, z, max; int get_max(intx,int y,int z); printf(“please input x,y,z=”); scanf(“%d%d%d”,&x,&y,&z); max=get_max(x,y,z); printf(“max=%d”,max); getch(); } 程序中get_max函数的作用是求三个整数中最大值。请用汇编语言实现函数get_max,并将C语言程序和汇编子程序连接,生成一个可执行文件。 提示:参照例10.13 20
正在阅读:
《C语言》答案01-31
不肯长大的小燕子作文400字06-28
田家煤矿地质类型划分报告05-10
安全技术模拟试题 第二套06-04
配送中心的作业流程及管理思路汇总12-26
第4章 建设项目投资决策阶段工程造价管理(张胡ok) - 图文11-22
评标工作纪律承诺书10-07
公路工程施工监理合同专用条件(一)04-18
执业医师个人述职报告(精选多篇)09-27
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 答案
- 语言
- 期权习题库
- 关于加强初信初访办理工作的意见
- 道路交通事故现场安全防护规范(高速路部分)
- MarkEzd.dll的使用说明
- 2017年高分一号高分二号等国产卫星定标系数
- 中南大学网络教育《经济数学基础(专科)》在线作业一及参考答案
- 雨季施工方案 上报
- 2017超星尔雅慕课大学生创新创业基础答案
- 《20以内的进位加法复习课》教学设计人教版一年级小学数学上册
- 免维护直流系统蓄电池充放电测试报告 - 图文
- 历代诗人咏吉安城诗词选
- 《君主论》 - 善良的独裁者,强权的合理性?
- 2009 - 2012走美杯试题及答案(经典!!!) - 图文
- 追求作文教育的智慧
- 4S店车间安全生产现场管理制度
- 分类修改病句
- 采煤工D卷
- 八年级英语上册第五周周测
- 书法常用词句和繁体字
- 重庆市万州三中2019届高三上学期第一次月考地理试卷