C语言重修复习资料答案讲解.docx
《C语言重修复习资料答案讲解.docx》由会员分享,可在线阅读,更多相关《C语言重修复习资料答案讲解.docx(58页珍藏版)》请在冰豆网上搜索。
C语言重修复习资料答案讲解
《C语言程序设计》
重修班辅导资料
陈世清
第一章C语言概述
一.知识点
1.C语言的特点:
①语言简洁、紧凑,使用方便、灵活;②运算符丰富;
③数据结构丰富;④具有结构化控制语句;
⑤语法限制不太严格,程序设计自由度大;
⑥可以进行位操作,能实现汇编语言的大部分功能,能直接对硬件进行操作;
⑦生成的目标代码质量高,程序执行效率高;⑧程序的移植性好。
2.C程序的组成:
⑴C程序是由函数构成的;
⑵一个函数包括函数的首部(即函数的第一行)和函数体(即花括号部分);
⑶函数体一般包括声明部分和执行部分;
⑷一个C程序总是从main函数开始执行,从main函数结束;
⑸C程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上;
⑹每个语句和数据定义的最后必须有一个分号;
⑺C语言本身没有输入输出语句,是通过函数实现输入输出的;
⑻可以用/*……*/对C程序的任何部分作注释。
3.C语言风格
⑴C语言严格区分英文字母大小写。
⑵C语言用“;”作为语句分隔符。
⑶C语言中“{}”用于标识一组语句,构成复合语句。
⑷C程序书写格式自由,一行内可以写几个语句,一个语句也可以写在几行
上。
⑸注释用来向用户提示或解释程序的意义。
(注释部分允许出现在程序的任
何位置。
编译时,会忽略所有的注释符,即不对他们作任何处理。
)
4.C语言程序的运行:
源程序文件的扩展名为.c,目标程序文件的扩展名为.obj,可执行程序文件的扩展名为.exe。
二.练习
㈠.填空题:
1.在TURBOC环境中用RUN命令运行一个C程序时,所运行的程序的后缀是.c。
2.C语言源程序文件的后缀是.c,经过编译后,生成文件的后缀是.obj,经过连接后,生成文件的后缀是.exe。
3.结构化程序由顺序结构、选择结构、循环结构三种基本结构组成。
㈡.选择题:
1.组成C语言程序的是(C)。
A.子程序B.过程C.函数D.主程序和子程序
2.以下叙述中正确的是(C)。
A.在C程序中无论是整数还是实数,只要在允许的范围内都能准确无误的表示。
B.C程序由主函数组成。
C.C程序由函数组成。
D.C程序由函数和过程组成。
㈢.程序设计题:
1.编写一个C程序,输入a、b、c三个数,输出其中最大者。
第二章数据类型、运算符与表达式
一.知识点
1.C的数据类型:
基本、构造、指针和空类型,char、int、short、long、unsigned、float、double、enum、struct、union、typedef。
2.常量与变量的概念,注意符号常量的定义与使用;
3.整型、实型、字符型常量的表示,注意整型常量的十进制、八进制、十六进制的书写。
4.变量的定义,C的标识符包括关键字、预定义标识符、用户定义标识符;用户定义标识符的可用字符为字母、数字、下划线,第一个字符为字母或下划线。
5.常见数据类型的取值范围,int为-32768~+32767,unsignedint为0~65535。
6.转义字符:
\n、\t、\b、\r、\f、\\、\’、\”、\ddd、\xhh
7.不同数值型数据的混合运算,低级类型转换为高级类型运算
8.C的运算符:
注意结合方向和运算的优先级
9.算术运算符:
+、-、*、/、%、++、--,注意自加、减运算符分前缀和后缀两种方式。
其中前缀方式为先自加、减,后引用;后缀方式为先引用,后自加、减;运算符%要求运算量为整数,运算结果也为整数。
注意除运算时,若运算量为整型时,其运算结果也是整型的规则。
10.赋值类运算符:
=、+=、-=、*=、/=、%=,注意含义和数据类型的转换。
11.逗号运算符的使用,注意逗号运算符的运算规则。
【要点归纳】
1、基本数据类型
C语言的数据类型有基本数据类型和非基本数据类型之分。
2、变量所谓变量就是在程序执行过程中,其值可以改变的量。
变量有两个要素:
z变量名。
每个变量都必须有一个名称,即变量名,变量名应遵循标识符的命名规则。
z变量值。
在程序运行过程中,变量的值存储在内存中,不同类型的变量,占用的内存单元数不同。
C语言是一种强类型语言,它要求在使用数据之前对数据的类型进行说明。
也就是说,在C语言中,所有变量必须先定义后使用。
在定义的同时也可以进行赋初值操作,即初始化。
定义变量的格式如下:
[存储类型]数据类型变量1,变量2,…;
3、常量常量又称作常数,是指在程序运行过程中其值不能被改变的量。
在C语言中,常量有不同的类型,如整型常量、实型常量和字符串常量等。
⑴整型常量:
可以是十进制、八进制和十六进制表示的数。
z十进制其形式是:
d其中,d可以是从0-9的一个或多个十进制数位,第一位不能是0。
z八进制其形式是:
0d其中,d可以是一个或多个八进制数(0-7之间),起始0是必须的引导符。
z十六进制
其形式是:
0xd其中,d可以是一个或多个十六进制数(从0-9的数字,或是从”a”到”f”的字母)。
引导符0是必须的,字母X可以用大写或小写。
整型数据在内存中是以二进制方式存放的,最高位为符号位,并以补码表示。
将一个十进制整数转化为补码表示的方法如下:
z对于正数,其补码表示与原码相同。
z对于负数,其补码表示为它的反码加1;负数的反码为其绝对值的所有位(含符号位)取反得到。
对于用补码表示的数据,还原为原码的方法如下:
z对于正数(补码表示的符号位为0),原码与补码相同。
z对于负数,原码一定为负数,其绝对值为除符号位以外所有位取反后加1。
⑵实型常量实型常量又称浮点型常量,是一个用十进制表示的符号实数。
实型常量表示形式有以下两种:
z十进制小数表示方式
z指数表示方式注:
e之前必须有数字,e后面的指数必须为整数。
⑶字符常量字符常量又分为字符型常量、字符串常量、转义字符和符号常量四种类型。
z字符型常量字符型常量是指用一对单引号括起来的一个字符。
z字符串常量字符串常量是指用一对双引号括起来的一串字符。
例:
\ddd三位八进制
\xhh二位十六进制
z符号常量
C语言允许将程序中的常量定义为一个标识符,称为符号常量。
例:
#definePI3.1415926
4、运算符运算符:
狭义的运算符是表示各种运算的符号。
表达式:
使用运算符将常量、变量、函数连接起来,构成表达式。
⑴算术运算符+、-、*、/、%
注:
“%”运算符的操作数只能是整数。
“/”运算符的运算结果根据操作数的类型而定。
⑵自增和自减运算符++、――
注:
自增和自减运算符只适用于单个变量,而不能用于表达式或常量。
⑶赋值运算符=
⑷复合的赋值运算符
+=、-=、*=、/=、%=注:
复合的赋值运算符只能是双目运算符。
⑸关系运算符<、<=、>、>=、==、
⑹逻辑运算符!
、&&、||
⑺逗号运算符表达式1,表达式2,…
⑻条件运算符c?
e1:
e2
⑼长度运算符sizeof()
5、类型转换
⑴数据的混合运算和类型自动转换
C语言允许不同类型的数据混合运算,但此时要遵循一定的规则,将运算符两边的操作数转换成共同的类型,具体转换原则是将运算符两边的数据转换成为它们之中数据最长的数据类型,以保证运算的精度不会低。
⑵强制类型转换(类型名称)(表达式)
注:
(1)类型说明和表达式都需要加括号(单个变量可以不加括号);
(2)无论隐式转换,强制转换都是临时转换,不改变数据本身的类型和值。
二.练习
用N—S图表示下列问题:
1.有两个瓶子A和B,分别盛放醋和酱油,要求将它们互换。
2.依次将10个数输入,要求将其中最大的数打印出来。
3.有3个数a、b、c,要求按从大到小的顺序把它们打印出来。
4.求1+2+3+……+100。
5.判断一个数n能否同时被3和5除。
6.将100~200之间的素数打印出来。
7.求两个整数m和n的最大公约数。
8.求方程ax2+bx+c=0的根;分别考虑有两个不等的实根和有两个相等的实根的情况。
㈠.填空题:
1.若k为整型变量且赋值11。
请写出运算k++后表达式的值11和变量的值12。
2.若x为double型变量,运算x=3.2,++x后表达式的值4.2和变量的值4.2。
3.函数体由符号{开始,用符号}结束。
函数体的前面是声明部分,其后是执行部分。
4.C语言中的标识符可分为关、和预定义标识符三类。
5.在C语言程序中,用关键字int定义基本整型变量,用关键字定义单精度实型变量,用关键字定义双精度实型变量。
6.把a1、a2定义成单精度实型变量,并赋初值1的定义语句是floata1,a2;。
7.C程序中定义的变量,代表内存中的一个地址。
8.表达式3.5+1/2的计算结果是3.5。
9.写出数学表达式
三个等价的C语言表达式、、。
10.通常一个字节包含8个二进制位。
11.当计算机用两个字节存放一个整数时,能存放的最大(十进制)整数是32767、最小(十进制)整数是-32768。
12.在C语言中整数可用进制数、进制数和进制数三种数制表示。
13.C语言中,int型数据占2个字节,long型数据占4个字节,unsignedint型数据占2个字节,short型数据占2个字节,float型数据占4个字节,double型数据占8个字节,char型数据占1个字节。
㈡.选择题:
1.以下选项中正确的整型常量是(B)。
A.12.B.-20C.1,000D.456
2.以下选项中正确的实型常量是(D)。
A.0B.3.1415C.0.329╳102D..871
3.以下选项中不合法的用户标识符是(B)。
A._123B.printfC.A$D.Dim
4.C语言中运算对象必须是整型的运算符是(A)。
A.%B./C.!
D.*
5.可在C程序中用作用户标识符的一组标识符是(B)。
A.voidB.as_b3C.ForD.2c
define_123-abcDO
WORDIfcaseSIG
6.若变量已正确定义并赋值,不符合C语言语法的表达式是(C)。
A.a=a+7;B.a=7+b+c,a++C.int(12.3%4)D.a=a+7=c+b
7.不合法的八进制数是(B)。
A.0B.028C.077D.01
8.不合法的十六进制数是(A)。
A.oxffB.0XabcC.0x11D.0x19
㈢.程序设计题:
略
第三章顺序程序设计
一.知识点
1.算法:
为解决一个问题而采取的方法和步骤。
2.算法的分类:
数值算法、非数值算法。
3.算法的特点:
有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性。
4.算法描述方法:
自然语言、流程图、改进流程图、N—S流程图、伪代码、计算机语言。
5.C语句的类型:
控制语句、函数调用语句、表达式语句、空语句、复合语句。
6.输入输出的概念:
输入输出是相对主机而言,C语言是由函数来实现输入输出的。
7.字符数据的输入/输出:
getchar()、putchar()
8.格式输入/输出:
scanf()、printf()
9.printf的格式符:
d、i,o,x、X,u,c,s,f,e、E,g、G;l,m,n,-。
10.scanf的格式符:
d、i,o,x、X,u,c,s,f,e、E,g、G;l,m,*;&。
注意输入数据时数据流的分隔符,系统默认的分隔符为空格、tab键和回车。
11.顺序结构的设计思想:
定义(声明)变量、输入数据、处理数据、输出结果。
【要点归纳】
1、C语言语句
一个C程序应包括数据描述(由数据声明部分来实现)和数据操作(由执
行语句来实现)两部分。
C语句分为以下五类:
z控制语句(9种)
z函数调用语句
z表达式语句
z空语句
z复合语句
2、数据输出
在C语言中可以使用printf()、putchart()、puts()等函数进行数据输出。
注:
在printf()语句中,是从右向左计算输出表达式的值。
3、数据输入
在C语言中可以使用scanf()、getchar()、gets()等函数进行数据输入。
注:
⑴scanf()函数中没有精度控制。
⑵gets(str);与scanf(“%s”,str);的差别是:
使用gets()函数输入的字符串可以含有空格,而scanf(“%s”,str);不能输入含空格字符的字符串。
二.练习
㈠.填空题:
1.以下程序段执行后的输出结果是:
⑴⑵⑶。
inti=-200,j=2500;
printf(“⑴%d%d”,i,j);
printf(“⑵i=%d,j=%d\n”,i,j);
printf(“⑶i=%d\nj=%d\n”,i,j);
2.复合语句在语法上被认为是一条词句。
空语句的形式是;。
3.C语句的最后用;结束。
4.以下程序段的输出结果是。
intx=0177;printf(“x=%6d,x=%6o,x=%6x,x=%6u\n”,x,,x,x,x);
5.以下程序段的输出结果是。
doublea=513.789215;
printf(“a=%8.6f,a=%8.2f,a=%14.8f,a=%14.8lf\n”,a,a,a,a);
6.以下程序段的输出结果是。
a=3+5,a*4;x=11/3;printf(“%d,%%d\n”,a,x);
7.以下程序输入三个整数值给a、b、c,程序把b中的值给a,把c中的值给b,把a中的值给c,交换后输出a、b、c的值。
请填空:
#include
main()
{inta,b,c,;
printf(“Entera,b,c:
”);
scanf(“%d,%d,%d”,);
;a=b;b=c;;
printf(“a=%d,b=%d,c=%d\n”,a,b,c);}
8.以下程序不借助任何变量把a、b中的值进行交换。
请填空:
#include
main()
{inta,b;
printf(“Inputa,b:
”);
scanf(“%d,%d”,);
a+=b;b=a-b;a=a-b;
printf(“a=%d,b=%d\n”,a,b);}
㈡.选择题:
1.若a、b、c、d都是int型变量且初始值为0,下列不正确的赋值语句是(C)。
A.a=b=c=100;B.d++;C.c+b;D.d=(c=22)-(b++);
2.以下选项中不是C语句的是(C)。
A.{inti;i++;printf(“%d\n”,i);}B.;C.a=5,c=10D.{;}
3.以下合法的C语言赋值语句是(BD)。
A.a=b=58B.k=int(a+b);C.a=58,b=58D.--i;
4.以下程序的输出结果是(C)。
A.0B.1C.3D.不确定的值
main()
{intx=10,y=3;printf(“%d\n”,y=x/y);}
5.若变量已正确说明为int类型,要给a、b、c输入数据,正确的输入语句是(D)。
A.read(a,b,c);B.scanf(“%d%d%d”,a,b,c);
C.scanf(“%D%D%D”,&a,&b,&c);D.scanf(“%d%d%d”,&a,&b,&c);
6.若变量已正确定义,要将a和b中的数进行交换,下面不正确的语句组是(C)。
A.a=a+b,b=a-b,a=a-b;B.t=a,a=b,b=t;
C.a=t;t=b;b=a;D.t=b;b=a;a=t;
7.若变量已正确定义,以下程序段的输出结果是(D)。
A.输出格式说明与输出项不匹配,输出无定值
B.5.1700C.5.16800D.5.16900
x=5.16894;printf(“%f\n”,(int)(x*1000+0.5)/(float)1000);
8.执行以下程序段后,c3中的值是(A)。
A.0B.1/2C.0.5D.1
intc1=1,c2=2,c3;c3=c1/c2;
9.执行以下程序段后,其输出结果是(B)。
A.0,0,-10B.0,0,5C.-10,3,-10D.3,3,-10
inta=0,b=0,c=0;c=(a-=a-5),(a=b,b+3);
printf(“%d,%d,%d\n”,a,b,c);
10.以下程序的输出结果是(A)。
A.a=%2,b=%5B.a=2,b=5C.a=%%d,b=%%dD.a=%d,b=%d
main()
{inta=2,b=5;printf(“a=%%d,b=%%d\n”,a,b);}
11.若int型占两个字节,以下程序段的输出是(D)。
A.-1,-1B.-1,32767C.-1,32768D.-1,65535
inta=-1;printf(“%d,%u\n”,a,a);
12.以下程序段的输出结果是(C)。
A.|3.1415|B.|3.0|C.|3|D.|3.|
floata=3.1415;printf(“|%6.0f|\n”,a);
13.以下程序段的输出结果是(B)。
A.98B.89C.66D.以上三个都不对
#include
main()
{doublea=-3.0,b=2;
printf(“%3.0f%3.0f\n”,pow(b,fabs(a)),pow(fabs(a),b));}
14.若a为整型变量,则以下语句(B)。
A.赋值不合法B.输出值为-2C.输出为不确定值D.输出值为2
a=-2L;printf(“%d\n”,a);
15.若有定义chars=‘\092’;则该语句(B)。
A.使s的值包含1个字符B.定义不合法,s的值不确定
C.使s的值包含4个字符D.使s的值包含3个字符
16.若k、g均为int型变量,则下列语句的输出为(D)。
A.15B.16C.15D.16
6f70716f
k=017;g=111;printf(“%d\n”,++k);printf(“%x\n”,g++);
17.已知字母a的ASCII十进制代码为97,执行下列语句后的输出为(C)。
A.b,cB.a--运算不合法,故有语法错误
C.98,cD.格式描述和输出项不匹配,输出无定值
chara=‘a’;a--;printf(“%d,%c\n”,a+‘2’-‘0’,a+‘3’-‘0’);
18.下列程序的输出为(A)。
A.27.000000B.27.500000C.28.000000D.28.500000
#include
main()
{intm=7,n=4;floata=38.4,b=6.4,x;
x=m/2+n*a/b+1/2;printf(“%f\n”,x);}
19.下列程序的输出结果是(C)。
A.18B.9C.-18D.-9
main(){inta=9;a+=a-=a+a;printf(“%d\n”,a);}
20.下列程序的输出结果是(A)。
A.0B.5C.1D.不确定值
main(){inta=7,b=5;printf(“%d\n”,b=b/a);}
21.下列程序的输出结果是(C)。
A.12B.11C.10D.9
main(){inta=011;printf(“%d\n”,++a);}
㈢.程序设计题:
1.编写程序,输入两个整数1500和350,求出它们的商和余数并进行输出。
2.编写程序,读入三个双精度数,求它们的平均值并保留此平均值小数点后一位数,对小数点后第二位数进行四舍五入,最后输出结果。
3.输入一个华氏温度,要求输出摄氏温度。
公式为:
c=5(f-32)/9。
第四章选择结构程序设计
一.知识点
1.关系运算符、逻辑运算符、逻辑值的表示与含义;注意&&、||的运算规则。
2.三种if语句
3.选择结构的嵌套,注意if与else的配对;
4.条件运算符:
?
:
5.switch语句,注意其执行过程;
6.选择结构程序设计思想。
【要点归纳】
1、if语句
if语句有三种使用形式⑴单分支if语句。
if(条件)语句;⑵双分支if语句。
if(条件)语句1;
else语句2;
⑶多分支if语句。
if(〈条件1〉)语句1;
elseif(〈条件2〉)语句2;
…
elseif(〈条件n〉)语句n;
else语句n+1;
2、switch(开关)语句
switch语句用于方便地从多个语句中选择一个或多个语句执行。
switch(〈表达式〉)
{
case常量表达式1:
语句1;
case常量表达式2:
语句2;
…
case常量表达式n:
语句n;
default:
语句n+1;
}
注:
表达式的值一定是整型值,若为其他类型,最后都要转换为整型数。
二.练习
㈠.填空题:
1.C语言中用1表示逻辑值“真”,用0表示逻辑值“假”。
2.C语言中的关系运算符按优先级别是、、、、、。
3.C语言中的逻辑运算符按优先级别是、、。
4.C语言中的关系运算符和逻辑运算符的优先级别是、、、、、
、、、、、、。
5.C语言中逻辑运算符的!
优先级高于算术运算符。
6.将下列数学式改写成C语言的关系表达式或逻辑表达式:
a=b或a4fabs(x)>4
7.下列程序的输出结果1。
main()
{inta=100;
if(a>100)printf(“%d\n”,a>100);elseprintf(“%d\n”,a<=100);}
8.若已知a=10、b=15、c=1、d=2、e=0,请分别给出下列表达式的运算结果:
⑴a*b&&c1⑵a+b>10||a+b<01⑶e0⑷c==b>e1
⑸!
ae&&e==b==++c0
⑻(0⑽(b==10)&&(a==10)0⑾!
0||d&&a==c+d0
⑿(a+c==b)==(b+d==a)||(c=b+a)>(d=c+b)1
9.当a=1