西北政法大学2023年C语言

本试卷为西北政法大学2023年C语言,题目包括:单项选择题,判断题,填空题,程序分析题,编程题。

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

C语言

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

(  C  )
1、若已定义:int a[9], *p=a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式为( )。
A、p+1
B、a+1
C、a++
D、++p
(  B  )
2、若变量已正确定义,有以下程序段 i—o;
do printf("%d,",i);
while(i++);
printf("%d",i) 其输出结果是________。
A、0,0
B、0,1
C、1,1
D、程序进入无限循环
(  A  )
3、若有定义 int a;
float b;
double c;
程序运行时输入: 3 4 5<回车>能把值3输入给变量a、4输入给变量b、5输入给变量c的语句是________。
A、scanf("%d%f%lf", &a,&b,&c);
B、scanf("%d%lf%lf", &a,&b,&c);
C、scanf("%d%f%f", &a,&b,&c);
D、scanf("%lf%lf%lf", &a,&b,&c);
(  C  )
4、若有定义:int aa[ 8]; 则以下表达式中不能代表数组元aa[1]的地址的是________。
A、&aa[0]+1
B、&aa[1]
C、&aa[0]++
D、aa+1
(  D  )
5、若有以下说明语句:
struct student
{
int num;
char name[ ];
float score;
} stu;
则下面的叙述不正确的是: ( )
A、struct是结构体类型的关键字
B、struct student 是用户定义的结构体类型
C、num, score都是结构体成员名
D、stu是用户定义的结构体类型名
(  C  )
6、设有如下定义: struck sk
{
int a;
float b;
} data;
int *p;
若要使 p 指向 data 中的 a 域,正确的赋值语句是______。
A、p=&a;
B、p=data.a;
C、p=&data.a;
D、*p=data.a;
(  B  )
7、下面程序的运行结果是 __________.
#include<stdio.h>
void main( )
{
int a=1,b=10;
do
{
b-=a;
a++;
}
while(b--<0);
printf("%d,%d\n",a,b);
}
A、3,11
B、2, 8
C、1,-1
D、4,9
(  D  )
8、在c语言中,下列运算符优先级最高的是________。
A、>=
B、==
C、!=
D、&&
(  D  )
9、设有语句:"int a=1,b=2,*p1=&a,*p2=&b; ",则使指针p1指向变量b的赋值语句是______。
A、p1=*p2
B、*p1=p2
C、p1=p2
D、*p1=*p2
(  D  )
10、在下面语句中,其含义为"p为指向含n个元素的一维数组的指针变量"的定义语句是________。
A、int p [n]
B、int * p( );
C、int * p(n);
D、int( * p)[n]
(  A  )
11、数组a[1..5,1..6]的每个元素占5个单元,将其按行优先顺序存储在起始地址为1000的连续的内存单元中,则元素a[5,5]的地址为 (15) 。
A、1140
B、1145
C、1120
D、1125
(  B  )
12、若x=2,y=3,则x&y的结果是________。
A、0
B、2
C、3
D、5
(  D  )
13、表达式x+1>x是________。
A、算术表达式
B、非法表达式
C、字符串表达式
D、关系表达式
(  D  )
14、有以下函数:fun(char *a,char *b)
{
while((*a!='\0')&&(*b!='\0')&&(*a==*b))
{
a++;
b++;
}
return(*a-*b);
}
该函数的功能是______。
A、计算 a 和 b 所指字符串的长度之差
B、将 b 所指字符串连接到 a 所指字符串中
C、将 b 所指字符串连接到 a 所指字符串后面
D、比较 a 和 b 所指字符串的大小
(  D  )
15、有以下程序:
#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
(  D  )
16、有以下程序:
#include<stdio.h>
main()
{
int x=8;
for(;x>0;x--)
{
if(x%3)
{
printf("%d,",x--);
continue;
}
printf("%d,",--x);
}
}
程序的运行结果是______。
A、7,4,2
B、8,7,5,2
C、9,7,6,4
D、8,5,4,2
(  B  )
17、设i是int型变量,f是float型变量,用下面的语句给这2个变量输入值。为了将,100和765.12分别赋给i和f,则正确的输入为______。 scanf("i=%d,f=%f",&i,&f);
A、100<空格>765.12<回车>
B、i=100,f=765.12<回车>
C、100<回车>765.12<回车>
D、x=100<回车>y=765.12<回车>
(  C  )
18、有以下程序:
main()
{
char a[7]="a0\0a0\0":int i,j i=sizeof(a);
j=strlen(a): printf("%d%d\n",i,j);
}
程序运行后的输出结果是________。
A、22
B、76
C、72
D、62
(  D  )
19、下列运算符中,不属于关系运算符的是________。
A、<
B、>=
C、==
D、!
(  D  )
20、在c 的if 语句中,可用作条件的表达式是________。
A、关系表达式
B、逻辑表达式
C、算术表达式
D、任意表达式

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

(   F  )
1、c语言规定,函数返回值的类型是由return语句中表达式类型所决定的。( ) 
(   T  )
2、在一个函数中调用另一个被调函数时,如果被调用函数在主调函数之前定义,可以不进行说明。 
(   F  )
3、不能直接使用一个字符串常量来为一个字符数组赋值。() 
(   F  )
4、在switch语句中,多个case不可以共用一组执行语句。 
(   F  )
5、若 a 是实型变量, c 程序中允许赋值 a=10, 因此实型变量中允许存放整型数 
(   F  )
6、putchar 函数可以向终端输出一个字符串 
(   F  )
7、for(i=1; i++<4; ) ;语句结束后变量i 的值是4 
(   T  )
8、while语句的一般形式如下,其中的循环体语句只能是一条语句。while (表达式) 循环体语句 
(   F  )
9、c语言中函数可以递归调用,也允许嵌套定义。 
(   T  )
10、以“r”方式打开一个文件时,文件指针指向文件首。 

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

1、设int a=5,b=6;
则表达式(++a==b--)?++a:--b的值是________。
2、若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为________。
3、main()
{
int a,b;
for (a=1,b=1;a<=100;a++)
{
if(b>=20) break;
if(b%3==1)
{
b+=3;
continue;
}
b-=5;
}
}
程序的输出结果a的值为________。
4、int a,b;与a*=5-b;等价的赋值语句是________。
5、在c 语言中,一个函数一般由两个部分组成,它们是【1】和【2】。

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

1、一个c程序总是从_____________函数开始执行的。
2、下列程序段的运行结果是_____。
char s1[20]="abcdef", s2[5]="abc";
strcpy(s1,s2);
printf("%c", s1[5]);
3、下面函数func 的功能是________。
#include<math.h>
long func(long num)
{
long k=1;
num=labs(num);
do
{
k*=num%10;
num/=10;
}
while(num);
return k;
}
main()
{
long n;
printf("\nplease enter a number:");
scanf("%ld",&n);
printf("\nthe product of its digits is %ld.",func(n));
}
4、下列给定程序中,函数proc()的功能是找出100~m(m 不大于1000)之间百位数字加十位数字等于个位数字的所有整数,把这些整数放在s所指的数组中,个数作为函数值返回。 请修改程序中的错误,使它能得到正确结果。 注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。 试题程序:
#define M 1000 int proc(int*S.int n)
{
int i,j,k,a,b,c;
j=0;
for(i=100;i<N;I++)
{
k=n;
a=k%10;
k/=10;
b=k%10;
c=k/10;
if(a==b+c) s[j]=i;
}
return j;
}
void main()
{
int a[M],m,num=0,i;
do
{
printf("\nEnter m(<=1000):");
scanf("%d",&m);
}
while(m>1000);
num=proc(a,m);
printf("\n\nThe result:\n");
for(i=0;i<NUM;I++) printf("%5d",a[i]);
printf("\n\n");
}

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

1、编写程序:从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止。程序功能如下:
输入你要保存到的文件的名称:
test.txt
现在你可以输入你要保存的一些字符,以#结束:
www.baidu.com
#
2、编写程序:从键盘输入 n (n<10)个学生的学号(学号为4位的整数,从1000开始)、成绩并存入结构数组中,按成绩从低到高排序并输出排序后的学生信息。
输入输出示例:括号内为说明,无需输入输出
输入样例:
3 (n=3)
1000 85
1001 90
1002 75
输出样例:
1002 75
1000 85
1001 90
3、计算并输出200-400之间不能被3整除的整数的和。