浙江财经大学2023年C语言期末模拟考试

本试卷为浙江财经大学2023年C语言期末模拟考试,题目包括:单项选择题,判断题,填空题,程序分析题,编程题。

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

C语言期末模拟考试

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

(  C  )
1、若有以下说明,则( )不是对strcpy库函数正确的调用。 strcpy库函数用于复制一个字符串:char*str1=="abed", strz[10],*str3="hijklmn",*str4[-2],*str5="aaaa";
A、strcpy(str2,str1)
B、strcpy(str3,slr1)
C、strcpy(str1,str2)
D、strcpy(str5,str1)
(  B  )
2、若有定义语句int b=2;则表达式(b<<2)/(3||b)的值是________。
A、4
B、8
C、0
D、2
(  A  )
3、有以下程序
#include <stdio.h>
main()
{
int c;
while ((c=getchar())!='\n')
{
switch(c-'2')
{
case 0: case 1: putchar(c+4);
case 2: putchar(c+4);
break;
case 3: putchar(c+3);
default: putchar(c+2);
break;
}
}
printf("\n");
}
从第一列开始输入以下数据,<cr>代表一个回车符。 2473<cr> 程序的输出结果是________。
A、668977
B、668966
C、66778777
D、6688766
(  A  )
4、有以下程序
struct stu
{
char name[10];
int num;
};
void f(char *name, int num)
{
struct stu s[2]={{"sundan",20044},{"penghua",20045}};
num = s[0].num;
strcpy(name, s[0].name);
}
main()
{
struct stu s[2]={{"yangsan",20041},{"lisiguo",20042}},*p;
p=&s[1];
f(p->name, p->num);
printf("%s %d\n", p->name, p->num);
}
程序运行后的输出结果是________。
A、SunDan 20042
B、SunDan 20044
C、LiSiGuo 20042
D、YangSan 20041
(  A  )
5、以下程序的输出结果是
main()
{
int a=0,i;
for(i=;i<5;i++)
{
switch(i)
{
case 0: case 3:a+=2;
case 1: case 2:a+=3;
default:a+=5;
}
}
printf("%d\n",a);
}
A、31
B、13
C、10
D、20
(  C  )
6、若有说明语句"int a[5],*p=a; ",则对数组元素的正确引用是________。
A、a[p]
B、p[a]
C、*(p+2)
D、p+2
(  B  )
7、设 p1 和 p2 是指向同一个 int 型一维数组的指针变量, k 为 int 型变量,则不能正 确执行的语句是______。
A、k=*P1+*P2;
B、p2=k;
C、P1=P2;
D、k=*P1 * ( *P2 ) ;
(  D  )
8、以下程序的输出结果是 ___________.
main( )
{
int a=100;
if (a>100) printf("%d\n",a>100);
else printf("%d\n",a<=100);
}
A、a<=100
B、100
C、0
D、1
(  B  )
9、下面程序的输出结果是 __________.
#include<stdio.h>
void main( )
{
int x=3;
do
{
printf("%d ",x-=2);
}
while(!(--x));
}
A、1
B、1 -2
C、3 0
D、是死循环
(  C  )
10、下列各项关于变量的描述中正确的是________。
A、变量名不是标识符
B、变量名的字符是不区分大小写的
C、变量名的定义必须符合标识符的定义规则
D、变量属性分为基本类型和复合类型
(  B  )
11、执行下面的一段c程序后,变量sum的值应为______。
char chr=127; int sum=300; chr +=1; sum +=chr;
A、428
B、172
C、300
D、427
(  C  )
12、排序的重要目的是为了以后对已排序的数据元素进行________。
A、打印输出
B、分类
C、查找
D、合并
(  B  )
13、下列程序的输出结果是________。
#include <stdio.h>
struct abc
{
int a, b, c, s;
} ;
main ()
{
struct abc s[2] = { {1, 2, 3}, {4, 5, 6} };
int t;
t = s[0].a + s[1].b;
printf ("%d\n", t);
}
A、5
B、6
C、7
D、8
(  A  )
14、若有以下定义和语句: char*s1="12345",*s2="1234"; printf("%d\n",strlen(strcpy(s1,s2)));
则输出结果是______。
A、4
B、5
C、9
D、10
(  C  )
15、以下能将字符串,you are luck!正确读入的语句组是________。
A、char s[80]; scanf("%s",s);
B、char *s: scanf("%s",s);
C、char s[80]; gets(s);
D、char *s; gets(3);
(  B  )
16、无符号二进制数后加上一个0,形成的数是原来的几倍?
A、1
B、2
C、1/2
D、4
(  B  )
17、在c语言中,不允许有常量的数据类型是________。
A、整型
B、结构型
C、字符型
D、字符串
(  A  )
18、若变量均已正确定义并赋值,以下合法的c语言赋值语句是________。
A、x=n/2.5;
B、x==5;
C、x+n=I;
D、5=x=4+1;
(  B  )
19、执行以下语句后,a,b,c 的值分别为________。
int a,b,c;
a=b=c=1;
++a||++b&&++c;
A、1,1,1
B、2,1,1
C、2,2,1
D、2,2,2
(  D  )
20、指针x指向的整型变量值为25,则”printf(“%d\n”,++*x);”
的输出是____
A、23
B、24
C、25
D、26

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

(   T  )
1、c程序总是从main( ) 函数的第一条语句开始执行的。 ( ) 
(   T  )
2、执行语句 ++i; i=3; 后变量i的值为4。 
(   F  )
3、函数的定义和函数的调用均可以嵌套。 
(   T  )
4、用字符串常量给数组赋初值时,如果提供的字符个数小于数组的长度,则在最后一个字符后加'\0'作为字符串结束标志。 
(   T  )
5、用字符串方式赋值比用字符逐个赋值要多占一个字节, 用于存放字符串结束标志'\0'。 
(   F  )
6、在用数组名作为函数实参时,传递的是数组的起始地址,所以就不允许使用形参数组的形式 
(   T  )
7、执行下列语句int a=3;  a+=a-=a*a; 后,a的值是 -12 。( ) 
(   F  )
8、在标准c中,逻辑表达式中只允许出现逻辑型数据。 
(   F  )
9、随机操作只适用于二进制文件。 
(   T  )
10、循环体如包括有一个以上的语句,则必须用{}括起来,组成复合语句。 

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

1、逻辑运算符"&&、||、 !"中的优先级是________。
2、仅由顺序、选择(分支)和重复(循环)结构构成的程序是________程序。
3、在c语言中,函数的返回值是由___________语句传递的。
4、在c语言中,标识符是由( )、数字、下划线组成的。
5、在传值调用中,实际是把实参的______。

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

1、以下程序的功能是调用函数fun计算:m=1-2+3-4+…+9-10,并输出结果。请填空。
int fun( int n)
{
int m=0,f=1,i;
for(i=1; i<=n; i++)
{
m+=i*f;
f= ________ ;
}
return m;
}
main()
{
printf("m=%d\n", ________ );
}
2、下列程序段的运行结果是_____。#define MAX(x , y) x>y? x : y
main( )
{
int a , b , max;
A=5, b=6;
Max=MAX(a,b);
printf("max=%d\n",max);
}
3、下列程序段的运行结果是________。
main( )
{
int a=5,b=6,c;
int max(int,int);
c=max(a,b);
printf("%d\n",c);
}
int max( int x , int y )
{
int z;
if(x>y) z=x;
else z=y;
return z ;
}
4、写出下列程序的运行结果。
main()
{
int n;
for(n=3; n<=10; n++)
{
if(n%6==0) break;
printf("%d",n);
}
}

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

1、编写程序:从键盘上输入一个数字组成的字符串(字符串长度小于8),将该字符串转换成一个十进制数
例如:从键盘上输入2345,则程序运行的结果应当为:n=2345()
2、编写程序:从键盘输入 n (n<10)个学生的学号(学号为4位的整数,从1000开始)、成绩并存入结构数组中,查找并输出成绩最高的学生信息。
输入输出示例:括号内为说明,无需输入输出
输入样例:
3 (n=3)
1000 85
1001 90
1002 75
输出样例:
1001 90
3、从键盘输入30名学生的成绩数据,求其中的最高分、最低分和平均分。