《C语言程序设计教程》习题参考答案由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言程序设计习题集”。
《C语言程序设计教程》习题参考答案
默认分类 2007-09-10 12:38:44 阅读6618 评论13 字号:大中小 订阅
【习题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(“%d,%d”,&x,&y);的正确输入格式: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);【习题2】
一、简答题(在课本中寻找答案,略)2.1 常量与变量的区别?
2.2 C语言中的标识符的定义规则? 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)0x12F B)-1.23E-2 C)12.0 D)0388 2.10 下面正确的字符常量是(B)。A)“a” B)'' C)“n” D)“376” 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(“%x”,100);后的输出结果是(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 存储字符串“'abc376”需要的字节数是(D)。A)11 B)13 C)6 D)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:5b)&&(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*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
A)a%2==1 B)!(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)1 C)1.5 D)1.500000 3.14 能表示条件0≤x≤100的表达式是(D)。A)0=0,x=0&&x=“0”&&ch='0'&&ch='0'||ch
三、编程题(应用条件运算)
3.16 输入一个整型成绩x,3.17 如果大于等于60分,3.18 输出“pa”,3.19 否则输出“fail”。提示:printf(“%s”,x>60?“pa”:“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&&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代表平面上一个点。printf(“%s”,x*x+y*y
以下的编程题目要求首先画出程序的传统流程图或N-S流程图,再编写程序代码。上机实验时再输入到计算机中进行调试,并将调试过程中出现的问题和测试情况记录下来。(流程图请读者自己参考课本自己画,略)4.1 编程实现,输入一个整数,判断它是否为偶数,并显示相应的信息。提示:x代表输入的整数,if(x%2==0)printf(“neven”);else printf(“nodd”);4.2 编程实现,输入一个平面上的点,判断它是否落在单位圆上,并显示相应的信息。提示: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:
#include main(){ int a=-1,b=1,c=5;switch(a>0){ case 1:switch(b-2
if((t>0)&&(t=3)&&(t1)||(t>8))x=3;else x=1;else x=0;提示:int t;if(t10)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
提示:先计算n!,再在计算阶乘的外面套上一层循环。注意:20!是一个很大的值,float s=1;int i;例如:计算6!:
for(i=1;i
its factors are 1,2,3,所谓“完数”是指一个数如果恰好等于它的因子之和,因子是指能够整除该数的数。提示:先判断数是否为完数,如果是再考虑输出因子。以6为例输出因子:
for(i=1;i
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 若有定义int a[3][5];则排列在数组中的第9个元素是(a[1][3])。5.2 strlen(“How are youn”)的值是(12)。5.3 C语言中字符串结束的标志是(' ')。
5.4 写出一个名为s的单精度实型一维数组,长度是6,所有元素初值均为0,其数组定义语句是(float s[6]={0};)。
5.5 strcmp(“how”,“How”)的值是(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 对字符串“Boy”进行完整赋值的操作是(B)。
A.char s[3] = {'B','o','y'};B.char s[] = “Boy”;C.char s[3] = {“Boy”};D.char s[3];s=“Boy”;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
c[i][j] = a[a[i][j]][a[j][i]];printf(“%5d”,c[i][j]);} } printf(“n”);} 运行结果为: 2 2 0 0 0 2 2 0 1
5.12当运行以下程序时,从键盘输入:Ah2MA A3ha,请写出输出结果。main(){ char s[80], c='a';int i=0;scanf(“%s”,s);while(s[i++]!=' ')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行。111
1
1
510 10
∶
∶
提示:定义一个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个一维数组作为索引,再通过索引打印成绩。5.19 不用现有的函数求计算字符串长度的程序。
提示:通过循环从前到后计算字符个数,遇到字符串结束标志' '结束。5.20 从键盘上输入一串字符,将其逆向显示。
提示:首先计算字符串的长度,在从右边逐一显示字符,直到下标等于0为止。
5.21 找出一个二位数组中的鞍点的位置,即该位置上的元素在该行上最大,在该列上最小。如果有,输出其所在的行、列号,如果没有,则输出提示信息。
提示:先找出行的最大元素,根据列下标找出列的最大元素。
5.22 从键盘上输入一串字符,将字符串中的所有A去掉后组成新的字符串,并将两字符串输出。提示:简单的方法是通过定义两个一维数组,逐个读出原字符串的字符,如果不为'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 变量的存储类别有 自动型、静态型、寄存器型、和 外部类型 共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宏命令的处理占用编译时间,而不占用运行时间。(Ö)看程序写结果
6.24
int fun(int n){int f=1;f = f*n*2;return(f);} main(){ int i,j;for(i=1;i
程序运行结果: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(“x1=%d,x2=%d,x3=%d,x4=%d”, x1,x2,x3,x4);} 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=%5.1f”, c);}
程序运行结果: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三个数组作为函数参数。
6.27编写一函数,使输入的一个字符串按反序存放,在主函数中输入输出字符串。
提示:一维字符数组用来存放字符串,并且将它传递到函数,在函数中通过元素值交换来完成反序存放。
6.28编制一个函数,由参数传入一个字符串,统计此字串中字母、数字、和其他字符的个数,在主函数中输入字符串并显示统计结果。提示:参照例题6.10。
6.29 定义一个宏,实现将两个数互换,并写出程序,输入两个数作为使用参数,并显示结果。提示:带参数宏,swap(a,b,t)....6.30编写以下函数:①输入职工的姓名和职工号;②按职工号由小到大排序,姓名顺序也随之调整;③输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。提示:定义一个二维数组来存放职工信息;用数组名作函数的参数传递;通过“起泡算法”或“选择算法”;折半查找法先决条件是数据已经有序。【习题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(“%d”,p[2]);} 输出结果:4(2)main(){ char a[]=“I love China!”;char *p=a;p=p+2;printf(“%s”,p);} 输出结果: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(“%d”,*(*(pa+1)+2));} 输出结果:11(4)main(){ char *str[]={“zhao”,“qian”,“sun”,“li”};int i;for(i=0;i
} 输出结果:-5,-12,-7(6)#include fun(char *s){ char *p=s;while(*p)p++;return(p-s);} main(){ char *str=“abcd”;int i;i=fun(str);printf(“%d”,i);} 输出结果: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],......。统计共有多少个证书,并输出这些整数。
提示:从字符串中提取“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')=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的末尾' ',在将b的元素赋值给a的对应元素,注意:别忘了添加字符串结束标志' '。
1.12 用指向指针的指针的方法对5个字符串排序并输出。提示:一个指针数组和一个指向指针的指针变量。【习题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',则cla项为学生的班级号,如501。
提示:在结构体中嵌入共用体position,根据job成员确定position的具体值。
8.7 口袋中有红、黄、兰3中颜色的球若干个。每次从口袋中取出1个球,根据颜色的不同,输入相应的颜色英文字符串。要求用枚举变量实现。提示:参照例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.dat B.c:fileabc.dat C.“c:fileabc.dat” D.“c:fileabc.dat” 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.编写程序将全班同学的姓名、地址和电话号码写到一个文件cla.dat中。提示:学生的信息可以存放到结构体数组,以fwrite函数写数据到文件中。
9.11将9.10题产生的cla.dat文件中的数据按姓名从低到高排列输出到显示器上,并把排了序的数据重新写入到文件cla1.dat中。
提示:以fread函数从文件中读入学生的信息,并存放到结构体数组,在数组中进行排序。排序完毕再写入文件中。
9.12 利用9.11题产生的cla1.dat文件,编程实现从中直接读取第三个同学的数据。提示:参照例9.5 9.13 在9.11题产生的cla1.dat文件中插入一个新生的数据,要求插入后的文件数据仍然按姓名顺序排列。
提示:先将数据读入到数组中,插入新的数据后,再写入到文件中。【习题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
C语言程序设计教程课后习题答案第一章 C语言程序设计概述 -习题答案1 算法的描述有哪些基本方法?答1、自然语言2、专用工具2 C语言程序的基本结构是怎样的?举一个例子说明。答1......
1、li45300.0 chang 30200.0 chang2、#include struct students {char sid[100];char name[100];float score[3]; }student; void main() {int i; float j;printf("\nPl......
《C语言程序设计教程(第二版)》习题答案 说明1.本习题答案是我自己做的,错误和疏漏在所难免。编程题全部调试通过,但选择题和填空题不敢保证全对。2.凡未指明解题所用的程序设......
2 第1章 程序设计基础知识一、单项选择题(第23页) 1-4.CBBC 5-8.DACA 二、填空题(第24页) 1.判断条件 2.面向过程编程 3.结构化 4.程序 5.面向对象的程序设计语言 7.有穷性......
《C语言程序设计教程》课后习题参考答案习题1 1.(1)编译、链接.exe (2)函数主函数(或main函数) (3)编辑编译链接 2.(1)-(5):DDBBC (6)-(10):ABBBC 3.(1)答:C语言简洁、紧凑,使用方便、灵活;C语言是......