
第1章引论第一单元重点与难点解析1.C语言中的函数与数学中的函数有什么联系吗?二者没有必然的联系。C语言中的函数是程序的构成单位,相当于某此编程语言中的子程序或过程。当然,数学中常用的函数在C语言中也有相对应的库函数,如正弦函数、对数函数等。2.C语言程序中的main可以写作Main吗?不可以。在C语言中,严格区分字母的大小写。因此,关键字和标识符中字母的大小写必须与其定义形式保持一致。3.在C语言程序中,词与词之间必须用空格分隔吗?词与词之间可以用空格分隔,也可以用标点符号分隔。当两个词之间没有标点符号时,必须以空格(或换行符)分隔,以免连成一体而导致编译系统无法识别4.程序在编译时,如果没有显示错误(error)和警告(warning),是否说明程序就是正确的?不是的。在编译时只能发现程序中的语法错误,而不能发现逻辑错误和运行错误。因此,上述情况只能说明不存在语法错误,而不能排除存在逻辑错误和运行错误的可能性。题第二单元习一、判断题O1.在C语言程序执行时,总是从第一个函数开始执行的。(2.一个C语言程序可由一个或多个函数组成。(13.C语言的源程序可以直接执行。(4.在C语言程序中,注释对程序的执行不产生影响。(二、选择题1.以下程序中完全正确的是CB.A#include;includeint main(void);int main(void)(printf("Hello world!In");(printf("Helloworld!In");return O;return O;11

C.D.#include #include int main(void)int main(void)(printf("Hello world!In");(printf("Hello world!In")return O;return O;2.以下程序中完全正确的是oA.B.#includeint main(void)int main(void)(int a,b;{int a,b;a=10;a=10;b=20;b=20;c=a*b;C=a*b;printf("c=gdln",c);print("c-8dln",c);return O;return 0;11C.D.#include #include int main(void)int main(void)(int a,b(INT a,b;a=10;a=10;b=20;b=20;c=a.b;c=a*b;printf("c-%dln",c);printf("c=gdln",c);return oreturn O;3.以下叙述中错误的是A.C语言的源程序经过编译之后生成扩展名为obi的目标程序B.C语言的源程序经过编译、连接之后生成扩展名为exe的可执行程序C.C语言的源程序是以ASCII码形式存储的文本文件D.对源程序进行编译时,可以发现程序中存在的所有错误第三单元习题参考答案及解析判断题C语1.错误。言解析:当c语言程序执行时,总是从main函数开始执行的,而不管main函数位于程程序的什么位置。库2.正确。设解析:函数是C语言程序的基本构成单位。一个C语言程序是由若干个函数组成的,计其中必须有一个主函数(main函数)。训练3.错误。教解析:C语言源程序(扩展名为c)并不能直接运行,必须先经过编译得到目标程序(扩程展名为obi),再经过连接得到可执行程序(扩展名为exe)。只有可执行程序才可以直接执行。2

4.正确。解析:注释信息是为了帮助程序的阅读者(包括程序的作者)理解程序使用的。编译系统对源程序进行编译时,将会忽略所有的注释信息,因此注释信息对程序的执行不产生任何影响。二、选择题1. C解析:在程序A中,在include命令、函数首部之后误加了分号。在程序B中,include命令之前漏写了“#”号。在程序D中,printf语句之后漏写了分号。2. B解析:在程序A中,将printf误写为print。在程序C中,将int误写为INT(在C语言中严格区分字母的大小写)。在程序D中,将a*b误写为a.b。3. D解析:对源程序进行编译时,只能发现程序中的语法错误,而不能发现逻辑错误和运行错误。科学出版第1章引论3

第2章基本的数据与运算第一单元重点与难点解析1.标识符可以随意指定吗?标识符只能由字母、数字、下划线组成,且首字符不能是数字。另外,关键字和系统预定义的标识符,如int、printf、struct等也不能用作用户标识符。2.标识符的长度有限制吗?标识符的长度理论可以是任意的,但有的编译器只能保证前31个字符或前63个字符是有效的。3.标识符区分字母的大小写吗?在C语言中,标识符是严格区分字母的大小写的,如inta,A;这是两个不同的变量名。4.在使用之前的任何位置都可以定义变量吗?C语言规定变量必须先定义后使用。全局变量,可以在函数外的任意位置定义。局部变量的合法定义位置,依赖编译器所遵循的C语言规范版本。仅支持C89标准的编译器只允许在块(用一对花括号括起来的语句组)的起始部分定义变量。支持C99标准的编译器,可以在函数内部的任意位置定义局部变量。5.C语言中有字符串变量吗?没有。C语言中使用字符数组来存储字符串,使用字符数组或字符指针来处理字符串。6.C语言中的运算符很多,需要牢记运算符的优先级吗?虽然C语言的运算符很多,但通常在一条语句或表达式中不会出现太多的运算符。作为初学者,在实际的编程练习中,可以尝试记住一些比较常见的运算符(如算术运算符、关系运算符和逻辑运算符等)的优先级。对于相对生僻的运算符,可以使用圆括号来明确运算的先后顺序。题第二单元习一、判断题1.C语言不允许不同类型的数据之间进行运算。()2.一个变量被定义后,它的类型就被确定了,不可改变。())3.在C语言中,数值类型的数据都可进行%运算。()4.在C语言中,整型常量有二进制、八进制、十六进制和十进制等4种表示形式。()5.C语言要求定义符号常量时必须用大写字母。(6.在C语言中,一个变量可以同时被定义为多种类型。(7.在C语言中,变量可以不经定义而直接使用。()8.整数-32100可以赋值给int型和longint型变量。(

9.若a是实型变量,在执行了语句a=5;之后,a将变为整型变量。()710.在C语言程序中,无论是整数还是实数都能准确无误地在内存中表示出来。11.在程序中,APH和aph是两个不同的变量。()12."018是合法的字符常量。(二、单选题1.下面4个选项中,均属于不合法的用户标识符的选项是dolao_123A.DatesumB. chariffloatD._abcTempIntC b+a2.下面4个选项中均属于合法常量的选项是12e-33.6'd'In'A.058B.-12.80x9843.56e2C."w"034Oxal"m'D.4.45076"how"5.33E1.53.以下叙述中不正确的是A.在C语言中,%运算符与/运算符的优先级相同。B在C语言中,area和AREA是两个不同的变量名C在C语言中,可以使用二进制整数D.若a和b类型相同,在执行了赋值运算a=b后,a得到b的值,而b的值不变。4.在C语言中,要求运算对象必须是整型的运算符是B. *C. +D.%A. /个字符。5.若有说明语句charch=x41,则变量ch包含A. 1B.2C.3D.说明不合法,ch的值不确定6.若有定义inta=7;floatx=2.5,y=4.5,则表达式x+a%3x+y)/2的值是B.6.000000A.2.500000C.5.500000D.0.0000007.设变量f是float型,i是double型,则表达式10+'a'+i*f的结果的数据类型为CB.floatA, intC. doubleD.不确定8.以下叙述中正确的是A.在C语言中,一行只能写一条语句B.若a是实型变量,则在C语言中不允许用其他类型的数据对其赋值C.在C语言中,无论是整数还是实数,都能被准确无误地表示第D.在C语言中,%是只能用于整数运算的运算符29.在C语言中,int型数据在内存中的存储形式是章A.原码B.反码C. 补码D.ASCII码基10.下列选项中,可作为C语言合法整数的是本A. a2B.101011BC.03845D.0x4b5的11.在C语言中,字符型数据在内存中的存储形式是数A.原码B.反码C.补码D.ASCII码据12.若短整型数据用2字节存储,则unsigned shortint型数据的取值范围是与运算B.0~255A.0~65535C.-128~127D.-32768~327675

13.C语言的数值类型包括A.整型实型逻辑型B.整型字符型逻辑型C.长整型浮点型结构体型D.整型实型字符型14.若已定义c为字符型变量,则下列赋值中正确的是A. C='97'B. c='cC.c="97"D.c"c"15.已知字母A的ASCI码为十进制数65,且c2为字符型,则执行语句c2=A+6-3后,c2中的值为5B.'D'C. '0'D.错误A.68三、改错题阅读下列程序,并改正其中的错误。1.#includeint main(void)(float a,b;b=ag2;printf("b=%d\n",b);return O;2.#include int main(void)(char ch;int i;1=65;ch="a";printf("i=%c,ch=cln",i,ch);printf("i=%d,ch=%dln",i,ch);return O;3.#includeintmain(void)(int a=b=5,c;Cc=a+b;语printf("c=gdin",c);言return 0;程库四、编程题设计1从键盘输入一个正整数×,编写程序计算它的平方根训2.从键盘输人圆环的内外半径值,编写程序计算它的面积练教3.编写程序将"China"加密成密文,加密规则是:用原字母后面第3个字母代替原字母。程6

第三单元习题参考答案及解析一、判断题1.错误。解析:在C语言中,数值类型的数据间是可以混合运算的。2.正确。解析:C语言规定,变量一旦定义,它的类型就不可改变。3.错误。解析:%表示求余数运算。在C语言中,只有整型数据可以进行%运算。4.错误。解析:在C语言中,整型常量没有二进制的表示形式。5.错误。解析:在C语言中定义符号常量时,习惯上使用大写字母是为了与变量名相区别,并不是必须的。6.错误。解析:一个变量一经定义,就确定了其类型和存储格式,不能改变。7.错误。解析:C语言规定变量必须是先定义再使用。8.正确。解析:int型和longint型变量的最下限是-2147483648,因此可以存储-32100。9.错误。解析:变量一经定义,其类型不会发生改变。整数5将转换为实型数据存储。10.错误。解析:实型数据在内存中存储的二进制位数是有限的,而当一个十进制实数转化为二进制实数时,其有效数字位数有可能会超过尾数的存储长度,因而实型数据往往是有误差的。11.正确。解析:C语言中变量名区分大小写,因此这是不同的两个变量。12.错误。解析:转义字符中八进制数的表示形式是"ddd,用三位八进制数表示一个ASCII字符,第但是八进制数中不能包含数字8。2章二、单选题基1. C本解析:用户标识符只能由数字、字母和下划线组成,且首字符不能是数字,也不能使的用关键字和系统预定义的标识符。数2. B据解析:选项A中058不是合法常量,因为数字0开头的表示八进制数,不能出现8和与9。选项C中m不是合法常量,因为没有这个转义字符。选项D中5.33E1.5不是合法常量,运算因为指数部分不能是小数。7

3. C解析:在C语言中,整数没有二进制表示形式。4. D解析:求余数运算符%只能用于整型数据之间。5.A解析:反斜杠\开头的字符表示转义字符,x表示这是一个十六进制整数,换算成十进制就是65。对应的字符是A。6. B解析:根据运算符的优先级,(x+y)的运算结果是7.000000,a%3的运算结果是1,所以最终运算结果是6.000000。7. C解析:不同类型的数值类型进行运算时,首先把低精度的数据转换成高精度的数据。所以最后的数据类型是double型。8. D解析:C语言中,一行可以写多条语句,但实际使用时,为使程序更加有条理,习惯上每行只写一条语句。不同类型的数据可以进行混合运算,其中就包括赋值运算。因为计算机内部使用二进制形式来进行存储,所以某些实数型数据只能存储其近似值。9.C解析:相对于原码和反码,补码的运算规则最为简单明了。不论参加运算的两个数是同号还是异号,也不论两个数的绝对值哪一个大、哪一个小,其运算规则都是相同的。故计算机内部表示有符号数时,通常采用补码形式。10. D解析:选项A在C语言中被认为是一个变量名。C语言中没有二进制的表示形式,所以选项B是不合法的整数。选项C中的数字是以0开头的,表示八进制整数,但八进制整数中不能有8和9。选项D是一个合法的十六进制整数。福11. D解析:字符型数据在内存中占一字节,是以二进制ASCI码的形式存储的。12.A解析:用两字节存储unsignedshortint型数据,就是使用16个二进制位,由于是无符号数,所以最小是0,最大是16个1,即216-1。13. D解析:C语言规定,数值类型包括整型、实型、字符型。c语14. B言解析:首先字符型变量c中只能存储字符型常量,字符型常量用单引号做定界符,因程此使用双引号的选项都是错误的。其次在字符型常量的定义中,单引号括起来的是单个字序符,因此A是错误的。设计15. B解析:不管字符6和字符3'的ASCII码值是多少,它两者的差一定是3。字符'A加上1练是字符B',再加1是字符C,再加1是字符'D'。教程8

三、改错题1.将语句floata,b;改为inta,b;,并在语句b=a%2;之前增加语句scanf("%d"&a);解析:变量a未赋值或输入值。程序中有关于a的%运算,而%运算符对应的运算量和结果只能是整型数据,且printf中的格式字符是%d。所以,变量a、b的数据类型是int。2.将语句ch="a";改为ch=a';。解析:ch是一个字符型变量,只能存储字符常量,而双引号表示的是字符串常量,所以需要把双引号改为单引号。3.将语句inta=b=5,c;改为inta=5,b-5,c;。解析:语句inta=b-5,c;这种形式只定义了变量a、c,变量b则是未经定义而直接引用因此变量初始化时,不能用连续赋值的形式,否则会提示变量未定义的错误。不同的变量名之间需要用逗号作为分隔符。四、编程题出版社1.#include #includeint main(void)(int x;float yiscanf("%d",&x);y=sqrt(x);printf("y=%fn",y);return O;2.#include int main(void)[floatrl,r2,s;scanf("gf%f",&rl,&r2);s=3.14159*r1*r1-3.14159*r2*r2;printf("s=%fn",s);return O;第3.2#include 章intmain(void)fcharcl='c",c2="h',c3=1i",c4='n",c5="a";基c1=c1+3;本C2=c2+3;的C3=C3+3;数C4=c4+3;据C5=C5+3;与printf("passwordisc%c%c%c%cln",cl,c2,c3,c4,c5);运return O;算F9

第四单元实验指导实验一一、实验目的1.进一步熟悉C语言程序的编辑、编译、连接和运行过程。2.了解C语言的基本数据类型,熟悉变量的定义及赋值,掌握各基本类型数据输出时所用格式符。二、实验要求1.在C语言运行环境下,编辑录入源程序并分析其运行结果。2.写出本次实验的实验报告。三、实验内容出版#1.调试运行以下程序,观察并分析输出结果。#includeint main(void)/*变量定义*/{int i;unsigned u;char c;float f;i=200;/*变量赋值*/u=-1;c='al;f=123.45;printf("i=%d,u=%u,c=%c,f=%fln",i,u,c,f);/*变量输出:i按有符号十进制整数输出。u按无符号十进制整数输出,c按字符型输出,f按十进制小数输出*return O;若将变量u按%d格式输出(将最后printf()中的u=%u改为u=%d),结果会怎样为什么?2.输入并运行下面的程序:C#include语言int main(void)程(char cl,c2;序cl=lal;C2=A";设printf("oc,%cln",cl,c2);计Aprintf("d,8dn",cl,c2);练return 0;教(1)若将原程序中第二行的charc1,c2改为程10