山西农业大学历年C语言模拟

本试卷为山西农业大学历年C语言模拟,题目包括:单项选择题,判断题,填空题,程序分析题,编程题。

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

C语言模拟

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

(  C  )
1、有以下程序段: int i,j,m=0;
for(i=1;i<=15;i+=4) for(j=3;j<=19;j+=4)m++;
printf("%d\n",m);
程序段的输出结果是________。
A、12
B、15
C、20
D、25
(  C  )
2、avg功能是求整形数组中的前若干个元素的平均值,设数组元素个数最多不超过则下列函数说明语句错误的是________。
A、int avg(int*a,int n);
B、int avg(int a[lO],int n);
C、int avg(int a,int n);
D、int avg(int a[],int n);
(  A  )
3、下列程序的输出结果是________。
main()
{
int a=0,i;
for(i=1;i<5;i++)
{
switch(i)
{
case 0: case 3:a+=1;
case 1;
case 2:a+=2;
default:a+=3;
}
}
printf("%d",a);
}
A、19
B、1
C、6
D、8
(  D  )
4、要输出下面的图形,请完善程序。
#include <stdio.h>
main( )
{
int i,j,k;
for(i=1;i<=5;i++)
{
for(j=1;j<=20-3*i;j++) printf(" ");
for(k=1;________;k++) printf("%3d",k);
for(________;k>0;k++) printf("%3d",k);
printf("\n");
}
}
A、k<=i
k=i
B、k<i
k=i-1
C、k<i
k=i
D、k<=i
k=i-1
(  B  )
5、以下关于return 语句的叙述中正确的是________。
A、一个自定义函数中必须有一条return 语句
B、一个自定义函数中可以根据不同情况设置多条return 语句
C、定义成void 类型的函数中可以有带返回值的return 语句
D、没有return 语句的自定义函数在执行结束时不能返回到调用处
(  A  )
6、设有如下程序段 char s[20]= "bejing",*p; p=s; 则执行p=s; 语句后,以下叙述正确的是________。
A、可以用*p表示s[0]
B、s数组中元素的个数和p所指字符串长度相等
C、s和p都是指针变量
D、数组s中的内容和指针变量p中的内容相等
(  D  )
7、在c语言中对一维整型数组的正确定义为 。
A、int a(10);
B、int n=10,a[n];
C、int n;a[n];
D、#define N 10 int a[N];
(  B  )
8、以下运算符中优先级最高的运算符为________。
A、&&
B、!
C、!=
D、||
(  B  )
9、有如下程序
#include<stdio.h>
void main()
{
int x=23;
do
{
printf("%d",x--);
}
while(!x);
}
该程序的执行结果是 _________。
A、321
B、23
C、不输出任何内容
D、陷入死循环
(  C  )
10、如有说明 : char s1[5],s2[7]; 要给数组 s1 和 s2 整体赋值 , 下列语句中正确的是 __________.
A、s1=getchar(); s2=getchar();
B、scanf("%s%s",s1,s2);
C、scanf("%c%c",s1,s2);
D、gets(s1,s2);
(  C  )
11、若函数调用时用数组名作为函数参数,以下叙述中,不正确的是 __________.
A、实参与其对应的形参共占用同一段存储空间
B、实参将其地址传递给形参,结果等同于实现了参数 之间的双向值传递
C、实参与其对应的形参分别占用不同的存储空间
D、在调用函数中必须说明数组的大小,但在被调函数中可以使用不定尺寸数组
(  B  )
12、在下面关于指针的说法中,错误的一条是________。
A、变量的指针就是变量的地址
B、可以将一个整型量或任何其他非地址类型的数据赋给一个指针变量
C、一个指针变量只能指向同一个类型的变量
D、指针变量中只能存放地址(指针)
(  B  )
13、若有定义语句:int x=12,y=8,z; 在其后执行语句z=0.9+x/y; 则z的值为___________。
A、1.9
B、1
C、2
D、2.4
(  C  )
14、以下选项中合法的实型常数是________。
A、5E2.0
B、E-3
C、2E0
D、1.3E
(  A  )
15、下列选项中不属于c语言的数据类型是________。
A、复数型
B、逻辑型
C、双精度型
D、集合型
(  C  )
16、null是指 ________。
A、0
B、空格
C、未知的值或无任何值
D、空字符串
(  D  )
17、下面叙述正确的是________。
A、只要是简单算法,它的操作步骤都不会超过 20 步
B、任何算法需要包含三种基本结构中的两种以上
C、复杂算法是不能用三种基本结构来表达的
D、C 语言程序的语句经过编译和链接转换成二进制机器指令后才能执行
(  D  )
18、在下面的条件语句中(其中s1个s2表示c语言语句),只有()在功能上与其他三个语句不等价。
A、if (a)
S1
else
S2
B、if (a==0)
S2
else
 S1
C、if (a!=0)
S1
else
S2
D、if (a==0)
S1
 else
 S2
(  C  )
19、static struct
{
int a1;
float a2;
char a3;
}
a[10]={1,3.5,'a'};
说明数组a是地址常量,它有10个结构体型的下标变量,采用静态存 储方式,其中被初始化的下标变量是________。
A、a[1]
B、a[-1]
C、a[0]
D、a[10]
(  A  )
20、以下关于continue语句的描述中正确的是________。
A、continue语句只能用于循环中
B、continue语句只能用于switch语句中
C、continue语句可用于循环和switch语句中
D、以上说法都不正确

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

(   T  )
1、c程序中if语句可以单独存在。 
(   T  )
2、用strcat(字符串1,字符串2)连接两个字符串函数时,将字符串1后面的'\0'取消,只在新串的最后保留一个'\0'。 
(   T  )
3、c语言中不允许嵌套定义函数。 
(   F  )
4、宏定义在行末加分号。 
(   F  )
5、在定义函数时,必须要指定函数中的参数列表。( ) 
(   F  )
6、c程序可以省略main( )函数。 
(   F  )
7、若变量已正确定义,以下while循环结束时,i的值为11。
i = 1;
while (i <= 10)
{
printf("%d\n", i);
} 
(   T  )
8、数组的基地址是在内存中存储数组的起始位置,数组名本身就是一个地址即指针值。 
(   T  )
9、在同一源文件中,使用extern可将全局变量的作用域向上扩展。 
(   F  )
10、INT是非法表示符 

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

1、设x=0,y=2,则表达式"!x+y"的值是_____________。
2、循环语句for(i=0;i<3;i++) printf("*");
表达式i=0 执行【1】________次,表达式i++执行【2】________次。
3、语言的函数体一般由____和____构成
4、设int a=12,则表达式a/=a+a 运算后,a的值是______。
5、指针是存放______的变量。

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

1、有以下程序
#include < stdio.h >
main()
{
int a=1,b=2,c=3,d=0;
if (a==1) if (b!=2) if(c!=3) d=1;
else d=2;
else if(c!=3) d=3;
else d=4;
else d=5;
printf("%d\n",d);
}
程序运行后的输出结果是: ________。
2、下列程序段的运行结果是________。
char a='m' ,*p ;
p=&a;
printf("%c",*p);
3、下列程序段的运行结果是________。
main()
{
int i=1,s=0;
for( ; ; )
{
s=s+i ;
i++;
if(i>4) break ;
}
printf("%d\n",s);
}
4、以下程序运行后的输出结果是________。
main()
{
char s[ ]="gfedcba";
int p=6;
while(s[p]!=‘d’)
{
printf("%c ", p);
p=p-1;
}
}

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

1、编写程序:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
2、输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。
输入格式:
输入第一行给出正整数n(<10)。随后n行,每行按照“姓名 生日 电话号码”的格式给出一位朋友的信息,其中“姓名”是长度不超过10的英文字母组成的字符串,“生日”是yyyymmdd格式的日期,“电话号码”是不超过17位的数字及+、-组成的字符串。
输出格式:
按照年龄从大到小输出朋友的信息,格式同输出。
输入样例:
3
zhang 19850403 13912345678
wang 19821020 +86-0571-88018448
qian 19840619 13609876543
输出样例:
wang 19821020 +86-0571-88018448
qian 19840619 13609876543
zhang 19850403 13912345678
3、任意输入两行字符串,把第二行字符串连接到第一行字符串末尾(不用strcat函数)。