2012年期末复习题
我是一只小蜜蜂-共产党员的权利和义务
第1、2章 C语言概述及基础知识
一、选择题
1.
是C程序的基本构成单位。(A)
A)函数 B) 函数和过程 C) 超文本过程
D) 子程序
2.下列说法正确的是 。(C)
A)
一个函数的函数体必须要有变量定义和执行部分,二者缺一不可
B)
一个函数的函数体必须要有执行部分,可以没有变量定义
C)
一个函数的函数体可以没有变量定义和执行部分,函数可以是空函数
D) 以上都不对
3.以下说法正确的是 。(C)
A)
C语言程序总是从第一个定义的函数开始执行
B)
在C语言程序中,要调用的函数必须在main()函数中定义
C)
C语言程序总是从main()函数开始执行
D)
C语言程序中的main()函数必须放在程序的开始部分
4. 一个C语言程序是由
。(B)
A) 一个主程序和若干个子程序组成;
B) 函数组成,
并且每一个C程序必须且只能由一个主函数;
C) 若干过程组成; D)若干子程序组成.
5. 以下叙述中错误的是 ( )(C)
A)C语言是一种结构化程序设计语言。
B)结构化程序有顺序、分支、循环三种基本结构组成。
C)使用三种基本结构构成的程序只能解决简单问题。
D)结构化程序设计提倡模块化的设计方法。
6.对于一个正常运行的C程序,以下叙述中正确的是(A)
A)程序的执行总是从main函数开始,在main函数结束。
B)程序的执行总是从程序的第一个函数开始,在main函数结束。
C)程序的执行总是从main函数开始,在程序的最后一个函数中结束。
D)程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束。
7.
不是C语言提供的合法关键字。(B)
A)char B)scanf
C)case D)default
8.C语言提供的合法关键字是 。(C)
A)ELSE B)INT C)case D)printf
二、填空题
1.一个函数由两部分组成,它们是(函数的说明部分 )和(函数体)。
2.函数体的范围是( 最外层的一对大括弧内的部分 )。
1
3.C语言是通过(输入和输出函数)来进行输入输出的。
4.在C语言中,凡在一个标识符后面紧跟着一对圆括弧,就表明它是一个(.函数 ).
基础知识(数据类型)
一、选择题
1.在C 语言中,下列类型属于基本类型的是
A 。
A)整型、实型、字符型 B)空类型、枚举型
C)结构体类型、实型 D)数组类型、实型
2.C语言中不能用来表示整常数的进制是
D 。
A)十进制 B)十六进制 C)八进制
D)二进制
3.在C语言中,回车换行符是 A 。
A)n
B)t C)v D)b
4.设d为字符变量,下列表达式不正确的是 C
。
A)d=97 B)d=‟a‟ C)d=”a” D)d=‟g‟
5.10+‟a‟+1.5-567.345‟b‟的结果是 B 型数据。
A)long B)double C)int D)unsigned float
6.C语言中,运算对象必须是整型数的运算符是 A 。
A)% B)
C)% 和 D)*
7.已知在ASCII字符集中,字母A的序号为65,下面程序的输出结果为 C 。
main()
{char c=‟A‟;int i=10;
c=c+10;i=c%i;
printf(“%c,%dn”,c,i);}
A)75,7 B)75,5
C)K,5
D)因存在非图形字符,无法直接显示出来
二、填空题
1.在字符常量包括普通的字符常量 和转义字符。
2.在C语言中,用来标识变量名,符号
常量名,函数名,数组名,类型名,文件名
的有效字符序列称为标识符 。
3.实型变量分为
单精度 和 双精度,即float和double型。
4.在一个变量定义语句中可以同时定义多个变量,变量之间用 ,(逗号)隔开。
5. 设
a=12,n=5,则计算了表达式a%=(n%=2)后,a的值为_0_,计算了表达式
a+=a-
=a*=a后,a的值为_0 。
第三章 顺序结构程序设计
一、选择题
1.设有如下定义
int
x=10,y=3,z;则语句printf(的输出结果是 A 。
A)3
B)0 C)4 D)1
2
2.若已知a=10,b=20,则表达式!aA)10 B)20 C)1
D)0
函数中用到格式符,其中数字4表示输出的字符串站用4列。如果字符
串长度大于4,
则按原字符长从左向右全部输出;如果字符串长度小于4,则输出方
式为 C。
A)从左起输出该字符串,右补空格 B)按原字符长从左向右全部输出
C)右对齐输出该字符,左补空格 D)输出错误信息
4.下列程序运行的结果是
D 。
void main()
{int k=17;
printf(
A)17,021,0x11 B)17,17,17
C)17,0x11,021 D)17,21,11
5. 下列程序运行的结果是 B。
void main()
{int a=2,c=5
printf(
A)a=% 2,b=%5 B)a=2,b=5
C)a=d,b=d D)a=2, c=5
二.填空题
r函数的作用是
向终端输出一个字符 。
函数中的“格式控制”后面应当是变量地址 ,而不是变量名 。
3.复合语句是由一对 花括弧, ({ } )括起来的若干语句组成。
4.假设变量a和
b为整形,以下语句可以不借助任何变量把a,b中的值进行交换。
请填空a+=_b _;b=a-
b _;a-=_ b _;
5.已有定义int a;float b,x;char c1,c2
;为使a=3,b=6.5,x=12.6,c1=‟a‟,c2=‟A‟
正确的函数调用语句是sca
nf(输入数据的方式
是3︼6.5︼12.6aA↙。
第四章 选择结构程序设计
一、选择题
1.逻辑运算符的运算对象的数据类型 D
。
A)只能是0或1 B)只能是.T.或.F.
C)只能是整型或字符型 D)任何类型的数据
2.能正确表示x的取值范围在[0,100]和[-10,-5]内的表达式是 B 。
A)(x<=-10)||(x>=-5)&&(x<=0)||(x>=100)
B)(x>=-10)&&(x<=-5)||(x>=0)&&(x<=100)
C)(x>=-10)&&(x<=-5)&&(x>=0)&&(x<=100)
D)(x<=-10)||(x>=-5)&&(x<=0)||(x>=100)
3.判断字符型变量ch为大写字母的表达式是 C 。
3
A)‟A‟<=ch<=‟Z‟
B)(ch>=‟A‟)&(ch<=‟Z‟)
C)(ch>=‟A‟)&&(ch<=‟Z‟)
D)(ch>=‟A‟)AND(ch<=‟Z‟)
4.两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是 A 。
main( )
{ int x;
scanf(“%d”,&x);
if(x++>5) printf(“%d”,x);
else
printf(“%dn”,x--);}
A)7和5 B)6和3
C)7和4 D)6和4
5. 能正确表示a>=10或a<=0的关系表达式是
D 。
A)a>=10 or a<=0
B)a>=10 | a<=0
C)a>=10 && a<=0
D)a>=10 | | a<=0
二、编程题
1.
有一函数,其函数关系如下,试编程求对应于每一自变量的函数值。
x
2
(x<0)
y = -0.5x+10 (0
x<10)
x-
x
(x
10)
2.
编一程序,对于给定的一个百分制成绩,输出相应的五分制成绩。设:90分<
br>以上为„A‟;80~89分为 „B‟;70~79分为„C‟;60~69分为„D‟;60分以下为
„E‟。
1.解答:#include
main()
{float x,y;
scanf(“%f”,&x);
if(x<0) y=x*x;
else
if(x>=0&&x<10) y=-0.5*x+10;
else
y=x-sqrt(x);
printf(“y=%f”,y);}
第五章
循环结构程序设计
一、选择题
1.以下程序的输出结果
A 。
main()
{int n=0;
while(n++<=1)
printf(
printf(
}
4
A)1 2 3 B)0 1 2
C)1 1 2 D)1 2 2
2.在C语言的循环语句for,while,do-
while中,用于直接中断最内层循环的语句
是 C 。
A)swich
B)continue C)break D)if
3.下面程序的运行结果是 C 。
void main()
{int num=0;
while(num<=2)
{num++;printf(“%d”,num);}}
A)1 B)1 2
C)1 2 3 D)1 2 3 4
4.
循环语句中的for语句,其一般形式如下:
for(表达式1;表达式2;表达式3) 语句
其中表示循环条件的是 B。
A)表达式1 B)表达式2
C)表达式3 D)语句
二、填空题
1.while语句的特点是
,do-while语句的特点是 。
2.while语句和do-
while语句两者的区别是 。
3.continue语句的作用是结束本次循
环执行,即跳过循环体中下面尚未执行的语句,接
着进行下一次是否执行循环的判定。
4.在循环中,continue语句与break语句的区别是:continue语句只是 结束本
次循环,
后进行循环的条件判定,即不终止整个循环的执行过程,break语句是终止整个循环的执行,不再进行条件判定。
三 、编程题
1.等差数列的第一项a=2,公差d=3,
编程实现在前n项和中,输出能被4整除的所
有的和.
2.一个数如果恰好等于它的因子之和
(除自身外),则称该数为完全数,例如:
6=1+2+3,6就是完全数,请编写一程序,求出100
0以内的整数中的所有完全数。其
中1000由用户输入。
1.
书123面,参考实验指导答案。
2. [解答]:#include
void main()
{ int a,i,m;
for(a=1;a<=100;a++){ for(m=0,i=1;i<=a2;i++)
if(!(a%i)) m+=i;
if(m==a) printf(“%4d”,a);}
5
第六章
数组
一、选择题
1.在C语言中,引用数组元素时,其数组下标的数据类型允许是 B
。
A)整型常量 B)整型常量或整型表达式
C)整型表达式 D)任何类型的表达式
2.下列定义正确的是 A 。
A) static
int a[]={1,2,3,4,5} B) int b[1]={2,5}
C) int a(10) D) int 4e[4]
3.设有char str[10],下列语句正确的是 D 。
A) scanf( B) printf(
C)
printf( D) printf(
4.下面几个字符串处理表达式中能
用来把字符串str2连接到字符串str1后的一个是:
A 。
A)strcat(str1,str2)
B)strcat(str2,str1);
C)strcpy(str1,str2)
D)strcmp(str1,str2);
5.设有两字符串“Beijing”、“China”
分别存放在字符数组str1[10],str2[10]中,下面语句
中能把“China”连接到“
Beijing”之后的为: C 。
A)strcpy(str1,str2);
B)strcpy(str1, “China”);
C)strcat(str1,“China”);
D)strcat(“Beijing”,str2);
6. 判断字符串a和b是否相等,应当使用
D 。
A)if (a= =b) B)if (a=b)
C)if (strcpy(a,b))
D)if(strcmp(a,b))
7.
若有如下定义和语句:
char s[12]= “a book!”;
printf(“%d”,strlen(s) );
则输出结果是: C 。
A)12 B)10 C)7 D)6
8.若有说明:int
a[3][4] = {0};则下面正确的叙述是: C 。
A)只有元素a[0][0]可以得到初值0
B)此说明语句不正确
C)数组a中每个元素均可得到初值0
D)数组a每个元素均可得到初值,但值不一定为0
二、填空题
1.在C语言中,引用数组只能通过 逐个引用
数组元素来实现,而不能通过整体引
用 整个数组 来实现。
2.如果要使一个内部数组在定义时每个元素初始化值为0,但不进行逐个赋值,将其
6
说明成 静态(static) 存储类型即可。
3.在C语言
中,二维数组中元素排列的顺序是按行存放,即在内存中先存放第一行
的元素,再存放第二行的元素。
4.在C语言中,将字符串作为 字符数组 处理。
5.在C语言中,数组的首地址是
数组的名称 。
三、完善程序题:
1.以下程序是求矩阵a ,
b的和,结果存入矩阵c中并按矩阵形式输出。请填空:
void main( )
{
int a[3][4] = { { 3, -2, 7,5 },{ 1, 0, 4 ,-3},{ 6,
8, 0, 2 } };
int b[3][4] = { { -2, 0, 1, 4
},{ 5, -1, 7, 6 },{ 6, 8, 0, 2 } };
int i,
j, c[3][4];
for ( i=0; i<3; i++ )
for ( j=0; j<4; j++ )
c[i][j] =
a[i][j]+b[i][j]
for ( i=0; i<3; i++ )
{ for ( j=0; j<4; j++ )
printf (
“%3d”, c[i][j] )
printf(“n”) }
}
2. 打印以下杨辉三角形.(要求打印出10行)
main( )
{ int a[10][10],i, j 1
for( i=0;i<10;i++) 1 1
{
a[i][0]=1;a[i][i]=1; } 1 2 1
for( i=2; i<10; i++ ) 1 3 3 1
for(j=1; ja[i][j] = a[i-1][j]+a[i-1][j-1]
… … …
for(i=0; i<10; i++)
{ for(
j=1; j<=i; j++)
printf(“%5d”,a[i][j]);
printf(“n”); } }
第七章 函数
一、选择题
1.C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是:
B
。
A)地址传递; B)单向值传递;
7
C)双向值传递; D)由用户指定传递方式
2.以下关于C语言程序中函数的说法正确的是: B 。
A)函数的定义可以嵌套,但函数的调用不可以嵌套;
B)函数的定义不可以嵌套,但函数的调用可以嵌套;
C)函数的定义和调用均不可以嵌套;
D)函数的定义和点用都可以嵌套。
3.有如下函数调用语句
func((exp1, exp2),( exp3,exp4,exp5));
该函数调用语句中,含有的实参个数是 B 。
A) 1
B)2 C) 5 D)4
4.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是 B 。
A)
float型 B) int 型 C)long 型 D)double 型
5.若用数组名作为函数调用的实参,传递给形参的是 A 。
A)数组的首地址
B)数组第一个元素的值
C)数组中全部元素的值 D)数组元素的个数
6.以下不正确的说法为 D 。
A)在不同函数中可以使用相同名字的变量
B)形式参数是局部变量
C)在函数内定义的变量只在本函数范围内有效
D)在函数内的复合语句中定义的变量在本函数范围内有效
7.凡是函数中未指定存储类别的局部变量,其隐含的存储类别为 A 。
A)自动(auto) B)静态(static)
C)外部(extern)
D)寄存器(register)
8.若使用一维数组名作函数实参,则以下正确的说法是 A
。
A)必须在主调函数中说明此数组的大小
B)
实参数组类型与形参数组类型可以不匹配
C) 在被调函数中,不需要考虑形参数组的大小
D) 实参数组名与形参数组名必须一致
二、填空题
1.C语言规定,可执行程序的开始执行点是 程序中的main( )函数 。
2.在C语言中,一个函数一般由两个部分组成,它们是 函数说明部分 和 函数体
。
3 C语言中的变量,按作用域范围可分为两种:局部变量和全局变量。.
4.返回语句的功能是从 包含它的函数 返回 调用函数.
三、完善程序题
1.函数fun的功能是:使字符串str按逆序存放。
void fun (char
str[])
{
char m; int i, j;
8
for (i=0, j=strlen(str); i< j
; i++, j--)
{ m = str[i]; str[i] =
str[j-1]
str[j-1] = m; } printf( }
第八章 指针
一、选择题
1.设有说明 int
(﹡ptr)[M];其中ptr是 C 。
A) M个指向整型变量的指针
B) 指向M个整型变量的函数指针
C) 一个指向具有M 个整型元素的一维数组的指针
D) 具有 M个指针元素的一维指针数组,每个元素都只能指向整型量
2.如下程序的执行结果是 B 。
# include
main() { static int a[
]={1,2,3,4,5,6}; int ﹡p; p=a;
﹡(p+3)+=2;
printf(〞%d,%dn 〞,﹡p,﹡(p+3)); }
A)1,3
B)1,6 C)3,6 D)1,4
3.如下程序的执行结果是
C 。
# include
main( ) {
static int a[
][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int
(﹡p)[4], i=1,j=2; p=a;
printf(〞%d n 〞,
﹡(﹡(p+i)+j)); }
A)9 B)11 C)13
D)17
4.若有以下定义,则﹡(p+5)表示 B 。
A)元素a[5]的地址 B)元素a[5]的值
C)元素a[6]的地址
D)元素a[6]的值
二、填空题
1.定义语句int ﹡f ( );和int
(﹡f) ( );的含义分别为返回一个指向整型值的指针的函
数和
指向一个返回整型值的函数的指针 。
2.以下函数用来求出两整数之和,并通过形参将结果传回,请填空。
void
func(int x,int y, int *z )
{ *z=x+y; }
3. 若有以下定义,则通过指针p引用值为98的数组元素的表达式是*(p+5)或p[5]
int w[10]={23,54,10,33,47,98,72,80,61}, *p=w;
4.int a[10];则a[i]的地址可表示为 &a[i] 或 a+i
,a[i]可表示为 *(a+i) 。
5.一个数组,其元素均为指针类型数据,这样得数组叫
指针数组 。
9
三、完善程序题:
以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。请填空。
#
include
void main ( )
{ int
*a, *b, *c, num, x, y, z;
a=&x; b=&y;
c=&z;
printf (输入3个整数:
scanf (
printf (
num=*a;
if(*a>*b) num=*b;
if(num>*c) num=*c;
printf
(输出最小整数:%dn
四、程序阅读与分析题:
1.
分析出以下程序所实现的功能,写出输出结果。
# include
main ( )
{ int i, j; int ﹡p,﹡q;
i=2; j=10; p=&i; q=&j; ﹡p=10; ﹡q=2;
printf(〞i=%d, j=%dn 〞, i, j); }输出: i=10,j=2
第九章 结构体与共用体
一、选择题
1.有如下定义:
struct date { int year, month, day; };
struct worklist { char name[20]; char sex;
struct date birthday; }person;
对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是 C 。
A) year=1958 B)
birthday.year=1958
C)
person.birthday.year=1958 D)
person.year=1958
2.以下对结构体类型变量的定义中不正确的是 D 。
A) #define STUDENT struct student B)
struct student
STUDENT
{ int num;
{ int num;
float age;
float age; }std1;
}std1;
C) struct
D) struct
{ int num;
{ int num;
float age;
float age; } student;
}std1;
struct student std1;
10
3.设有以下说明语句,则下面的叙述中不正确的是 B 。
struct ex { int x float y; char z }
example;
A) struct结构体类型的关键字 B)
example是结构体类型
C) x,y,z都是结构体成员名 D)
struct ex是结构体类型
4.若程序中有下面的说明和定义:
struct
stt
{ int x;
char b;}
struct stt
a1,a2;
则会发生的情况是 B 。
A)程序将顺利编译、连接、执行。
B)编译出错。
C)能顺利通过编译、连接,但不能执行。
D)能顺利通过编译,但连接出错。
二、填空题
1.若有定义:
struct num {int a; int b; float f;
}n={1, 3, 5.0}};
struct num ﹡pn=&n;
则表达式pn->bn.a﹡++pn->b的值是 12
,表达式(﹡pn).a+pn->f的值
是 6.0 。
2.若要使指针p指向一个double类型的动态存储单元,请填空。
p= (double
*) malloc(sizeof(double));
3.设有以下结构类型说明和变量定义,则变量a在内存所占字节数是
22
。
Struct stud
{ char num[6];
int
s[4]; double ave; } a,*p;
三、程序阅读与分析题:
1.以下程序的运行结果是 10,x 。
struct n {int
x; char c; };
main( )
{ struct n
a={10, ‟x‟}; func(a); printf ( “%d,%c”, a.x,
a.c); }
func(struct n b)
{b.x=20;
b.c=‟y‟; }
2.以下程序的运行结果是 2,3 。
main( )
{ struct EXAMPLE { struct {int
x; int y; }in int a; int b; }e;
e.a=1;
e.b=2; .x=e.a * e.b; .y=e.a + e.b;
11
printf(“%d,%d”, .x, .y); }
第十章 文件
一、选择题
1.当已存在一个文件时,执行函数fopen (“”,
“r++”)的功能是 D 。
A) 打开文件,清除原有的内容
B)
打开文件,只能写入新的内容
C) 打开文件,只能读取原有内容
D)
打开文件,可以读取和写入新的内容
2.若用fopen(
)函数打开一个新的二进制文件,该文件可以读也可以写,则文件打
开模式是 B 。
A)“ab+” B) “wb+” C)“rb+” D)“ab”
3.使用fseek函数可以实现的操作是 A 。
A)
改变文件的位置指针的当前位置 B) 文件的顺序读写
C) 文件的随机读写 D)
以上都不对
(buf,64,2,fp)的功能是 D 。
A)
从fp文件流中读出整数64,并存放在buf中;
B)
从fp文件流中读出整数64和2,并存放在buf中;
C)
从fp文件流中读出64个字节的字符,并存放在buf中;
D)
从fp文件流中读出2个64个字节的字符,并存放在buf中;
5.若fp是指向某文件的指针,且已读到此文件末尾,则库函数feof(fp)的返回值
是
C 。
A) EOF B) 0 C) 非零值 D)
NULL
二、填空题
1.C语言中根据数据的组织形式,把文件分为 文本文件
和 二进制文件 两
种。
2.使用fopen(“abc”,”r+”)打开文件时,若abc文件不存在,则 出错
。
3.使用fopen(“abc”,”w+”)打开文件时,若abc文件已存在,则
清除abc原有的数据 .
12