青岛理工大学历年C语言期末

本试卷为青岛理工大学历年C语言期末,题目包括:单项选择题。

覆盖的内容包括:理论题,基础知识,控制结构,循环结构,指针,数组/指针数组,字符串/字符串指针,函数/函数指针,程序题,结构体,文件。

本卷包括如下题型:

一、单项选择题

C语言期末

一、单项选择题 (共50题,每题2分,共计100分)

(  A  )
1、若a是数值类型,则逻辑表达式(a==1)||(a!=1)的值是________。
A、1
B、0
C、2
D、不知道a的值,不能确定
(  C  )
2、若a为int类型,且其值为3,则执行完表达式a+= a-=a*a后,a的值是________。
A、-3
B、9
C、-12
D、6
(  A  )
3、当输入为"hello?"时,下面程序的执行结果是________。
main()
{
char c;
c=getchar();
while(c!='?')
{
putchar(e);
break;
}
}
A、Rvfsu
B、h
C、?
D、hello
(  D  )
4、若有如下定义语句: int a[10]= { 1,2,3,4,5,6,7,8,9,10 } ; 则对数组正确的引用是________。
A、a[10]
B、a[a[3]5]
C、a[a[9]]
D、a[a[4]+4]
(  B  )
5、下面叙述不正确的是________。
A、C语句末尾必须有分号
B、C语言中无论是整数还是实数都能准确的表示
C、运算符“%”只能用于整数运算
D、乘除运算符优先级高于加减运算符
(  B  )
6、若 x 为 int 型变量 , 则执行以下语句后 ,x 的值为 。 x=6; x+=x-=x*x;
A、36
B、-60
C、60
D、-24
(  A  )
7、执行下面程序时 , 若从键盘输入 "2<cr>" ,则程序的运行结果是 __________.
#include <stdio.h>
void main( )
{
int k;
char cp;
cp=getchar( );
if (cp>='0' && cp<='9') k=cp-'0';
else if (cp>='a' && cp<='f') k=cp-'a'+10;
else k=cp-'a'+10;
printf("%d\n",k);
}
A、2
B、4
C、1
D、10
(  D  )
8、下面程序的输出结果是 ____________.
main( )
{
int i,k=0, a=0, b=0;
for(i=1;i<=4;i++)
{
k++;
if (k%2==0)
{
a=a+k;
continue;
}
b=b+k;
a=a+k;
}
printf("k=%d a=%d b=%d\n",k,a,b);
}
A、k= 5 a =10 b=4
B、k= 3 a =6 b=4
C、k= 4 a =10 b=3
D、k= 4 a =10 b=4
(  C  )
9、若函数调用时用数组名作为函数参数,以下叙述中,不正确的是 __________.
A、实参与其对应的形参共占用同一段存储空间
B、实参将其地址传递给形参,结果等同于实现了参数 之间的双向值传递
C、实参与其对应的形参分别占用不同的存储空间
D、在调用函数中必须说明数组的大小,但在被调函数中可以使用不定尺寸数组
(  A  )
10、下面不是c语言整型常量的是________。
A、081
B、01
C、-32768
D、0x81
(  B  )
11、c语言的跳转语句中,对于break和continue说法正确的是________。
A、break语句只应用于循环体中
B、continue语句只应用于循环体中
C、break 是无条件跳转语句,continue不是________。
D、break和continue的跳转范围不够明确,容易产生问题
(  B  )
12、下列属于c语言保留字的是________。
A、Int
B、typedef
C、ENUM
D、Union
(  D  )
13、设有语句:"int a=1,b=2,*p1=&a,*p2=&b; ",则使指针p1指向变量b的赋值语句是______。
A、p1=*p2
B、*p1=p2
C、p1=p2
D、*p1=*p2
(  A  )
14、下列关于宏操作的叙述错误的是________。
A、do-while的循环体至少无条件执行一次
B、while的循环控制条件比do-while的循环控制条件更严格
C、do-while允许从外部转到循环体内
D、do-while的循环体不能是复合语句
(  D  )
15、对于c语言中的函数,正确的叙述是________。
A、两个函数可以相互调用,但不能自己调用自己
B、程序执行可以始于任何一个函数,但结束必须在主函数
C、两个函数既可以定义成并列关系又可以定义成嵌套关系
D、一个C程序可以由多个文件组成,一个文件又可以由多个函数组成
(  B  )
16、若要定义a为3×4的二维数组,正确的定义语句是________。
A、float a(3,4);
B、float a[3][4];
C、float a(3)(4);
D、float a[3,4];
(  A  )
17、在c程序中,判断逻辑值时,分别用( )表示逻辑值"真"、"假"。
A、非0 0
B、0 1
C、非0非0
D、1 1
(  A  )
18、如果int i=3,则k=(++i)+(++i)+(i++)执行过后k的值为______,i的值为______。 ( )
A、15,6
B、12,5
C、18,6
D、15,5
(  B  )
19、下列形式的常数中,不符合c语言语法规范的是______。
A、.45
B、±123
C、25.6e-2
D、4e3
(  D  )
20、下列4种不同数制表示的数中,数值最小的一个是________。
A、八进制数52
B、十进制数44
C、十六进制数2B
D、二进制数101001
(  A  )
21、下述程序执行的输出结果是________。
#include<stdio.h>
main() {
char a[2][4];
strcpy(a,"are");
strcpy(a[1], "you");
a[0][3]='&';
printf("%s\n",a);
}
A、are&you
B、you
C、are
D、&
(  A  )
22、有以下程序
struct s
{
int n;
int a[20];
};
void f(int *a,int n)
{
int i;
for(i=0;i<n-1;i++)a[i]+=i;
}
main()
{
int i;
struct s s={10,{ 2,3,1,6,8,7,5,4,10,9}};
f(s.a,s.n);
for(i=0; i<s.n; i++)printf("%d,",s.a[i]);
}
程序运行后的输出结果是________。
A、2,4,3,9,12,12,11,11,18,9,
B、3,4,2,7,9,8,6,5,11,10,
C、2,3,1,6,8,7,5,4,10,9,
D、1,2,3,6,8,7,5,4,10,9,
(  D  )
23、若下列选项中的各变量均为整型且已有值,其中不正确的赋值语句是________。
A、++i;
B、n1=(n2/(n3=2));
C、k=i=j;
D、a=b+c=2;
(  A  )
24、两次运行下面的程序,如果从键盘上分别输入3和2,则输出结果是________。
#include<stdio.h>
main() {
int x;
scanf("%d",&x);
if(x++>2)printf("%d",x);
else printf("%d\n",x--);
}
A、4和3
B、4和2
C、4和1
D、3和2
(  A  )
25、下列合法的字符型常量是________。
A、'\x13'
B、'\081'
C、'65'
D、"\n\
(  D  )
26、若有以下说明和定义:
union dt {
int a;
char b;
double c;
} data;
以下叙述中错误的是________。
A、data的每个成员起始地址都相同
B、变量data所占内存字节数与成员c所占字节数相等
C、程序段:data.a=5; printf("%f\n", data.c);输出结果为5.000000
D、data可以作为函数的实参
(  D  )
27、有以下程序:
#include <stdio.h>
struct s
{
int a, b;
}
data[2]= {10, 100, 20, 200 };
main()
{
struct s p=data[1];
printf("%d\n", ++(p.a));
}
程序运行后的输出结果是______。
A、10
B、11
C、20
D、21
(  C  )
28、下列关于c语言字符数组描述正确的是________。
A、字符数组可以存放字符串
B、字符数组的下标是从0开始的
C、字符数组不能输出字符串
D、字符数组可以没有'\0'
(  C  )
29、顺序执行下列程序语句后,则b的值是 string a="hello"; string b=a.substring(0,2);
A、Hello
B、hello
C、He
D、null
(  D  )
30、若x,y均定义成int型,z定义为double型,以下不合法的scanf函数调用语句是________。
A、scanf(“%d %x, %le”, &x, &y, &z);
B、scanf(“%2d *%d, %lf” &x, &y, &z);
C、scanf(“%x %*d %o”, &x, &y);
D、scanf(“%x %o%6.2f”, &x, &y, &z);
(  B  )
31、宏定义用于将一个标识符定义为一个
A、常量
B、字符串
C、整数
D、长整数
(  D  )
32、关于fscanf()函数,下列描述中错误的是________。
A、fscanf()函数是从流中格式化输入
B、fscanf()函数格式化输入数据后,文件指针自动向下移到一个数据单位
C、返回值为参数个数
D、读取失败返回0
(  B  )
33、若变量已正确定义,有以下程序段int a=3,b=5,c=7;
if(a>b) a=b;
c=a;
if(c!=a) c=b;
printf("%d,%d,%d\n",a,b,c);
其输出结果是______。
A、程序段有语法错
B、3,5,3
C、3,5,5
D、3,5,7
(  C  )
34、若有定义语句:int m[ ]= {5,4,3,2,1},i=4; 则下面对m数组元素的引用中错误的是______。
A、m[--i]
B、m[2*2]
C、m[m[0]]
D、m[m[i]]
(  D  )
35、有以下程序
#include <stdio.h>
main()
{
struct stu
{
char name[9];
char sex;
double score[2];
}
;
struct stu a={"zhao",'m',85.0,90.0},b={"qian",'f',95.0,92.0};
b=a;
printf("%s,%c,%2.0f,%2.0f\n",b.name,b.sex,b.score[0],b.score[1]);
}
程序的运行结果是______。
A、Qian,f,95,92
B、Qian,m,85,90
C、Zhao,f,95,92
D、Zhao,m,85,90
(  B  )
36、以下叙述中正确的是______。
A、程序必须包含所有三种基本结构才能成为一种算法
B、当用我们所写的每条 C 语句,经过编译最终都将转换成二进制的机器指令
C、如果算法非常复杂,则需要使用三种基本结构之外的语句结构,才能准确表达
D、只有简单算法才能在有限的操作步骤之后结束
(  D  )
37、循环语句"for(i=1;i<0;i++) i++; "的循环次数是________。
A、无限循环
B、2次
C、1次
D、0 次
(  C  )
38、有以下程序:
int fun(int x)
{
int P;
if(x==0||x==1)return(3);
p=x-fun(x-2);
return P;
}
main()
{
printf(”%d”,fun(7));
}
执行后的结果是________。
A、7
B、3
C、2
D、0
(  B  )
39、二维数组a有m行n列,则在a[i][j]之前的元素个数为________。
A、j*n+i
B、i*n+j
C、i*n+j-1
D、i*n+j+1
(  C  )
40、下列语句中,不正确的是________。
A、static char a[2]={
1,2};
B、static char a[2]={ '1', '2'};
C、static char a[2]={ '1', '2', '3'};
D、static char a[2]={ '1'};
(  C  )
41、若有说明:int a[][4]={1,1} 则以下叙述正确的是________。
A、数据 a 中第一行各元素的初值均为 1
B、数组 a 中每个元素均可得到初值 1
C、只有元素 a[0][0]和 a[0][1]可得到初值 1
D、只有元素 a[0][0]和 a[1][0]可得到初值 1
(  D  )
42、以下说法错误的是________。
A、C 语言标识符中可以有多个字母数字和下划线字符
B、C 语言标识符中下划线字符可以出现在任意位置
C、C 语言标识符不能全部由数字组成
D、C 语言标识符必须以字母开头
(  A  )
43、以下叙述中错误的是________。
A、将函数内的局部变量说明为 static 存储类是为了限制其他编译单位的引用
B、一个变量作用域的开始位置完全取决于变量定义语句的位置
C、全局变量可以在函数以外的任何部位进行定义
D、局部变量的“生存期”只限于本次函数调用,因此不能将局部变量的运算结果保存至下一次调用
(  C  )
44、以下叙述中正确的是________。
A、语言中的关键字不能作变量名,但可以作为函数名
B、标识符的长度不能任意长,最多只能包含 16 个字符
C、标识符总是由字母、数字和下划线组成,且第一个字符不得为数字
D、用户自定义的标识符必须见名知义,如果随意定义,则会出编译错误
(  B  )
45、执行下列语句后,a和b的值分别为________。(注:a的accii码值为:97,a的accii码值为:65) int a,b; a=1+'a'; b=2+7%-4-'a';
A、-63,-64
B、98,-60
C、1,-60
D、79,78
(  A  )
46、下列数组说明中,正确的是________。
A、int array[][4];
B、int array[][];
C、int array[][][5];
D、int array[3][];
(  A  )
47、若有double *p,x[10]; int i=5; 使指针变量p指向元素x[5]的语句为________。
A、p=&x[i];
B、p=x;
C、p=x[i];
D、p=&(x+i)
(  C  )
48、以下叙述中错误的是________。
A、C语言是一种结构化程序设计语言
B、结构化程序由顺序、分支、循环三种基本结构组成
C、使用三种基本结构构成的程序只能解决简单问题
D、结构化程序设计提倡模块化的设计方法
(  C  )
49、以下叙述中正确的是____
A、C程序中的注释只能出现在程序的开始位臵和语句的后面
B、C程序书写格式严格,要求一行内只能写一个语句
C、C程序书写格式自由,一个语句可以写在多行上
D、用C语言编写的程序只能放在一个程序文件中
(  D  )
50、若有char s1[]="abc",s2[20],*t=s2;gets(t);则下列语句中能够实现当字符串 s1 大于字符串 s2 时,输出 s2 的语句是()。
A、if(strcmp(s1,s1)>0)puts(s2);
B、if(strcmp(s2,s1)>0)puts(s2);
C、if(strcmp(s2,t)>0)puts(s2);
D、if(strcmp(s1,t)>0)puts(s2);