第1页共50页C语言答案()第一章C语言程序设计基础习题参考答案1-1冯·诺依曼体系结构的基本原理:五大构成部分:输入、输出、CPU、控制器、存储器;程序存储、自动执行、逻辑判断功能;二进制的信息表示。1-6编辑、编译、链接、执行。1-7必须有一个主函数,它是程序执行的起点;一个C语言程序由函数构成;每一条可执行语句都必须由分号结束;函数的代码段必须由花括号对括住。一个函数中的语句组由声明区和可执行语句区两部分构成。1-8三个一缩;每遇到一个结构时均缩格,每结束一个结构时回退;缩格格式必须对齐。1-9试给出以下问题的程序设计过程描述:1)求两个数中之最大者。#includestdio.hintmain(void){floatfA,fB;clrscr();printf(Pleaseinputtwovalues(fA,fB)::);/*输入要比较的两个数fA,fB*/scanf(%f,%f,&fA,&fB);/*格式化输入fA,fB*/if(fA=fB)printf(themaxis%f,fA);if(fAfB)printf(themaxis%f,fB);return0;}/*main()函数结束*/2)求三个数中之最大者。#includestdio.hintmain(void){floatfA,fB,fC,fMax;printf(Pleaseinputthreevalues(fA,fB,fC)::);/*fA,fB,fC是输入的3个数,fMax存放最大值*/scanf(%f,%f,%f,&fA,&fB,&fC);fMax=fA;/*假定fA最大*/if(fMaxfB)fMax=fB;if(fMaxfC)fMax=fC;printf(Themaxis%f\n,fMax);/*输出最大值*/return0;}/*main()函数结束*/第2页共50页3)求1+2+3+…+100,即。#includestdio.hintmain(void){inti,nSum;/*声明变量i,循环的总和*/for(i=1,nSum=0;i=100;i++){nSum+=i;}/*做累加的FOR循环*/printf(Sumis%d\n,nSum);/*输出累加值*/return0;}4)求0-1000之间所有能被2和3整除的数之和。intmain(void){inti,nSum;clrscr();for(i=1;i=1000/6;i++)/*1000/6表示1~1000中能被2和3整除的个数*/{nSum+=i*6;}/*循环累加的过程*/printf(theSumis%d,nSum);/*输出累加结果*/return0;}1-12试编写一个求a+|b|的程序。#includestdio.hintmain(void){floata,b;printf(Pleaseinputtworealvalues(a,b)::);scanf(%f,%f,&a,&b);printf(\n%f+|%f|=%f\n,a,b,b0?a+b:a-b);/*利用三元条件运算,详见P52*/return0;}1-13试编写一个在五个整数中找出最大数的程序。#includestdio.hintmain(void){floatval_1,val_2,val_3,val_4,val_5,fMax;/*声明要比较的5个变量*/第3页共50页printf(Pleaseinput3values(val_1,val_2,val_3,val_4,val_5)::);scanf(%f,%f,%f,%f,%f,&val_1,&val_2,&val_3,&val_4,&val_5);fMax=val_1;/*假设最大值为val_1*/if(fMaxval_2)fMax=val_2;if(fMaxval_3)fMax=val_3;if(fMaxval_4)fMax=val_4;if(fMaxval_5)fMax=val_5;/*选出最大值的过程*/printf(themaxof%f,%f,%f,%f,%fis%f,\val_1,val_2,val_3,val_4,val_5,fMax);return0;}1-14编写程序,调用库函数求下列函数的值:(1)cos2.78#includestdio.h#includemath.h/*包含数学函数文件,详见P391*/intmain(void){doubleval;printf(Pleaseinputthevalue::);scanf(%f,&val);printf(theresultis%lf,cos(val));/*调用数学函数中的doublecos(doublex)函数*/return0;}(2)log90#includestdio.h#includemath.hintmain(void){doubleval;printf(Pleaseinputtheval::);scanf(%lf,&val);printf(theresultis%lf\n,log(val));return0;}(3)#includestdio.h第4页共50页#includemath.hintmain(void){doubleval;printf(Pleaseinputthevalue(val):);scanf(%lf,&val);printf(theresultis%lf\n,sqrt(val));/*调用doublesqrt(doublex)函数*/return0;}(4)#includestdio.h#includemath.hintmain(void){doubleval;printf(Pleaseinputthevalue(val)::);scanf(%lf,&val);printf(theresultis%lf,exp(val));/*调用doubleexp(doublex)函数*/return0;}1-16见名知义;变量名和函数名小写,符号常量一般大写;多个单词构成标识符名时,一般单词的第一个字母大写,或者用下划线连接;在不影响阅读的情况下,可以使用简单的符号变量名,如a,b,c,d,x,y,z等;注意一些容易混淆的字母的使用;匈牙利前缀数据类型表示法的运用及i,j,k,l,m,n的整型约定规则。第二章C语言中的数据类型及其基本操作习题参考答案2-1为什么C的每个数据都必须属于某种特定的数据类型?解:变量存储空间中的值必须属于某种特定的数据类型才有意义,同时,数据的类型不同,其取值范围、所占存储空间大小、能够参加的运算类型等才有意义。例如:一个char型数据占用一个字节空间,一个float型数据占用4个字节空间。另外,作为C语言中的数据类型,大部分都可以用signed,unsigned,long,short进行修饰,以表示数据的取值范围和数据所占存储空间的字节数变化。2-2浮点数和定点数的区别在哪里?解:在于小数点位置是否固定不变。2-3计算机中的数是精确的表示吗?解:不完全是。对整型数据,在不超出表示值范围时一般是精确表示的。对浮点数,则一般是不能精确表示。原因在于计算机内表示浮点数的存储空间大小是固定的,因此,它所能表示出来的精度是有限的。例如,无限循环小数3.33333333333333333333333……在计算机内部只能近似表示。2-4为测试数据类型所占存储空间的大小,C提供了专门的运算符sizeof(),它用于返第5页共50页回或计算给定数据变量或数据类型所占存储空间的大小。请编写程序能够测试C的基本数据类型所占存储空间的大小。解:这里以int型为例。其它数据类型所占存储空间大小的测试方法相似。#includestdio.hvoidmain(){intnSize=sizeof(int);printf(%d,nSize);getch();}2-9为什么要强调“先声明、后定义、再使用”的原则?请阐述其理由。解:因为变量使用前必须要有存储空间分配给它用来保存其值,对变量存储空间的分配就是通过变量的声明完成的。变量在被引用之前,其中的值应当是确定的某一个值,但变量的声明并不能保证变量存储空间中有一个合适的初始状态值,而是一个随机值。当以错误的初始值开始变量的引用时,会导致程序的执行逻辑错误。为此,一般需要在变量被引用之前赋予其一个合理的初始值。因此,在变量的使用上,一般应当遵循先声明、后定义、在引用的基本原则。2-12解:(1)ABCDEFGH(2)12+20=32(3)ch1(S)+ch2(x)=203(4)nX=2nY=5nZ=12nX=1830nY=28nZ=38nX=3nY=6nZ=22-13解:(1)1;(2)0;(3)0;(4)0;(5)2,2,5;(6)10;(7)3;(8)12,8,30,20,0,0;(9)15,5,324;2-14解:m=0n=0k=-1m=1n=1k=-1m=0n=0k=0m=0n=0k=1m=1n=0k=12-15解:第6页共50页(1)mn&&k=m||n;(2)m=2k;(3)m%n!=0;2-17请问C语言中的逻辑真和假的表示方法是什么?解:.C语言借用数值非零和零表示逻辑真假,零表示假,任何非零值均可被作为逻辑真。2-18解:.i=9,j=28第三章C语言的程序结构、语句分类和数据的输入输出习题参考答案3-1解:因为输入、输出是计算机程序获取源数据和输出结果数据的基本手段。没有输入操作,程序无法将数据对象告知计算机,没有输出时,计算机程序的运算对于计算任务来讲是没有意义的。C语言常见的输入输出函数如下:scanf(....);fscanf(...);fread(...);printf(..);fprintf(..);fgets(..);gets(..);...3-2解:格式说明符、普通字符、输出格式控制字符、附加格式说明符。域宽:用於存放输出数据的宽度。格式化输入输出函数的主要异同参见教材相关章节。3-3解:对小数部分截断输出(四舍五入的原则)对整数部分没有影响;与截断位的精度相同;有单独的符号位;符号位不占据域宽。3-4解:float:小数点后面6位小数位;double:小数点后面17位小数位。原因:float占4个byte,其中能够用来表示小数位精度的bit位数只有23bit。而double占8个byte,其中能够用来表示小数位精度的bit位数为52bit。它们能够表示的最大有效精度范围分别为6位和17位小数位。多余的精度部分将被截断。同时,要注意,浮点数表示中,小数点不占域宽宽度。3-5解:C语言主要由模块、函数等构成。其语句的分类有5种(参见教材)。3-6请简述C语言程序的语句类型分类并对其使用方法作简要描述。解:顺序语句如:intmain(void){inta=8;printf(”%d”,a);return0;}循环语句:while()for(;;)第7页共50页选择语句:如switch();if()等语句;3-7请说明使用格式化输入语句完成输入任务时和输入缓冲区之间的关系。解:scanf是从标准输入设备缓冲区数据流中自动根据内部格式控制字符串要求完成数据类型匹配,并把数据从左到右复制到参数列表变量地址空间的函数,其过程分为以下几个步骤:(1)函数执行时由标准输入设备(一般是键盘)输入相关数据,临时存放在标准输入设备缓冲区中;(2)scanf函数从数据流中复制数据从左到右一次匹配于变量列表中的各变量;(3)scanf向调用函数返回成功接收数据的个数。3-8解:在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,TAB或回车作间隔。C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。3-9解:100#123.456001123.4561.23e+02000123.456001.23e+02-123.457*-123.456780*