《C语言》答案.doc 21页

  • 135.50 KB
  • 2022-04-22 11:20:44 发布

《C语言》答案.doc

  • 21页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'《C语言程序设计教程》习题参考答案祝胜林主编华南理工大学出版社【习题1】1【习题2】2【习题3】3【习题4】5【习题5】7【习题6】9【习题7】11【习题8】13【习题9】14【习题10】1520 【习题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位小数可以用%.2f1.15输入两个整数,输出其中最大者。提示:模仿例1.31.16输入三个整数,输出其中最小者。提示:min(min(a,b),c);20 【习题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、doB)float、1a0、_YC)x-y、goto、123D)_123、tmp、CHAR2.9 下列选项中不正确的常数的选项是(D)。A)0x12FB)-1.23E-2C)12.0D)03882.10 下面正确的字符常量是(B)。A)"a"B)"\"C)"n"D)"376"2.11 下面正确的字符串常量是(C)。A)"a"B)"376"C)"\n"D)3762.12 表达式"A"+4*25.0-"b"的正确结果是(B)。A)67B)67.0C)不确定D)67L2.13 执行printf("%x",100);后的输出结果是(C)。A)100B)0x100C)0X64D)642.14 int型的-1在内存中的存储形式是(A)。A)1111111111111111B)0000000000000001C)1111111111111110D)10000000000000012.15 存储字符串"\"abc376"需要的字节数是(D)。A)11B)13C)6D)720 【习题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/cC)8*x*y/b*cD)x*y/c/b*83.9 有如下类型说明:intk,a,b;unsignedlongw=8;doublex=2.9则以下不符合C语言语法的表达式是(A)。A)x%(-3)B)w*=-2C)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.0C)n=n*100+0.5/100.0D)n=(n/100+0.5)*100.03.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)非03.13 下面哪个式子在b为奇数时结果为假(C)。A)a%2==1B)!(a%2==0)C)!(a%2)D)a%23.13 执行printf("%f",(x=3,y=5,x>y?1:1.5));后的输出结果是(D)。A)语法错误B)1C)1.5D)1.5000003.14 能表示条件0≤x≤100的表达式是(D)。A)0<=x<=100B)x>=0,x<=100C)0≤x≤100D)x>=0&&x<=1003.15 判断char型变量ch为数字的正确表达式是(B)。20 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=(xmain(){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;20 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项表示:20 第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编程实现,以菜单方式实现四则运算辅助教学系统。提示:随机产生两个操作数和运算符+、-、*、/,由使用者输入一个数,判断计算结果与输入的数是否相等,如果相等,表示正确,否则是错误的。20 【习题5】一、填空题5.1若有定义inta[3][5];则排列在数组中的第9个元素是(a[1][3])。5.2strlen("Howareyoun")的值是(12)。5.3C语言中字符串结束的标志是("")。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.45.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.11main(){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");}运行结果为:2200022015.12当运行以下程序时,从键盘输入:Ah2MAA3ha,请写出输出结果。20 main(){chars[80],c="a";inti=0;scanf("%s",s);while(s[i++]!="")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行。11  11  2  11  3  3  11  4  6  4  11  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个一维数组作为索引,再通过索引打印成绩。20 5.19不用现有的函数求计算字符串长度的程序。提示:通过循环从前到后计算字符个数,遇到字符串结束标志""结束。5.20从键盘上输入一串字符,将其逆向显示。提示:首先计算字符串的长度,在从右边逐一显示字符,直到下标等于0为止。5.21找出一个二位数组中的鞍点的位置,即该位置上的元素在该行上最大,在该列上最小。如果有,输出其所在的行、列号,如果没有,则输出提示信息。提示:先找出行的最大元素,根据列下标找出列的最大元素。5.22从键盘上输入一串字符,将字符串中的所有A去掉后组成新的字符串,并将两字符串输出。提示:简单的方法是通过定义两个一维数组,逐个读出原字符串的字符,如果不为"A",则存入目的数组。当然也可以只用一个一维数组实现,通过两个下标指示来实现。20 【习题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:06.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宏命令的处理占用编译时间,而不占用运行时间。(Ö)20 一、看程序写结果6.24intfun(intn){intf=1;f=f*n*2;return(f);}main(){inti,j;for(i=1;i<=5;i++)printf("%dt",fun(i));}程序运行结果:2468106.25intx1=30,x2=40;main(){intx3=10,x4=20;sub(x3,x4);sub(x2,x1);printf("x1=%d,x2=%d,x3=%d,x4=%d",x1,x2,x3,x4);}sub(intx,inty){intx1=x;x=y;y=x1;}程序运行结果:x1=30,x2=40,x3=10,x4=206.26#defineA4#defineB(x)A*x/2main(){floatc,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三个数组作为函数参数。20 6.27编写一函数,使输入的一个字符串按反序存放,在主函数中输入输出字符串。提示:一维字符数组用来存放字符串,并且将它传递到函数,在函数中通过元素值交换来完成反序存放。6.28编制一个函数,由参数传入一个字符串,统计此字串中字母、数字、和其他字符的个数,在主函数中输入字符串并显示统计结果。提示:参照例题6.10。6.29定义一个宏,实现将两个数互换,并写出程序,输入两个数作为使用参数,并显示结果。提示:带参数宏,swap(a,b,t)....6.30编写以下函数:①输入职工的姓名和职工号;②按职工号由小到大排序,姓名顺序也随之调整;③输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。提示:定义一个二维数组来存放职工信息;用数组名作函数的参数传递;通过“起泡算法”或“选择算法”;折半查找法先决条件是数据已经有序。20 【习题7】1.1语句inta,*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(){inta[5]={1,2,3,4,5};int*p=&a[1];printf("%d",p[2]);}输出结果:4(2)main(){chara[]="IloveChina!";char*p=a;p=p+2;printf("%s",p);}输出结果:loveChina!(3)main(){inta[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"};inti;for(i=0;i<4;i++)printf("%c",str[i][0]);}输出结果:zqsl(5)voidsub(intx,inty,int*z){*z=y-x;}main(){inta,b,c;sub(10,5,&a);sub(7,a,&b);20 sub(a,b,&c);printf("%4d,%4d,%4dn",a,b,c);}输出结果:-5,-12,-7(6)#includefun(char*s){char*p=s;while(*p)p++;return(p-s);}main(){char*str="abcd";inti;i=fun(str);printf("%d",i);}输出结果:41.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门课程的成绩,所以需要使用elseif结构。1.7输入一个字符串,内有数字和非数字字符,例如:a345dsaf412x?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")=3451.8编写把十六进制数字字符串变换成整数的函数:inthtoi(char*s)。提示:同1.71.9编写把十进制整数变换成二进制数字字符串的函数:char*itob(intn)。提示:同1.71.10用字符指针实现字符串拷贝功能,不能使用库函数。提示:定义两个字符数组a,b,复制操作b[i]=a[i];1.11用字符指针实现字符串连接功能,不能使用库函数。提示:定义两个字符数组a,b,先将下标定位到a的末尾"",在将b的元素赋值给a的对应元素,注意:别忘了添加字符串结束标志""。1.12用指向指针的指针的方法对5个字符串排序并输出。20 提示:一个指针数组和一个指向指针的指针变量。20 【习题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节中的structcard结构编写一个程序实现5个人员数据输入和在屏幕上显示的功能:如果job项为"t",则在position项为教师的职称(助教、讲师、副教授、教授);如果job项为"s",则class项为学生的班级号,如501。提示:在结构体中嵌入共用体position,根据job成员确定position的具体值。8.7口袋中有红、黄、兰3中颜色的球若干个。每次从口袋中取出1个球,根据颜色的不同,输入相应的颜色英文字符串。要求用枚举变量实现。提示:参照例8.8。20 【习题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.dat"D."c:\file\abc.dat"9.6用(A)函数打开文件,操作完毕后用(C)函数关闭它。A.fopenB.openC.fcloseD.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.520 9.13在9.11题产生的class1.dat文件中插入一个新生的数据,要求插入后的文件数据仍然按姓名顺序排列。提示:先将数据读入到数组中,插入新的数据后,再写入到文件中。20 【习题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.4BIOS功能调用INT10H的09H号功能用于显示彩色字符,要求使用的寄存器如下:调用前:AH=09HBH=当前显示页(图形方式下为0)AL=要显示字符的ASCII码BL=字符及其背景颜色CX=字符显示次数利用系统调用函数编制彩色字符显示函数:voidwrite_char(intasc,intatr)。其中参数asc为要显示字符的ASCII代码,art为字符颜色。该函数每次显示一个字符。提示:参照例10.510.5有如下C语言程序:main(){intx,y,z,max;intget_max(intx,inty,intz);printf(“pleaseinputx,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.1320'