c程序设计 第13章 文件 答案解析
《C语言程序设计》课后习题答案解析[第四版]谭浩强
第1章程序设计和C语言11.1什么是计算机程序11.2什么是计算机语言11.3C语言的发展及其特点31.4最简单的C语言程序51.4.1最简单的C语言程序举例61.4.2C语言程序的结构101.5运行C程序的步骤与方法121.6程序设计的任务141-5 #include <stdio.h>int main ( ){ printf ("**************************\n\n"); printf(" Very Good!\n\n");printf ("**************************\n"); return 0;}1-6#include <stdio.h>int main(){int a,b,c,max;printf("please input a,b,c:\n");scanf("%d,%d,%d",&a,&b,&c);max=a;if (max<b)max=b;if (max<c)max=c;printf("The largest number is %d\n",max);return 0;}第2章算法——程序的灵魂162.1什么是算法162.2简单的算法举例172.3算法的特性212.4怎样表示一个算法222.4.1用自然语言表示算法222.4.2用流程图表示算法222.4.3三种基本结构和改进的流程图262.4.4用N S流程图表示算法282.4.5用伪代码表示算法312.4.6用计算机语言表示算法322.5结构化程序设计方法34习题36第章最简单的C程序设计——顺序程序设计37 3.1顺序程序设计举例373.2数据的表现形式及其运算393.2.1常量和变量393.2.2数据类型423.2.3整型数据443.2.4字符型数据473.2.5浮点型数据493.2.6怎样确定常量的类型513.2.7运算符和表达式523.3C语句573.3.1C语句的作用和分类573.3.2最基本的语句——赋值语句593.4数据的输入输出653.4.1输入输出举例653.4.2有关数据输入输出的概念673.4.3用printf函数输出数据683.4.4用scanf函数输入数据753.4.5字符数据的输入输出78习题823-1 #include <stdio.h>#include <math.h>int main(){float p,r,n;r=0.1;n=10;p=pow(1+r,n);printf("p=%f\n",p);return 0;}3-2-1#include <stdio.h>#include <math.h>int main(){float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;p=1000;r5=0.0585;r3=0.054;r2=0.0468;r1=0.0414;r0=0.0072;p1=p*((1+r5)*5); // 一次存5年期p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次 p5=p*pow(1+r0/4,4*5); // 存活期存款。
C语言程序设计课后各章节习题答案
main()
{
float x,y,d;
printf("Input x,y:");
scanf("%f,%f",&x,&y);
d=sqrt((x-2)*(x-2)+(y-2)*(y-2));
if(d>1)printf(ntf("inside");
}
12有一函数
x-1 -5<x<0
y= x x=0
x+1 0<x<8
编写一程序,要求输入x的值,输出y的值。分别用不嵌套的if语句,嵌套的if语句,switch语句编写。
答使用不嵌套的if语句程序如下:
main()
{
int x,y;
printf("Input x:");
scanf("%d",&x);
答main()
{
int x,a,b,c;
printf("Input number:");
scanf("%d",&x);
a=x/100;/*变量a中记录x的百倍数字*/
b=x/10%10;/*变量b中记录x的十位数字*/
c=x%10;/*变量c中记录x的个位数字*/
if(a*a*a+b*b*b+c*c*c==x)
if(m==2)
d=28+f;
else
d=31-(m==4)+(m==6)+(m==9)+(m==11);
printf("%d-%d is %d days.\n",y,m,d);
C语言程序设计试题及答案解析
C语言程序设计试题第1、2、3章 概述、类型、表达式一、选择题1、 一个C程序由若干个C函数组成,各个函数在文件中的位置顺序为:( )A、 任意B、 第一个函数必须是主函数,其他函数任意C、 必须完全按照执行的顺序排列D、 其他函数可以任意,主函数必须在最后2、 下列四个叙述中,正确的是:( )A、 C程序中的所有字母都必须小写B、 C程序中的关键字必须小写,其他标示符不区分大小写C、 C程序中的所有字母都不区分大小写D、 C语言中的所有关键字必须小写3、 下列四个叙述中,错误的是:( )A、 一个C源程序必须有且只能有一个主函数B、 一个C源程序可以有多个函数C、 在C源程序中注释说明必须位于语句之后D、 C源程序的基本结构是函数4、 下面不是C语言合法标识符的是:( )A、abcB、5nC、_4mD、x35、 以下叙述不正确的是:( )A. 分号是C语句的必要组成部分B. C程序的注释可以写在语句的后面C. 函数是C程序的基本单位D. 主函数的名字不一定非用main来表示6、 C语言中允许的基本数据类型包括:( )A. 整型、实型、逻辑型B. 整型、实型、字符型C. 整型、字符型、逻辑型D. 整型、实型、逻辑型、字符型7、 C语言中能用八进制表示的数据类型为:( )A、字符型、整型B、整形、实型C、字符型、实型、双精度型D、字符型、整型、实型、双精度型8、 下列属于C语言合法的字符常数是:( )A、’\97’B、”A”C、’\t’D、”\0”9、 在C语言(VC环境)中,5种基本数据类型的存储空间长度的排列顺序为:( )A、char<int<=long int <=float<doubleB、char=int<long int <=float<doubleC、char<int<long int=float=doubleD、char=int=<long int <=float<double10、 在C语言中(VC环境),一定是长整型常数的是:( )A、0LB、4962710C、0412765D、0xa34b7fe11、 若有以下定义语句char c1=’b’, c2=’e’;printf(“%d,%c\n”,c2-c1,c2-‘a’+’A’);则输出结果是:( )A、2,MB、3,EC、2,ED、输出项与相应的格式控制不一致,输出结果不确定12、 以下合法的赋值语句是:( )A、x=y=100B、d--;C、x + yD、c = int(a+b);13、 设变量t为int型,下列选项中不正确的赋值语句是:( )A、++t;B、n1=(n2=(n3=0));C、k=i==m;D、a=b+c=1;14、 在以下一组运算符中,优先级最高的是:( )A、<=B、==C、%D、&&15、 下列能正确表示a≥10或a≤0的关系表达式是:( )A、a>=10 or a<=0B、a<=10 || a>=0C、a>=10 || a<=0D、a>=10 && a<=016、 下列只有当整数x为奇数时,其值为“真”的表达式是:( )A、x%2==0B、!(x%2==0)C、(x-x/2*2)==0D、! (x%2)17、 设a为整型变量,不能正确表达数学关系10<a<15的C语言表达式是:( )A、1 0< a < 15B、!(a<=10 || a>=15)C、a>10 && a<15D、!(a<=10) && !(a>=15)18、 已知x=43, ch=’A’,y=0;则表达式(x>=y&&ch<’B’&&!y)的值是:( )A、0B、语法错C、1D、“假”19、 表达式17%4 /8的值为:( )A、0B、1C、2D、320、 语句printf(“%d”,(a=2)&&(b= -2));的输出结果是:( )A、无输出B、结果不确定C、-1D、121、 一个可执行的C程序的开始执行点是:( )A. 程序中的第一个语句B. 包含文件中的第一个函数C. 名为main的函数D. 程序中的第一个函数22、 组成C语句的一个必不可少的符号是:( )A. 逗号B. 引号C. 冒号D. 分号23、 若将int、long、float等类型的数据进行混合运算,其结果的数据类型是:( )A. intB. longC. floatD. double24、 下述是C语言中有关变量定义的几个说法,正确的是:( )A. 变量可以不定义直接使用B. 一个说明语句只能定义一个变量C. 几个不同类型的变量可在同一语句中定义D. 变量可以在定义时进行初绐化25、 与x * = y + z等价的赋值表达式是:( )A. x = y + zB. x = x * y + zC. x = x * (y + z)D. x = x + y * z26、 当代电子计算机能够自动地处理指定的问题是因为:( )A.计算机是电动的B.有解决该问题的计算机程序C.事先存储了解决该问题的程序D.以上都不是27、 以下叙述中最准确的是:( )A.计算机程序是处理某一问题所有指令的集合B.计算机程序是处理某一问题所用到的所有数据的集合C.计算机程序是处理某一问题的所有指令及其数据的集合D.计算机程序是处理某一问题的所有指令及其数据的有序集合28、 关于计算机程序设计,以下描述最准确的是:( )A.程序设计就是用语言来编写程序B.程序设计就是用计算机语言来编写程序C.程序设计就是用计算机程序设计语言来编写程序D.程序设计就是用计算机能识别的语言来编写程序29、 目前编写计算机程序一般采用的是:( )A.机器语言 B.汇编语言 C.高级语言 D.英语30、 设计一个计算机程序最基本的工作是:( )A.制定正确的算法 B.选择合理的数据结构C.制定正确的算法和选择合理的数据结构 D.以上都不是31、 算法具有五个特性,以下选项中不属于算法特性的是:( )A.有穷性 B.简洁性 C.可行性 D.确定性32、 下述哪一个不是结构化程序基本结构:( )A.顺序 B.选择 C.循环 D.嵌套33、 C语言是一种:( )A.机器语言 B.汇编语言 C.高级语言 D.以上都不是34、 C语言源程序的扩展名为:( )A..exe B..c C..obj D..cpp35、 C程序编译后最终产生(即计算机执行)的文件的扩展名为()A..exe B..c C..obj D..cpp36、 下列各项中,不是C语言的特点是:( )A.语言简洁、紧凑,使用方便B.程序执行效率高,可移植性好C.能实现汇编语言的大多数功能D.有较强的网络操作功能37、 构成C语言源程序的基本单位是:( ) A.子程序 B.过程 C.文本 D.函数38、 下列叙述正确的是:( )A.C语言源程序可以直接在DOS环境中运行B.编译C语言源程序得到的目标文件可以直接在DOS环境中运行C.C语言源程序经过编译、连接得到的可执行程序可以直接在DOS环境中运行D.C语言源程序可以直接在VC++环境中运行39、 某C程序由一个主函数main()和一个自定义函数max()组成,则该程序:( )A.写在前面的函数先开始执行B.总是从main()函数开始执行C.总是从max()函数开始执行D.写在后面的函数先开始执行40、 以下叙述不正确的是:( )A.分号是C语句的必要组成部分B.C程序的注释可以写在语句的后面C.函数是C程序的基本单位D.主函数的名字不一定用mian表示41、 以下为C语句的是:( )A.a=8 B.a++; C.if(a>8) D.#include <stdio.h>以下不是C语句的是:( )A.a=8; B.a++; C.if(a>8); D.for(i=1;i<5;i++)42、 以下所列语句中,合法的语句是:( )A.a=1,b=2 B.++a; C.a=a+1=5 D.y=int(a);43、 C程序中的复合语句指的是:( )A.并列的多个C语句 B.写在同一行中的多个C 语句C.用一对大括号对括的多个C语句 D.就是函数体中的语句44、 当一个很长的C语句(中间无字符串)在一行写不下(超出屏幕的宽度)时,应该:( )A.由系统自动换行 B.立即按回车键换行C.在任意一个空格处按回车键换行D.输入一个分号后并按回车键换行换行45、 在x值处于-2~2,4~8时值为“真”,否则为“假”的表达式是:( )。
C语言程序设计第三版谭浩强课后习题答案1~13章
第四章 4.4若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=’a’,c2=’b’。想得到以下输出 格式和结果,请写出程序(包括定义变量类型和设计输出)。
file:///D|/程序设计/C语言程序设计第三版谭浩强课后习题答案1~13章.txt[2010-7-20 10:29:47]
file:///D|/程序设计/C语言程序设计第三版谭浩强课后习题答案1~13章.txt[2010-7-20 10:29:47]
_c1=A_c2=a
4.8设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积Байду номын сангаас圆球体积、圆柱体积。用scanf输入数 据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。
file:///D|/程序设计/C语言程序设计第三版谭浩强课后习题答案1~13章.txt[2010-7-20 10:29:47]
char c1,c2; 与 int c1,c2; 是否无条件的等价? #include"stdio.h" main() {char c1,c2; c1=getchar();c2=getchar(); putchar(c1);putchar(’\n’);putchar(c2);putchar(’\n’); }
请编一程序用赋初值的方法使clc2c3c4c5五个变量的值分别为china经过运算使c1c2c3c4c5分别变为glmre并输出
CC++程序设计课后答案(2021年整理精品文档)
CC++程序设计课后答案编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(CC++程序设计课后答案)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为CC++程序设计课后答案的全部内容。
第一章一、选择题1.C/C++规定,在一个源程序中,main()函数的位置( )。
CA。
必须在最开始 B。
必须在最后C.可以任意D.必须在系统调用的库函数的后面2。
以下()是C/C++合法的标识符。
AA.char2B.@xC.intD.7Bw3。
下面的程序,对于输入:2 9 15,输出的结果是( )。
B#include"iostream.h"void main(){int a;float b;cout<<”input a,b:”<<end l;cin>〉a>>b;cout<<”a+b="〈<a+b<<endl;}A。
2 B.11 C。
26 D。
244。
在Visual C++中,打开一个项目只需要打开对应的项目工作区文件即可,项目工作区文件的扩展名为()。
CA.objB.dspC.dsw D。
cpp5.下面关于C语言与C++关系的说法中,( )是正确的。
DA。
C语言是C++的子集 B.C++对C语言进行了改进C。
C++和C语言都是面向对象的 D.C++继承了C语言的众多优点6。
设置一个断点的方法是将光标移到需要设置断点的行上,然后按( )键。
AA.F9 B。
F10 C。
F11 D。
F127.下面关于编译预处理命令的说法中,正确的是( )。
CA。
一条文件包含命令能包含多个文件B.文件包含命令不可以嵌套使用C。
C第13章答案
C++习题参考答案第1章面向对象程序设计概论一、名词解释抽象封装消息【问题解答】面向对象方法中的抽象是指对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程。
面向对象方法中的封装就是把抽象出来的对象的属性和行为结合成一个独立的单位,并尽可能隐蔽对象的内部细节。
消息是面向对象程序设计用来描述对象之间通信的机制。
一个消息就是一个对象要求另一个对象实施某种操作的一个请求。
二、填空题(1)目前有面向过程的结构化程序设计方法和面向对象的程序设计方法两种重要的程序设计方法。
(2)结构化程序设计方法中的模块由顺序、选择和循环3种基本结构组成。
(3)在结构化程序设计方法中,程序可表示为程序=数据结构+算法;而面向对象的程序设计方法,程序可表示为程序=对象+消息。
(4)结构化程序设计方法中的基本模块是过程;而面向对象程序设计方法中的基本模块是类。
(5)面向对象程序设计方法具有抽象性、封装性、继承性和多态性等特点。
三、选择题(至少选一个,可以多选)(1)面向对象程序设计着重于( B )的设计。
A. 对象B. 类C. 算法D. 数据(2)面向对象程序设计中,把对象的属性和行为组织在同一个模块内的机制叫做( C )。
A. 抽象B. 继承C. 封装D. 多态(3)在面向对象程序设计中,类通过( D )与外界发生关系。
A. 对象B. 类C. 消息D. 接口(4)面向对象程序设计中,对象与对象之间的通信机制是( C )。
A. 对象B. 类C. 消息D. 接口(5)关于C++与C语言的关系的描述中,( D )是错误的。
A. C语言是C++的一个子集B. C语言与C++是兼容的C. C++对C语言进行了一些改进D. C++和C语言都是面向对象的【结果分析】C语言是面向过程的。
C++语言是一种经过改进的更为优化的C语言,是一种混合型语言,既面向过程也面向对象。
(6)面向对象的程序设计将数据结构与( A )放在一起,作为一个相互依存、不可分割的整体来处理。
c语言《程序设计基础》课后习题参考答案与解析
c语言《程序设计基础》课后习题参考答案与解析《程序设计基础》习题参考答案与部分解析第1章 C 语言概述一、填空a) C源程序的基本单位是函数。
b) 一个C程序中至少应包括一个 main函数。
c) 在C语言中,输出操作是有库函数 printf( )函数完成。
二、单选题1、A2、C3、B解析:第1题答案:A 。
因为一个C程序总是从main函数开始执行的,而不论main函数在程序中的位置。
且到main函数结束。
第2题答案:C 。
因为 main函数没有限制必须位于程序的最前面。
C程序书写自由,一行内可写几个语句。
在对一个C 程序进行编译的过程中,无法检查注释当中的拼写错误。
不过C语言本身并没有输入输出语句,输入输出是由函数完成的。
第3题答案:B。
因为一个C语言程序是由若干个函数组成的。
但至少包含一个main 函数,且main函数的位置不限。
三、编程题1、编写一个输出“Welcome to C!”信息的小程序。
解:程序如下#include “stdio.h”main( ){1printf(“Welcome to C!”) ;}2、已知三角形的三边长分别为3,4,5,试用海轮公式编程求其面积。
海伦公式为:S?= ,其中s= (a+b+s)/2 ;解:程序如下#include “math.h”#include “stdio.h”main( ){int a , b , c ; /* a ,b,c 3个整型变量表示三角形的3条边。
*/float s ,s1 ; /* s1作为面积变量,s 作为中间变量是都应该是实形*/a=3 ; b= 4; c=5 ;s= (a+b+c)/2.0 ;s1= sqrt(s*(s-a)*(s-b)*(s-c)); /* sqrt函数完成开平方根功能。
*/printf(“area=%f\n”,s1);}2第2章程序设计基础知识一、单选题1、C2、A3、C4、A5、C6、C7、D8、C9、D 10、A 11、D 12、A 13、C 14、C 15、B A 16、B 17 D解析:1. 答案:C。
《C语言程序设计教程》(第三版)课后习题参考答案(精选5篇)[修改版]
第一篇:《C语言程序设计教程》(第三版)课后习题参考答案C语言程序设计课后习题参考答案习题一一、单项选择题1、C2、B3、B4、C5、D6、A7、C8、A二、填空题1、判断条件2、面向过程编程3、结构化4、程序5、面向对象方法6、基本功能操作、控制结构7、有穷性8、直到型循环结构9、算法10、可读性11、模块化12、对问题的分解和模块的划分习题二一、单项选择题1、B2、D3、C4、B5、A二、填空题1、主2、C编译系统3、结构化4、程序5、面向对象方法6、.OBJ7、库函数8、直到型循环结构习题三一、单项选择题1、D2、B3、A4、C9、B10、C11、A12、D13、C17、B18、C19、C20、D21、A25、D26、A二、填空题1、补码2、10^-138~10^1 38、15~166、A7、B6、D7、B14、B15、C22、D8、C8、D16、A24、D、A3、实4、单目运算符、自右向左5、函数调用6、65,89习题四一、单项选择题1、D2、C3、D4、A5、D6、B7、A8、C9、B10、B二、填空题1、两, ;2、5.1690003、-200 2500、i=-200,j=2500回车、i=-200回车j=2500回车4、a=98,b=765.000000,c=4321.0000005、100 25.81 1.89234、100,25.81,1.89234、100回车25.81回车1.89234回车6、0,0,37、38、scanf(“%lf %lf %lf”,&a,&b,&c);9、13 13.000000 13.00000010、c=b-a;a=b+c;习题五一、单项选择题1、B2、D3、C4、B5、B6、D7、A8、B二、填空题1、1 、02、k!=03、if(x>4||xelse printf(“error!”); 4、if(((x>=1&&x=200&&x Printf(“%d”,x);5、16、17、10! Right!8、a=09、2,110、0习题六一、单项选择题9、D1、B2、C3、C4、B5、C6、B7、C8、A二、填空题1、无穷次2、83、205、3.66、*#*#*#$7、828、d=1.0 、k++、k9、!(x习题七一、单项选择题1、B2、D3、C4、C5、A二、填空题1、1 2 4 8 16 32 64 128 256 5122、a[age]++、i=18;i3、break、i==84、a[i]>b[i]、i3、j5、b[j]=0、b[j]=a[j][k]习题八一、单项选择题1、B3、C4、A5、A9、D10、B11、A12、C13、A二、填空题1、return1、return n+sum(n-1)2、return1、n*facto(n-1)习题九一、单项选择题1、D2、C3、D4、A5、C9、B10、C11、A13、B17、C18、A19、B20、C二、填空题1、int 、return z2、*p++3、’\0’、++4、p、max*q6、A7、D6、A7、C14、C15、B6、C7、C14、A15、D8、A8、D8、C习题十一、单项选择题1、D2、D3、A4、5、B6、A7、C8、B9、D10、11、C12、D13、D14、C二、填空题1、34 122、ARRAY a[10],b[10],c[10];3、2 34、ab、cd5、(*b).day、b->day6、adghi mnohi no7、(struct node *)、!=’\n’、p=top;8、p1=p1->next9、(struct list *)、(struct list *)、return (n)习题十一一、单项选择题1、A2、A3、B4、A5、B9、A10、B11、B12、B13、C17、D二、填空题1、ASCII(文本)、二进制2、pf=fopen(“A:\zk04\data xfile.dat”,”w”);3、fputc()、fputs()、fscanf()、fread()4、(后两个空)文件结束符、非0值7、B14、C15、D8、A16、A第二篇:C语言程序设计教程课后习题参考答案《C语言程序设计教程》课后习题参考答案习题1 1. (1)编译、链接.exe (2)函数主函数(或main函数)(3)编辑编译链接2.(1)-(5):DDBBC (6)-(10):ABBBC 3.(1)答:C语言简洁、紧凑,使用方便、灵活;C语言是高级语言,同时具备了低级语言的特征;C 语言是结构化程序设计语言,具有结构化的程序控制语句;C语言有各种各样的数据类型;C语言可移植性好;生成目标代码质量高,程序执行效率高。
《C程序设计》作业参考答案(1-4章)
第1章C语言概述习题(P13):1.3 写出一个C程序的构成。
答:C程序由一个main函数和0个或多个自定义函数构成,每个函数的构成如下:函数类型函数名(函数参数列表){说明部分执行部分}1.4 C语言以函数为程序的基本单位,有什么好处?答:一个函数实现一个相对独立的功能,便于实现程序的模块化。
1.5 请参照本章例题,编写一个C程序,输出以下信息:*************************************************Very good!*************************************************答:参照例1.1编程如下# include <stdio.h>void main(){printf("********************************************\n");printf(" Very good!\n");printf("********************************************\n");}1.6 编写一个C程序,输入a、b、c 3个值,输出其中最大者。
答:参照例1.3编程如下法一:修改例1.3的主函数,自定义max函数不变。
# include <stdio.h>void main(){int max(int x,int y); /*函数声明*/int a,b,c,m; /*定义4个变量,m用于存放最大值*/scanf("%d%d%d",&a,&b,&c);/*从键盘上输入3个整数*/m=max(a,b); /*第一次调用max函数求出前两个数的最大值放在m中*/m=max(m,c); /*再调max函数求出m和第三个数的最大数*/printf("max is %d\n",m); /*输出结果*/}int max(int x,int y) /*定义求两个数的最大数的函数max */{int z;if(x>y) z=x;else z=y;return(z);}法二:修改例1.3的主函数和max函数,将max函数改为求3个数的最大数。
c++课后习题_1-13章答案
}
cout<<"third:"<<a<<" "<<b<<" "<<c<<endl;
}
first: 14 4 12 second: 26 4 12 third: 26 3 6
11.给出下列程序的运行结果
。
#include <iostream.h>
#include <iomanip.h>
void main(void)
A)5
B)1
C)3
D)0
19.设a、b、c、d、m、n均为int型变量,且a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=a>b)
&& (n=c>d)运算后,n的值为 B 。//逻辑运算优化的副作用
A)3
B)2
C) 1
D)0
20.设有说明语句:int x=8, float y=8.8; 则下列表达式中错误的是 D
C) Zhao:Hello!How are you?
D) Zhao:Hello!How are you?
Liu:I am fine, Thank you
Liu:I am fine, Thank you
18
24
16 18
3.下列程序的运行结果是 D
。
#include <iostream.h>
void main(void)
A)1/3
B)1/3.0
C)1%3
D)21/3
27.设有说明语句:int a=9,b=9,c=9; 下列表达式的值分别是 4 27 8 162 。
c程序设计谭浩强习题答案
c程序设计谭浩强习题答案C程序设计是计算机科学与技术专业学生必修的一门课程,谭浩强教授编写的《C程序设计》教材广泛用于教学中,其习题集也是学生学习过程中不可或缺的练习材料。
以下是针对该教材习题的一些参考答案,供参考使用。
第一章:C语言概述1. 问题1:解释C语言的特点。
- 答案:C语言是一种通用的、过程式的编程语言,具有以下特点:简洁、高效、可移植性高、结构化、支持多种编程范式等。
2. 问题2:C语言的发展历史。
- 答案:C语言由丹尼斯·里奇在1972年开发,最初用于UNIX操作系统的编写。
随着UNIX系统的流行,C语言也逐渐被广泛使用并发展。
第二章:数据类型、运算符和表达式1. 问题1:C语言中基本数据类型有哪些?- 答案:C语言中的基本数据类型包括整型(int)、字符型(char)、浮点型(float和double)等。
2. 问题3:解释运算符的优先级。
- 答案:运算符优先级决定了表达式中各运算符的计算顺序。
例如,乘除运算符优先于加减运算符。
第三章:控制语句1. 问题1:解释if语句的用法。
- 答案:if语句用于条件判断,根据条件是否为真来决定执行不同的代码块。
2. 问题2:while循环和for循环的区别是什么?- 答案:while循环在每次迭代前检查条件,而for循环在循环开始前初始化,然后在每次迭代后检查条件。
第四章:数组1. 问题1:一维数组和多维数组的区别。
- 答案:一维数组是线性的,只有一个索引;多维数组可以看作是数组的数组,具有多个索引。
2. 问题2:数组的初始化方法。
- 答案:数组可以通过赋值语句逐个初始化,或者使用初始化列表在声明时初始化。
第五章:指针1. 问题1:指针是什么?- 答案:指针是一种变量,它存储了另一个变量的内存地址。
2. 问题2:指针和数组的关系。
- 答案:数组名可以作为指向数组首元素的指针使用,指针可以用于遍历数组。
第六章:函数1. 问题1:函数的定义和声明。
C语言程序设计习题解析与实验指导(含答案)
样采用指数形式,但尾数部分被省略了,也不合法;答案 C 采用小数形式,其小数部分可以省略;
答案 D 表示的是整型常量。因此本题选择答案 C。
3. 下列不合法的常量是
。
A.'\x4A'
B." "
C. .8e0
D.'\483'
【参考答案】D
【解析】此题考查的是各种数据类型常量的表示方法:答案 A 是一个转义字符常量,“\x”后
的程序叫做目标程序。由于计算机只能识别二进制码,因此用机器语言编写的源程序就是计
算机能直接识别并运行的目标程序,二者之间无需经过任何翻译;而用汇编语言编写的源程
序需要经过汇编程序汇编才能得到对应的目标程序;用高级语言编写的源程序经过相应的编
译器编译或者用解释的方式得到目标程序,不同语言对应的编译程序或者说编译器不一样。
一、单选题
1.以下哪一个可以作为正确的变量名
。
A. R&D
B._filename C.for D.$X;
【参考答案】B
【解析】此题考查的是标识符的命名规则:标识符是以字母或下划线开头,后面跟字母、
数字、下划线的任意字符序列。答案 A 中的变量名使用了“&”号,不符合要求;答案 C
是关键字,而用户自定义标识符不能使用关键字;答案 D 的变量名以“$”开头,不符合以
2
主教材习题答案及解析 1-3 章
输入设备:键盘、光电笔、扫描仪、鼠标、摄像头、数码相机、手写输入板、游戏杆、 麦克风;
输出设备:打印机、音响、显示器、绘图仪; 既是输入设备又是输出设备:U 盘、SD 卡、光盘、触摸屏、硬盘。 【解析】根据输入设备、输出设备、外存储器的功能以及这些硬件本身的功能区分。 4.简述源程序与目标程序的关系。 【参考答案】 程序员用某种编程语言所编写的程序称为源程序;计算机能直接执行的程序称为目标程 序。目标程序的操作码和操作数都是 0/1 序列,而源程序却不一定是 0/1 序列。源程序必须 转换为目标程序计算机才能读懂并执行。 用机器语言编写的源程序就是目标程序;用汇编语言编写的源程序必须用汇编程序经过 汇编得到目标程序;用高级语言(不是全部)编写的源程序必须用特定的编译程序经过编译 得到目标程序。但并非所有的高级语言编写的源程序都会被编译为目标程序,有的高级语言 例如 BASIC 语言的源程序就是通过解释方式执行程序的,就是边扫描边解释,逐句输入逐 句翻译,计算机一句句执行,并不产生目标程序。 【解析】根据教材 1.2.2 小节的知识。 5.简述 C 程序的开发过程。 【参考答案】 一个 C 程序从编写到执行出结果一般需要 6 个步骤:编辑、预处理、编译、链接、装 载和执行。下面是这几个步骤所完成的任务。 (1)编辑 编辑是通过输入设备将 C 语言源程序录入到计算机中,生成扩展名为“.c”的源文件。 (2)预处理 预处理是指通过预处理器对程序中的预处理指令(它们是为优化代码而设计的)进行转 译。每条预处理指令以符号“#”开头。 (3)编译
c程序设计第三版习题参考解答(全).
3.12 出下面表达式运算后 a 的值,设原来 a=12。设 a 和 n 都已定义为整型变量。 (1)a+=a (3)a*=2+3 (5)a%=(n%=2),n 的值等于 5 (2)a-=2 (4)a/=a+a (6)a+=a-=a*=a
解: (1)24 (3)60 (5)0 (2)10 (4)0 (6)0
注:如果没有学过二进制和补码,此题可以不做。
解:各数据在内存中的存储形式如下表所示: 变量的类型 int 型 long 型 short 型 signed char(8 位) unsigned int 型 unsigned long 型 unsigned short 型 unsigned char 型
1.6 写一个程序,输入 a,b,c 三个值,输出其中最大者。 解: main ( ) {int a,b,c,max; printf(“请输入三个数 a,b,c: \n”); scanf(“%d,%d,%d”,&a,&b,&c); max=a; if (max<b) max=b; if (max<c) max=c; printf(“ 最大数为:%d ”,max); }
第 4 章 最简单的 C 程序设计——顺序程序 设计
4.4 若 a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51247,n=128765,c1=’a’,c2=’b’, 想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出) 。 要求输出的结果如下: a=□3□□b=□4□□c=□5 x= 1.200000,y= 2.400000,z= -3.600000 x+y=□3.60□□y+z=-1.20□□z+x=-2.40 u= □51247□□n=□□□128765 c1=‟a‟□or□97(ASCII) c2=‟b‟□or□98(ASCII) 解: main ( ) { int a,b,c; long int u,n; float x,y,z; char c1,c2; a=3;b=4;c=5; x=1.2;y=2.4;z= -3.6; u=51247;n=128765; c1=‟a‟;c2=‟b‟; printf(“\n”); printf(“a=%2d□□b=%2d□□c=%2d\n”,a,b,c); printf(“x=%.6f,y=%.6f,z=%.6f\n”,x,y,z); printf(“x+y=□%.2f□□y+z=%.2f□□z+x=%.2f\n”,x+y,y+z,z+x); printf(“u=%6ld□□n=%9ld\n”,u,n); printf(“c1=‟%c‟ or %d(ASCII)\n”,c1,c1); printf(“c2=‟%c‟ or %d(ASCII)\n”,c2,c2); }
《c 程序设计》谭浩强课后习题答案解析
第一章1.5题#include <iostream>using namespace std;int main(){cout<<"This"<<"is";cout<<"a"<<"C++";cout<<"program.";return 0;1.6题#include <iostream>using namespace std;int main(){int a,b,c;a=10;b=23;c=a+b;cout<<"a+b=";cout<<c;cout<<endl;return 0;}1.7七题#include <iostream>using namespace std;int main(){int a,b,c;int f(int x,int y,int z); cin>>a>>b>>c;c=f(a,b,c);cout<<c<<endl;return 0;}int f(int x,int y,int z) {int m;if (x<y) m=x;else m=y;if (z<m) m=z;return(m);}1.8题#include <iostream>using namespace std;int main(){int a,b,c;cin>>a>>b;c=a+b;cout<<"a+b="<<a+b<<endl;return 0;}1.9题#include <iostream>using namespace std;int main(){int a,b,c;int add(int x,int y);cin>>a>>b;c=add(a,b);cout<<"a+b="<<c<<endl;return 0;}int add(int x,int y){int z;z=x+y;return(z);}2.3题#include <iostream>using namespace std;int main(){char c1='a',c2='b',c3='c',c4='\101',c5='\116'; cout<<c1<<c2<<c3<<'\n';cout<<"\t\b"<<c4<<'\t'<<c5<<'\n';return 0;}2.4题#include <iostream>using namespace std;int main(){char c1='C',c2='+',c3='+';cout<<"I say: \""<<c1<<c2<<c3<<'\"';cout<<"\t\t"<<"He says: \"C++ is very interesting!\""<< '\n'; return 0;}2.7题#include <iostream>using namespace std;int main(){int i,j,m,n;i=8;j=10;m=++i+j++;n=(++i)+(++j)+m;cout<<i<<'\t'<<j<<'\t'<<m<<'\t'<<n<<endl;return 0;}2.8题#include <iostream>using namespace std;int main(){char c1='C', c2='h', c3='i', c4='n', c5='a';c1+=4;c2+=4;c3+=4;c4+=4;c5+=4;cout<<"password is:"<<c1<<c2<<c3<<c4<<c5<<endl;return 0;}3.2题#include <iostream>#include <iomanip>using namespace std;int main ( ){float h,r,l,s,sq,vq,vz;const float pi=3.1415926;cout<<"please enter r,h:";cin>>r>>h;l=2*pi*r;s=r*r*pi;sq=4*pi*r*r;vq=3.0/4.0*pi*r*r*r;vz=pi*r*r*h;cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(2);cout<<"l= "<<setw(10)<<l<<endl;cout<<"s= "<<setw(10)<<s<<endl;cout<<"sq="<<setw(10)<<sq<<endl;cout<<"vq="<<setw(10)<<vq<<endl;cout<<"vz="<<setw(10)<<vz<<endl;return 0;}3.3题#include <iostream>using namespace std;int main (){float c,f;cout<<"请输入一个华氏温度:";cin>>f;c=(5.0/9.0)*(f-32); //注意5和9要用实型表示,否则5/9值为0 cout<<"摄氏温度为:"<<c<<endl;return 0;};3.4题#include <iostream>using namespace std;int main ( ){char c1,c2;cout<<"请输入两个字符c1,c2:";c1=getchar(); //将输入的第一个字符赋给c1c2=getchar(); //将输入的第二个字符赋给c2cout<<"用putchar函数输出结果为:";putchar(c1);putchar(c2);cout<<endl;cout<<"用cout语句输出结果为:";cout<<c1<<c2<<endl;return 0;}3.4题另一解#include <iostream>using namespace std;int main ( ){char c1,c2;cout<<"请输入两个字符c1,c2:";c1=getchar(); //将输入的第一个字符赋给c1c2=getchar(); //将输入的第二个字符赋给c2cout<<"用putchar函数输出结果为:";putchar(c1);putchar(44);putchar(c2);cout<<endl;cout<<"用cout语句输出结果为:";cout<<c1<<","<<c2<<endl;return 0;}3.5题#include <iostream>using namespace std;int main ( ){char c1,c2;int i1,i2; //定义为整型cout<<"请输入两个整数i1,i2:";cin>>i1>>i2;c1=i1;c2=i2;cout<<"按字符输出结果为:"<<c1<<" , "<<c2<<endl; return 0;}3.8题#include <iostream>using namespace std;int main ( ){ int a=3,b=4,c=5,x,y;cout<<(a+b>c && b==c)<<endl;cout<<(a||b+c && b-c)<<endl;cout<<(!(a>b) && !c||1)<<endl;cout<<(!(x=a) && (y=b) && 0)<<endl;cout<<(!(a+b)+c-1 && b+c/2)<<endl;return 0;}3.9题include <iostream>using namespace std;int main ( ){int a,b,c;cout<<"please enter three integer numbers:"; cin>>a>>b>>c;if(a<b)if(b<c)cout<<"max="<<c;elsecout<<"max="<<b;else if (a<c)cout<<"max="<<c;elsecout<<"max="<<a;cout<<endl;return 0;}3.9题另一解#include <iostream>using namespace std;int main ( ){int a,b,c,temp,max ;cout<<"please enter three integer numbers:";cin>>a>>b>>c;temp=(a>b)?a:b; /* 将a和b中的大者存入temp中 */max=(temp>c)?temp:c; /* 将a和b中的大者与c比较,最大者存入max */cout<<"max="<<max<<endl;return 0;}3.10题#include <iostream>using namespace std;int main ( ){int x,y;cout<<"enter x:";cin>>x;if (x<1){y=x;cout<<"x="<<x<<", y=x="<<y;}else if (x<10) // 1≤x<10{y=2*x-1;cout<<"x="<<x<<", y=2*x-1="<<y;}else // x≥10{y=3*x-11;cout<<"x="<<x<<", y=3*x-11="<<y;}cout<<endl;return 0;}3.11题#include <iostream>using namespace std;int main (){float score;char grade;cout<<"please enter score of student:";cin>>score;while (score>100||score<0){cout<<"data error,enter data again.";cin>>score;}switch(int(score/10)){case 10:case 9: grade='A';break;case 8: grade='B';break;case 7: grade='C';break;case 6: grade='D';break;default:grade='E';}cout<<"score is "<<score<<", grade is "<<grade<<endl;return 0;}3.12题#include <iostream>using namespace std;int main (){long int num;int indiv,ten,hundred,thousand,ten_thousand,place;/*分别代表个位,十位,百位,千位,万位和位数*/cout<<"enter an integer(0~99999):";cin>>num;if (num>9999)place=5;else if (num>999)place=4;else if (num>99)place=3;else if (num>9)place=2;else place=1;cout<<"place="<<place<<endl;//计算各位数字ten_thousand=num/10000;thousand=(int)(num-ten_thousand*10000)/1000;hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);cout<<"original order:";switch(place){case5:cout<<ten_thousand<<","<<thousand<<","<<hundred<<","<<ten<<","<<indiv<<en dl;cout<<"reverse order:";cout<<indiv<<ten<<hundred<<thousand<<ten_thousand<<endl;break;case 4:cout<<thousand<<","<<hundred<<","<<ten<<","<<indiv<<endl;cout<<"reverse order:";cout<<indiv<<ten<<hundred<<thousand<<endl;break;case 3:cout<<hundred<<","<<ten<<","<<indiv<<endl;cout<<"reverse order:";cout<<indiv<<ten<<hundred<<endl;break;case 2:cout<<ten<<","<<indiv<<endl;cout<<"reverse order:";cout<<indiv<<ten<<endl;break;case 1:cout<<indiv<<endl;cout<<"reverse order:";cout<<indiv<<endl;break;}return 0;}3.13题#include <iostream>using namespace std;int main (){ long i; //i为利润float bonus,bon1,bon2,bon4,bon6,bon10;bon1=100000*0.1; //利润为10万元时的奖金bon2=bon1+100000*0.075; //利润为20万元时的奖金bon4=bon2+100000*0.05; //利润为40万元时的奖金bon6=bon4+100000*0.03; //利润为60万元时的奖金bon10=bon6+400000*0.015; //利润为100万元时的奖金cout<<"enter i:";cin>>i;if (i<=100000)bonus=i*0.1; //利润在10万元以内按10%提成奖金 else if (i<=200000)bonus=bon1+(i-100000)*0.075; //利润在10万元至20万时的奖金else if (i<=400000)bonus=bon2+(i-200000)*0.05; //利润在20万元至40万时的奖金else if (i<=600000)bonus=bon4+(i-400000)*0.03; //利润在40万元至60万时的奖金else if (i<=1000000)bonus=bon6+(i-600000)*0.015; //利润在60万元至100万时的奖金elsebonus=bon10+(i-1000000)*0.01; //利润在100万元以上时的奖金cout<<"bonus="<<bonus<<endl;return 0;}3.13题另一解#include <iostream>using namespace std;int main (){long i;float bonus,bon1,bon2,bon4,bon6,bon10;int c;bon1=100000*0.1;bon2=bon1+100000*0.075;bon4=bon2+200000*0.05;bon6=bon4+200000*0.03;bon10=bon6+400000*0.015;cout<<"enter i:";cin>>i;c=i/100000;if (c>10) c=10;switch(c){case 0: bonus=i*0.1; break;case 1: bonus=bon1+(i-100000)*0.075; break;case 2:case 3: bonus=bon2+(i-200000)*0.05;break;case 4:case 5: bonus=bon4+(i-400000)*0.03;break;case 6:case 7:case 8:case 9: bonus=bon6+(i-600000)*0.015; break;case 10: bonus=bon10+(i-1000000)*0.01;}cout<<"bonus="<<bonus<<endl;return 0;}3.14题#include <iostream>using namespace std;int main (){int t,a,b,c,d;cout<<"enter four numbers:";cin>>a>>b>>c>>d;cout<<"a="<<a<<", b="<<b<<", c="<<c<<",d="<<d<<endl;if (a>b){t=a;a=b;b=t;}if (a>c){t=a; a=c; c=t;}if (a>d){t=a; a=d; d=t;}if (b>c){t=b; b=c; c=t;}if (b>d){t=b; b=d; d=t;}if (c>d){t=c; c=d; d=t;}cout<<"the sorted sequence:"<<endl;cout<<a<<", "<<b<<", "<<c<<", "<<d<<endl;return 0;}3.15题#include <iostream>using namespace std;int main (){int p,r,n,m,temp;cout<<"please enter two positive integer numbers n,m:";cin>>n>>m;if (n<m){temp=n;n=m;m=temp; //把大数放在n中, 小数放在m中}p=n*m; //先将n和m的乘积保存在p中, 以便求最小公倍数时用 while (m!=0) //求n和m的最大公约数{r=n%m;n=m;m=r;}cout<<"HCF="<<n<<endl;cout<<"LCD="<<p/n<<endl; // p是原来两个整数的乘积return 0;}3.16题#include <iostream>using namespace std;int main (){char c;int letters=0,space=0,digit=0,other=0;cout<<"enter one line::"<<endl;while((c=getchar())!='\n'){if (c>='a' && c<='z'||c>='A' && c<='Z')letters++;else if (c==' ')space++;else if (c>='0' && c<='9')digit++;elseother++;}cout<<"letter:"<<letters<<", space:"<<space<<", digit:"<<digit<<", other:"<<other<<endl;return 0;}3.17题#include <iostream>using namespace std;int main (){int a,n,i=1,sn=0,tn=0;cout<<"a,n=:";cin>>a>>n;while (i<=n){tn=tn+a; //赋值后的tn为i个a组成数的值sn=sn+tn; //赋值后的sn为多项式前i项之和a=a*10;++i;}cout<<"a+aa+aaa+...="<<sn<<endl;return 0;}3.18题#include <iostream>using namespace std;int main (){float s=0,t=1;int n;for (n=1;n<=20;n++){t=t*n; // 求n!s=s+t; // 将各项累加}cout<<"1!+2!+...+20!="<<s<<endl;return 0;}3.19题#include <iostream>using namespace std;int main (){int i,j,k,n;cout<<"narcissus numbers are:"<<endl;for (n=100;n<1000;n++){i=n/100;j=n/10-i*10;k=n%10;if (n == i*i*i + j*j*j + k*k*k)cout<<n<<" ";}cout<<endl;return 0;}3.20题#include <iostream>using namespace std;int main(){const int m=1000; // 定义寻找范围int k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;int i,a,n,s;for (a=2;a<=m;a++) // a是2~1000之间的整数,检查它是否为完数 {n=0; // n用来累计a的因子的个数s=a; // s用来存放尚未求出的因子之和,开始时等于afor (i=1;i<a;i++) // 检查i是否为a的因子if (a%i==0) // 如果i是a的因子{n++; // n加1,表示新找到一个因子s=s-i; // s减去已找到的因子,s的新值是尚未求出的因子之和switch(n) // 将找到的因子赋给k1,...,k10{case 1:k1=i; break; // 找出的笫1个因子赋给k1case 2:k2=i; break; // 找出的笫2个因子赋给k2case 3:k3=i; break; // 找出的笫3个因子赋给k3case 4:k4=i; break; // 找出的笫4个因子赋给k4case 5:k5=i; break; // 找出的笫5个因子赋给k5case 6:k6=i; break; // 找出的笫6个因子赋给k6case 7:k7=i; break; // 找出的笫7个因子赋给k7case 8:k8=i; break; // 找出的笫8个因子赋给k8case 9:k9=i; break; // 找出的笫9个因子赋给k9case 10:k10=i; break; // 找出的笫10个因子赋给k10}}if (s==0) // s=0表示全部因子都已找到了{cout<<a<<" is a 完数"<<endl;cout<<"its factors are:";if (n>1) cout<<k1<<","<<k2; // n>1表示a至少有2个因子if (n>2) cout<<","<<k3; // n>2表示至少有3个因子,故应再输出一个因子 if (n>3) cout<<","<<k4; // n>3表示至少有4个因子,故应再输出一个因子 if (n>4) cout<<","<<k5; // 以下类似if (n>5) cout<<","<<k6;if (n>6) cout<<","<<k7;if (n>7) cout<<","<<k8;if (n>8) cout<<","<<k9;if (n>9) cout<<","<<k10;cout<<endl<<endl;}}}3.20题另一解#include <iostream>using namespace std;int main(){int m,s,i;for (m=2;m<1000;m++){s=0;for (i=1;i<m;i++)if ((m%i)==0) s=s+i;if(s==m){cout<<m<<" is a完数"<<endl;cout<<"its factors are:";for (i=1;i<m;i++)if (m%i==0) cout<<i<<" ";cout<<endl;}}return 0;}3.20题另一解#include <iostream>using namespace std;int main(){int k[11];int i,a,n,s;for (a=2;a<=1000;a++){n=0;s=a;for (i=1;i<a;i++)if ((a%i)==0){n++;s=s-i;k[n]=i; // 将找到的因子赋给k[1]┅k[10] }if (s==0){cout<<a<<" is a 完数"<<endl;cout<<"its factors are:";for (i=1;i<n;i++)cout<<k[i]<<" ";cout<<k[n]<<endl;}}}3.21题#include <iostream>using namespace std;int main(){int i,t,n=20;double a=2,b=1,s=0;for (i=1;i<=n;i++){s=s+a/b;t=a;a=a+b; // 将前一项分子与分母之和作为下一项的分子b=t; // 将前一项的分子作为下一项的分母}cout<<"sum="<<s<<endl;return 0;}3.22题#include <iostream>using namespace std;int main(){int day,x1,x2;day=9;x2=1;while(day>0){x1=(x2+1)*2; // 第1天的桃子数是第2天桃子数加1后的2倍 x2=x1;day--;}cout<<"total="<<x1<<endl;return 0;}3.23题#include <iostream>#include <cmath>using namespace std;int main(){float a,x0,x1;cout<<"enter a positive number:";cin>>a; // 输入a的值x0=a/2;x1=(x0+a/x0)/2;do{x0=x1;x1=(x0+a/x0)/2;}while(fabs(x0-x1)>=1e-5);cout<<"The square root of "<<a<<" is "<<x1<<endl;return 0;}3.24题#include <iostream>using namespace std;int main(){int i,k;for (i=0;i<=3;i++) // 输出上面4行*号{for (k=0;k<=2*i;k++)cout<<"*"; // 输出*号cout<<endl; //输出完一行*号后换行}for (i=0;i<=2;i++) // 输出下面3行*号{for (k=0;k<=4-2*i;k++)cout<<"*"; // 输出*号cout<<endl; // 输出完一行*号后换行}return 0;}3.25题#include <iostream>using namespace std;int main(){char i,j,k; /* i是a的对手;j是b的对手;k是c的对手*/ for (i='X';i<='Z';i++)for (j='X';j<='Z';j++)if (i!=j)for (k='X';k<='Z';k++)if (i!=k && j!=k)if (i!='X' && k!='X' && k!='Z')cout<<"A--"<<i<<" B--"<<j<<" C--"<<k<<endl;return 0;}4.1题#include <iostream>using namespace std;int main(){int hcf(int,int);int lcd(int,int,int);int u,v,h,l;cin>>u>>v;h=hcf(u,v);cout<<"H.C.F="<<h<<endl;l=lcd(u,v,h);cout<<"L.C.D="<<l<<endl;return 0;}int hcf(int u,int v){int t,r;if (v>u){t=u;u=v;v=t;}while ((r=u%v)!=0){u=v;v=r;}return(v);}int lcd(int u,int v,int h){return(u*v/h);}4.2题#include <iostream>#include <math.h>using namespace std;float x1,x2,disc,p,q;int main(){void greater_than_zero(float,float); void equal_to_zero(float,float);void smaller_than_zero(float,float); float a,b,c;cout<<"input a,b,c:";cin>>a>>b>>c;disc=b*b-4*a*c;cout<<"root:"<<endl;if (disc>0){greater_than_zero(a,b);cout<<"x1="<<x1<<",x2="<<x2<<endl;}else if (disc==0){equal_to_zero(a,b);cout<<"x1="<<x1<<",x2="<<x2<<endl;}else{smaller_than_zero(a,b);cout<<"x1="<<p<<"+"<<q<<"i"<<endl;cout<<"x2="<<p<<"-"<<q<<"i"<<endl;}return 0;}void greater_than_zero(float a,float b) /* 定义一个函数,用来求disc>0时方程的根 */{x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);}void equal_to_zero(float a,float b) /* 定义一个函数,用来求disc=0时方程的根 */{x1=x2=(-b)/(2*a);}void smaller_than_zero(float a,float b) /* 定义一个函数,用来求disc<0时方程的根 */{p=-b/(2*a);q=sqrt(-disc)/(2*a);}4.3题#include <iostream>using namespace std;int main(){int prime(int); /* 函数原型声明 */int n;cout<<"input an integer:";cin>>n;if (prime(n))cout<<n<<" is a prime."<<endl;elsecout<<n<<" is not a prime."<<endl;return 0;}int prime(int n){int flag=1,i;for (i=2;i<n/2 && flag==1;i++)if (n%i==0)flag=0;return(flag);}4.4题#include <iostream>using namespace std;int main(){int fac(int);int a,b,c,sum=0;cout<<"enter a,b,c:";cin>>a>>b>>c;sum=sum+fac(a)+fac(b)+fac(c);cout<<a<<"!+"<<b<<"!+"<<c<<"!="<<sum<<endl; return 0;}int fac(int n){int f=1;for (int i=1;i<=n;i++)f=f*i;return f;}4.5题#include <iostream>#include <cmath>using namespace std;int main(){double e(double);double x,sinh;cout<<"enter x:";cin>>x;sinh=(e(x)+e(-x))/2;cout<<"sinh("<<x<<")="<<sinh<<endl;return 0;}double e(double x){return exp(x);}4.6题//牛顿迭代法#include <iostream>#include <cmath>using namespace std;int main(){double solut(double ,double ,double ,double );double a,b,c,d;cout<<"input a,b,c,d:";cin>>a>>b>>c>>d;cout<<"x="<<solut(a,b,c,d)<<endl;return 0;}double solut(double a,double b,double c,double d){double x=1,x0,f,f1;do{x0=x;f=((a*x0+b)*x0+c)*x0+d;f1=(3*a*x0+2*b)*x0+c;x=x0-f/f1;}while(fabs(x-x0)>=1e-5);return(x);}int Gcd_2(int a, int b)// 欧几里德算法求a, b的最大公约数{ if (a<=0 || b<=0) //预防错误return 0; int temp; while (b > 0) //b总是表示较小的那个数,若不是则交换a,b的值{ temp = a % b; //迭代关系式 a = b; //a 是那个胆小鬼,始终跟在b的后面 b = temp; //b向前冲锋占领新的位置} return a; }4.7题#include <iostream>#include <cmath>using namespace std;int main(){void godbaha(int);int n;cout<<"input n:";cin>>n;godbaha(n);return 0;}void godbaha(int n){int prime(int);int a,b;for(a=3;a<=n/2;a=a+2){if(prime(a)){b=n-a;if (prime(b))cout<<n<<"="<<a<<"+"<<b<<endl;} }}int prime(int m){int i,k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0) break;if (i>k) return 1;else return 0;}4.8题//递归法#include <iostream>using namespace std;int main(){int x,n;float p(int,int);cout<<"input n & x:";cin>>n>>x;cout<<"n="<<n<<",x="<<x<<endl;;cout<<"P"<<n<<"(x)="<<p(n,x)<<endl;return 0;}float p(int n,int x){if (n==0)return(1);else if (n==1)return(x);elsereturn(((2*n-1)*x-p((n-1),x)-(n-1)*p((n-2),x))/n); }4.9题//汉诺塔问题#include <iostream>using namespace std;int main(){void hanoi(int n,char one,char two,char three);int m;cout<<"input the number of diskes:";cin>>m;cout<<"The steps of moving "<<m<<" disks:"<<endl;hanoi(m,'A','B','C');return 0;}void hanoi(int n,char one,char two,char three) //将n个盘从one座借助two座,移到three座{void move(char x,char y);if(n==1) move(one,three);else{hanoi(n-1,one,three,two);move(one,three);hanoi(n-1,two,one,three);}}void move(char x,char y){cout<<x<<"-->"<<y<<endl;}4.10题#include <iostream>using namespace std;int main(){void convert(int n);int number;cout<<"input an integer:";cin>>number;cout<<"output:"<<endl;if (number<0){cout<<"-";number=-number;}convert(number);cout<<endl;return 0;}void convert(int n) //感觉根本想不出的么 {int i;char c;if ((i=n/10)!=0)convert(i);c=n%10+'0';cout<<" "<<c;}4.11题#include <iostream>using namespace std;int main(){int f(int);int n,s;cout<<"input the number n:";cin>>n;s=f(n);cout<<"The result is "<<s<<endl;return 0;}int f(int n){;if (n==1)return 1;elsereturn (n*n+f(n-1));}4.12题#include <iostream>#include <cmath>using namespace std;#define S(a,b,c) (a+b+c)/2#define AREA(a,b,c) sqrt(S(a,b,c)*(S(a,b,c)-a)*(S(a,b,c)-b)*(S(a,b,c)-c)) int main(){float a,b,c;cout<<"input a,b,c:";cin>>a>>b>>c;if (a+b>c && a+c>b && b+c>a)cout<<"area="<<AREA(a,b,c)<<endl;elsecout<<"It is not a triangle!"<<endl;return 0;}4.14题#include <iostream>using namespace std;//#define LETTER 1int main(){char c;cin>>c;#if LETTERif(c>='a' && c<='z')c=c-32;#elseif(c>='A' && c<='Z')c=c+32;#endifcout<<c<<endl;return 0;}4.15题#include <iostream>using namespace std;#define CHANGE 1int main(){char ch[40];cout<<"input text:"<<endl;;gets(ch);#if (CHANGE){for (int i=0;i<40;i++){if (ch[i]!='\0')if (ch[i]>='a'&& ch[i]<'z'||ch[i]>'A'&& ch[i]<'Z')ch[i]+=1;else if (ch[i]=='z'||ch[i]=='Z')ch[i]-=25;}}#endifcout<<"output:"<<endl<<ch<<endl;return 0;}4.16题file#include <iostream>using namespace std;int a;int main(){extern int power(int);int b=3,c,d,m;cout<<"enter an integer a and its power m:"<<endl; cin>>a>>m;c=a*b;cout<<a<<"*"<<b<<"="<<c<<endl;d=power(m);cout<<a<<"**"<<m<<"="<<d<<endl;return 0;}4.16题fileextern int a;int power(int n){int i,y=1;for(i=1;i<=n;i++)y*=a;return y;}5.1题#include <iostream>using namespace std;int main(){cout<<'2'<<' ';for (int i=3;i<=100;i++){bool t=true;for (int a=2;a<i;a++) if (i%a==0) {t=false;break;} if (t) cout<<i<<' ';}return 0;}#include <iostream>#include <iomanip>using namespace std;#include <math.h>int main(){int i,j,n,a[101];for (i=1;i<=100;i++)a[i]=i;a[1]=0;for (i=2;i<sqrt(100);i++)for (j=i+1;j<=100;j++){if(a[i]!=0 && a[j]!=0)if (a[j]%a[i]==0)a[j]=0; }cout<<endl;for (i=1,n=0;i<=100;i++){if (a[i]!=0){cout<<setw(5)<<a[i]<<" ";n++;}if(n==10){cout<<endl;n=0;}}cout<<endl;return 0;}5.2题#include <iostream>using namespace std;//#include <math.h>int main(){int i,j,min,temp,a[11];cout<<"enter data:"<<endl;for (i=1;i<=10;i++){cout<<"a["<<i<<"]=";cin>>a[i]; //输入10个数}cout<<endl<<"The original numbers:"<<endl;;for (i=1;i<=10;i++)cout<<a[i]<<" "; // 输出这10个数cout<<endl;;for (i=1;i<=9;i++) //以下8行是对10个数排序。
国家开放大学C语言程序设计章节测试参考答案
国家开放大学《C语言程序设计》章节测试参考答案第一章C语言概述自测练习一:C语言字符集自测练习1.在C语言字符集中,包含有全部26个英文大写字母和对应的小写字母。
(√)2.在C语言字符集中,一个大写英文字母和它的小写英文字母被视为不同的字符。
(√)3.在C语言程序中,ABC和abc被作为同一标识符使用。
(×)自测练习二:C语言字符集自测练习1.在C语言中,保留字是有专门含义和作用的,不能作为一般标识符使用。
(√)2.在C语言中,作为标识符的第一个字符只能是英文字母或下划线,不能是数字字符。
(√)3.C语言中使用的字符常量,其起止标记符是()。
a. 双引号b. 尖括号c. 单引号d. 中括号4.C语言中使用的字符串常量,其起止标记符是()。
a. 双引号b. 中括号c. 尖括号d. 单引号自测练习三:C语句分类自测练习1.在C语言中,一条简单语句的结束符是()。
a. 分号b. 空格c. 冒号d. 逗号2.在C语言中,每条复合语句的开始标记字符为()。
a. <b. [c. (d. {3.不符合C语言规定的复合语句是()。
a. {x=0;}b. {}c. {;}d. {y=10}4.C语言中的选择类语句有两条,它们是()。
a. else和caseb. if和switchc. if和elsed. switch和case自测练习四:函数分类与使用自测练习1.在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为()。
a. nameb. mainc. MAINd. function2.C语言程序中的基本功能模块为()。
a. 标识符b. 函数c. 表达式d. 语句3.一个函数定义所包含的两个部分是()。
a. 函数头和函数体b. 函数原型和函数体c. 函数名和参数表d. 函数头和函数尾4.一个程序文件开始使用的每条预处理命令,其首字符必须是()。
a. #b. @c. %d. $5.在一个程序文件中,若要使用#include命令包含一个系统头文件,则此头文件所使用的起止定界符为一对()。
c程序设计 第13章 文件 答案解析
if((fp=fopen("stu_sort.c","wb"))==NULL) { printf("cannot open file\n"); return; } for(i=0;i<SIZE;i++) if(fwrite(&stud[i],sizeof(student_type),1,fp)!=1) printf("file write error"); fclose(fp); } void main() { FILE *fp; int i,j; struct student_type temp; fp=fopen("stu_list.c","rb"); for(i=0;i<SIZE;i++) { fread(&stud[i],sizeof(student_type),1,fp); } for(i=0;i<SIZE-1;i++) for(j=i+1;j<SIZE;j++) { if(stud[i].avg>stud[j].avg) { temp=stud[i]; stud[i]=stud[j]; stud[j]=temp; } } save(); fp=fopen("stu_sort.c","rb"); for(i=0;i<SIZE;i++) { fread(&stud[i],sizeof(student_type),1,fp); printf("%-4d %-10s %-10.2f
fputc(a[i],fp); putchar(a[i]); i++; } fclose(fp); putchar('\n'); } 注:这个程序将处理数组的排序问题和文件读取的问题结合起来了。从 而解决了这个题目。 13.6 程序为:(这个程序不难,自己编的,对其中文件类型和它和结构 体数组之间信息的转换有了较深的认识) #include<stdio.h> #define SIZE 5 struct student_type { int num; char name[10]; float score1; float score2; float score3; float avg; }stud[SIZE]; void save() { FILE *fp; int i; if((fp=fopen("stu_list.c","wb"))==NULL) { printf("cannot open file\n"); return; } for(i=0;i<SIZE;i++) if(fwrite(&stud[i],sizeof(student_type),1,fp)!=1) printf("file write error"); fclose(fp);
C++Primer第5版第十三章课后练习答案
C++Primer第5版第⼗三章课后练习答案练习13.1如果⼀个构造函数的第⼀个参数是⾃⾝类类型的引⽤,且任何额外参数都有默认值,则此构造函数是拷贝构造函数。
在⽤=定义变量时使⽤;将对象作为实参传递给⼀个⾮引⽤形参时;从⼀个返回类型⾮引⽤的函数返回⼀个对象;⽤花括号列表初始化⼀个数组中的元素或⼀个聚合类中的成员练习13.2因为参数⽤来初始化的参数是⾮引⽤类型,为了调⽤拷贝构造函数我们必须拷贝它的实参,但为了拷贝实参,我们⼜需要调⽤拷贝构造函数导致⽆限循环练习13.3当我们拷贝StrBlob时,StrBlob的shared_ptr成员的use_count会加⼀。
当我们复制StrBlobPtr时,StrBlobPtr的weak_ptr成员use_count不会更改。
练习13.4Point global;Point func(Point p) // (1) foo_bar函数的参数为⾮引⽤类型,需拷贝,使⽤拷贝构造函数{Point local = p, * heap = new Point(global);//(2)local = p,将p拷贝给local(3)* heap = local,将local拷贝给heap指定的地址*heap = local;Point pa[4] = { local,*heap }; //(4)(5)Point pa[4] = { local,*heap }; ,将local和* heap拷贝给数组的前两位元素return *heap; //(6)return* heap;}练习13.5class HasPtr{public:HasPtr(const std::string &s=std::string()):ps(new std::string(s)),i(0){}HasPtr(HasPtr &hp):ps(new std::string(*hp.ps)),i(hp.i){}private:std::string* ps;int i;};练习13.6拷贝赋值运算符重载赋值运算符“=”,名为operator=,接受⼀个与所在类相同类型的参数。
Java语言程序设计第13章习题参考答案
习题十三参考答案13.1 选择题(1)A (2)C (3)A (4)A (5)B13.2 简答题(1)Set集和List集中允许有重复元素吗?能否将null值添加到Set集或List集中?答:Set集中不允许有重复元素,而List集中是允许有重复元素的。
Set集和List集中都允许包含null的元素,但Set集中只允许有一个null元素。
(2)队列和堆栈各有什么特点?答:堆栈是先进后出的结构;队列是先进先出的结构。
(3)向量和数组有何区别?答:数组是由同类的数据元素构成的一种数据结构,数组中的数据元素可以是基本数据类型也可以是对象类型,数组创建之后数组的长度是不能被改变的,即Java中的数组只能保存固定数目的元素。
向量是一组对象的集合,向量在创建之后长度可变,可以追加对象元素的数量。
(4)Math类用来实现什么功能?答:ng.Math类中定义了一些完成基本算术运算的函数,如指数函数、对数函数、平方根函数以及三角函数等。
Math类是final类,因此不能被继承。
它的构造方法是private 的,因此不能实例化。
Math类中定义的两个常量PI和E以及所有的方法都static的,因此在使用时不需要创建Math类的对象,而直接用类名做前缀,就可以很方便地调用这些属性和方法。
(5)假设有一个堆栈初始为空,在经过如下的操作之后堆栈中的内容是什么?push(10);push(2);push(7);pop();push(15);push(3);pop();13.3 编程题(1)设x,y是两个Integer型变量,number是一个Double型变量。
设x=2, y=6, number=5.63。
编程完成如下操作:求e的x次方;求x的y次方;求x和y的最大值;求比number大的最小整数。
Integer x = 2;I nteger y = 6;D ouble number = 5.63;S ystem.out.println("e的x次方:" + Math.pow(Math.E, x));S ystem.out.println("x的y次方:" + Math.pow(x, y));S ystem.out.println("x和y的最大值:" + Math.max(x, y));S ystem.out.println("比number大的最小整数:" + Math.rint(number));(2)编程输出100以内的素数,并计算该程序的运行时间(以毫秒为单位)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第十三章例13.1 程序为:#include <stdio.h>#include <stdlib.h>void main(){FILE *fp;char ch,filename[10];scanf("%s",filename);if((fp=fopen(filename,"w"))==NULL){printf("cannot open file\n");exit(0);}ch=getchar();ch=getchar();while(ch!='#'){fputc(ch,fp);putchar(ch);ch=getchar();}putchar(10);fclose(fp);}例13.2 程序为:#include <stdio.h>#include <stdlib.h>void main(){FILE *in, *out;char ch,infile[10],outfile[10];printf("Enter the infile name:\n");scanf("%s",infile);printf("Enter the infile name:\n");scanf("%s",outfile);if((in=fopen(infile,"r"))==NULL){printf("cannot open file\n");exit(0);}if((out=fopen(outfile,"w"))==NULL){printf("cannot open file\n");exit(0);}while(!feof(in)) fputc(fgetc(in),out);fclose(in);fclose(out);}注:在该程序的运行中,每复制一次就会产生一个乱码置于最后,并依次叠加。
这不是个优秀的程序。
13.5.1 rewind函数:#include <stdio.h>void main(){FILE *fp1,*fp2;fp1=fopen("file1.c","r");fp2=fopen("file2.c","w");while(!feof(fp1)) putchar(getc(fp1));rewind(fp1);while(!feof(fp1)) putc(getc(fp1),fp2);fclose(fp1);fclose(fp2);}例13.5#include<stdlib.h>#include<stdio.h>struct student_type{char name[10];int num;int age;char sex;}stud[10];void main(){int i;FILE *fp;if((fp=fopen("file22.c","rb"))==NULL){printf("can not open file\n");exit(0);}for(i=0;i<10;i+=2){fseek(fp,i*sizeof(struct student_type),0);fread(&stud[i],sizeof(struct student_type),1,fp);printf("%s %d %d %c\n",stud[i].name,stud[i].num,stud[i].age,stud[i].sex);}fclose(fp);}注:这个程序是对的,但常用于处理二进制文件,因为文本文件要发生字符转换,计算位置时常发生混乱。
习题13.1 对c文件操作有些什么特点?什么是缓冲文件系统?什么是非缓冲文件系统?这两者的缓冲区有什么区别?答:c语言把文件看作是一个字符的序列级,即由一个一个字符的数据顺序组成。
根据数据的组织形式,可以分为:ASCII文件(文本文件)和二进制文件。
一个c文件是一个字节流或二进制流(流式文件)。
它允许对文件存取一个字符,这就增加了处理的灵活性。
缓冲文件系统:是指系统自动在内存中为每一个正在使用的文件开辟一个缓冲区,如果从磁盘向内存读入数据,则一次从磁盘文件将一批数据输入到内存缓冲区,然后再从缓冲区逐个地将数据送到程序数据区中去。
非缓冲文件系统:是指系统不自动开辟确定大小的缓冲区,而有程序为每个文件设定缓冲区。
用缓冲文件系统进行的输入输出又称高级磁盘输入输出,用非缓冲文件系统进行的输入输出又称为低级输出输入系统。
ANSI C标准不采用非缓冲文件系统,而只采用缓冲文件系统,即既用缓冲文件系统处理文本文件,也用它处理二进制文件,也就是将缓冲文件系统扩充为可以处理二进制文件。
13.2 什么是文件型指针?通过文件型指针访问文件有什么好处?答:缓冲文件系统中,关键的概念是“文件指针”。
每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(如文件的名字,文件的状态及文件当前位置等)。
这些信息是保存在一个结构体变量中的。
该结构体类型是由系统定义的,取名为FILE。
这和一般使用指针变量的好处是一样的。
13.3 对文件的打开和关闭的含义是什么?为什么要打开和关闭文件?答:打开的含义:带回指向a1文件的指针赋给fp,这样fp就和文件a1联系上了。
或者说,fp指向a1文件。
在使用完一个文件后应该关闭它,以防止它再被误用。
“关闭”就是文件指针变量不指向该文件,也就是文件指针变量与文件“脱钩”,此后不能再通过该指针对原来与其联系的文件进行读写操作,除非再次打开,使该指针变量重新指向该文件。
13.4 程序为:#include <stdio.h>#include <stdlib.h>void main(){FILE *fp;char ch,filename[10];printf("please input the name of the file:\n");scanf("%s",filename);if((fp=fopen(filename,"w"))==NULL){printf("cannot open file\n");exit(0);}printf("please a string:\n");ch=getchar();if('a'<=ch&&ch<='z')ch=ch-32;while(ch!='!'){fputc(ch,fp);putchar(ch);ch=getchar();if('a'<=ch&&ch<='z')ch=ch-32;}putchar(10);fclose(fp);}13.5 程序为:#include <stdio.h>#include <stdlib.h>#include <string.h>void main(){FILE *fp;char a[100];if((fp=fopen("test.c","r"))==NULL){printf("文件打开错误");exit(0);}int i=0;a[i]=fgetc(fp);while(a[i]!=EOF){putchar(a[i]);i++;a[i]=fgetc(fp);}putchar('\n');fclose(fp);if((fp=fopen("test1.c","r"))==NULL){printf("文件打开错误");exit(0);}while(a[i]!=EOF){putchar(a[i]);i++;a[i]=fgetc(fp);}a[i]='\0';putchar('\n');fclose(fp);int n=i;int k;char t;for(i=0;i<n-1;i++){k=i;for(int j=i+1;j<n;j++){if(a[k]>a[j]) k=j;}if(k!=i){t=a[i];a[i]=a[k];a[k]=t;}}if((fp=fopen("test2.c","w"))==NULL) {printf("文件打开错误");exit(0);}i=0;while(i<n){fputc(a[i],fp);putchar(a[i]);i++;}fclose(fp);putchar('\n');}注:这个程序将处理数组的排序问题和文件读取的问题结合起来了。
从而解决了这个题目。
13.6 程序为:(这个程序不难,自己编的,对其中文件类型和它和结构体数组之间信息的转换有了较深的认识)#include<stdio.h>#define SIZE 5struct student_type{int num;char name[10];float score1;float score2;float score3;float avg;}stud[SIZE];void save(){FILE *fp;int i;if((fp=fopen("stu_list.c","wb"))==NULL){printf("cannot open file\n");return;}for(i=0;i<SIZE;i++)if(fwrite(&stud[i],sizeof(student_type),1,fp)!=1)printf("file write error");fclose(fp);}void main(){FILE *fp;int i;for(i=0;i<SIZE;i++){scanf("%d%s%f%f%f",&stud[i].num,stud[i].name,&stud[i].score1,&stud[i].score2,&stud[i].s core3);stud[i].avg=(stud[i].score1+stud[i].score2+stud[i].score3)/3;}save();fp=fopen("stu_list.c","rb");for(i=0;i<SIZE;i++){fread(&stud[i],sizeof(student_type),1,fp);printf("%-4d %-10s %-10.2f %-10.2f %-10.2f %-10.2f\n",stud[i].num,stud[i].name,stud[i].sc ore1,stud[i].score2,stud[i].score3,stud[i].avg);}}13.7 程序为:#include<stdio.h>#define SIZE 5struct student_type{int num;char name[10];float score1;float score2;float score3;float avg;}stud[SIZE];void save(){FILE *fp;int i;if((fp=fopen("stu_sort.c","wb"))==NULL){printf("cannot open file\n");return;}for(i=0;i<SIZE;i++)if(fwrite(&stud[i],sizeof(student_type),1,fp)!=1)printf("file write error");fclose(fp);}void main(){FILE *fp;int i,j;struct student_type temp;fp=fopen("stu_list.c","rb");for(i=0;i<SIZE;i++){fread(&stud[i],sizeof(student_type),1,fp);}for(i=0;i<SIZE-1;i++)for(j=i+1;j<SIZE;j++){if(stud[i].avg>stud[j].avg){temp=stud[i];stud[i]=stud[j];stud[j]=temp;}}save();fp=fopen("stu_sort.c","rb");for(i=0;i<SIZE;i++){fread(&stud[i],sizeof(student_type),1,fp);printf("%-4d %-10s %-10.2f %-10.2f %-10.2f %-10.2f\n",stud[i].num,stud[i].name,stud[i].sc ore1,stud[i].score2,stud[i].score3,stud[i].avg);}}13.9程序为:(这个题的程序要建立在前面那些程序的基础之上)#include<stdio.h>#define SIZE 5struct student_type{int num;char name[10];float score1;float score2;float score3;float avg;}stud[SIZE+1];void save(){FILE *fp;int i;if((fp=fopen("stu_sort.c","wb"))==NULL){printf("cannot open file\n");return;}for(i=0;i<SIZE+1;i++)if(fwrite(&stud[i],sizeof(student_type),1,fp)!=1)printf("file write error");fclose(fp);}void main(){FILE *fp;int i,j;struct student_type temp,another;scanf("%d%s%f%f%f",&another.num,,&another.score1,&another.score2,&another.s core3);another.avg=(another.score1+another.score2+another.score3)/3;fp=fopen("stu_list.c","ab");fwrite(&another,sizeof(student_type),1,fp);fclose(fp);fp=fopen("stu_list.c","rb");for(i=0;i<SIZE+1;i++){fread(&stud[i],sizeof(student_type),1,fp);}for(i=0;i<SIZE;i++)for(j=i+1;j<SIZE+1;j++){if(stud[i].avg>stud[j].avg){temp=stud[i];stud[i]=stud[j];stud[j]=temp;}}fclose(fp);save();fp=fopen("stu_sort.c","rb");for(i=0;i<SIZE+1;i++){fread(&stud[i],sizeof(student_type),1,fp);printf("%-4d %-10s %-10.2f %-10.2f %-10.2f %-10.2f\n",stud[i].num,stud[i].name,stud[i].score1,stud[i].score2,stud[i].score3,stud[i].avg);}fclose(fp);}13.8 程序为:(由上题易得该程序,这里建立的新文件的名字为:students.c)#include<stdio.h>#define SIZE 5struct student_type{int num;char name[10];float score1;float score2;float score3;float avg;}stud[SIZE+1];void save(){FILE *fp;int i;if((fp=fopen("students.c","wb"))==NULL){printf("cannot open file\n");return;}for(i=0;i<SIZE+1;i++)if(fwrite(&stud[i],sizeof(student_type),1,fp)!=1)printf("file write error");fclose(fp);}void main(){FILE *fp;int i,j;struct student_type temp,another;scanf("%d%s%f%f%f",&another.num,,&another.score1,&another.score2,&another.s core3);another.avg=(another.score1+another.score2+another.score3)/3;fp=fopen("stu_list.c","ab");fwrite(&another,sizeof(student_type),1,fp);fclose(fp);fp=fopen("stu_list.c","rb");for(i=0;i<SIZE+1;i++){fread(&stud[i],sizeof(student_type),1,fp);}for(i=0;i<SIZE;i++)for(j=i+1;j<SIZE+1;j++){if(stud[i].avg>stud[j].avg){temp=stud[i];stud[i]=stud[j];stud[j]=temp;}}fclose(fp);save();fp=fopen("students.c","rb");for(i=0;i<SIZE+1;i++){fread(&stud[i],sizeof(student_type),1,fp);printf("%-4d %-10s %-10.2f %-10.2f %-10.2f %-10.2f\n",stud[i].num,stud[i].name,stud[i].sc ore1,stud[i].score2,stud[i].score3,stud[i].avg);}fclose(fp);}13.10 程序为:#include<stdio.h>#define SIZE 1struct employee_type{ char name[10];int num;int age;char sex[5];char health[10];int salary;char adress[10];char edu[10];}emp[SIZE];struct wage_type{char name[10];int salary;}emp1[SIZE];void save(){FILE *fp;int i;if((fp=fopen("employee_list.c","wb"))==NULL){printf("cannot open file\n");return;}for(i=0;i<SIZE;i++)if(fwrite(&emp[i],sizeof(employee_type),1,fp)!=1)printf("file write error");fclose(fp);}void save1(){FILE *fp;int i;if((fp=fopen("employee_list1.c","wb"))==NULL){printf("cannot open file\n");return;}for(i=0;i<SIZE;i++)if(fwrite(&emp1[i],sizeof(wage_type),1,fp)!=1)printf("file write error");fclose(fp);}void main(){FILE *fp;int i;for(i=0;i<SIZE;i++){scanf("%s%d%d%d%s%s%s%s",emp[i].name,&emp[i].num,&emp[i].age,&emp[i].salary,em p[i].adress,emp[i].edu,emp[i].health,emp[i].sex);printf("%s %d %d %d %s %s %s %s\n",emp[i].name,emp[i].num,emp[i].age,emp[i].salary,e mp[i].adress,emp[i].edu,emp[i].health,emp[i].sex);}save();fp=fopen("employee_list.c","rb");for(i=0;i<SIZE;i++){fread(&emp[i],sizeof(employee_type),1,fp);for(int j=0;j<10;j++)emp1[i].name[j]=emp[i].name[j];emp1[i].salary=emp[i].salary;}save1();for(i=0;i<SIZE;i++){fread(&emp1[i],sizeof(wage_type),1,fp);printf("%s %d\n",emp1[i].name,emp1[i].salary);}}注意:这个程序的编写不难,主要是在于用scanf函数读入数据时的一些细节问题。