嘉兴学院2022年C语言期末测试卷

本试卷为嘉兴学院2022年C语言期末测试卷,题目包括:单项选择题,判断题,填空题,程序分析题,编程题。

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

C语言期末测试卷

一、单项选择题 (共20题,每题2分,共计40分)

(  B  )
1、已知字母a的ascⅱ代码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是________。
A、kk>='A'&&kk<='Z'
B、!(kk>='A'‖kk<='Z')
C、(kk+32)>='a'&&(kk+32)<='z'
D、isalpha(kk)&&(kk<91)
(  B  )
2、若变量a,b已正确定义,且b已正确赋值,则合法的语句是________。
A、b=double(b);
B、(int)a=(int)b;
C、a=a++=5;
D、a=double(b);
(  D  )
3、有以下程序
struct stu
{
int num;
float totalscore;
};
void f(struct stu p)
{
struct stu s[2]= {{20044,550}, {20045,537}};
p.num = s[1].num;
p.totalscore = s[1].totalscore;
}
main()
{
struct stu s[2]= {{20041,703} ,{20042,580}};
f(s[0]);
printf("%d %3.0f\n", s[0].num, s[0].totalscore);
}
程序运行后的输出结果是________。
A、20045 537
B、20044 550
C、20042 580
D、20041 703
(  C  )
4、#include <stdio.h>
main()
{
char a,b,c,d;
scanf("%c%c",&a,&b);
c=getchar();
d=getchar();
printf("%c%c%c%c\n",a,b,c,d);
}
当执行程序时,按下列方式输入数据(从第一列开始,<cr>代表回车,注意:回车是一个字符) 12<cr> 34<cr> 则输出结果是:________。
A、1234
B、1.
C、12
D、12
3 34
(  B  )
5、c 语言共用体类型变量在程序运行期间 。
A、所有成员一直驻留在内存中
B、只有一个成员驻留在内存中
C、部分成员驻留在在内存中
D、没有成员驻留在内存中
(  B  )
6、以下描述错误的是_________。
A、break语句可用于switch语句和循环语句
B、break语句和continue语句的作用是一样的,都是提前结束整个循环
C、在循环语句中使用break语句是为了跳出循环,提前结束循环
D、在循环语句中使用continue语句是为了结束本次循环,而不终止整个循环
(  D  )
7、下列一维数组初始化语句中,正确且与语句 float a[ ]={ 0,3,8,0,9}; 等价的是 __________.
A、float a[6]={
0,3,8,0,9};
B、float a[4]={
0,3,8,0,9};
C、float a[7]={
0,3,8,0,9};
D、float a[5]={
0,3,8,0,9};
(  B  )
8、若有下列说明和语句,则对结构体变量st中成员i的引用方式不正确的是________。
struct stu
{
int i;
int name;
} st,*p;
p=&st;
A、si
B、*i
C、(*.i
D、p->i
(  C  )
9、若有函数max(a,b),为了让函数指针变量p指向函数max,当调用该函数时,正确的赋值方法是________。
A、(*p)max(a,b)
B、*pmax(a,b)
C、p=max(a,b)
D、*p=max(a,
(  C  )
10、计算机之所以能按人们的意志自动进行工作,最直接的原因时因为采用了______。
A、二进制
B、高速电子元器件
C、存储程序控制
D、程序设计语言
(  B  )
11、一个字长为8位的无符号二进制整数能表示的十进制数值范围是________。
A、0~256
B、0~255
C、1~256
D、1~255
(  D  )
12、对两个数组a和b进行如下初始化: char a[]="abcdef"; char b[]= {'a','b','c','d','e','f' } 则以下叙述正确的是________。
A、数组a与数组b完全相同
B、数组a与数组b长度相同
C、数组a与数组b中都存放字符串
D、数组a比数组b长度长
(  A  )
13、下列对字符数组进行初始化的语句正确的是________。
A、char a []="Hello";
B、char a[][]={'H','e','1','1','o');
C、char a[5]="Hello";
D、char a[2][5]={"Hello", "World"};p
(  B  )
14、下列说法中正确的是________。
A、在switch语句中一定要使用break语句
B、在switch语句中不一定要使用break语句
C、break语句是switch语句的一部分
D、break只能用于switch语句中
(  C  )
15、以下四个程序中,完全正确的是______。
A、#include <stdio.h>
main(); {/*programming*/ printf("programming!\n");}
B、#include<stdio.h>
main()
{/*/programming/*//printf("programming!\n");}
C、#include <stdio.h>
main()
{/*programming*/printf("programming!\n");}
D、include<stdio.h>
main()
{/*/*programming*/*/printf("programming!\n");}
(  A  )
16、对于函数声明 void fun(int a[1],int*b); 以下叙述中正确的是________。
A、函数参数A,b 都是指针变量
B、有语法错误,数组 a 的大小不能为 1
C、调用该函数后,实参变量所指向的内存单元的值肯定不会受影响
D、调用该函数时,a 的值是从对应实参复制过来的,b 的值是对应实参变量的地址
(  C  )
17、以下叙述中正确的是________。
A、对于逻辑表达式:a++||b++,设 a 的值为 1,则求解表达式的值后,b的值会发生改变
B、对于逻辑表达式:a++&&b++,设 a 的值为 0,则求解表达式的值后,b的值会发生改变
C、else 不是一条独立的语句,它只是 if 语句的一部分
D、关系运算符的结果有三种:0,1,-1
(  D  )
18、若二维数组a 有m 列,则计算任一元素a[i][j] 在数组中位臵的公式为(假设a[0][0] 位于数组的第一个位臵上) ________。
A、i*m+j
B、j*m+i
C、i*m+j-1
D、i*m+j+1
(  D  )
19、判断字符串a 和b 是否相等,应当使用。
A、if(a==b)
B、if(a=b)
C、if(strcmp(a,b))
D、if(strcmp(a,b)==0)
(  B  )
20、下列各 m 的值中,能使 m%3==2&&m%5==3&&m%7==2 为真的是()。
A、8
B、23
C、17
D、6

二、判断题 (共10题,每题2分,共计20分)

(   T  )
1、关系表达式的值是一个逻辑值,即"真"或"假",并且用0表示"假",用1表示"真"。 
(   T  )
2、字符数组定义后,不能用赋值语句将一字符串常量或字符数组直接赋给一个字符数组。 
(   F  )
3、实型常量分为float型和double型。 
(   T  )
4、对于一个具体的函数来说,实参与形参必须一一对应。 
(   F  )
5、在c语言的嵌套循环结构中,任何一层循环中的brea语句都可以结束整个嵌套循环的执行。 
(   F  )
6、数组的下标都有一个范围,即"0 ~ 数组长度"。 
(   F  )
7、c语言中非标准输入输出设备指的是键盘和显示器。 
(   F  )
8、以"a"方式打开一个文件时,文件指针指向文件首。 
(   F  )
9、putchar 函数可以向终端输出一个字符串 
(   T  )
10、如果函数定义出现在函数调用之前,可以不必加函数原型声明 

三、填空题 (共5题,每题4分,共计20分)

1、设有变量定义: int a=10,c=9;
则表达式(--a!=c++)?--a:++c 的值是________。
2、局部变量又称内部变量,是在函数( )定义的变量。
3、下列程序段的运行结果是________。
main()
{
int m=1,t=1;
for( ; ; )
{
m=m+t ;
t++;
if(m>9) break ;
}
printf("%d\n",m);
}
4、数学表达式a<b<=c改写为c语言表达式是__________。注:表达式要在英文半角状态下按原表达式顺序书写,且表达式中不要留空格。
5、C语言函数是由函数首部和函数体两部分组成。其中,函数首部包括 函数类型、函数名和______。

四、程序分析题 (共4题,每题5分,共计20分)

1、一个c程序总是从_____________函数开始执行的。
2、下面程序的运行结果是________。
#include<stdio.h>
main()
{
int i,j;
for(i=4;i>=1;i--)
{
for(j=1;j<=i;j++) putchar('#');
for(j=1;j<=4-i;j++) putchar('*');
putchar('\n');
}
}
3、当从键盘输入-1 0<cr>, 则以下程序的运行结果是________。
#include<stdio.h>
main()
{
int a,b,m,n;
m=n=1;
scanf("%d%d",&a,&b);
do
{
if(a>0)
{
m=2*n;
b++;
}
else
{
n=m+n;
a+=2;
b++;
}
}
while(a==b);
printf("m=%d n=%d\n",m,n);
}
4、若运行以下程序时,从键盘输入adescriptor↙,则下面程序的运行结果是________。
#include <stdio.h>
void main()
{
char c;
int v0=0,v1=0,v2=0;
do
{
switch(c=getchar())
{
case’a’:
case’a’:
case’e’:
case’e’:
case’i’:
case’i’:
case’o’:
case’o’:
case’u’:
case’u’:v1+=1;
default:
v0+=1;
v2+=1;
}
}
while(c!=’n\’);
printf("v0=%d,v1= %d, v2= %d\n", v0, v1, v2);
}

五、编程题 (共3题,每题0分,共计50分)

1、编写程序,求s=1+(1+2)+….+(1+2+….+10)
2、编写程序:用结构体和函数处理学生成绩,学生信息包括:学号 姓名 3门课成绩 平均分
1)用input函数来输入数据和求各学生的平均成绩
2)用max函数来找平均分最高的学生
3)用print函数输出成绩最高学生的信息
3、编写程序:字符串反转,如将字符串 "abc-123-xyz" 反转为 "zyx-321-cba"。