南京工程学院2023年计算机C语言期末测试卷

本试卷为南京工程学院2023年计算机C语言期末测试卷,题目包括:单项选择题,填空题,编程题。

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

计算机C语言期末测试卷

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

(  C  )
1、已知字符'a'的ascll代码值是65,字符变量c1的值是'a',c2的值是'd'。执行语句printf("%d,%d",c1,c2-2);后,输出结果是________。
A、A,B
B、A,68
C、65.66
D、65,68
(  C  )
2、有下列程序: int fun1(double a)
{
return a*=a;
}
int fun2(double x,double y)
{
double a=0,b=0;
a=fun1(x);
b=fun1(y);
return(int)(a+b);
}
main()
{
double w;
w=fun2(1.1,2.0),……
}
程序执行后变量w中的值是________。 、
A、5.21
B、5
C、5.0
D、0.0
(  A  )
3、c语言中,合法的字符型常数是________。
A、‘A’
B、“A”
C、65
D、A
(  D  )
4、若调用一个函数,且此函数中没有return语句,则正确的说法是________。
A、该函数没有返回值
B、该函数返回若干个系统默认值
C、能返回一个用户所希望的函数值
D、返回一个不确定的值
(  C  )
5、以下不合法的用户标识符是________。
A、j2_KEY
B、Double
C、4d
D、_8_
(  D  )
6、b等于( )
A、1000字节
B、1024字节
C、1000×1000字节
D、1024×1024字节
(  A  )
7、有以下程序 struc stu
{
char name[10];
int num;
};
void f1(struct stu c)
{
struct stu b={"lisiguo",2042};
c=b;
}
void f2(struct stu *c)
{
struct stu b={"sundan",2044} ;
*c=b;
}
main( )
{
struct stu a={"yangsan",2041},b={"wangyin",2043} ;
f1(a);
f2(&b);
printf("%d %d\n",a.num,b.num);
}
执行后的输出结果是________。
A、2041 2044
B、2041 2043
C、2042 2044
D、2042 2043
(  B  )
8、下面结构体的定义语句中,错误的是________。
A、struct ord {
int x;int y;int z;};struct ord a;
B、struct ord {
int x;int y;int z;} struct ord a;
C、struct ord {
int x;int y;int z;} n;
D、struct {
int x;int y;int z;} a;
(  B  )
9、已知char x[]="hello", y[]={ 'h','e','a','b','e' }; 则关于两个数组长度的正确描述是________。
A、相同
B、x大于y
C、x小于y
D、以上答案都不对
(  D  )
10、若有以下定义和语句: double r=99 , *p=&r ; *p=r ; 则以下正确的叙述是______。
A、以下两处的 *p 含义相同,都说明给指针变量 p 赋值
B、在 "double r=99,*p=&r ; " 中,把 r 的地址赋值给了 p 所指的存储单元
C、语句 "*p=r ; " 把变量 r 的值赋给指针变量 p
D、语句 "*p=r ; " 取变量 r 的值放回 r 中
(  A  )
11、if语句的基本形式为:if(表达式)语句,其中"表达式"________。
A、可以是任意合法的表达式
B、必须是逻辑表达式
C、必须是逻辑表达式或关系表达式
D、必须是关系表达式
(  D  )
12、在c语言程序中
A、函数的定义可以嵌套,但函数的调用不可以嵌套
B、函数的定义和调用均可以嵌套
C、函数的定义和调用均不可以嵌套
D、函数的定义不可以嵌套,但函数的调用可以嵌套
(  A  )
13、有以下程序
main()
{
int x=0,y=0,i;
for(i=1;++i)
{
if(i%2==0)
{
x++;
continue;
}
if(i%5==0)
{
y++;
break;
}
}
printf("%d,%d",x,y);
}
程序的输出结果是________。
A、2,1
B、2,2
C、2,5
D、5,2
(  D  )
14、若已定义:int a[9],*p=a; 并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是________。
A、p+1
B、a+1
C、&a[1]
D、*p[1]
(  B  )
15、字符串"xyz"在内存占用的字节数是______。
A、3
B、4
C、6
D、8
(  C  )
16、以下( )循环并非重复5次?
A、int i; for (i=1; i<6; i++) {}
B、int i; for (i=0; i<5; i++) {}
C、int i; for (i=0; i<=5; i++) {}
D、int i; for (i=1; i<=5; i++) {}
(  D  )
17、有如下定义: struct student
{
char name[10];
int age;
char gender;
}
std[3], *p=std;
则以下各输入语句中错误的是________。
A、scanf("%d",&(*p).age);
B、scanf("%c",&std[0].gender);
C、scanf("%c",&(p->gender));
D、scanf("%s",&std.name);
(  C  )
18、设有数据定义语句"int a[200]; ",下列数组元素引用中下标不越界的是________。
A、a[-1]
B、a[201]
C、a[0]
D、a[200]
(  B  )
19、若有下列定义,则对a数组元素地址的正确引用是________。 int a[5],*p=a;
A、&a[5]
B、p+2
C、a++
D、&a
(  A  )
20、以下叙述中正确的是()。
A、构成. C程序的基本单位是函数
B、可以在一个函数中定义另一个函数
C、main()函数必须放在其它函数之前
D、所有被调用的函数一定要在调用之前进行定义

二、填空题 (共10题,每题2分,共计20分)

1、仅由顺序、选择(分支)和重复(循环)结构构成的程序是________程序。
2、现有两个c程序文件t18.c和myfun.c同在tc系统目录(文件夹)下,其中t18.c文件如下:
#include <stdio.h>
#include "myfun.c"
main()
{
fun();
printf("\n");
}
myfun.c文件如下:
void fun()
{
char s[80],c;
int n=0;
while((c=getchar())!=′\n′) s[n++]=c;
n--;
while(n>=0) printf("%c",s[n--]);
}
当编译连接通过后,运行程序t18时,输入thank!则输出结果是:________。
3、有以下程序
#include<stdio.h>
main() {
int n[2],i,j;
for(i=0;i<2;i++) n[i]=0;
for(i=0;i<2;i++)
for(j=0;j<2;j++) n[j]=n[i]+1;
printf("%d\n",n[1]);
} 程序运行后的输出结果是________。
4、全局变量又称外部变量,是在函数______定义的变量。
5、int a = 0; a+=(a=8); 求a的最后结果
6、八进制数37转换成二进制数是________ 。
7、以下程序的输出结果是 ________ 。
main()
{
int x=0;
sub(&x,8,1);
printf("%d\n",x);
}
sub(int *a,int n,int k)
{
if(k<=n) sub(a,n/2,2*k);
*a+=k;
}
8、编译预处理包括( )、文件包含、条件编译等。
9、以下程序的输出结果是________。
main()
{
int x=5,y=6;
printf("%daa%d",++x,y――);
}
10、在scanf函数中,用符号______表示变量的地址。

三、编程题 (共3题,每题0分,共计40分)

1、编写程序:将字符数组a中下标值为奇数的元素从小到大排列,其它元素不变
例如:当a数组中的字符串为:"clanguage"时,程序的输出结果为:cgalgnaue()
2、编写程序:输出 100 ~ 200 之间既不能被 3 整除也不能被 7 整除的整数并统计这些整数的个数,要求每行输出 8 个数。
3、已知学生的记录由学号和学习成绩构成N名学生的数据已存入a结构体数组中。试编写函数fun函数的功能是找出成绩最低的学生记录通过形参返回主函数规定只有一个最低分在主函数中调用fun,使用结构体实现