北京农学院2023年C语言模拟考试

本试卷为北京农学院2023年C语言模拟考试,题目包括:单项选择题,填空题,编程题。

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

C语言模拟考试

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

(  B  )
1、执行下列程序后,变量a,b,e的值分别是________。 int x--5,y=4;
int a,b,e;
a=(--x==y++)?x;
++y;
b=++x;
c=y;
A、a=5,b=5,c=5
B、a=4,b=5,c=5
C、a=5,b=6,c=5
D、a=1,b=5,C=6
(  D  )
2、若有如下定义语句: 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  )
3、下面叙述不正确的是________。
A、C语句末尾必须有分号
B、C语言中无论是整数还是实数都能准确的表示
C、运算符“%”只能用于整数运算
D、乘除运算符优先级高于加减运算符
(  B  )
4、下面的程序
main()
{
int x=3;
do
{
printf("%d\n",x-=2);
}
while(!(--x));
}
A、输出的是1
B、输出的是1和-2
C、输出的是3和0
D、是死循环
(  A  )
5、在c语言中(以16位pc机为例),五种基本数据类型存储空间长度的排列顺序是________。
A、char<int<long int<=float<double
B、char=int<long int<=float<double
C、char<int<long int=float=double
D、char=int=long int<=float<double
(  B  )
6、下列定义数组的语句中,正确的是________。
A、int N=10;
B、#define N 10
int x[N]; int x[N];
C、int x[0..10];
D、int x[];
(  D  )
7、有以下程序
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
(  A  )
8、下列四组字符串中都可以用作c语言程序中的标识符的是________。
A、print _3d db8 aBc
B、I\am one_half start$it 3pai
C、str_1 Cpp pow while
D、Pxq My->book line# His.age
(  D  )
9、若有说明:int n=2,*p=&n,*q=p,则以下非法的赋值语句是: ( )
A、p=q
B、*p=*q
C、n=*q
D、p=n
(  D  )
10、运行下面程序时,若从键盘输入 "3,5<cr>" ,则程序的输出结果是 __________.
#include <stdio.h>
void main( )
{
int x,y;
scanf("%d,%d",&x,&y);
if (x==y) printf("x==y");
else if (x>y) printf("x>y");
else printf("x<y");
}
A、3<5
B、5> 3
C、x>y
D、x<y
(  B  )
11、若已定义实参数组 int a[3][4]= { 2,4,6,8,10 }; 则在被调用函数 f 的下述定义中,对形参数组 b 定义正确的选项是 __________.
A、f(int b[ ][6])
B、f(b) int b[ ][4];
C、f(int b[3][ ]);
D、f(b) int b[4][5];
(  B  )
12、汉字国标码规定的汉字编码每个汉字用______个字节表示。
A、1
B、2
C、3
D、4
(  A  )
13、下列程序的输出结果是________。
#include <stdio.h>
int f(int a,int b);
main()
{
int i=2,p,j,k;
j=i;
k=++i;
p=f(j,k);
printf("%d",p);
}
int f(int a,int b)
{
int c;
if(a>b)c=1;
else if(a==b) c=0;
else c=-1;
return(c);
}
A、-1
B、1
C、2
D、编译出错,无法运行
(  B  )
14、设变量定义为【int a[3] { 1,3,5 }, *p=a+1; 】,则*p的值是________。
A、2
B、3
C、4
D、a+1
(  A  )
15、分析下列程序:
#include<stdio.h>
main()
{
int*p1,*p2,*p;
int a=6,b=9;
p1=&a;
p2=&b;
if(a<b)
{
p=p1;
p1=p2;
p2=p;
}
printf("%d,%d",*p1,*p2);
printf("%d,%d",a,b);
}
程序的输出结果为________。
A、9,66,9
B、6,99,6
C、6,96,9
D、9,69,6
(  D  )
16、设有以下说明语句:
typedef struct stu
{
int a;
float b;
}
stutype;
则下面叙述中错误的是________。
A、struct是结构类型的关键字
B、struct stu是用户定义的结构类型
C、a和b都是结构成员名
D、stutype是用户定义的结构体变量名
(  B  )
17、若变量已正确定义:for(x=0,y=0;(y!=99&&x<4);x++) 则以上 for 循环()
A、执行 3 次
B、执行 4 次
C、执行无限次
D、执行次数不定
(  D  )
18、以下叙述中正确的是________。
A、即使是同类型的结构体变量,也不能进行整体赋值
B、结构体变量的地址不能作为实参传给函数
C、结构体数组名不能作为实参传给函数
D、结构体中可以含有指向本结构体的指针成员
(  D  )
19、以下关于注释的叙述中错误的是________。
A、注释的边界符号“/”和“*”之间不允许加入空格
B、C 语言允许注释出现在程序中任意合适的地方
C、注释的内容仅用于阅读,对程序的运行不起作用
D、注释的边界符号“/*”和“*/”必须成对出现且可以嵌套
(  C  )
20、设有如下定义:int x=10, y=4,z;
4则语句:printf(''%d\n'', z=(x%y, x/y));
的输出结果是________。
A、1
B、0
C、2
D、3

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

1、以下程序用于判断a、b、c能否构成三角形,若能,输出yes,否则输出no。当给a、b、c输入三角形三条边长时,确定a、b、c能构成三角形的条件是需同时满足三个条件:a+b>c,a+c>b,b+c>a。请填空。
main()
{
float a,b,c;
scanf("%f%f%f",&a,&b,&c);
if(________)printf("yes\n");
/*a、b、c能构成三角形*/ else printf("no\n");
/*a、b、c不能构成三角形*/
}
2、有以下程序
main( )
{
int n=0,m=1,x=2;
if(!n) x-=1;
if(m) x-=2;
if(x) x-=3;
printf("%d\n",x);
}
执行后输出结果是 ________。
3、若i为整型变量,且i%2==0的值为1,则变量i为________数。
4、在c语言中,用转义字符 \\ 表示______________。答题提示:双引号/单引号/反斜线/横向跳格/回车换行
5、if语句与_________语句一起可以构成循环结构。
6、#include <stdio.h>
void main()
{
int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;
for (i=1;i<3;i++) for (j=0;j<i;j++) s+=a[i][j];
printf("%d\n",s);
}
7、若有定义: int a[3][4]={{1,2},{0},{4,6,8,10}};
则初始化后,a[1][2] 得到的初值是【1】, a[2][1] 得到的初值是【2】。
8、下面程序的运行结果是________。
main()
{
int i,j,a[2][3]={{2,4,6},{8,10,12}};
printf("the original array is:\n");
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)printf("%4d",a[i][j]);
printf("\n");
}
printf("\nthe result is:\n");
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)printf("%4d",a[j][i]);
printf("\n");
}
}
9、C 语言中,一个函数一般由两个部分组成,它们是______和函数体。
10、C程序的运行需要经过______和链接两步进行。

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

1、编写程序: 判断101到200之间的素数。
2、编写程序:写一个函数,求一个字符串的长度,在 main 函数中输入字符串,并输出其长度。
3、定义⼀个结构体student,存储学⽣的学号、名字、性别和年龄,读⼊每个学⽣的所有信息,保存在结构体中,并输出。结构体student的定义如下:
struct student {
int num;
char name[20];
char sex;
int age;
};
本题要求使⽤指向结构体数组进⾏输⼊和输出。
输⼊:
第⼀⾏有⼀个整数n,表⽰以下有n个学⽣的信息将会输⼊。保证n不⼤于20。
以后的n⾏中,每⼀⾏包含对应学⽣的学号、名字、性别和年龄,⽤空格隔开。保证每⼀个⼈名都不包含空格且长度不超过15,性别⽤M和F两个字符来表⽰。
输出:
有n⾏,每⾏输出⼀个学⽣的学号、名字、性别和年龄,⽤空格隔开。
请注意⾏尾输出换⾏。
样例输⼊:
3
10101 LiLin M 18
10102 ZhangFun M 19
10104 WangMin F 20
样例输出:
10101 LiLin M 18
10102 ZhangFun M 19
10104 WangMin F 20