山西农业大学C语言程序设计期末

本试卷为山西农业大学C语言程序设计期末,题目包括:理论基础,控制结构,循环结构,数组/指针数组,字符串/字符串指针,函数/函数指针,指针,结构体,程序题。

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

C语言程序设计期末

一、理论基础 (共20题,每题1分,共计10分)

(  B  )
1、交换两个变量的值,不允许用临时变量,应该使用下列( )位运算符。
A、&
B、^
C、||
D、~
(  D  )
2、设变量已正确定义,则以下能正确计算f=n!的程序是________。
A、f=0:
for(i=1;i<=n;i++)f*=i:
B、F=1:
for(i=l;i<2n;i++)f*=i:
C、f=l:
for(i=n;i>1;i++)f*=i:
D、f=1;
for(i=n;i>=2;i--)f*=i:
(  D  )
3、下面哪一个不是字符常量________。
A、'a'
B、'?'
C、'9'
D、"a"
(  A  )
4、下列语句中,正确的是________。
A、char *s ; s="Olympic";
B、char s[7] ; s="Olympic";
C、char *s ; s={"Olympic"};
D、char s[7] ; s={"Olympic"};
(  D  )
5、设有如下程序段: int x=2002, y=2003; printf("%d\n",(x,y));
则以下叙述中正确的是________。
A、输出语句中格式说明符的个数少于输出项的个数,不能正确输出
B、运行时产生出错信息
C、输出值为2002
D、输出值为2003
(  A  )
6、在c语言中,形参的缺省存储类是________。
A、auto
B、register
C、static
D、extern
(  D  )
7、以下不正确的 c 语言标识符是______。
A、ABC
B、abc
C、a_bc
D、ab.c
(  A  )
8、已知各变量的类型说明如下,则以下不符合 c 语言语法的表达式是: 。 int k,a,b; unsigned long w=5; double x=1.422;
A、x%(-3)
B、w+=-2
C、k=(a=2,b=3,a+b)
D、a+=a=+(b=4)*(a=3)
(  D  )
9、下列对程序解决问题的过程描述中,哪项是正确的( )
A、编写程序→设计算法→分析问题→调适运行与检测结果
B、设计算法→分析问题→编写程序→调适运行与检测结果
C、设计算法→分析问题→调试运行与检测结果→编写程序
D、分析问题→设计算法→编写程序→调试运行与检测结果
(  D  )
10、设int a=0; 错误的语句是________。
A、++a;
B、a++;
C、a=-a;
D、(-++a);
(  D  )
11、判断字符型变量ch是否为大写英文字母,应使用表达式
A、ch>='A'&ch<='Z'
B、ch<='A'|| ch>='Z'
C、'A'<=ch<='Z'
D、ch>='A'&&ch<='Z'
(  A  )
12、下列选项中,合法的c语言关键字是________。
A、default
B、get
C、integer
D、VAR
(  B  )
13、与十六进制数cd等值的十进制数是________。
A、204
B、205
C、206
D、203
(  A  )
14、以下选项中,合法的实数是________。
A、1.5E2
B、E1.1
C、2.10E
D、1.9E1.4
(  C  )
15、表达式的值为0的是________。
A、5/5%5
B、5>2
C、!4
D、3>2 && 5-6<7
(  C  )
16、下列描述中,正确的是________。
A、每个C程序必须在开头使用预处理命令
B、预处理命令必须位于C程序的开头
C、在C语言中,预处理命令都以<开头
D、语言的预处理命令只能实现宏定义和条件编译的功能
(  C  )
17、下列程序段的输出是____。int c[]={1, 3, 5};
int *k=c+1;
printf("%d", *++k);
A、3
B、4
C、5
D、6
(  B  )
18、以下说法正确的是________。
A、C 语言只接受十进制的数
B、C 语言只接受八进制、十进制、十六进制的数
C、C 语言接受除二进制之外任何进制的数
D、C 语言接受任何进制的数
(  D  )
19、若变量c定义为float型变量,能给变量c正确赋值的语句是________。
A、scanf("%f",c)
B、scanf("%8.4f",&c)
C、scanf("%d",&c)
D、scanf("%f",&c)
(  B  )
20、以下正确的说法是()。
A、用户若需调用标准库函数,调用前必须重新定义
B、用户可以重新定义标准库函数,若如此,该函数将失去原有含义
C、系统根本不允许用户重新定义标准库函数
D、用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动去调

二、控制结构 (共10题,每题1分,共计10分)

(  A  )
1、与 y=(x>0?1:x<0?-1:0); 的功能相同的if语句是________。
A、if (x>0) y=1;
else if(x<0)y=-1;
else y=0;
B、if(x)
if(x>0)y=1;
else if(x<0)y=-1;
else y=0;
C、y=-1
if(x)
if(x>0)y=1;
else if(x==0)y=0;
else y=-1;
D、y=0;
if(x>=0)
if(x>0)y=1;
else y=-1;
(  D  )
2、能正确表示a和b同时为正或同时为负的逻辑表达式是________。
A、(a>=0‖b>=0)&&(a<0‖b<0)
B、(a>=0&&b>=0)&&(a<0&&b<0)
C、(a+b>0)&&(a+b<=0)
D、a*b>0
(  C  )
3、执行以下程序段后,w的值为________。
int w='a',x=14,y=15; w=((x||y)&&(w<'a'));
A、-1
B、NULL
C、1
D、0
(  A  )
4、下列叙述中正确的是________。
A、程序执行的效率与数据的存储结构密切相关
B、程序执行的效率只取决于程序的控制结构
C、程序执行的效率只取决于所处理的数据量
D、以上三种说法都不对
(  A  )
5、if语句的基本形式是:if(表达式)语句,以下关于"表达式"值的叙述中正确的是______。
A、可以是任意合法的数值
B、必须是整数值
C、必须是正数
D、必须是逻辑值
(  C  )
6、有以下程序
main()
{
int i=1,j=1,k=2;
if((j++‖k++)&&i++)
printf("%d,%d,%d\n",i,j,k);
}
执行后输出结果是________。
A、1,1,2
B、2,2,1
C、2,2,2
D、2,2,3
(  A  )
7、以下程序的输出结果是________。
#include<stdio.h>
main()
{
int a=4,b=3,c=2,d=1;
printf("%d",a<b?a:d<c?d:b);
}
A、1
B、3
C、2
D、4
(  C  )
8、以下程序的输出结果是________。
#include<stdio.h>
main()
{
int a=1,b=3;
if((++a<0)&&!(b--<=0)) printf("%d,%d\n",a,b);
else printf("%d,%d\n",b,a);
}
A、2,2
B、1,3
C、3,2
D、3,1
(  B  )
9、有以下程序
#include <stdio.h>
main ()
{
int a = 5, b = 4, c = 3, d = 2;
if (a > b > c)
printf ("%d\n", d);
else if ((c - 1 >= d) == 1)
printf ("%d\n", d + 1);
else
printf ("%d\n", d + 2);
}
执行后输出的结果是________。
A、2
B、3
C、4
D、编译时有错,无结果
(  A  )
10、选择出合法的if语句(设int x,a,b,c;)________。
A、if(a=b) x++;
B、if(a=<b) x++;
C、if(a<>b) x++;
D、if(a=>b) x++;

三、循环结构 (共10题,每题1分,共计10分)

(  B  )
1、有以下程序:
main()
{
int i,j;
for(j=10;j<11;j++)
{
for(i=9;i<j;i++) if(!(j%i))break;
if(i==j-1) printf("%d",j);
}
}
输出结果是________。
A、11
B、10
C、9
D、10 11
(  C  )
2、下面程序的运行结果是________。
main( )
{
int m=7,n=5,i=1;
do
{
if (i%m==0);
if (i%n==0)
{
printf("%d\n",i);
break;
}
i++;
}
while(i!=0);
}
A、7
B、6
C、5
D、4
(  D  )
3、可以作为自定义标识符的是________。
A、2x
B、break
C、m-n
D、m_n
(  B  )
4、下面不属于算法的控制结构的是______ 。
A、顺序结构
B、归纳结构
C、循环结构
D、选择结构
(  D  )
5、结构化程序设计方法的结构不包括________。
A、顺序结构
B、分支结构
C、循环结构
D、跳转结构
(  A  )
6、for循环的循环次数________。
A、通常是确定的,但也可以不确定
B、通常不确定,但也可以确定
C、是不确定的
D、是确定的
(  D  )
7、下面有关for循环的正确描述是________。
A、for循环只能用于循环次数已经确定的情况
B、for循环是先执行循环体语句,后判断表达式
C、在for循环中,不能用break语句跳出循环体
D、在for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来
(  C  )
8、有以下程序
main()
{
int i;
for(i=1;i<=40;i++)
{
if(i++%5==0) if(++i%8==0) pfintf("%d",i);
}
printf("\n");
}
执行后的输出结果是________。
A、5
B、24
C、32
D、40
(  C  )
9、下面的代码int i=10; 之后的for循环语句,语法正确,不会编译出错的是________。
A、for(i=0,i<10,i++)
B、for{
i=0;i<10;i++}
C、for( ;i>5;i--)
D、for(i=0;i<10;i++;)
(  B  )
10、若有程序段:x=99; while(x-2) x--; 则循环结束时,x=________。
A、99
B、2
C、1
D、0

四、数组/指针数组 (共10题,每题1分,共计10分)

(  A  )
1、若有定义:"int a[2][3];",则对a数组的第i行第j列元素的正确引用为( )。
A、*(*(a+i)+j)
B、(a+i)[j]
C、*(a+j+j)
D、*(a+i)+j
(  A  )
2、在c语言中对于实型数组,其每个数组元素的类型是________。
A、实型
B、整型
C、可以为任何类型
D、不确定
(  B  )
3、若有说明int a[3][4]; 则a数组元素的非法引用是________。
A、123
B、2.5
C、-12
D、1563
(  B  )
4、若有定义:int a[4][10]; 则以下选项中对数组元素a[i][j]引用错误的是______。 (0<=i<4,0<=j<10)
A、*(&a[0][0]+10*i+j)
B、*(a+i)+j
C、*(*(a+i)+j)
D、*(a[i]+
(  B  )
5、设矩阵a是一个n×n对称矩阵.即a[i,j]=a[i,j],为了节省存储空间,将其下三角部分按行序为主序存放在一维数b[1...n(n+1)/2]中,对任一下三角元素aij(i≥j),在一维数组b的下标位置k的值是______。
A、(i+(i-1))/2+j-1
B、i(i-1)/2+j
C、i(i+1)/2+j-1
D、i(i+1)/2+j
(  B  )
6、c语言中,数组名代表________。
A、数组全部元素的值
B、数组首地址
C、数组第一个元素的值
D、数组元素的个数
(  B  )
7、若有定义语句:double x[5]= {1.0,2.0,3.0,4.0,5.0 }, *p=x;
则错误引用x数组元素的是______。
A、*p
B、x[5]
C、*(p+1)
D、*x
(  B  )
8、以下能正确定义一维数组的选项是________。
A、int num[]
B、int num[N]
C、int num[0..100]
D、int N=100;
(  B  )
9、已有以下数组定义和f 函数调用语句, 则在f 函数的说明中,对形参数组array 的错误定义方式为________。int a[3][4];
f(a);
A、f(int array[][6])
B、f(int array[3][])
C、f(int array[][4])
D、f(int array[2][5])
(  A  )
10、下列数组说明中,正确的是()。
A、static char str[]="China";
B、static char str[]; str="China";
C、static char str1[5],str2[]={"China"}; str1=str2;
D、static char str1[],str2[];str2={"China"}; strcpy(str1,str2);

五、字符串/字符串指针 (共10题,每题1分,共计10分)

(  B  )
1、c语言中,下列不合法的字符串常量是________。
A、”\121”
B、'y='
C、”\n\n”
D、”ABCD\x6d”
(  D  )
2、以下选项中能表示合法常量的是________。
A、整数:1,200
B、实数:1.5E2.0
C、字符斜杠:"\"
D、字符串:"\007"
(  D  )
3、下列关于boolean类型的叙述中,正确的是________。
A、可以将boolean类型的数值转换为int类型的数值
B、可以将boolean类型的数值转换为字符串
C、可以将boolean类型的数值转换为char类型的数值
D、不能将boolean类型的数值转换为其他基本数据类型
(  B  )
4、下列选项中,值为1的表达式是________。
A、1-'0'
B、1-'\0'
C、'1'-0
D、'\0','0'
(  B  )
5、下列类型的数据不可以存储在可变型变量中的是________。
A、整型
B、字节型
C、单精度型
D、日期型
(  B  )
6、设有以下程序段: int a[5]=0,*p,*q; p=a; q=a; 则下列选项中,合法的运算是________。
A、p+q
B、p-q
C、p*q
D、p%q
(  C  )
7、下列表达式中,类型可以作为int型的是________。
A、"abe"+"efg"
B、"abc"+"efg"
C、'a'+'b'
D、3+"4"
(  D  )
8、下列字符串中可以用作c标识符的是________。
A、2009var
B、goto
C、test-2009
D、-123
(  C  )
9、\、/、mod、*等4个算术运算符中,优先级最低的是________。
A、\
B、/
C、Mod
D、*
(  A  )
10、下面不正确的字符串常量是________。
A、'abc'
B、"12'12"
C、"0"
D、" "

六、函数/函数指针 (共10题,每题1分,共计10分)

(  D  )
1、有以下程序 char fun(char x , char y)
{
if(x<y) return x;
return y;
}
main( )
{
int a=’9’,b=’8’,c=’7’;
printf("%c\n",fun(fun(a,b),fun(b,c)));
}
程序的执行结果是________。
A、函数调用出错
B、8
C、9
D、7
(  D  )
2、在说明语句:int *f( ); 中,标识符f代表的是________。
A、一个用于指向整型数据的指针变量
B、一个用于指向一维数组的行指针
C、一个用于指向函数的指针变量
D、一个返回值为指针型的函数名
(  A  )
3、以下函数调用语句中实参的个数为 。 exce((v1,v2),(v3,v4,v5),v6);
A、3
B、4
C、5
D、6
(  A  )
4、当接受用户输入的含有空格的字符串时,应使用 __________ 函数 .
A、gets( )
B、getchar( )
C、scanf( )
D、printf( )
(  A  )
5、c 语言规定,除主函数外,程序中各函数之间 ______.
A、既允许直接递归调用也允许间接递归调用
B、不允许直接递归调用也不允许间接递归调用
C、允许直接递归调用不允许间接递归调用
D、不允许直接递归调用允许间接递归调用
(  D  )
6、下列说法正确的是________。
A、在C程序中,main()函数必须位于程序的最前面
B、在C程序中,一条语句只能写一行而不能写多行
C、C程序是以行为基本单位的
D、C语言本身没有输入输出语句
(  B  )
7、有以下程序
#include<string.h>
main()
{
char p[20]={'a','b','c','d'},q[]="abc",r[]="abcde";
strcat(p,r);
strcpy(p+strlen(q),q);
printf("%d\n",strlen(p));
}
程序运行后的输出结果是________。
A、9
B、6
C、11
D、7
(  A  )
8、以下程序运行后,输出结果是
#define PT 5.5
#define S(x) PT*x*x
#include<stdio.h>
main()
{
int a=1,b=2;
printf("%4.1f\n",s(a+b));
}
A、49.5
B、9.5
C、22
D、45.0
(  B  )
9、有以下程序段若要给 c1、c2、c3 分别输入字母a,b,c,则以下对输入形式的描述正确的是________。
A、字母A,B,C 之间可以用空格分隔
B、字母A,B,C 之间不能有分隔符
C、字母A,B,C 之间可以用回车符分隔
D、字母A,B,C 之间可以用 Tab 键分隔
(  C  )
10、在c语言中,调用函数除函数名外,还必须有________。
A、函数预说明
B、实际参数
C、( )
D、函数返回值

七、指针 (共10题,每题1分,共计10分)

(  C  )
1、有如下程序 int a[10]= { 1,2,3,4,5,6,7,8,9,10 }; int*p=&a[3],b; b=p[5]; 则b的值是________。
A、5
B、6
C、9
D、8
(  D  )
2、若有以下说明和语句: int c[4][5],(*p)[5]; p=c; 能够正确引用c数组元素的是________。
A、p+l
B、*(p+3)
C、*(p+1)+3
D、*(p[0]+2)
(  D  )
3、下列说法不正确的是________。
A、一个C语言源程序可以由一个函数组成也可以由多个函数组成
B、main()中的“()”是函数的参数部分,括号内可为空,但括号不能省略
C、C语言程序是以函数为基本单位的
D、在C语言程序中,注释行只能位于一条语句的后面
(  C  )
4、以下叙述中正确的是________。
A、C语言系统以函数为单位编译源程序
B、main函数必须放在程序开始
C、用户定义的函数可以被一个或多个函数调用任意多次
D、在一个函数体内可以定义另外一个函数
(  A  )
5、以下叙述中正确的是______。
A、不能用字符串常量对字符数组名进行整体赋值操作
B、字符串常量"Hello"会被隐含处理成一个无名字符型数组,它有5个元素
C、char str[7]="string!";在语法上是合法的,运行也是安全的
D、char *str;str="Hello";与char str[];str="Hello";效果是一样的
(  C  )
6、要调用数学函数时,在 #include命令行中应包含____。
A、"stdio.h"
B、"string.h"
C、"math.h"
D、"ctype.h"
(  C  )
7、若x为int型变量,则以下函数fun的类型为________。
fun(x)
{
printf("%d\n",x);
}
A、返回值为void类型
B、无法确定返回值
C、返回值为int类型
D、无返回值
(  C  )
8、以下叙述中正确的是________。
A、由 printf 输出的数据都隐含左对齐
B、scanf 和 printf 是 C 语言提供的输入和输出语句
C、赋值语句是一种执行语句,必须放在函数的可执行部分
D、由 printf 输出的数据的实际精度是由格式控制中的域宽和小数的域宽来完全决定的
(  C  )
9、以下与库函数strcmp(char*s,char*t) 的功能相等的程序段是________。
A、strcmp1(char *s,char *t){
for (;*s++==*t++;)
If (*s=='\0')
return 0;
return (*s-*t);
}
B、strcmp2(char *s,char *t){
for (;*s++==*t++;)
If (!*s) return 0;
return (*s-*t);
}
C、strcmp3(char *s,char *t){
for (;*t==*s;){
if (!*t)
return 0;
t++;
s++;
}
return (*s-*t);
}
D、strcmp4(char *s,char *t){
for (;*s==*t;s++,t++)
If (!*s) return 0;
return (*t-*s);
}
(  C  )
10、以下叙述中错误的是________。
A、C语言是一种结构化程序设计语言
B、结构化程序由顺序、分支、循环三种基本结构组成
C、使用三种基本结构构成的程序只能解决简单问题
D、结构化程序设计提倡模块化的设计方法

八、结构体 (共10题,每题1分,共计10分)

(  B  )
1、若有以下语句:
typedef struct s
{
int g;
char h;
} t;
以下叙述中正确的是________。
A、可用S定义结构体变量
B、可用T定义结构体变量
C、S是struct类型的变量
D、T是struct S类型的变量
(  D  )
2、有以下程序
#include <stdio.h>
struct tt
{
int x;
struct tt*y;
}
*p;
struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a};
main()
{
int i;
p=a;
for(i=1;i<=2,i++)
{
printf("%d,",p->x);
p=p->y;
}
}
程序的运行结果是________。
A、20,30,
B、30,17
C、15,30,
D、20,15
(  B  )
3、若有下列说明和语句,则对结构体变量st中成员i的引用方式不正确的是________。
struct stu {
int i;
int name;
} st,*p; p=&st;
A、st.i
B、*p.i
C、(*p).i
D、p->i
(  C  )
4、有以下程序段
typedef struct node
{
int data;
struct node * next;
}
* node;
node p;
以下叙述中正确的是________。
A、p是指向struct node结构变量的指针的指针
B、NODEp;语句出错
C、p是指向struct node结构变量的指针
D、p是struct node结构变量
(  A  )
5、设有如下说明:
typedef struct
{
int n;
char c;
double x;
}
std;
则以下选项:能正确定义结构体数组并赋初值的语句是________。
A、STDtt[2]={{1,'A',62},{2,'B',75}};
B、STDtt[2]={1,"A",62,2,"B",75};
C、struet tt[2]={{1,'A'},{2,'B'}};
D、struct tt[2]={{1,"A",62.5},{2,"B",75.0}};
(  B  )
6、设有如下定义:
struct sk
{
int a;
float b;
}
data,*p;
若有p=&data;
则对data中成员a的引用正确的是________。
A、(*p).data.a
B、(*p).a
C、p->data.a
D、p.data.a
(  B  )
7、下面赋值表达式不正确的是__________________.
struct student
{
long num;
char name[20];
} st1, st2={101, "tom"}, *p=&st1;
A、st1 = st2
B、p->name = st2.name
C、p->num = st2.num
D、*p=st2
(  A  )
8、当定义一个结构体变量时,系统分配给它的内存是________。
A、各成员所需内存量的总和
B、结构中第一个成员所需内存量
C、结构中最后一个成员所需内存量
D、成员中占内存量最大者所需的容量
(  D  )
9、在说明一个结构体变量时系统分配给它的存储空间是________ 。
A、该结构体中第一个成员所需存储空间
B、该结构体中最后一个成员所需存储空间
C、该结构体中占用最大存储空间的成员所需存储空间
D、该结构体中所有成员所需存储空间的总和
(  A  )
10、在C语言中,下面那种数据类型不属于构造类型____
A、枚举类型
B、数组类型
C、结构体类型
D、共用体类型

九、程序题 (共10题,每题1分,共计10分)

(  C  )
1、若有下列定义和语句: int u=011,v=0x11,w=11; printf("%o,%x,%d\n",u,v,w): 则输出结果是________。
A、9,17,11
B、9,11, 11
C、11,11, 11
D、11,17, 11
(  D  )
2、阅读下面的程序
#include<stdio.h>
main()
{
char c1,c2;
c1=getchar();
c2=c1+3;
printf("%c,%d\n",c2,c2);
}
已知'a'的ascii的值为65,如果从键盘上输入 d<回车> 则程序的运行结果是________。
A、D,68
B、'G',68
C、D,71
D、G,71
(  C  )
3、以下程序
#include <stdio.h>
#define SUB(a) (a)-(a)
main()
{
int a=2,b=3,c=5,d;
d=SUB(a+b)*c;
printf("%d\n",d);
}
程序运行后的结果是________。
A、0
B、-12
C、-20
D、10
(  C  )
4、以下程序段的输出结果是 int a=1234; printf("%2d\n",a);
A、12
B、34
C、1234
D、提示出错、无结果
(  B  )
5、有以下程序
#include <stdio.h>
main()
{
char s[]={"012xy"};
int i,n=0;
for(i=0;s[i]!=0;i++) if(s[i]>'a'&&s[i]<='z') n++;
printf("%d\n",n);
}
程序运行后的输出结果是________。
A、0
B、2
C、3
D、5
(  D  )
6、运行下面程序后 , 输出是 ________.
#include <stdio.h>
void main( )
{
int k=-3;
if (k<=0) printf("****\n");
else printf("####\n")
}
A、####
B、****
C、####****
D、有语法错误不能通过编译
(  B  )
7、以下程序的输出结果是______。
main()
{
char a[10]={'1','2','3','4','5','6','7','8','9',0},*p;
int i ;
i=5;
p=a+i;
printf("%s\n",p-1);
}
A、5
B、56789
C、'5'
D、"56789"
(  D  )
8、运行下列程序时,若输入的数据为“1,2,3”,则输出结果是________。
main()
{
float a,b,c,t;
scanf("%f,%f,%f",&a,&b,&c);
if(a<b)
{
t=a;
a=b;
b=t;
}
if(a<c)
{
t=a;
a=c;
c=t;
}
if(b<c)
{
t=b;
b=c;
c=t;
}
printf("%f %f %f ",a,b,c);
}
A、1
2
3
B、1.00
2.00 3.00
3.00
C、3
2
1
D、3.000000
2.000000
1.000000
(  A  )
9、下述程序的输出结果是________。
#include<stdio.h>
void main()
{
printf("%f",2.5+1*7%2/4);
}
A、2.500000
B、2.750000
C、3.375000
D、3.000000
(  A  )
10、以下程序的输出结果是________。
main( )
{
int i=010, j=10, k=ox10;
printf(''%d,%d,%d\n'',i,j,k);
}
A、8,10,16
B、8,10,10
C、10,10,10
D、10,10,16