《C语言程序设计》考纲试题答案解析.docx
《《C语言程序设计》考纲试题答案解析.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》考纲试题答案解析.docx(35页珍藏版)》请在冰点文库上搜索。
《C语言程序设计》考纲试题答案解析
《C语言程序设计》考纲、试题、答案解析
一、考试说明
(一)说明:
考试为闭卷,试卷满分为100分,考试时间90分钟。
(二)题型及各题型所占分数和相应的答题技巧
1、选择题(每题2分,共20分)
2、填空(每空3分,共15分)
3、程序填充(每空5分,共25分)
4、运行结果题(每题10分,共20分)
5、编程题:
(每题20分)
答题技巧:
选择与题干相匹配的答案,注意错误答案干扰。
答题技巧:
理解程序要点,注意关键语句的书写。
本课程内容相对较为琐碎,需要理解掌握的东西比较多,希望学员们能够在理解算理的基础上完成复习工作。
二、重点内容
第一章算法
算法的五种描述方法
第二章C语言程序设计基础
1.C程序的基本结构
例如:
/*Thisisthefirstprogram*/(注释信息)
main()(主函数)
{
printf(”WelcometoC!
\n”);(函数调用,printf是函数名)
}
(1)程序的第一行是注释信息
(2)main开始到最后的}称为函数
2.C程序的执行过程
从本程序的main开始,到main函数结束
第二章数据类型与表达式
1.C语言规定,符号常量和变量必须“先定义,后使用”。
2.C语言的基本数据类型及各自的定义方式
(1)整型数据
C语言提供了3种表示整数常量的方法:
Ø十进制整数:
例如10、-23、89等。
Ø八进制整数:
以数字0开头的数是八进制数,例如011实际上相当于十进制的9,-011是十进制的-9。
八进制的数位值是0、1、……8。
Ø十六进制整数:
以0x或0X开头的是十六进制数。
例如:
0x18实际上是(18)16,相当于十进制数的24。
整型变量的定义
格式:
“数据类型名标识符变量名”即“int变量名;”,整型类型名int与变量名之间要用空格分开,最后还要以分号结尾。
例如:
inta;定义了一个整型变量,而inta,b,c;定义了3个整型变量。
并且可以赋初值。
(2)字符型数据
C语言中,用单引号括起来的是字符常量,用双引号括起来的被称为字符串常量。
字符串实际上是连续存放的一组字符,但最后一个字符的值是0。
(3)实型数据
实型常量有两种表示方法:
十进制小数形式和指数形式。
实型变量的分类
Ø单精度实型,数据类型符是float,这种变量占用4个字节(32位)内存,定义范例为floatf=2.14,f;
Ø双精度实型,数据类型符是double,这种变量占用了8个字节(64位)内存,定义范例为doublex,y;
Ø长双精度实型:
数据类型符是longdouble,这种变量占用16字节(128位)内存,定义范例longdoublex,y;
(4)空类型:
void
3.Printf函数输出各种类型数据的方法
(1)格式:
printf(参数列表)
(2)Printf函数可以带多个参数,例如:
printf(“variablea=%d”,a)
(3)函数printf在显示不同类型数据时使用不同的格式控制符
Int%d;unsignedint%u;float%f;char%c;字符串%s
4.运算符和表达式的含义
变量用来存放数据,运算符则用来处理数据。
用运算符将变量和常量连接起来的符合c语法规则的式子被称为表达式。
说明:
开始阶段,大家理解运算符可以利用数学上的+、-、*、/来理解即可。
5.运算符的种类(按所带操作数的数量划分)
(1)单目运算符
(2)双目运算符
(3)三目运算符
6.C语言的各种运算符和表达式
(1)赋值运算符和赋值表达式:
“=”/“=”;
c语言中,“=”被称为赋值运算符,它的作用是设置变量的值。
C语言允许在一个表达式中对多个变量连续赋值,例如:
a=b=c=22。
连续赋值的表达式的运算顺序是从右向左的(又被称为右结合性)。
说明:
与数学中的=严格区分开来,在c语言中,a=b只是代表要将b的值赋给a,并不说明a的值与b的值相等。
例如下面的程序段:
inta,b;
a=30;
b=a;
a=40;
上面的含义是:
定义两个变量a、b;将30赋给变量a;将a的值赋给b;再将40赋给a。
c语言中允许在一个表达式中对多个变量连续赋值。
例如:
a=b=c=22;根据=的右结合性,我们知道:
先对c赋值22,得到c=22,再对b赋值,得到b=c=22,最后对a赋值,得到a=b=c=22。
(2)强制类型转换符
当等号左右两边的数据类型不一致时,c语言将首先将=右边的表达式的值转化为=左边的数据类型,然后再赋值给=左边的变量。
例如:
inta;
a=3.2;
这时赋给a的值是3。
(3)算术运算符和算术表达式:
+、-、*、/和%
c语言提供的算术运算符包括:
加(+)、减(-)、乘(*)、除(/)和取余(%)。
这些都是双目运算符。
利用算术运算符连接起来的式子称为算术表达式。
说明:
Ø+、—、*、/运算符既可用语整型数据的算术运算,又可用于实型数据的算术运算。
而%只能用于整数。
Ø先乘除、后加减。
Ø同级运算符的计算顺序是从左向右。
Ø优先级:
强制转换运算符>算术运算符>赋值运算符。
例如:
inta;
a=(int)2.5*2+3;
最后a的值是7。
(4)自增自减运算符和符号运算符:
++、--和-
-既是一个算术运算符,又是一个负号运算符,它是一个单目运算符;例如,a=34,则-a是-34。
负号运算符优先级与强制类型转换运算符一样。
++和--
++的作用是使变量自己增1,--的作用是使变量自己减1。
与负号运算符优先级相同。
++和--位于变量左边和右边的结果是不同的。
(在变量左边,先增减后计算;在变量右边,先计算,后增减)
(5)位运算符:
按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移(<<)和右移(>>)
上述除了按位取反(~)外,都是双目运算符。
位运算符只能作用于int和char型数据。
(6)逗号运算符和逗号表达式
用逗号连接起来的表达式称为逗号表达式。
一般形式:
表达式1,表达式2,……,表达式k,例如:
a+5,b=6,b++
逗号表达式的计算规则是:
从左向右依次计算逗号分割的各个表达式的值,最后一个的值就是整个逗号表达式的值。
(7)sizeof运算符:
计算字符个数,因此牢记各类型数据的长度
作用:
能获取变量和数据类型所占内存大小的运算符。
使用格式:
sizeof表达式
sizeof(数据类型名或表达式)
例如:
sizeof(int)的值是2。
第四章、顺序程序设计
1.数据输出函数——Printf函数
(1)各种格式转换符:
%d,%x,%o,%u,%c,%s,%f,%e,%g
(2)调用printf函数的基本格式是
printf(“格式控制字符串”,表达式1,表达式2,…,表达式n);
(3)printf函数的功能就是按照“格式控制字符串”的要求,将表达式1,表达式2,…,表达式n的值显示在屏幕上。
(4)格式控制字符串中包含2类字符:
常规字符和格式控制符。
在输出是,printf函数规定,常规字符要原样输出,而格式控制符的位置上输出相对应的表达式的值。
输出有符号整数的格式控制符的一般形式是:
%[-][+][width][.precision][l]d
输出无符号整数的格式控制符的一般形式是:
%[-][#][width][.precision][l]u|o|x|y
输出实数的格式控制符的一般形式是:
%[-][+][#][width][.precision][l|L]f|e|E|g|G
输出字符的格式控制符的一般形式是:
%[-][width]c
输出字符串的格式控制符的一般形式是:
%[-][width][.precision]s
字符和字符串的输出,除了可以利用printf函数以外,还可以利用putchar和puts函数。
putchar函数只带一个参数,这个参数就是要输出的字符。
puts函数也只带一个参数,这个参数就是要输出的字符串,puts函数输出这个字符串后自动换行回车。
但利用putchar函数却无法控制字符输出的格式,利用puts函数也无法控制字符串的输出格式。
当程序不需要控制字符和字符串的格式时,调用putchar和puts函数要比调用printf函数简便得多。
格式化输出时,通过格式控制字符控制的格式要素主要有:
(1)数据类型及其长度,比如用%d输出int型数据,用%ld输出long型数据,用%f输出double型数据,用%lf输出longdouble型数据。
(2)输出数据所占的宽度(域宽),比如,%4d表示输出至少占4格。
(3)输出数据的精度,比如%4.2f表示输出2位小数,%.3s表示要输出字符串的前3个字符,%6.4u表示至少要输出4位数。
(4)对齐特征,比如%-16d表示输出的数据左对齐。
缺省情况下,输出将右对齐。
(5)数制形式,比如,%x要求以十六进制形式输出数据。
(6)数值符号,比如,%+d要求输出整数的正负号。
2.数据输入函数——Scanf函数
(1)调用scanf函数的基本格式是
scanf(“格式控制字符串”,变量1的地址,变量2的地址,…,变量n的地址);
(2)与上面printf函数同样的格式控制符
(3)scanf函数的功能是在第一个参数格式控制字符串的控制下,接受用户的键盘输入,并将用户输入的数据依次存放在变量1、变量2,……和变量n中。
(4)&是取地址符。
功能是取地址。
要获得变量的地址,需要在变量名前加&。
因此&又被称为取地址运算符。
(5)scanf函数规定,当输入一项数据时,遇到以下情况scanf认为该数据输入结束:
Ø遇到空格、回车或Tab键。
Ø指定的宽度结束,比如scanf(“%3d”,&a);要求输入一个整数。
如果用户输入
1234,a的值将是123。
Ø遇到非法输入,比如scanf(“%d”,&a);要求输入一个整数。
如果用户输入12a3,
a的值将是12,字符a是输入整数时的非法字符。
Ø当用%c输入字符型数据时,可显示字符、空格、回车以及其他转义字符都是有效
输入。
3.各种数据类型的输出:
整型、实数、字符和字符串、格式化输出等。
比如下边列出格式化输出的总结:
(1)数据类型及其长度,比如用%d输出int型数据,用%ld输出long型数据,用%f输出double型数据,用%lf输出longdouble型数据。
(2)输出数据所占的宽度(域宽),比如,%4d表示输出至少占4格。
(3)输出数据的精度,比如%4.2f表示输出2位小数,%.3s表示要输出字符串的前3个字符,%6.4u表示至少要输出4位数。
(4)对齐特征,比如%-16d表示输出的数据左对齐。
缺省情况下,输出将右对齐。
(5)数制形式,比如,%x要求以十六进制形式输出数据。
(6)数值符号,比如,%+d要求输出整数的正负号。
本章所介绍的函数:
函数
功能
函数
功能
printf
格式化输出
putchar
字符输出
scanf
格式化输入
getchar,getche,getch
字符输入
clrscr
清屏
gotoxy
光标定位
clreol
清一行
textcolor
设置文本颜色
textattr
设置文本显示属性
textbackground
设置文本背景色
cprintf
彩色格式化输出
puts
字符串输出
_setcursortype
设置光标属性
bioskey
获取各种按键信息
第五章选择结构
1.选择结构的程序设计
(1)简单的if语句
if(表达式)
{程序段}
if…else语句:
if(表达式p)
{程序段s1}
else
{程序段s2}
(1)if后面的()是必不可少的。
(2)当简单if语句和if-else语句中的程序段只有一条语句时,外边的{}可以省略。
(3)if语句中的程序段可以包含任何类型的C语句。
(4)if语句中的表达式可是任何类型,不仅限于关系表达式和逻辑表达式。
表达式
非零时,表达式的值就是真,否则就是假。
(5)如果表达式是一个判断两个数是否相等的表达式,要当心不要将==写成了赋值
运算符=。
(2)Switch语句
switch(变量或表达式p)
{
case常量表达式c1:
程序段s1
break;
case常量表达式c2:
程序段s2
break;
……
case常量表达式cn:
程序段sn
break;
default:
程序段s(n+1)
break;}
该语句将p与c1到cn这些表达式的值按顺序比较,如果p与某表达式的值相等,则执行该case语句下的程序段。
如果p与所有的表达式都不相等,则执行default下的程序段sn+1。
如果遇到break则跳出该switch语句。
(1)switch,case,default都是保留字,switch后面的()不能省略。
(2)switch后面的()后面的{}不能省略。
(3)case表达式后面的冒号不能省略。
(4)case后面必须是常量表达式,表达式不能包含变量。
(5)“case常量表达式”被称为case子句,“break”又称为break子句,“default”又称为default子句。
(6)case子句和default子句之间没有固定的顺序,它们之间顺序的变化不会影响switch语句的功能。
(7)程序段可以包含任何类型的C语句。
(8)break子句可以省略,但是否省略,要根据算法的逻辑而定。
省略了break子句的switch语句与不省略break子句功能是不同的。
第六章、循环结构的程序设计
(1)While和dowhile语句
while(表达式p)
{
程序段s
}
功能:
首先判断表达式p的值是否非真。
如果是真,则执行程序段s,然后再判断表达式p的值是否为真,如果为真,再执行程序段s。
如此循环往复,知道p的值为假为止。
do
{
程序段s
}while(表达式p);
功能:
首先执行程序段s,然后再判断表达式p的值是否为真,如果为真,则循环执行程序段s,直到p为假为止。
(1)while后面的()不能省略,()中间的表达式可以是任何类型的表达式。
(2)当while语句的程序段中只有1条语句时,程序段外边的{}可以省略,但省略
{}不是一个好习惯。
如果表达式P的值一开始就是假,循环体将一次也不被执行。
(3)程序段可以包含任何类型的C语句。
这个程序段又称循环体。
(4)通常情况下,程序中会利用一个变量来控制while语句的表达式P的值,这个
变量被称为循环控制变量。
(5)要在while语句的某处(表达式P或循环体内)改变循环控制变量的值,否则
极易构成死循环。
(6)如果在执行循环体过程中,遇到了break子句,则跳出while循环。
(7)如果在执行循环体过程中,遇到了continue语句,则循环体中continue语句后
面的其他语句将被跳过,而直接进入下一轮循环。
(2)For语句
for(表达式1;表达式2;表达式3)
{
程序段s
}
功能:
首先求表达式1的值,然后判断表达式2是否为真。
如果是真,则执行程序段s,然后求表达式3的值。
接下来再判断表达式2是否为真,如果为真,继续执行循环体以及求表达式3的值,直到表达式2的值为假为止。
(1)表达式1、表达式2和表达式3可以是任何类型的表达式。
(2)表达式1、表达式2和表达式3之间必须用分号分隔,表达式可以为空,但分号不能省略。
(3)表达式1和表达式3通常是逗号表达式,表达式1只被执行一次,通常用于初始化循环控制变量。
而表达式3通常用来改变循环控制变量的值。
(4)表达式2为空相当于表达式2的值是真。
因此,下面的循环是死循环:
(5)当for语句的程序段中只有1条语句时,程序段外边的{}可以省略,但是省略{}不是一个好习惯。
(6)程序段可以包含任何类型的C语句。
(7)程序员既可以在for语句前面单独初始化循环控制变量,也可以利用for语句的表达式1初始化循环控制变量。
(8)程序员既可以在循环体内改变循环控制变量的值,也可以利用表达式3改变循环控制变量的值。
(9)如果在执行循环体过程中,遇到了break子句,则跳出for循环。
(10)如果在执行循环体过程中,遇到了continue语句,则循环体中continue语句后面的其他语句将被跳过,而直接进入下一轮循环。
三种循环语句的异同点比较:
(1)在使用while和do-while语句时,必须在while或do-while语句前初始化循环
控制变量。
但for语句却可以利用表达式1来初始化循环控制变量。
(2)在使用while和do-while语句时,循环控制变量的变化必须放在循环体内。
而
for语句却可以利用表达式3来改变循环控制变量的值。
(3)do-while语句的循环体至少被执行一次,但while语句和for语句的循环体可能
一次也不执行。
(4)while和do-while语句中不能省略循环控制条件(即表达式P),但for语句却可
以省略循环条件(即表达式2)。
(5)break语句和continue语句在这3种循环语句中的作用是相同的。
凡是用while语句能实现的循环,必然能用for语句实现,反过来也一样。
3.Break和continue语句
break语句和continue语句大大增强了c语言实现选择控制和循环控制的灵活性
4.关系运算符和关系表达式
<小于,<=小于等于,>大于,>=大于等于,==等于,!
=不等于
5.逻辑运算符和逻辑表达式
||逻辑或;&&逻辑与!
逻辑非
6.条件运算符和条件表达式
条件运算符:
(?
:
)
7.运算符的优先级
算术运算符>移位运算符>关系运算符>位运算符>逻辑运算符
8.混合结构的程序设计
不管是选择结构的程序设计还是循环结构的程序设计,都应该结合起来以实现混合优化。
只有这样,才能彰显c语言的程序设计魅力。
1.表达式语句
任何一个表达式的后面加上分号就构成了表达式语句。
例如:
a++是表达式,a++;是表达式语句。
a=5是表达式,a=5;是表达式语句。
2.函数调用语句
函数调用加上分号就是函数调用语句。
例如:
printf(“Hello”)是函数调用,printf(“Hello”);是函数调用语句。
3.复合语句
可以用{}将一些语句括起来,就成了复合语句。
复合语句又称分程序。
例如:
{
a++;
b--;
}
4.空语句
空语句就是一个分号。
空语句有时用在空循环(什么都不执行的循环)中。
5.控制语句
用来实现一定的控制功能的语句称为控制语句。
C语言用控制语句来实现分支结构和循环结构。
第七章数组
1.一维数组的定义与引用
(1)定义形式:
数据类型符数组变量名[变量表达式];
在定义时可以直接赋初值:
未指定的值被赋值为0。
(2)引用说明
1)c语言规定,数组是一种数据单元的序列,不能直接存取整个数组,只能引用数组中的各个数据单元。
引用数据单元的格式是:
数据变量名[下标]
其中,下标可以使整性变量或整型表达式,c语言规定,下标的最小值是0,最大值是数组大小减1。
2)给数组赋值:
a[0]=2,表示将数组a的第一个单元赋值为2。
3)注意数组的内存地址和数组单元的存放
4)不许多数组变量名赋值:
a=3是错误的。
2.二维数组
当构成一维数组的元素也是一维数组时,就构成了二维数组。
二维数组是一维数组的数组。
以此类推,三维数组是二维数组的数组,四维数组是三维数组的数组……
C语言中,二维数组的定义格式是在一维数组的定义格式基础上增加了一维:
数据类型符数组变量名[整型常量表达式1][整型常量表达式2];
与一维数组相比,二维数组的定义,除了增加了一个[整型常量表达式]外,其他都一样。
对二维数组中数据引用的单元格式是:
数组变量名[下标1][下标2]。
与一维数组相比,数据单元的引用形式除了多一个[下标]外,其他都一样。
3.字符串与数组
(1)所谓字符串常量就是用双引号括起来的一组字符。
但实际上,字符串是一种字符型数组,并且这个数组的最后一个单元的值是‘\0’(即数值0)。
也就是说,字符串是一种以‘\0’结尾的字符数组。
这个结尾的字符‘\0’唯一的作用是标志字符串结束。
字符串的输入:
scanf函数和gets函数。
scanf函数在输入字符串时使用%s格式控制符,并且与%s对应的地址参数应该是一个字符数组,scanf函数会自动在字符串后面加0。
利用scanf函数输入字符串有不足:
当遇到空格时,scanf函数的输入操作便终止了。
因此,我们无法利用scanf函数输入一个包含多个单词或空格的句子。
利用scanf函数连续输入多个字符串,输入时,字符串间要用空格分隔。
能输入完整句子的函数是gets函数。
gets的调用格式是:
gets(数组变量名);
gets的主要功能是接受键盘输入,将输入的字符串存放在参数数组中,当遇到回车时返回。
gets函数会自动在字符串后面添加结尾字符‘\0’。
(2)字符串的输出:
printf函数,cprintf函数或puts函数。
(3)字符串的比较:
strcmp函数。
格式为:
strcmp(字符串1,字符串2);
(4)字符串的复制:
strcpy函数
格式为:
strcpy(字符数组1,字符串2);
(5)字符串的连接:
strcat函数
格式为:
strcat(字符数组1,字符串2);
strcat函数的功能是将字符串2连续接到字符数组1的字符串的后面。
(6)求字符串的长度:
strlen函数
格式为:
strlen(字符串);
第八章函数
1.函数的定义和调用
(1)不带参数没有返回值的函数
1)定义格式:
void函数名(void)
{
变量声明部分
执行部分
}
2)说明:
函数名必须是合法标识符。
执行部分放置c语句。
void是一种特殊的数据类型:
空类型,表明这个函数没有返回值。
3)声明格式和调用格式分别为:
void函数名(void);
函数名();
调用任何函数必须先声明函数的原型
例如:
#include
voidshowerr(void);/*声明showerr函数的原型*/
……
函数在执行完函数体内最后一句语句后,会自动返回到调用它的地方。
在某种条件下,也可以利用return语句返回,其功能即是使函数终止执行并返回到调用它的地方。
(2)不带参数有返回值的函数
1)定义格式
返回值类型函数名(void)
{
变量声明部分
执行部分
}
2)说明:
函数名是合法标识符;返回值类型符必须是合法的数据类型标识符;
当返回值类型符被省略时,默认为int型。
函数的返回值通常由return语句返回给调用者。
3)原型声明格式和调用格式
返回值类型符函数名(void);
函数名();或者变量=函数名();
(3)带参数没有返回值的函数
1)定义格式
void函数名(形式参数列表)
{
变量声明部分
执行部分
}
2)说明
函数名合法标识符;
形参列表格式为:
数据类型1形参名1,数据类型2形参名2,…,数据类型n形参名n
若省略数据类型,则