• 374.50 KB
  • 2022-04-22 11:51:43 发布

《C语言程序设计基础》教材参考答案-20140211.doc

  • 83页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'《C语言程序设计基础》教材参考答案《C语言程序设计基础》教材参考答案包括各单元:一.随堂练习二.单元总结三.单元练习四.实训指导82 《C语言程序设计基础》教材参考答案82 《C语言程序设计基础》教材参考答案单元一程序设计宏观认识一.随堂练习【随堂练习1-1】1.根据上述示例模仿编程,输入正方形的边长,计算其面积。#includevoidmain(){inta,s;//数据准备,边长a,面积sprintf("请输入正方形的边长:");scanf("%d",&a);//数据输入s=a*a;//数据计算printf("该正方形的面积为:%d.n",s);}【随堂练习1-2】1.下面哪些标识符属于合法的用户自定义标识符:Main、void、_num、my$、a*、N4、3m、a-2答:合法的用户自定义标识符是:Main、_num、N42.结合【例1.2】指出程序代码中所用到的标识符哪些是关键字,哪些是预定义标识符,哪些是用户自定义标识符。答:关键字:void、int预定义标识符:include、main、printf、scanf用户自定义标识符:a、b、c3.分析【例1.2】中函数的结构,包括函数首部(函数返回值类型、函数名、形式参数)、函数体语句(说明语句、可执行语句)。答:函数首部:voidmain(),其中函数返回值类型为void、函数名为main、形式参数无;函数体语句:{}内的语句为函数体,其中:说明语句为inta,b,c;,其余为可执行语句。【随堂练习1-3】1.在VC++6.0环境中完成【例1.2】程序开发过程。(略)82 《C语言程序设计基础》教材参考答案2.查阅【例1.2】所对应的工程文件夹,了解相关文件的含义。工程文件夹中:.CPP:用C/C++语言编写的源代码文件。.DSP:VC开发环境生成的工程文件,VC4及以前版本使用MAK文件来定义工程。项目文件,文本格式。.DSW:VC开发环境生成的WorkSpace文件,用来把多个工程组织到一个WorkSpace中。工作区文件,与.dsp差不多。.NCB:NCB是“NoCompileBrowser”的缩写,其中存放了供ClassView、WizardBar和ComponentGallery使用的信息,由VC开发环境自动生成。无编译浏览文件。当自动完成功能出问题时可以删除此文件。编译工程后会自动生成。.OPT:VC开发环境自动生成的用来存放WorkSpace中各种选项的文件。工程关于开发环境的参数文件。如工具条位置信息等。DEBUG文件夹中:.OBJ:源文件编译后生成的目标文件,是模块的二进制中间文件。.EXE:可执行文件。(注:蓝色字体为重点了解。)一.单元总结本单元中,核心内容有C语言程序框架结构、程序的构成和程序开发过程。通过本单元的学习,我们应该知道:1.C语言程序最基本的程序框架由两部分构成,分别是:(1)编译预处理(2)函数组2.C程序最大的特点就是所有的程序都是用函数来装配的,函数是构成C语言程序的基本单位,函数包括主函数、库函数和自定义函数。函数的一般结构形式为:函数返回值类型函数名(形式参数)//函数首部{说明语句;//函数体可执行语句;}3.标识符是用来标识程序中的某个对象名字的字符序列。C语言把标识符分为三类,即关键字、预定义标识符、用户自定义标识符。对于用户自定义标识符的命名C语言规定:(1)所有的用户标识符必须先定义后使用;(2)用户标识符由字母(A~Z,a~z)、数字(0~9)、下划线“_”82 《C语言程序设计基础》教材参考答案组成,并且首字符不能是数字;(3)区分大小写;(4)不能用关键字作为用户自定义标识符,通常不使用预定义标识符作为用户自定义标识符。4.理论上讲,程序开发过程分为四个步骤,分别为:(1)编辑源程序(2)编译源程序,生成目标程序(3)连接目标程序及其相关模块,生成可执行文件(4)运行可执行文件5.简单描述使用VC++6.0开发应用程序的步骤:如图所示:启动VC++6.0打开或新建工程打开或新建文件编辑、编译连接、运行完成图VC++6.0开发程序的步骤总之,通过本单元的学习,应该掌握C语言程序框架结构和程序开发过程,还要对C语言程序设计的知识脉络有一定的了解。一.单元练习一.选择题1.构成C语言程序的基本单位是()。A.框架   B.预处理   C.函数  D.语句2.在程序开发过程中,把文本文件格式源程序转化为二进制格式的目标程序的过程称之为()。A.编辑B.编译C.连接D.运行3.关于主函数,下列说法不正确的是()。A.一个完整的C语言应用程序有唯一的主函数B.主函数的名称只能是mainC.主函数可以被其他自定义函数调用82 《C语言程序设计基础》教材参考答案D.C语言程序的运行从主函数开始,以主函数为核心展开4.关于标识符,下列说法不正确的是()。A.库函数名称为预定义标识符,不建议用作用户自定义标识符B.关键字不能作为用户自定义标识符C.用户自定义标识符中不区分大小写字母D.标识符中可以出现下划线,且可以出现在标识符的任意位置5.以下可用作用户自定义标识符的一组是()。A.void、return、ifB.printf、include、fabsC.Max、_abc、MainD.2abc、pay$、sum-10二.填空题1.C语言程序一般由若干个函数构成,程序中应至少包含一个_________,其名称只能为_________。 2.C语言程序中每条语句必须以_________结束。3.C语言程序的注释是以_________开头,以________结束的,在VC++6.0编程环境中,可使用_________作为注释的起始标识,注释对程序的执行不起任何作用。 4.最初编写的C语言程序称为_________,其扩展名为_________,编译后生成的文件为_________,其扩展名是_________,连接后生成的文件是_________,其扩展名是_________。 5.C语言规定,标识符只能由_________、_________和_________三种字符组成,而且,首字符只能是_________或_________。*******************************************************************************习题答案:一.选择题1.C2.B3.C4.C5.C二.填空题1.主函数main2.分号;3./**///4.源程序.cpp或.c目标文件(或目标程序).obj可执行文件(或可执行程序).exe82 《C语言程序设计基础》教材参考答案5.字母(A~Z,a~z)、数字(0~9)、下划线“_”字母或下划线*******************************************************************************一.实训指导1.完成【引例】中的题目。【引例1】(1)C语言程序基本框架包括编译预处理和函数组两部分。(2)编译预处理是程序编译之前的准备工作,以“#”开头。(3)函数组包括主函数、库函数和用户自定义函数,函数是构成C语言程序的基本单位。整个程序的执行以主函数main()为核心展开;C语言标准函数库提供大量功能丰富的库函数,使用时需要在编译预处理中包含相应的头文件,参见附录D;用户也可以根据需要编写具有特定功能的函数,称为用户自定义函数。(4)在C语言中的任何适当位置可添加注释,以增强程序的可读性。在VisualC++编程环境中可用“//”作为程序单行注释的起始符号,也可以使用“/*”和“*/”作为单行或多行注释的起始和终止符号。【引例2】编辑好的C语言程序要经过编译、连接和执行几个步骤,其完整过程描述如教材图1-1所示。2.新建工程,输入【例1-2】源程序,使之能够运行。(略)3.编写一个程序,输出下面三行字符: ****************************** 欢迎来到“吉尼斯乐园”! ****************************** 参考程序如下:(注意转义字符的理解)#includevoidmain(){printf("******************************n");printf("欢迎来到"吉尼斯乐园"!n");printf("******************************n");}1.有三个同样大小的瓶子,一个装可乐,一个装雪碧,还有一个空瓶,请用语言描述将可乐和雪碧互换瓶子盛放的方法。然后编程实现:将两个整数a和b的值交换,输出交换后的结果。82 《C语言程序设计基础》教材参考答案参考程序如下:#includevoidmain(){inta,b,c;//借助变量c交换a和b的值printf("请输入a和b的值:");scanf("%d%d",&a,&b);c=a;//交换a和b的值a=b;b=c;printf("交换结果为:a=%d,b=%d.n",a,b);}82 《C语言程序设计基础》教材参考答案单元二程序设计基础知识一.随堂练习【随堂练习2-1】1.判断下列常量表示正确与否?(带下划线的不正确)(1)整型常量:32768、037、081、0x4f、0xAH(2)浮点型常量:.124、3.0、1e3、2.3E1.5(3)字符型常量:"a"、"101"、65、"x21"2.字符串常量“Howareyou?n”的字符串长度为13个字节,它占用的存储空间为14个字节。3.“d:windowsinfo.txt”在C语言程序设计时应描述为"d:\windows\info.txt"。4.在编程处理物理力学相关运算时,常将重力加速度G定义为符号常量,其定义语句可描述为:#defineG9.8。【随堂练习2-2】1.完成本单元【引例】中的问题(1)。floata,b,c,s,area;2.下列变量定义中合法的是:(以下定义语句均不合法)(1)longdo=0xfd;(2)intmax=min=0;(3)doublef,inta;(4)charch="A";【随堂练习2-3】1.完成本单元【引例】中问题(2)。#includes=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c))2.有定义语句:charch="M";,写出将变量ch变为小写字母的表达式:ch=ch+32;。【随堂练习2-4】1.试分析本单元【引例】的数据结构和实现算法,并绘制算法流程图。82 《C语言程序设计基础》教材参考答案(1)数据结构:三角形的三个边长a,b,c,中间变量s和面积area,均为浮点型。(2)实现算法:以顺序结构为例,根据题目要求,其算法表示如下:步骤1:输入三个边长a、b、c值;步骤2:根据公式计算出s的值,然后根据公式计算出三角形面积area;步骤3:输出计算结果。(3)算法流程图:开始输入a、b、c值计算s值;计算area值;输出面积值area结束一.单元总结本单元中,核心内容有C语言中基本的数据类型、常量和变量、运算符和表达式以及算法的概念。通过本单元的学习,我们应该知道:1.C语言中最基本的数据类型有:整型、字符型、浮点型。2.C程序中使用的常量按照表现形式可分为直接常量和符号常量。(1)直接常量1)整型常量,有十进制、八进制和十六进制三种描述方式,其中,八进制的前置符号标志为0,十六进制的前置符号标志为0x或0X。2)浮点型常量,有十进制小数和指数两种描述方式,指数形式的符号标志是e或E。3)字符型常量,是用单撇引号括起来的单一字符,对一些特殊字符和控制字符用的形式表示。4)字符串常量,是用双撇引号括起来的一串字符序列。字符串的结束标志为‘’。(2)符号常量符号常量是使用某个符号代表的常量,符号常量使用编译预处理中的宏定义命令82 《C语言程序设计基础》教材参考答案定义。3.C程序中使用变量,必须先定义,后使用。变量定义后,系统会根据变量的类型分配相应的存储空间。4.C语言有丰富的运算符,其中算术运算符包括+、-、*、/、%,运算符中的仅用于整数间的运算;赋值运算符包括“=”和相应的复合赋值运算符+=、-=、*=、/=,赋值运算的含义是将“=”右侧的表达式的计算结果赋值给“=”左侧的变量,这与数学中“=”的含义不同,需要注意。5.由运算符和数据构成表达式,若表达式中各数据的类型不同,则存在类型自动转换问题,必要时也可以使用强制类型转换。6.对于面向过程的程序设计来说,程序=数据结构+算法。7.在C语言中,对于每一个程序设计单元可采用结构化程序设计方法,有三种基本的程序结构,分别为:顺序、选择和循环。通过本单元的学习,应该掌握C语言程序设计所需要的基本知识,为后续内容的学习打下坚实的基础。一.单元练习一.选择题1.在C语言中,int、short、char三种类型数据所占用的存储空间是()。A.均为2个字节   B.int和short占2个字节,char占1个字节C.与编译环境有关  D.由用户自己定义 2.下面定义字符型变量ch的语句不正确的是()。A.charch=‘X2A’; B.charch="c"; C.charch=65;  D.charch=NULL; 3.已知大写字母A的ASCII是65,小写字母a的ASCII是97,以下不能将字符型变量c中的大写字母转换成对应的小写字母的语句是()。A.c=(c-"A")%26+"a";   B.c2=tolower(c);C.c=c-"A"+"a";  D.c=("A"+c)%26-"a"; 4.设有定义:doubled,h;,其中d为三角形的底边长,h为三角形的高,则以下C语言表达式与其面积公式dh计算结果不相符的是()。82 《C语言程序设计基础》教材参考答案A.d*h/2   B.1/2*d*hC.d*h*1/2D.d/2*h 5.以下选项中,与k=n++;完全等价的语句是()。A.k=n;n=n+1;   B.n=n+1;k=n;C.k=++n;D.k+=n+1;二.填空题1.写出整型变量a、无符号长整型变量b、双精度浮点型变量c和字符型变量d的定义语句:。2.常量‘a’和”a”分别占用_____个字节和_____个字节的存储空间。3.有定义inta=1234;,获取其百位数码的表达式为________________________。4.若有定义:chara=97,c;,则表达式c="a"+"8"-"3"的值为_________。5.已知intx=6;,则执行x+=x-=x-3;语句后,x的值是_________。6.将一个浮点型变量n四舍五入精确到小数点后两位,其表达式为:。7.C语言中基本的数据类型有、、。8.结构化程序设计中基本的程序结构有、、。*******************************************************************************习题答案:一.选择题1.C2.B3.D4.B5.A二.填空题1.inta;unsignedlongb;doublec;chard;2.123.a/100%104.f5.66.((int)(n*100+0.5))/100.0;7.整型、浮点型、字符型8.顺序、选择、循环*******************************************************************************一.实训指导82 《C语言程序设计基础》教材参考答案1.完成【引例】中的题目,要求计算结果保留两位小数。参考程序代码如下:#include#includevoidmain(){floata,b,c,s,area;printf("请输入三角形三边长:");scanf("%f%f%f",&a,&b,&c);s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf("三角形的面积为:%.2fn",area);}2.新建工程,输入【例2-4】源程序,使之能够运行,重点体会符号常量的用法及好处。(略)3.下列程序有若干处错误,请调试改正。程序功能:求华氏温度120.3对应的摄氏温度,计算公式为c=5/9(f-32),其中c表示摄氏温度,f表示华氏温度。给定程序程序改正#includevoidmain(){intc;f;c=5/9*(f-32);f=120.3;printf(“c=%fn”,c)}#includevoidmain(){floatc,f;f=120.3;c=5*(f-32)/9;printf("c=%fn",c);}4.编写程序,将两个两位数的正整数a和b合并成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,将b数的十位和个位数依次放在c数的十位和千位上。参考程序代码如下:#includevoidmain(){inta,b,c;intas,ag,bs,bg;printf("请输入两个两位整数:");scanf("%d%d",&a,&b);as=a/10;82 《C语言程序设计基础》教材参考答案ag=a%10;bs=b/10;bg=b%10;c=bg*1000+ag*100+bs*10+as;printf("合并后的结果为:%d.n",c);}82 《C语言程序设计基础》教材参考答案单元三顺序结构程序设计一.随堂练习【随堂练习3-1】1.下面程序功能为:输入一个A~Z之间的字母,输出与之左右相邻的两个字母,根据注释信息将程序填写完整。(注意:题目要求输入A~Z之间的字母,即不包含A和Z)#includevoidmain(){charch;//数据准备ch=getchar();//调用getchar()输入一个字母,并赋值给chputchar(ch-1);//调用putchar()输出与ch左相邻的字母putchar(ch+1);//调用putchar()输出与ch右相邻的字母}【随堂练习3-2】1.输出提示语“请输入银行卡密码:”的语句可描述为printf("请输入银行卡密码:");。2.分析下列程序输出结果。#includevoidmain(){inta=65,b=97;doublem=3.14159;printf("%c-%dn%c-%dn",a,a,b,b);printf("a=%06d,b=%-6d.n",a,b);printf("a=%d,a=%o,a=%xn",a,a,a);printf("m=%lf.n",m);printf("m=%4.3lf.n",m);printf("m=%06.3lf.n",m);}输出结果如下:82 《C语言程序设计基础》教材参考答案【随堂练习3-3】1.分别按照int、double和char类型给变量a,b,c输入数值的语句可描述为:scanf("%d%lf%c",&a,&b,&c);2.根据要求给出数据输入方法。(1)有语句scanf("a=%d,b=%d",&a,&b);,要使a值为2,b值为3,则正确的输入方法是:a=2,b=3(2)有输入语句scanf("%d%c",&m,&n);,为使m值为6,n值为字母y,则正确的输入方法是:6y一.单元总结本单元中,核心内容是顺序程序结构程序设计中标准输入输出库函数的使用。通过本单元的学习,我们应该知道:1.C语言提供了标准输入输出库函数用于实现数据输入输出操作,其对应的头文件为stdio.h。2.单字符输入和输出函数分别为getchar()和putchar()。3.格式化输入和输出函数分别为scanf()和printf()。4.格式化输出函数有两种调用格式:(1)printf("字符串常量");(2)printf("格式控制字符串",输出项列表);5.格式化输入/输出中,格式控制符由%开头。常用的格式控制符有:整型int格式符%d、float浮点型格式符%f、double浮点型格式符%lf、字符型格式符%c;对于浮点型格式可以用m.n形式的附加格式说明小数的宽度和小数位数。6.格式化输入中的输入项为地址列表,对变量取地址的运算符为&。82 《C语言程序设计基础》教材参考答案通过本单元的学习,应对顺序结构程序设计的特点和设计思路有所了解,同时重点学会单字符输入函数getchar()、单字符输出函数putchar()、格式化输出函数printf()和格式化输入函数scanf()的正确使用。三.单元练习一.选择题1.已定义x为float型变量,其值为213.45678,则printf("%-4.2fn",x);的输出结果为()。A.213.46   B.213.45  C.-213.45  D.输出格式控制说明的域宽不够,不能输出 2.有以下程序,程序运行时输入:1,2,3<回车>,则输出的结果为()。#includevoidmain(){inta,b,c;scanf("%d%d%d",&a,&b,&c);printf("a+b+c=%dn",a+b+c);}A.6   B.a+b+c=6C.123D.不确定的值3.下面输入语句中,正确的是()。A.scanf("a=b=%d",&a,&b); B.scanf("%d,%d",&a,&b); C.scanf("%c",c);  D.scanf("%d%dn",&f1,f2); 4.在VC++6.0环境中,下列说法正确的是()。A.输入函数scanf()输入多个数据时,有时数据间不必加间隔符。B.输入函数scanf()中单精度或双精度浮点型数据都要用%f作为格式控制符。C.使用输出函数printf()输出字符或字符串都用格式控制符%s。 D.输出函数printf()中单精度或双精度浮点型数据都要用%f作为格式控制符。5.下面程序的功能是实现两个字符变量互换值,若为ch1输入a,ch2输入b,则程序运行时正确的输入是()。#includevoidmain(){charch1,ch2,ch;82 《C语言程序设计基础》教材参考答案scanf("%c%c",&ch1,&ch2);ch=ch1;ch1=ch2;ch2=ch;printf("ch1=%c,ch2=%cn",ch1,ch2);}A.a,b   B.a<空格>bC.abD.a<回车>b二.填空题1.有语句putchar(getchar()),程序运行时输入:A,则输出结果是____________。2.printf("%6.2f%%",1.0/3);的输出结果是____________。3.补充程序:intn1=10,n2=20;printf("",n1,n2);要求按以下格式输出n1和n2的值,每个输出行从第一列开始。n1=0010n2=00204.有以下程序,程序运行时输入:1234<回车>,执行后输出的结果是_________________。#includevoidmain(){charch1,ch2;intn1,n2;ch1=getchar();ch2=getchar();n1=ch1-’0’;n2=n1*10+(ch2-’0’);printf("n1=%d,n2=%d.n",n1,n2);}5.输入多个非字符型的数值数据时,数据输入时可用、和作为间隔符。*******************************************************************************习题答案:一.选择题1.A2.D3.B4.A5.C二.填空题1.A2.0.33%3.n1=%04dnn2=%04d82 《C语言程序设计基础》教材参考答案4.n1=1,n2=125.空格,TAB键,回车*******************************************************************************四.实训指导1.完成【引例】中的题目,要求计算结果保留两位小数。(1)输入三角形三边长度a,b,c;(2)计算s和面积area;(3)输出三角形面积area。学习完本单元后,结合给定的演示运行界面,完成如下问题:(1)输入三角形三边长度的语句如何描述:scanf("%f%f%f",&a,&b,&c);(2)输出计算结果的语句如何描述:printf("三角形面积为:%.2fn",area);(3)试写出完整的程序实现代码:#include#includevoidmain(){floata,b,c,s,area;printf("请输入三角形三边长:");scanf("%f%f%f",&a,&b,&c);s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf("三角形的面积为:%.2fn",area);}2.编写程序,从键盘上输入某学生四门课程的成绩,计算并输出总成绩和平均成绩。参考程序代码如下:#includevoidmain(){floata,b,c,d,sum=0,ave;printf("请输入四门课程成绩:");scanf("%f%f%f%f",&a,&b,&c,&d);sum=a+b+c+d;ave=sum/4;printf("该学生的总成绩为%.2f,平均成绩为:%.2fn",sum,ave);}3.设半径r=2.5,编程计算相应的圆的周长、圆的面积和圆球的体积。用函数scanf输入数据,输入数据要有提示语,输出计算结果中要有文字说明,计算结果取小数点后2位。参考程序代码如下:#include#definePI3.1482 《C语言程序设计基础》教材参考答案voidmain(){floatr,c,s,v;printf("请输入半径值:");scanf("%f",&r);c=2*PI*r;s=PI*r*r;v=3*PI*r*r*r/4;printf("半径为%.2f时,对应的:n",r);printf("圆的周长为:%.2f.n",c);printf("圆的面积为:%.2f.n",s);printf("球的体积为:%.2f.n",v);}4.将“China”字符串译成密码,译码规则:对每个字母用其后面的第5个字母替换。即字母a用f替换,b用g替换,以此类推。(1)请预编写程序,定义五个字符型变量c1、c2、c3、c4和c5,同时赋初值分别为’C’、’h’、’i’、’n’和’a’,然后译成密码并输出,分析结果是否符合要求。参考程序代码如下:#includevoidmain(){charc1="C",c2="h",c3="i",c4="n",c5="a";printf("原数据为:");printf("%c%c%c%c%cn",c1,c2,c3,c4,c5);c1+=5;c2+=5;c3+=5;c4+=5;c5+=5;printf("译成密码后的结果:");printf("%c%c%c%c%cn",c1,c2,c3,c4,c5);}(2)将变量c1、c2、c3、c4和c5的初值改为’H’、’a’、’p’、’p’和’y’,再次运行程序,分析结果是否符合要求。答:不符合要求了,初值’H’、’a’、’p’、’p’和’y’译成密码后的结果为“Mfuu~”,初值最后一个字母’y’其后第5个字母应该为’d’。通过分析可以看出,要想获得字母’y’后的第5个字母,直接加5是得不到的。对于这样的情况应该进行选择判断处理,在下一章讲解。82 《C语言程序设计基础》教材参考答案单元四选择结构程序设计一.随堂练习【随堂练习4-1】1.当a=3,b=2,c=1时,判断例4-1中条件表达式的值?(1)a>b==c真(2)a=b=’A’&&ch<=’Z’。2.判断某一年份是否为闰年。闰年是符合以下条件的年份:能被4整除但不能被100整除,或者能被400整除。若用整型变量year表示年份,则闰年的逻辑判断表达式为:year%4==0&&year%100!=0||year%400==0。【随堂练习4-3】1.以下程序段的运行结果是x=20,y=20。intx=10,y=20;if(x=’A’&&ch<=’Z’)printf(“%c是字母。”,ch);elseif(ch>=’a’&&ch<=’z’)printf(“%c是字母。”,ch);elseprintf(“%c不是字母。”,ch);改成一对if-else的形式:charch;ch=getchar();if(ch>=’A’&&ch<=’Z’||ch>=’a’&&ch<=’z’)printf(“%c是字母。”,ch);elseprintf(“%c不是字母。”,ch);【随堂练习4-5】1.将【随堂练习4-4】中第1题的3至6行程序使用条件运算符描述:f=(year%4==0&&year%100!=0||year%400==0)?1:0;【随堂练习4-6】1.82 《C语言程序设计基础》教材参考答案输入1~7之间的任意数字,输出其对应的星期几的英文,如输入5,程序输出Friday。若输入1~7以外的数字,则提示输入错误。参考程序代码如下:#includevoidmain(){intm;printf("请输入1~7任意数字:");scanf("%d",&m);switch(m){case1:printf("Monday");break;case2:printf("Tuesday");break;case3:printf("Wednesday");break;case4:printf("Thursday");break;case5:printf("Friday");break;case6:printf("Saturday");break;case7:printf("Sunday");break;default:printf("输入错误!");}}一.单元总结在选择结构程序设计中,条件判断表达式和选择结构实现语句是两个核心内容。通过本单元的学习,我们应该知道:1.条件判断表达式由关系运算符及其表达式、逻辑运算符及其表达式构成,其中:(1)关系运算符有:>、<、>=、<=、!=、==(2)逻辑运算符有:&&、||、!2.选择结构实现语句有三种方式:(1)单分支if选择结构,一般格式为:if(表达式){语句;}(2)双分支if-else选择结构,一般格式为:if(表达式){语句1;}else82 《C语言程序设计基础》教材参考答案{语句2;}(1)多分支switch选择结构,一般格式为:switch(表达式){case常量表达式1:[语句序列1;][break;]case常量表达式2:[语句序列2;][break;]……case常量表达式n:[语句序列n;][break;]default:语句序列n+1;}3.在应用选择结构时,应注意以下问题:(1)在if嵌套语句中,要弄清else与if的匹配关系,书写if语句嵌套时一般采用缩进的阶梯式写法,在实际编程中,为了表明编程者的意图,也常常通过“{}”来强制if和else的配对关系。(2)switch语句中,“表达式”和“常量表达式”的类型只能是整型或字符型数据,且“常量表达式”只能由常量构成,通过“表达式”与“常量表达式”之间的对等关系构造出多分支选择结构。(3)在某些多分支选择结构程序设计中,既可使用if-else语句实现,也可以使用switch语句实现。switch语句与if语句的不同之处在于:switch语句仅能判断一种逻辑关系,即“表达式”和指定“常量表达式”的值是否相等,而不能进行大于,小于某一个值的判断,不能表达区间数据的概念;if语句可以计算和判断各种表达式。所以switch语句不能完全替代if语句。总之,通过本单元的学习,应该掌握C语言选择结构程序设计的思路和语句的基本用法。三.单元练习一.选择题1.以下选项中,当x为大于1的奇数时,值为0的表达式()。A.x%2==1    B.x/2     C.x%2!=0   D.x%2==02.在C语言中,if语句后的一对圆括号中有一个用以决定分支走向的表达式,该表达式()。A.只能是关系表达式B.只能是逻辑表达式82 《C语言程序设计基础》教材参考答案C.只能是关系或逻辑表达式D.可以是任何合法表达式3.读下面程序段,当x=-3时,输出y的值为()。intx,y;y=0;scanf(“%d”,&x);if(x>=0)if(x>0)y=1;elsey=-1;printf(“y=%d”,y);A.1B.-1C.0D.不确定4.下列语句将小写字母转化为大写字母,正确的语句为()。A.if(’z’>=ch>=’a’)ch=ch-32;B.if(ch>=’a’&&ch<=’z’)ch=ch-32;C.ch=(’z’>=ch>=’a’)?ch-32:ch;D.ch=(ch>=’a’&&ch<=’z’)?ch:ch-32;5.关于与switch语句配套的case语句中所使用的表达式,说法正确的是()。A.可以是变量B.可以是常量或变量C.只能是常量或常量表达式D.无论是何种表达式,只要在执行时有确定的值就行二.填空题1.在算术运算符、关系运算符、逻辑运算符和赋值运算符中,运算优先级最高的运算符是,最低的是。2.正确表示数学关系“1=’A’&&)82 《C语言程序设计基础》教材参考答案elseif()putchar(ch);5.以下程序段功能是根据学生考试成绩,确定其成绩等级,成绩与等级对应情况与【例4-7】中表格相同,请将程序段补充完整。charlevel;//成绩等级floatscore;//考试成绩scanf(“%f”,&score);switch(){:level=’A’;;case8:level=’B’;break;case7:level=’C’;break;case6:level=’D’;break;default:;}printf(“考试成绩等级为:.”,level);*******************************************************************************习题答案:一.选择题1.D2.D3.C4.B5.C二.填空题1.!(非)=2.a>1&&a<43.n%3!=04.charch;ch=getchar();if(ch>=’A’&&ch<="T")ch=ch+6;elseif(ch>="U"&&ch<="Z")ch=ch-20;82 《C语言程序设计基础》教材参考答案putchar(ch);5.charlevel;//成绩等级floatscore;//考试成绩scanf(“%f”,&score);switch(int(score/10)){case10:case9:level=’A’;break;case8:level=’B’;break;case7:level=’C’;break;case6:level=’D’;break;default:level="E";}*******************************************************************************四.实训指导实训指导【1】1.完成【引例】中的题目。(1)写出三个边长a、b、c构成合法三角形的条件判断表达式。a+b>c&&b+c>a&&a+c>b(也可以再附加考虑三边均大于0)(2)依据上述条件写出计算area的语句。if(a+b>c&&b+c>a&&a+c>b){s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));}(3)试写出完整的程序实现代码:#include#includevoidmain(){floata,b,c,s,area;printf("请输入三角形三边长:");scanf("%f%f%f",&a,&b,&c);82 《C语言程序设计基础》教材参考答案if(a+b>c&&b+c>a&&a+c>b){s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf("三角形的面积为:%.2fn",area);}elseprintf("三角形的三边不合法.n");}2.从键盘输入x,计算下列分段函数的值。f(x)=0-10≤x≤10-10x>1010x<-10#includevoidmain(){intx,f;printf("请输入x值:");scanf("%d",&x);if(x>10)f=-10;elseif(x>=-10)f=0;elsef=10;printf("f(%d)=%d.n",x,f);}1.从键盘上输入一个字符,判断该字符是数字、字母、空格或其它。#includevoidmain(){charch;printf("请输入一个字符:");ch=getchar();if(ch>="0"&&ch<="9")printf("该字符为数字.n");elseif(ch>="A"&&ch<="Z"||ch>="a"&&ch<="z")82 《C语言程序设计基础》教材参考答案printf("该字符为字母.n");elseif(ch=="")printf("该字符为空格.n");elseprintf("该字符为其他.n");}4.某工厂的一台机床,将生产的毛坯加工成直径为10cm的圆孔零件,生产质量的指标是合格品的圆孔直径不超出±0.01cm的误差,否则为次品。请根据输入的圆孔零件直径数值,输出该零件是合格品还是次品。#includevoidmain(){doubled;printf("请输入圆孔零件直径数值:");scanf("%lf",&d);if(d>10.01||d<9.99)printf("该零件为次品.n");elseprintf("该零件为合格品.n");}5.BMI指数(英文为BodyMassIndex,简称BMI),是用体重公斤数除以身高米数平方得出的数字,是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。具体见下表:BMI值<18.518.5~24.925.0~27.9>27.9身体状态消瘦正常超重肥胖请根据输入的体重和身高数据,计算并输出相应的BMI值及对应的身体状态。#includevoidmain(){doublebmi,w,h;printf("请输入身高(米):");scanf("%lf",&h);printf("请输入体重(公斤):");scanf("%lf",&w);bmi=w/(h*h);if(bmi<18.5)82 《C语言程序设计基础》教材参考答案printf("BMI指数为%.1f,您的身体状态为消瘦.n",bmi);elseif(bmi<=24.9)printf("BMI指数为%.1f,您的身体状态为正常.n",bmi);elseif(bmi<=27.9)printf("BMI指数为%.1f,您的身体状态为超重.n",bmi);elseprintf("BMI指数为%.1f,您的身体状态为肥胖.n",bmi);}实训指导【2】1.写出【例4-8】完整的程序代码,并调试运行。方法一:利用单分支if语句实现#includevoidmain(){intm;floatr,c,s;printf("请输入存款金额:");scanf("%f",&c);printf("请输入存款期限:");scanf("%d",&m);if(m==3)r=0.026;if(m==6)r=0.028;if(m==12)r=0.033;if(m==24)r=0.0375;if(m==36)r=0.0425;if(m==60)r=0.0475;s=c*(1+r);printf("本息合计为:%.2f.n",s);}方法二:利用if-else语句实现#includevoidmain(){intm;floatr,c,s;printf("请输入存款金额:");scanf("%f",&c);82 《C语言程序设计基础》教材参考答案printf("请输入存款期限:");scanf("%d",&m);if(m==3)r=0.026;elseif(m==6)r=0.028;elseif(m==12)r=0.033;elseif(m==24)r=0.0375;elseif(m==36)r=0.0425;elseif(m==60)r=0.0475;s=c*(1+r);printf("本息合计为:%.2f.n",s);}方法三:利用switch语句实现#includevoidmain(){intm;floatr,c,s;printf("请输入存款金额:");scanf("%f",&c);printf("请输入存款期限:");scanf("%d",&m);switch(m){case3:r=0.026;break;case6:r=0.028;break;case12:r=0.033;break;case24:r=0.0375;break;case36:r=0.0425;break;default:r=0.0475;}s=c*(1+r);printf("本息合计为:%.2f.n",s);}1.验证【例4-9】中的示例程序。(略)2.已知2015年的元旦是星期四,求出2015年的任何一个日期是星期几(用1-7表示星期一至星期日)。#includevoidmain(){intm,d,s,w;printf("请输入月份:");82 《C语言程序设计基础》教材参考答案scanf("%d",&m);printf("请输入日期:");scanf("%d",&d);if(m>0&&m<=12){switch(m){case1:s=d;break;case2:s=31+d;break;case3:s=31+28+d;break;case4:s=31+28+31+d;break;case5:s=31+28+31+30+d;break;case6:s=31+28+31+30+31+d;break;case7:s=31+28+31+30+31+30+d;break;case8:s=31+28+31+30+31+30+31+d;break;case9:s=31+28+31+30+31+30+31+31+d;break;case10:s=31+28+31+30+31+30+31+31+30+d;break;case11:s=31+28+31+30+31+30+31+31+30+31+d;break;case12:s=31+28+31+30+31+30+31+31+30+31+30+d;break;}w=(s+3)%7;if(w==0)w=7;printf("2015年%d月%d日是星期%d.n",m,d,w);}elseprintf("输入的日期不合法.n");}4.某百货公司为了促销,采用购物打折的优惠办法。每位顾客一次购物:(1)1000元及以上,九五折;(2)2000元及以上,九折;(3)3000元及以上,八五折;(4)4000元及以上,八折。编写程序,输入应付款金额,计算并输出优惠金额及实际需要付款金额。#includevoidmain(){doubleap,rp,discount,save;//ap应付款,rp实付款,discount折扣,save优惠金额printf("请输入应付款金额:");scanf("%lf",&ap);switch(int(ap)/1000){case1:discount=0.95;break;82 《C语言程序设计基础》教材参考答案case2:discount=0.9;break;case3:discount=0.85;break;case4:discount=0.8;break;default:discount=1;}save=ap*(1-discount);rp=ap-save;printf("优惠金额为%.2lf,实际付款%.2lf.n",save,rp);}82 《C语言程序设计基础》教材参考答案单元五循环结构程序设计一.随堂练习【随堂练习5-1】1.利用while语句计算自然数序列1,2,3,…,n的和,n的值在程序执行时输入。#includevoidmain(){intn,sum=0,i=1;printf("请输入n的值:");scanf("%d",&n);while(i<=n){sum+=i;i++;}printf("自然数序列1到%d的和为:%d.n",n,sum);}2.利用while语句计算1~n中的奇数之和及偶数之和。#includevoidmain(){intn,even=0,odd=0,i=1;printf("请输入n的值:");scanf("%d",&n);while(i<=n){if(i%2==0)even+=i;elseodd+=i;i++;}printf("自然数序列1到%d的奇数和为%d,偶数和为:%d.n",n,odd,even);}【随堂练习5-2】1.利用do-while语句计算1~n中的奇数之和及偶数之和。#include82 《C语言程序设计基础》教材参考答案voidmain(){intn,even=0,odd=0,i=1;printf("请输入n的值:");scanf("%d",&n);do{if(i%2==0)even+=i;elseodd+=i;i++;}while(i<=n);printf("自然数序列1到%d的奇数和为%d,偶数和为:%d.n",n,odd,even);}2.利用do-while语句计算1+1/2+1/3+…+1/n。#includevoidmain(){intn,i=1;doubles=0;printf("请输入n的值:");scanf("%d",&n);do{s+=1.0/i;i++;}while(i<=n);printf("计算结果为:%.2lf.n",s);}【随堂练习5-3】1.利用for语句计算1~n中的奇数之和及偶数之和。#includevoidmain(){intn,even=0,odd=0,i=1;printf("请输入n的值:");scanf("%d",&n);for(i=1;i<=n;i++)if(i%2==0)even+=i;elseodd+=i;printf("自然数序列1到%d的奇数和为%d,偶数和为:%d.n",n,odd,even);82 《C语言程序设计基础》教材参考答案}2.利用for语句计算1+1/2+1/3+…+1/n。#includevoidmain(){intn,i=1;doubles=0;printf("请输入n的值:");scanf("%d",&n);for(i=1;i<=n;i++)s+=1.0/i;printf("计算结果为:%.2lf.n",s);}一.单元总结在本单元中,如何理解循环的本质、如何分析循环的三个要素以及如何描述循环结构语句是核心内容。通过本单元的学习,我们应该知道:1.循环的本质是将程序员从大量重复编写相同代码的工作中解放出来,减少程序源代码的存储空间,提高程序的质量,提高程序编写的工作效率,但计算机执行程序的工作量并没有减少。2.循环结构的三要素包括:(1)循环变量初值(2)循环控制条件表达式(3)循环体3.循环结构描述语句有三种:while、do-while和for。其中while和do-while的区别在于不管循环条件是否成立,do-while循环都先执行一次循环体,所以do-while循环的循环体至少执行一次,而while循环的循环体可能一次都不执行。4.循环结构控制语句break的作用是:结束循环;循环结构控制语句continue的作用是:提前结束本次循环。5.在一个循环结构语句中又包含了一个循环结构语句称之为循环的嵌套。程序执行时,外层循环每执行一次,内层循环就要完整的执行完,直至内层循环执行结束,再开始执行下一次外层循环。82 《C语言程序设计基础》教材参考答案学习完本单元,应该掌握C语言循环结构程序设计的思路和基本语句的用法。至此,我们就学完了结构化程序设计中的三种基本结构:顺序、选择和循环。一.单元练习一.选择题1.下面说法正确的是()。A.while语句不管条件表达式是否为真,都将执行一次循环体。B.do-while语句构成的循环,一定要有能使while后面表达式的值为0的操作,或在循环体中使用break语句。C.for循环只能用于循环次数确定的情况,且先执行循环体语句,后判断条件表达式。D.break语句的作用是从最近的循环体内跳出来,而continue语句的作用是继续执行循环体中尚未执行的语句。2.对for(表达式1;;表达式3),可理解为()。A.for(表达式1;0;表达式3)B.for(表达式1;1;表达式3)C.语法错误D.仅执行循环一次3.以下程序的功能为()。#includevoidmain(){inti,k=0;for(i=1;i<10;i+=2)k+=i+1;printf("%dn",k);}A.计算自然数1~9的累加和B.计算自然数1~10的偶数之和C.计算自然数1~9的奇数之和D.计算自然数1~10的累加和4.以下能正确计算1*2*3*4*5*6*7*8*9*10的程序段是()。A.do{i=1;s=1;B.do{i=1;s=0;s=s*i;s=s*i;i++;i++;}while(i<=10);}while(i<=10);C.i=1;s=1;D.i=1;s=0;82 《C语言程序设计基础》教材参考答案do{do{s=s*i;s=s*i;i++;i++;}while(i<=10);}while(i<=10);5.有以下程序段intk=0;while(k=1)k++;while循环执行的次数是()。A.无限次B.1次C.语法错误,不能执行D.一次也不执行二.填空题1.若输入字符串:abcde<回车>,则以下while循环体将执行次。while((ch=getchar())==’e’)printf("*");2.以下程序执行后的输出结果是。#includevoidmain(){inti;for(i=0;i<3;i++)switch(i){case1:printf("%d",i);case2:printf("%d",i);default:printf("%d",i);}}3.下面程序的功能是:输出100以内能被3整除且个位数为6的所有整数,请填空。#includevoidmain(){inti,j;for(i=0;;i++){j=i*10+6;if()continue;printf("%dn",j);}}4.有以下程序#includevoidmain()82 《C语言程序设计基础》教材参考答案{intx=23;do{printf("%d",x--);}while(!x);}该程序执行的结果为。5.以下程序的功能是计算1-3+5-7+…-99+101的值,请将程序补充完整。#includevoidmain(){inti,t=1,s=0;for(i=1;i<=101;i+=2){s=s+;;}printf("%dn",s);}*******************************************************************************习题答案:一.选择题1.B2.B3.B4.C5.A二.填空题1.02.0111223.i<10j%3!=04.235.s*tt=-t*******************************************************************************四.实训指导实训指导【1】1.某选秀节目有十个评委,选手的得分为十个评委评分后的平均分,试编程实现评分功能,即输入评委给出的10个分数,输出平均分。(要求:分别用三种循环语句完成)82 《C语言程序设计基础》教材参考答案(1)用while语句完成#includevoidmain(){inti=1;doublescore,sum=0,ave;while(i<=10){printf("请输入第%d位评委分数:",i);scanf("%lf",&score);sum+=score;i++;}ave=sum/10;printf("选手最终得分为:%.2lf.n",ave);}(2)用do-while语句完成#includevoidmain(){inti=1;doublescore,sum=0,ave;do{printf("请输入第%d位评委分数:",i);scanf("%lf",&score);sum+=score;i++;}while(i<=10);ave=sum/10;printf("选手最终得分为:%.2lf.n",ave);}(3)用for语句完成#includevoidmain(){inti;doublescore,sum=0,ave;for(i=1;i<=10;i++){printf("请输入第%d位评委分数:",i);scanf("%lf",&score);sum+=score;}ave=sum/10;printf("选手最终得分为:%.2lf.n",ave);}82 《C语言程序设计基础》教材参考答案1.某黑夜一司机碰伤行人之后落荒而逃,经警方调查,有三个目击者。甲说:车牌号的前两位相同;乙说:车牌号的后两位加起来等于6;丙说:车牌号是一个四位数并且能被2整除。根据上述线索,编程列出可能的车牌号。#includevoidmain(){inta1,a2,a3,a4,a;for(a=1000;a<10000;a++){a1=a/1000;a2=a/100%10;a3=a/10%10;a4=a%10;if(a1==a2&&(a3+a4)==6&&a4%2==0)printf("可能的车牌号为:%d.n",a);}}3.输出2000~2050年中所有的闰年,要求每行输出四个年号。#includevoidmain(){inti=0,year;printf("2000~2050年中所有的闰年为:n");for(year=2000;year<=2050;year++){if(year%4==0&&year%100!=0||year%400==0){printf("%8d",year);i++;if(i%4==0)putchar("n");}}}4.(课外完成)完成【引例】中的题目。#include#include#include//getch()函数#include//exit()函数voidmain(){doublea,b,c,area,s;charch;while(1)82 《C语言程序设计基础》教材参考答案{printf("请输入三角形三边长:");scanf("%lf%lf%lf",&a,&b,&c);if(a+b>c&&b+c>a&&a+c>b){s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf("三角形的面积为:%.2f.n",area);}elseprintf("注意:不能构成合法三角形.n");printf("按任意键继续,按q退出.nn");ch=getch();if(ch=="q"||ch=="Q")break;//或exit(0);}}实训指导【2】1.按照图5-7所示效果,输出九九乘法表。#includevoidmain(){inti,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%d*%d=%-4d",j,i,j*i);printf("n");}}2.用循环结构输出几何图形:************************************    提示:82 《C语言程序设计基础》教材参考答案输出简单的几何图形(如图),是循环结构的典型应用之一。对于这一类型的题目,初学者往往直接采用一条或若干条输出语句printf完成,这样虽然可以完成题目要求,但是很显然缺乏灵活性,不符合程序设计的思想。按照正常的程序设计思想,应该先分析图形的构成,找出其中的规律。如图中的实心三角形,每一行由若干个空格、星号和一个回车换行符构成,将行号、空格数和星号数分别定义为i、m和n,对于行i,相应的空格数m为6-i,星号数n为2*i-1。#includevoidmain(){inti,m,n;for(i=1;i<=6;i++){for(m=1;m<=6-i;m++)putchar("");for(n=1;n<=2*i-1;n++)putchar("*");putchar("n");}}3.百元百鸡问题。我国古代数学家张丘键在《算经》中出了一道题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?这是一个古典数学问题,意思是说用一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问一百只鸡中公鸡、母鸡、小鸡各多少只。提示:设一百只鸡中公鸡、母鸡、小鸡分别为x,y,z,问题化为三元一次方程组:这里x,y,z为正整数,且z是3的倍数;由于鸡和钱的总数都是100,可以确定x,y,z的取值范围:1)x的取值范围为1~202)y的取值范围为1~333)z的取值范围为3~99,步长为3对于这个问题我们可以用穷举的方法,遍历x,y,z的所有可能组合,最后得到问题的解。#includevoidmain(){intx,y,z;for(x=1;x<=20;x++)for(y=1;y<=33;y++)for(z=3;z<=99;z+=3){82 《C语言程序设计基础》教材参考答案if((5*x+3*y+z/3==100)&&(x+y+z==100))/*是否满足百钱和百鸡的条件*/printf("cock=%d,hen=%d,chicken=%dn",x,y,z);}}程序运行结果如下:cock=4,hen=18,chicken=78cock=8,hen=11,chicken=81cock=12,hen=4,chicken=8482 《C语言程序设计基础》教材参考答案单元六数组的使用一.随堂练习【随堂练习6-1】1.完成【引例】中的题目(1)。floatscore[40];2.有数组定义doublep[8],数组中每个元素占用8字节,整个数组占用64字节,p可以代表数组在内存中存放的首地址。【随堂练习6-2】1.将【例6-3】中的一维数组中各元素的值逆序输出。#includevoidmain(){inta[10]={0,1,2,3,4,5,6,7,8,9};for(inti=9;i>=0;i--)printf("%4d",a[i]);}【随堂练习6-3】1.判断如下二维数组的定义方式是否正确?(1)floatb[10][10];正确(2)#defineN20正确ints[N][N];(3)intn=20;intarray[n][10];不正确(4)doublea[4,5];不正确【随堂练习6-4】1.将一个二维数组行和列的元素互换,存到另一个二维数组中,即矩阵的转置。#includevoidmain(){inta[2][3],b[3][2];inti,j;82 《C语言程序设计基础》教材参考答案printf("原矩阵为:n");for(i=0;i<2;i++)for(j=0;j<3;j++){scanf("%d",&a[i][j]);b[j][i]=a[i][j];}printf("转置后的矩阵为:n");for(j=0;j<3;j++){for(i=0;i<2;i++)printf("%4d",b[j][i]);putchar("n");}}【随堂练习6-5】1.输入两个字符串str1和str2,比较后将较大的字符串存在str1中,将较小的存在str2中。#include#includevoidmain(){charstr1[20],str2[20],str[20];printf("请输入一个字符串:");gets(str1);printf("请再输入一个字符串:");gets(str2);if(strcmp(str1,str2)<0){strcpy(str,str1);strcpy(str1,str2);strcpy(str2,str);}printf("较大的字符串为:%s.n",str1);printf("较小的字符串为:%s.n",str2);}一.单元总结在本单元中,如何定义一维、二维数组、如何操作数组以及如何利用字符数组处理字符串是核心内容。通过本单元的学习,我们应该知道:1.数组是一组相同类型的有序数据的集合。数组要先定义后使用,可以在定义时初始化,每个数组元素相当于同类型的变量,使用数组名和下标来唯一确定数组中的元素。82 《C语言程序设计基础》教材参考答案1.一维数组定义的一般格式为:类型标识符数组名[整型常量表达式];,对于已定义好的一维数组C编译系统会分配连续的存储空间,数组名代表数组在内存中存放的首地址。一维数组的引用方法为:数组名[下标],其中下标从0开始。1.二维数组定义的一般格式为:类型标识符数组名[整型常量表达式1][整型常量表达式2];,对于已定义好的二维数组C编译系统会分配连续的存储空间,将二维数组元素按行依次存储。二维数组元素的访问涉及第一维和第二维两个下标,其引用方法为:数组名[下标1][下标2]。2.字符数组是一组字符型数据的有序集合,其中每个数组元素的值都是字符。C语言用字符数组实现字符串变量,字符串以‘’作为结束标志。字符串的输入可以通过gets()、scanf()函数实现,字符串的输出可以通过puts()、printf()函数实现。常见的字符串操作库函数有:求字符串长度函数strlen()、字符串复制函数strcpy()、字符串连接函数strcat()、字符串比较函数strcmp(),这些库函数的定义都在头文件string.h中。常见的字符库函数的定义都在头文件ctype.h中。3.数组的操作通常离不开循环结构,在使用循环结构操作数组时应注意下标的变化规律。通过本单元的学习,应该掌握C语言中对于数组这一构造数据类型的使用方法和操作方法。三.单元练习一.选择题1.定义一个名为s的字符型数组,并且赋初值为字符串"123"的错误语句是()。 A.char s[]={‘1","2","3"," "};  B.char s[]={"123"}; C.char s[]={"123n"};            D.char s[4]={"1","2","3"}; 2.下列数组定义语句中,正确的是()A.inta[][]={1,2,3,4,5,6};B.chara[2][3]=‘a",‘b";C.inta[][3]={1,2,3,4,5,6};D.inta[][]={{1,2,3},{4,5,6}};3.已定义inta[][3]={1,2,3,4,5,6,7,8,9};,则a[1][2]的初值为()。A.2B.4C.6D.84.判断字符串str1是否大于字符串str2,应当使用()。A.if(str1>str2)B.if(strcmp(str1,str2)<0)82 《C语言程序设计基础》教材参考答案C.if(strcmp(str2,str1)>0)D.if(strcmp(str1,str2)>0)5.下列程序段的功能是给数组所有的元素输入数据,然后输出,请选择正确答案填空()。#includevoidmain(){inta[10],i=0;while(i<10)scanf("%d",);for(i=0;i<10;i++)printf("%4d",a[i]);}A.a+(i++)B.&a[i+1]C.a+iD.&a[++i]二.填空题1.定义一个名为a的单精度浮点型一维数组,数组的长度为4,所有元素的初值均为0,定义语句为,引用该数组元素时,下标的范围是,该数组占用的存储空间为字节。2.设有数据定义语句inti=3,x[4]={1,2,3};,则数组元素x[i] 的值是。3.下列程序的功能是读取10个实数,然后依次输出前1个实数和、前2个实数和、...、前9个实数和、前10个实数和。请将程序补充完整。#includevoidmain(){floatf[10],x=0;inti;for(i=0;i<10;i++)scanf("%f",&f[i]);for(i=0;i<10;i++){;printf("sumofNo.%2dis%.2f.n",i,x);}}4.下列程序的功能是求两个矩阵的和,请将程序补充完整。#includevoidmain(){inta[3][4],b[3][4],c[3][4];//数组c存放矩阵a与b的和inti,j;for(i=0;i<3;i++)for(j=0;j<4;j++)82 《C语言程序设计基础》教材参考答案scanf("%d",&a[i][j]);for(i=0;i<3;i++)for(j=0;j<4;j++){scanf("%d",);;}for(i=0;i<3;i++){for(j=0;j<4;j++)printf("%d",c[i][j]);putchar("n");}}5.阅读下列程序,程序运行后的输出结果是。#include#includevoidmain(){chars[3][20]={“1234”,”234567”,”6789”};inti,k;for(k=0,i=1;i<3;i++)if(strcmp(s[k],s[i])<0)k=i;puts(s[k]);}*******************************************************************************习题答案:一.选择题1.C2.C3.C4.D5.A二.填空题1.floata[4]={0}0至3162.03.x+=f[i];或x=x+f[i];4.&b[i][j]c[i][j]=a[i][j]+b[i][j]5.6789*******************************************************************************四.实训指导82 《C语言程序设计基础》教材参考答案实训指导【1】1.完成【引例】中的题目(2)和(3)。(2)写出输入40名学生成绩的程序代码:floatscore[40];for(inti=0;i<40;i++)scanf(“%f”,&score[i]);(3)试写出完整的程序实现代码:#includevoidmain(){floatscore[40],ave=0;inti;printf("请输入40个学生成绩:");for(i=0;i<40;i++){scanf("%f",&score[i]);ave+=score[i];}ave=ave/40;printf("考试平均分为:%.2f.",ave);}2.输入10个学生的成绩,求出平均成绩,并将低于平均成绩的分数显示出来。#includevoidmain(){floatscore[10],ave=0;inti;printf("请输入10个学生成绩:");for(i=0;i<10;i++){scanf("%f",&score[i]);ave+=score[i];}ave=ave/10;printf("考试平均分为:%.2f.n",ave);printf("低于平均分的成绩有:");for(i=0;i<10;i++)if(score[i]voidmain(){inti;intf[20]={1,1};for(i=2;i<20;i++)f[i]=f[i-1]+f[i-2];for(i=0;i<20;i++){if(i%5==0)printf("n");printf("%12d",f[i]);}printf("n");}5.有一个a[3][4]整型二维数组,找出各行的最大值存到数组b[3]中。#includevoidmain(){inta[3][4],b[3];inti,j;printf("请输入3行4列数据:n");for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);printf("各行最大值分别为:");for(i=0;i<3;i++){b[i]=a[i][0];for(j=1;j<4;j++)if(b[i]#defineN100voidmain(){inti=0,n=0;//i用于统计字符串长度,n用于统计输入字符出现的次数charstr[N],ch;printf("请输入一个字符串:");gets(str);printf("请输入一个字符:");ch=getchar();while(str[i]!=""){if(str[i]==ch)n++;i++;}printf("字符串长度为:%d.n",i);printf("字符%c出现的次数为:%d.n",ch,n);}1.输入一个字符串,判断该字符串是否为回文。回文是对称相同的字符串,如"level"。#include#includeintmain(){intflag=1;charstr[80];inti,j,len;printf("请输入一个字符串,以回车结尾n");gets(str);len=strlen(str);for(i=0,j=len-1;i<=j;i++,j--){if(str[i]!=str[j]){flag=0;break;}}if(flag)82 《C语言程序设计基础》教材参考答案printf("输入的字符串是回文.n");elseprintf("输入的字符串不是回文.n");return0;}4.输入六个英文国家名称,按字典序排序。(注意国家名称字符串比较的方法和字符串互换的方法。)(1)采用冒泡排序法#include#includevoidmain(){charstr[20],c[6][20];//用二维数组存放六个国家名inti,j;printf("请输入六个国家名称:n");for(i=0;i<6;i++)//输入六个国家名gets(c[i]);for(i=1;i<6;i++)//用“冒泡排序法”进行排序for(j=0;j<6-i;j++)if(strcmp(c[j],c[j+1])>0){strcpy(str,c[j]);strcpy(c[j],c[j+1]);strcpy(c[j+1],str);}printf("排序后的结果为:n");for(i=0;i<6;i++)//输出排序后的六个国家名puts(c[i]);}(2)采用选择排序法#include#includevoidmain(){charstr[20],c[6][20];//用二维数组存放六个国家名inti,j;printf("请输入六个国家名称:n");for(i=0;i<6;i++)//输入六个国家名gets(c[i]);for(i=0;i<5;i++)//用“选择排序法”进行排序for(j=i+1;j<6;j++)if(strcmp(c[i],c[j])>0){strcpy(str,c[i]);strcpy(c[i],c[j]);strcpy(c[j],str);}printf("排序后的结果为:n");for(i=0;i<6;i++)//输出排序后的六个国家名puts(c[i]);}82 《C语言程序设计基础》教材参考答案单元七函数的使用一.随堂练习【随堂练习7-1】1.完成【引例】中的问题(2)。以perimeter为函数名,写出“计算矩形周长”自定义函数的程序代码。intperimeter(inta,intb){return2*a+2*b;}2.自定义函数even,其功能为判断一个整数是否为偶数。inteven(intn){if(n%2==0)return1;elsereturn0;}【随堂练习7-2】对【随堂练习7-1】自定义函数even进行声明。inteven(intn);或inteven(int);【随堂练习7-3】1.在主函数中输入一个整数,通过调用【随堂练习7-1】自定义函数even判断该数的奇偶性。#includeinteven(intn){if(n%2==0)return1;elsereturn0;82 《C语言程序设计基础》教材参考答案}intmain(){intn;printf("请输入一个整数:");scanf("%d",&n);if(even(n))printf("该整数为偶数.n");elseprintf("该整数为奇数.n");}2.编程解决单元六实训指导(一)中的第二题:输入10个学生的成绩,求出平均成绩,并将低于平均成绩的分数显示出来。其中“求平均成绩”用自定义函数average来实现。#includefloataverage(float[],int);voidmain(){floatscore[10],ave;inti;printf("请输入10个学生成绩:");ave=average(score,10);printf("考试平均分为:%.2f.n",ave);printf("低于平均分的成绩有:");for(i=0;i<10;i++)if(score[i]voidfun(intx,inty){x=x+y;y=x-y;x=x-y;printf("%d,%dn",x,y);}voidmain(){intx=2,y=3;fun(x,y);printf("%d,%dn",x,y);}3.以下程序输出结果为。#includeinta,b;voidfun(){a=10;b=20;}voidmain(){inta=3,b=9;fun();printf("%d,%dn",a,b);}82 《C语言程序设计基础》教材参考答案4.以下程序输出结果为。#includeintf()//定义f函数,a为形参{intb=0;//定义b为自动变量staticintc=3;//定义c为静态局部变量b=b+1;c=c+1;returnb+c;}voidmain(){inta1,a2;a1=f();a2=f();printf("%d,%d",a1,a2);}5.以下程序输出结果为。#includeintfun(intn){if(n==1)return1;elsereturnfun(n-1)+1;}voidmain(){inti,j=0;for(i=1;i<3;i++)j+=fun(i);printf("%dn",j);}6.以下程序输出结果为。#includevoidfun(inta[],intn){for(inti=0;i0)a[i]*=2;}voidmain(){intb[5]={1,2,3,4,5};fun(b,5);for(inti=0;i<5;i++)printf("%dt",b[i]);}*******************************************************************************82 《C语言程序设计基础》教材参考答案习题答案:一.选择题1.A2.A3.D4.A5.B6.B7.B二.填空题1.112.3,22,33.3,94.5,65.36.246810*******************************************************************************四.实训指导1.编写一个函数fun,其功能为:对一个字符进行判断,如果是大写字母则转换成小写字母。charfun(charch){if(ch>"A"&&ch<"Z")ch=ch+32;returnch;}2.编写一个函数fun,以三角形的三个边长为参数,判断该三角形是否为直角三角形,如果是直角三角形返回值为1,否则返回值为0。intfun(inta,intb,intc){if(a*a+b*b=c*c||a*a+c*c=b*b||b*b+c*c=a*a)return1;elsereturn0;}3.在一维数组中存入10整数并排序,其中数据的输入、排序和输出功能用自定义函数实现。提示:自定义三个函数:(1)voidinput(inta[],intn);//数组数据的输入(2)voidsort(inta[],intn);//数组数据的排序(3)voidoutput(inta[],intn);//数组数据的输出82 《C语言程序设计基础》教材参考答案对形参的说明:a[]为一维数组,n为数组元素个数。#includevoidinput(inta[],intn){inti;for(i=0;ia[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}}voidoutput(inta[],intn){inti;for(i=0;ilongfib(intn){if(n==1||n==2)82 《C语言程序设计基础》教材参考答案return1;elsereturnfib(n-1)+fib(n-2);}voidmain(){intn;scanf("%d",&n);printf("%ld",fib(n));}82 《C语言程序设计基础》教材参考答案单元八指针的使用一.随堂练习【随堂练习8-1】1.有doubles;,定义一个指向变量s的指针变量q。double*q=&s;或double*q;q=&s;2.完成【引例1】。【引例1】有一个整型变量a,如何知道该变量的存储地址?如何通过指针变量对a进行操作?(1)变量a的存储地址:&a(2)通过指针变量对a进行操作:定义指针变量p指向a,int*p=&a;,然后可通过*p访问并操作变量a。3.编程验证【例8-1】和【例8-2】中指针变量的值是否与所指向变量的地址相同。(1)验证【例8-1】:printf(“%d,%d”,&n,p);观察输出的两个值是否相同。(2)验证【例8-2】:printf(“%d,%d”,str,cp);观察输出的两个值是否相同。【随堂练习8-2】1.试分析如下程序,看看是否能实现【例8-5】所要求的功能?#includevoidadd(int*pa,int*pb,int*psum){*psum=*pa+*pb;}voidmain(){inta,b,s;scanf("%d%d",&a,&b);add(&a,&b,&s);printf("s=%dn",s);}答:能够实现。【随堂练习8-3】完成【引例2】。82 《C语言程序设计基础》教材参考答案【引例2】一维数组是占用连续存储空间的数据,如何通过指针变量对这段内存空间进行操作?答:定义指针变量并指向数组首地址,然后就可以利用指针变量访问并操作了。【随堂练习8-4】下面函数的功能是:计算一个字符串的实际长度。将程序补充完整。intstrlen(char*s){intlen=0;/*定义计数器变量*/while(*s!=’’){len++;s++;}return(len);}【随堂练习8-5】下面函数的功能是:获取第n个数组元素的地址。将程序补充完整。int*getadd(int*p,intn)//指针p指向数组首地址{return(p+n-1);}二.单元总结在本单元中,对指针的理解,以及利用指针访问不同形式的数据是核心内容。通过本单元的学习,我们应该知道:1.内存地址就称为指针。C语言允许用一个变量来存放指针,这种变量称为指针变量,而指针变量的值就是某个内存单元的地址。2.定义指针变量的一般格式为:类型标识符*指针变量名,其中:(1)“指针变量名”前面的“*”,表示该变量是指针变量,不能省略。(2)“类型标识符”表示该指针变量所指向的变量的数据类型。(3)当一个指针变量已确定指向某类型的变量时,不能再指向另一种类型的变量。3.指针变量被赋值后即可引用,引用指针变量的一般方法为:*指针变量名。4.指针和数组有着密切的关系,任何通过控制数组下标实现的对数组的操作,都可用指针来实现。要通过指针操作数组,首先要建立指针变量与数组之间的关系,然后才能通过指针变量访问数组元素。若有语句段:  inta[10];int*p; p=a82 《C语言程序设计基础》教材参考答案;,则对于数组元素的访问方式有a[i]、*(p+i)、p[i],对数组元素地址的表示方式有a+i、p+i、&a[i]。5.数组名代表数组的首地址,利用函数处理一维数组数据时,函数之间的参数传递为数组首地址。将数组的首地址作为实参传递给函数的形参以后,实参数组和形参数组其实是同一段内存中的数据。6.字符串是存放在某存储区域的一串字符序列,可通过字符数组和字符指针两种方式操作字符串。7.函数返回值可以是地址(指针类型),返回值为地址的函数定义形式为:<类型标识符>*<函数名>([形参列表]);。通过本单元的学习,应明确地址和指针的关系,掌握使用指针访问内存数据的基本方法。三.单元练习一.选择题1.假设整型变量a的值是12,a的地址是2200,若想使整型指针变量p指向a,以下赋值正确的是()。A.&a=2200;  B.*p=12;C.*p=2200;D.p=&a;2.若有定义int*p,m=5,n;,以下正确的程序段是()。A.p=&n;scanf"%d",&p); B.p=&n;scanf("%d",*p);C.scanf("%d",&n);*p=n;D.p=&n;*p=m;3.以下合法的定义是()。A.str[]={"China"}; B.char*p="China";C.char*p;strcpy(p,"China");D.charstr[13];str[]="China";4.若有定义inta[]={1,3,5,7,9,11},*p=a;,则能够正确引用该数组元素的是()。A.a  B.a[6]C.*(p--)D.*(--p)5.以下程序运行结果为()。#includevoidmain(){chara[]="Language",b[]="programe";char*p,*q;intk;p=a;q=b;82 《C语言程序设计基础》教材参考答案for(k=0;k<8;k++)if(*(p+k)==*(q+k))printf("%c",*(p+k));}A.gae  B.gaC.LanguageD.programe二.填空题1.给出以下程序的执行结果。#includevoidmain(){int*p1,*p2,*p;inta=10,b=12;p1=&a;p2=&b;if(avoidmain(){inta[10]={6,7,2,9,5,10,4,3,8,1};int*p=a,i;for(i=0;i<10;i++,p++)if()*a=*p;printf("%d",*a);}3.以下程序的输出结果是。#includevoidmain(){inta[2][3]={{1,2,3},{4,5,6}};intm,*ptr;ptr=&a[0][0];m=(*ptr)*(*(ptr+2))*(*(ptr+4));printf("%d",m);82 《C语言程序设计基础》教材参考答案}4.下列函数功能是计算str所指字符串的长度,并作为函数值返回。请填空。intmystrlen(char*str){char*p;for(p=str;!="";p++);return();}5.以下程序中,函数scmp的功能是返回形参指针s1和s2所指字符串中较小字符串的首地址。试问当程序运行时依次输入:abcd、abba和abc三个字符串,则输出结果为。#include#includechar*scmp(char*s1,char*s2){if(strcmp(s1,s2)<0)return(s1);elsereturn(s2);}voidmain(){inti;charstring[20],str[3][20];for(i=0;i<3;i++)gets(str[i]);strcpy(string,scmp(str[0],str[1]));strcpy(string,scmp(string,str[2]));printf("%sn",string);}*******************************************************************************习题答案:一.选择题1.D2.D3.C4.C5.A二.填空题1.12,10,10,122.*p>*a3.154.*pp-str82 《C语言程序设计基础》教材参考答案5.abba*******************************************************************************四.实训指导1.验证教材中各示例程序。(略)2.定义函数voidfun(floatm,int*x,int*y);,将m的整数部分存于x所指的单元中,将小数部分存于y所指的单元中。请将程序补充完整。(注意:由于浮点数精度原因,求得的小数部分存在异常)#includevoidfun(floatm,int*x,int*y){floatc;intt1,t2;t1=(int)m;*x=t1;c=m-(int)m;while(c-(int)c>0)c*=10;t2=(int)c;*y=t2;}voidmain(){floatm;inta,b;printf("请输入一个小数:");scanf("%f",&m);fun(m,&a,&b);printf("该数的整数部分为%d.n",a);printf("该数的小数部分为%d.n",b);}3.定义函数intfun(char*s);,判断s所指的字符串是否为回文,若是则函数返回1,否则返回0。请将程序补充完整。#include#includeintfun(char*s){intlen,i,j;intflag=1;len=strlen(s);for(i=0,j=len-1;i<=j;i++,j--){82 《C语言程序设计基础》教材参考答案if(s[i]!=s[j]){flag=0;break;}}returnflag;}voidmain(){chars[20];printf("请输入一个字符串:");gets(s);if(fun(s))printf("字符串%s是回文.",s);elseprintf("字符串%s不是回文.",s);}4.在一维数组中存入10整数并排序,其中数组数据的输入、排序和输出功能用自定义函数实现。提示:自定义三个函数:(1)voidinput(int*p,intn);//数组数据的输入(2)voidsort(int*p,intn);//数组数据的排序(3)voidoutput(int*p,intn);//数组数据的输出对形参的说明:指针变量p指向数组首地址,n为数组元素个数。#includevoidinput(int*p,intn){inti;for(i=0;ip[j+1])82 《C语言程序设计基础》教材参考答案{t=p[j];p[j]=p[j+1];p[j+1]=t;}}voidoutput(int*p,intn){inti;for(i=0;istructjob_exam//结构类型关键字以及结构名称{unsignednum;//编号charname[10];//姓名intexama;//笔试成绩intexamb;//面试成绩inttotal;//总成绩};voidmain(){structjob_exama,b;//定义两个结构变量a和bstructjob_examt;//定义中间变量tprintf("请输入a考生信息:n");scanf("%u%s%d%d",&a.num,a.name,&a.exama,&a.examb);a.total=a.exama+a.examb;printf("请输入b考生信息:n");scanf("%u%s%d%d",&b.num,b.name,&b.exama,&b.examb);b.total=b.exama+b.examb;t=a;a=b;b=t;printf("交换后的信息:n");printf("编号姓名笔试面试总成绩n");printf("%4u%10s%6d%6d%6dn",a.num,a.name,a.exama,a.examb,a.total);printf("%4u%10s%6d%6d%6dn",b.num,b.name,b.exama,b.examb,b.total);}二.单元总结在本单元中,结构类型数据的含义、结构类型的描述方法、结构类型数据的基本操作是核心内容。通过本单元的学习,我们应该知道:1.结构类型数据使用的基本步骤为结构类型说明、结构类型变量定义和结构变量使用。82 《C语言程序设计基础》教材参考答案2.结构类型说明的关键字为struct。结构类型变量所占用内存字节数为结构变量所包含的各个成员变量所占字节数之和。3.若定义了一个结构变量和一个指向结构变量的指针,则可以用以下三种形式访问结构成员:(1)利用结构变量与成员运算符相结合,基本格式为:结构变量.成员名。(2)利用结构指针与成员运算符相结合,基本格式为:(*结构指针).成员名。(3)利用结构指针与指向运算符相结合,基本格式为:结构指针->成员名。4.结构变量不能作为一个整体进行输入和输出,但结构变量作为一个整体可以被复制、赋值、传递参数,以及作为函数返回值。当用结构变量作函数参数进行整体传送时,要将全部成员逐个传送,特别是成员为数组时,将会使传送的时间和空间开销很大,所以一般不将结构变量作为函数参数,而用结构指针变量作函数参数。这时由实参向形参传递的只是地址,从而减少了时间和空间的开销。通过本单元的学习,应明确结构类型的数据特点,掌握结构类型数据描述和操作的基本步骤和方法。三.单元练习一.选择题1.以下描述正确的是()。A.结构类型中的成员可以是结构类型B.结构类型的成员不能是指针类型C.结构类型中各成员共享同一个内存单元D.在结构类型说明后就立即分配内存空间2.已知如下定义的结构类型变量,若有p=&data,则对data中的成员a的正确引用是()。structsk{inta;floatb;}data,*p;A.(*p).data.aB.(*p).aC.p->dataD.p.data.a3.若有如下定义,则下列输入语句正确的是()。structstu{inta;intb;82 《C语言程序设计基础》教材参考答案}student;A.scanf(“%d”,&a);B.scanf(“%d”,&student);C.scanf(“%d”,&stu.a);D.scanf(“%d”,&student.a);4.有如下结构类型说明和变量定义,则操作语句正确的是()。structworker{intnum;charname[10];charsex;intage;}s1,s2,t;A.if(s1.age>s2.age){t=s1;s1=s2;s2=t;}B.s1={1101,”zhangsan”,’f’,28};C.gets(&s1.name);D.printf(“%d,%s,%c,%d”,s1.num,s1.name,s1->sex,s1->age);5.以下叙述正确的是()。A.结构类型说明与结构变量的含义一样,都可以用来存放数据。B.对于不同类型的数据,若想形成一个有机的整体,可以使用结构类型。C.可以使用“==”或“!=”对同一个结构类型的两个变量进行整体比较。D.同一结构类型中的成员变量名称可以相同。二.填空题1.若有如下定义:structstudent{intnum;charname[12];doublescore;}stu;则结构类型的关键字是,用户定义的结构类型名是,用户定义的结构变量是。2.若有如下定义:structworker{intnum;charname[12];charsex;intage;}s,*p;则sizeof(structworker)的值是,变量s所占内存字节数是82 《C语言程序设计基础》教材参考答案,变量p所占内存字节数是。3.若有如下定义:structnum{inta;intb;floatf;}n={1,3,5.0};structnum*pn=&n;则表达式pn->b/n.a*pn->b的值是,表达式(*pn).a+pn->f的值是。4.结构数组中存有三个人的姓名和年龄,要输出年龄最大的人的姓名和年龄。将程序补充完整。#includestructman{charname[20];intage;}person[]={"Zhanghua",20,"Liuyang",25,"Sunpeng",19};voidmain(){structman*p,*q;intold=0;for(p=person;p;p++)if(oldage){q=p;;}printf("%s%d",q->name,q->age);}5.下面程序的功能是从键盘上输入5个人的年龄、姓名和性别,然后输出。将程序补充完整。#includestructman{charname[20];intage;charsex[4];};voiddata_in(structman*p,intn){structman*q=;for(;pname,p->age,p->sex);}voidmain(){structmanperson[5];data_in(person,5);data_out(person,5);}*******************************************************************************习题答案:一.选择题1.A2.B3.D4.A5.B二.填空题1.structstudentstu2.21211(上机测试)3.96.0000004.page;5.p+np->name,&(p->age),p->sexp+n四.实训指导1.编程计算地图上两点之间直线距离。提示:地图上坐标用结构类型表示,包括两个成员:x坐标和y坐标。#include#includestructcoordinate//坐标结构名称{doublex;//X坐标doubley;//Y坐标};82 《C语言程序设计基础》教材参考答案voidmain(){structcoordinatea,b;//定义两个坐标点a和bdoubled;//定义距离变量printf("请输入起点坐标:");scanf("%lf%lf",&a.x,&a.y);printf("请输入终点坐标:");scanf("%lf%lf",&b.x,&b.y);d=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));printf("两坐标点之间的距离为:%.2lf",d);}2.根据汽车行驶的起点和终点坐标,计算汽车行驶距离和燃油消耗。假定条件:(1)汽车行车路线为起点到终点的直线;(2)汽车初始位置坐标为(0,0),燃油初始量为90升;(3)汽车行驶油耗为6升/公里;(4)油耗不足时有提示。提示:结构类型说明structcar{doublex;//x坐标doubley;//y坐标doublefuel;//当前剩余燃料}#include#includestructcar{doublex;//x坐标doubley;//y坐标doublefuel;//当前剩余燃料};voidmain(){structcarend;//定义两个坐标点a和bdoubled;//定义距离变量printf("请输入终点坐标:");scanf("%lf%lf",&end.x,&end.y);d=sqrt(end.x*end.x+end.y*end.y);end.fuel=90-d*6;//燃油初始量为90升,汽车行驶油耗为6升/公里if(end.fuel<0)printf("要到达终点油耗不足,估计还需%.2lf升.",fabs(end.fuel));elseprintf("能够到达终点,到达终点后燃油还剩%.2lf升.",end.fuel);}82 《C语言程序设计基础》教材参考答案2.建立包含若干个人电话信息的简易电话簿,只包含姓名和电话号码,以字符“*”结束输入。输入完成后,执行查找功能:输入姓名,查找该人的电话号码,并输出。若没找到,则输出“查无此人。”的信息提示。(要求:查找功能用自定义函数search()实现)。#include#include//getch()#include//strcmp()voidsearch();structphonebook//简易电话簿{charname[10];//姓名charcode[14];//电话号};structphonebookmybook[10];//定义10条电话信息voidmain(){inti=0;charch="y";while(ch!="*"){printf("n请输入第%d个人的姓名和电话号码:",i+1);scanf("%s%s",mybook[i].name,mybook[i].code);i++;printf("按任意键继续,按*键结束.");ch=getch();}printf("n您的电话簿信息为:n");printf("姓名电话号码n");for(intj=0;jvoidmain(){FILE*fp;charch;fp=fopen("data.txt","w");ch=getchar();while(ch!="*"){fputc(fp,ch);ch=getchar();}fclose(fp);}A.函数fopen调用形式错误B.函数fclose调用形式错误C.函数fputc调用形式错误D.函数getchar()调用形式错误二.填空题82 《C语言程序设计基础》教材参考答案1.以下程序功能是:用变量count统计文件中字符的个数。请将程序补充完整。#include#includevoidmain(){FILE*fp;longcount=0;if((fp=fopen("letter.dat",))==NULL){printf("不能打开文件.");exit(0);}while(fgetc(fp)!=EOF);printf("文件中的字符个数为%ld.n",count);fclose(fp);}2.以下程序的功能是:找出文件file.txt中所有的整数。文本文件file.txt中存有一系列整数,各整数之间以空格、Tab符、回车符分隔。程序中用数组b[]存储不同的整数,变量k为已存入数组b中的不同整数的个数,并假定文件的不同整数个数不超过1000个。请将程序补充完整。#include#include#defineN1000voidmain(){FILE;intb[N],d,i,k;if((fp=)==NULL){printf("不能打开文件.");exit(0);}k=0;while(fscanf()==1){b[k]=d;for(i=0;b[i]!=d;i++);if(i==k)k++;};}*******************************************************************************习题答案:82 《C语言程序设计基础》教材参考答案一.选择题1.B2.B3.C4.A5.C二.填空题1."r"count++2.#include#include#defineN1000voidmain(){FILE*fp;intb[N],d,i,k;if((fp=fopen("file.txt","r"))==NULL){printf("不能打开文件.");exit(0);}k=0;while(fscanf(fp,"%d",&d)==1){b[k]=d;for(i=0;b[i]!=d;i++);if(i==k)k++;}fclose(fp);}*******************************************************************************四.实训指导1.验证10.4综合应用案例中各程序。(略)2.参考【例10-4】,利用fputc()和fgetc()函数将文件test.dat加密,形成新文件testnew.dat。加密方法为:将所有字母转变成其后面的第4个字母,即a->e,A->E,...,z->d,Z->D,依此类推。#include#includevoidmain(){charch;FILE*fpin;//定义文件读指针FILE*fpout;//定义文件写指针fpin=fopen("test.dat","r");fpout=fopen("newtest.dat","w");82 《C语言程序设计基础》教材参考答案while((ch=fgetc(fpin))!=EOF){if(isalpha(ch))if(ch>="W"&&ch<="Z"||ch>="w"&&ch<="z")ch=ch-22;elsech=ch+4;fputc(ch,fpout);//将字符ch写入fp指向的文件}fclose(fpin);//关闭文件fclose(fpout);//关闭文件}3.参考【例10-8】和【例10-10】,利用fprintf()和fscanf()函数将文件in.dat复制成一个新的文件out.dat。#includevoidmain(){intn;FILE*fpin;//定义文件读指针FILE*fpout;//定义文件写指针fpin=fopen("in.dat","r");fpout=fopen("out.dat","w");while((fscanf(fpin,"%d",&n))!=EOF)fprintf(fpout,"%4d",n);fclose(fpin);//关闭文件fclose(fpout);}82'