上海海洋大学历年C语言期末

本试卷为上海海洋大学历年C语言期末,题目包括:单项选择题,判断题,填空题,程序分析题,编程题。

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

C语言期末

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

(  D  )
1、下面是有关c语言字符数组的描述,其中错误的是________。
A、不可以用赋值语句给字符数组名赋字符串
B、可以用输入语句把字符串整体输入给字符数组
C、字符数组中的内容不一定是字符串
D、字符数组只能存放字符串
(  A  )
2、若有说明语句:char c='\101'; 则变量c:
A、包含一个字符
B、包含两个字符
C、包含三个字符
D、说明不合法
(  D  )
3、若有以下说明语句:
struct student
{
int num;
char name[ ];
float score;
} stu;
则下面的叙述不正确的是: ( )
A、struct是结构体类型的关键字
B、struct student 是用户定义的结构体类型
C、num, score都是结构体成员名
D、stu是用户定义的结构体类型名
(  D  )
4、若有说明:int n=2,*p=&n,*q=p,则以下非法的赋值语句是: ( )
A、p=q
B、*p=*q
C、n=*q
D、p=n
(  C  )
5、分析以下程序 , 下列说法正确的是______。
main()
{
int x=5,a=0,b=3;
if(x=a+b) printf("* * * *\n");
else printf("# # # #\n");
}
A、有语法错,不能通过编译
B、通过编译,但不能连接
C、输出 * * * *
D、输出 # # # #
(  C  )
6、for(int x=0,y=0;!x&&y<=5;y++)语句执行循环的次数是________。
A、0
B、5
C、6
D、无数次
(  B  )
7、执行下面的一段c程序后,变量sum的值应为______。
char chr=127; int sum=300; chr +=1; sum +=chr;
A、428
B、172
C、300
D、427
(  B  )
8、有以下定义和语句:
struct students {
int num;
char name[20];
char c;
struct {
int grade1;
int grade2;
} s;
};
struct students w,*pw;
*pw=w;
下列赋值语句不正确的是________。
A、num=1002;
B、w.grade1=85;
C、pw->num=1002;
D、w.s.grade2=85;
(  B  )
9、在以下各标识符中,合法的用户标识符是________。
A、001
B、table__1
C、0__t
D、k%
(  C  )
10、null是指 ________。
A、0
B、空格
C、未知的值或无任何值
D、空字符串
(  C  )
11、下列程序的输出结果是________。
main ()
{
int a = 4, b = 5, c;
if (a < b)
{
c = a * b;
printf ("%d,%d,%d\n", b, a, c);
}
else
{
c = b / a;
printf ("%d,%d,%d\n", b, a, c);
}
}
A、4,5,12
B、20
C、5,4,20
D、12
(  C  )
12、有以下程序:
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
(  B  )
13、有如下程序段int *p,a=1,b=2; p=&b; a=*p+a; 执行该程序段后,a的值为______。
A、2
B、3
C、4
D、编译出错
(  C  )
14、表达式的值为0的是________。
A、5/5%5
B、5>2
C、!4
D、3>2 && 5-6<7
(  A  )
15、a、b分别是整数6、-2,那么a对b求余与b对a求余的值分别为
A、0、-2
B、3、-2
C、3、2
D、0、2
(  B  )
16、int a=10; 下列哪个选项的值不是20?
A、a<<1
B、a>>1
C、a*2
D、a+10
(  D  )
17、以下叙述中正确的是________。
A、while 循环的循环体至少执行 1 次
B、while 循环的循环控制条件比 do-while 循环的循环控制条件复杂
C、do-while 循环体不能是复合语句
D、do-whil 循环的循环体至少执行 1 次
(  B  )
18、对长度为 8 的数组进行快速排序,最多需要的比较次数为________。
A、8
B、28
C、56
D、64
(  C  )
19、char a[10]; 不能将字符串"abc"存储在数组中的是________。
A、strcpy(a,"abc");
B、a[0]=0;strcat(a,"abc");
C、a="abc";
D、int i;for(i=0;i<3;i++)a[i]=i+97;a[i]=0;
(  A  )
20、若使用一维数组名作函数实参,则以下正确的说法是________。
A、必须在主调函数中说明此数组的大小
B、实参数组类型与形参数组类型可以不匹配
C、在被调用函数中,不需要考虑形参数组的大小
D、实参数组名与形参数组名必须一致

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

(   F  )
1、c语言中简单变量作为实参时,它和对应的形参之间的数据传递方式是双向值传递。 
(   F  )
2、寄存器变量的值也存放在内存中。 
(   T  )
3、== 是关系运算符,用于比较两个操作数是否相等;
而 = 是赋值运算符,表示对变量赋值。 
(   F  )
4、通过return语句,函数可以带回一个或一个以上的返回值。 
(   F  )
5、字符串可以存储在字符数组中,也可以存储在字符型指针变量中 
(   T  )
6、在c语言中,使用"r"方式可以打开文件 
(   T  )
7、宏定义是用宏名来表示一个字符串,在宏代换时以该字符串取代宏名。 
(   F  )
8、在c语言程序设计中函数是允许嵌套定义的。 
(   F  )
9、由于do-while 循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句。 
(   T  )
10、在c语言中,当一个逻辑表达式的值为"假"时,该表达式的值一定是 0 ( ) 

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

1、有以下程序段,且变量已正确定义和赋值 for(s=1.0,k=1;k<=n;k++) s=s+1.0/(k*(k+));
printf("s=%f\n\n",s);
请填空,使下面程序段的功能与之完全相同 s=1.0;
k=1;
while([10] )
{
s=s+1.0/(k*(k+1));
[11] ;
}
printf("s=%f\n\n",s);
2、字符串函数___________用于把一个字符串写入指定的磁盘文件中。
3、在c语言中,在调用一个函数的过程中又出现__________或间接地调用该函数本身,这一现象称为函数的递归调用。
4、数学表达式x<y<z改写为c语言表达式是___________。注:表达式要在英文半角状态下按原表达式顺序书写,且表达式中不要留空格。
5、break语句通常用于______中。

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

1、程序
main( )
{
float x;
x=3.6;
printf("i=%d", (int)x);
}
的输出结果是________。
2、有以下程序
#include <stdio.h>
main()
{
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int b[3]={0},i;
for(i=0;i<3;i++) b[i]=a[i][2]+a[2][i];
for(i=0;i<3;i++) printf("%d",b[i]);
printf("\n");
}
程序运行后的结果是________。
3、下列程序段的运行结果是_____。
void pig( )          
{
float a=3.0;
}
main( )
{
float a=1.0;
pig( );
printf("a=%f",a);
}
4、以下程序的运行结果是________。
#include<stdio.h>
main()
{
int a=1,b=2,c;
c=max(a,b);
printf("max is %d\n",c);
}
max(int x,int y)
{
int z;
z=(x>y)?x:y;
return(z);
}

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

1、编写程序: 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
2、编写程序:字符串排序。如下:
请输入3个字符串,每个字符串以回车结束!:
b
a
t
排序后的结果为:
a
b
t
3、编写程序:用结构体数组,学生信息由学号、姓名,成绩组成,
数据如下:201513135157 张三 90
1)使用结构体数组,将学生的数据按成绩从高到低排序显示到屏幕上
2)将学生中不及格学生的姓名显示出来
3)写一个函数,获取成绩低于平均分的学生记录并返回低于平均分的学生人数