蚌埠医学院C语言程序设计期末

本试卷为蚌埠医学院C语言程序设计期末,题目包括:单项选择题,判断题,填空题,程序分析题,编程题。

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

C语言程序设计期末

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

(  A  )
1、以下程序段给数组所有元素输入数据:
main()
{
int a[10],i=0;
while(i<10)scanf("%d",);
}
应在下划线处填入的是________。
A、a+(i++)
B、&a[i+1]
C、a+i
D、&a[++i]
(  C  )
2、有以下程序
typedef struct
{
char name[9];
char sex;
float score [2];
} stu;
stu f(stu a) {
stu b={"zhao", 'm', 85.0, 90.0};
int i;
strcpy(a.name, b.name);
a.sex=b.sex:;
for(i=0;i<2;i++) a.score[i]=b.score[i];
return a:
}
main() {
stu c=
{
"qian", 'f', 95.0, 92.0
};
stu d=f(c);
printf("%s, %c, %2.0f, %2.0f", d.name, d.sex, d.score[0], d.score[1]); ) 程序的运行结果是________。
A、Qian,f,95,92
B、Qian,m,85,90
C、Zhao,m,85,90
D、Zhao,f,95,92
(  D  )
3、若已定义:int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;其中0≤i≤9,则对a数组元素的引用不正确的是________。
A、a[p-a]
B、*(&a[i])
C、p[i]
D、*(*(a十i))
(  C  )
4、以下程序
#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
(  B  )
5、有以下程序
#include <stdlib.h>
struct node
{
int num;
struct node *next;
};
main( )
{
struct node *p,*q,*r;
int sum=0;
p=(struct node *)malloc(sizeof(struct node));
q=(struct node *)malloc(sizeof(struct node));
r=(struct node *)malloc(sizeof(struct node));
p->num=1;
q->num=2;
r->num=3;
p->next=q;
q->next=r;
r->next=null;
sum+=q->next->num;
sum+=p->num;
printf("%d\n",sum);
}
执行后的输出结果是________。
A、3
B、4
C、5
D、6
(  B  )
6、有以下程序
main() {
int i, j,m =55;
for(i=l;i<3;i++) for(j=3;j<=++) m=m%j;
printf("%d\n",m);
}
程序的运行结果是________。
A、0
B、1
C、2
D、3
(  B  )
7、若有说明:int a[][3]={{1,2,3},{4,5},{6,7}};则数组a的第一维的大小为: ( )
A、2
B、3
C、4
D、无确定值
(  B  )
8、下列运算符中,属于关系运算符的是________。
A、<<
B、>=
C、=
D、!
(  A  )
9、下列各循环语句中,不是死循环的是________。
A、int i=100;
while(i) {
i=i%100+1;
if(i==20)
break;
}
B、int i,sum=0;
for(i=1;;i++)
sum=sum+1;
C、int k=0;
do
++k;
while(k>=0);
D、int s=3379;
while(s++%2+3%2)
s++;
(  A  )
10、if语句的基本形式为:if(表达式)语句,其中"表达式"________。
A、可以是任意合法的表达式
B、必须是逻辑表达式
C、必须是逻辑表达式或关系表达式
D、必须是关系表达式
(  B  )
11、设有两个字符串p和q,其中q是p的子串,把q在p中首次出现的位置作为子串q在p中位置的算法称为 (43) 。
A、求子串
B、匹配
C、连接
D、求串长
(  D  )
12、设函数定义如下: float f1(float a,float b)
{
return(a+b);
}
若有float x=1.1,y=2.2;
,则以下语句中正确的函数调用是________。
A、printf ("%f",f1();
B、printf ("%f",f1(&x,);
C、printf ("%f",f1(*x,*);
D、printf ("%f",f1(x,);
(  B  )
13、标准的ascii码最多可以表示多少个字符
A、127
B、128
C、255
D、256
(  D  )
14、下列运算符结合性不同的是________。
A、+
B、%
C、/
D、=
(  B  )
15、下列语句合法的是________。
A、4+c=b=0 ;
B、a=++c;
C、a=2=b=6;
D、a=4++;
(  A  )
16、算法指的是________。
A、解决问题的方法、步骤和思路的一种描述
B、计算机程序
C、排序方法
D、数据处理
(  A  )
17、以下叙述中正确的是________。
A、只要适当地修改代码,就可以将 do-while 与 while 相互转换
B、对于 for(表达式 1;表达式 2;表达式 3)循环体首先要计算表达式 2 的值,以便决定是否开始循环
C、对于 for(表达式 1;表达式 2;表达式 3)循环体,只在个别情况下才能转换成 while 语句
D、如果根据算法需要使用无限循环(即通常所称的"死循环"),则只能使用 while 语句
(  B  )
18、下列数据中属于"字符串常量"的是________。
A、ABC
B、"ABC"
C、'ABC'
D、'A'
(  A  )
19、下面四个选项中,均是合法转义字符的选项是________。
A、'\'' 、 '\\' 、 '\n'
B、'\' 、 '\017' 、 '\"’
C、'\018' 、 '\f' 、 'xab'
D、'\0' 、 '\101' 、 'xlf
(  C  )
20、表达式 x&&1 等价于________。
A、x==0
B、x ==1
C、x != 0
D、x != 1

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

(   F  )
1、当函数的类型为float型时,vc++允许省略函数声明。 
(   T  )
2、若不希望其他源文件引用本文件中定义的全局变量,可在定义全局变量时加上static。 
(   T  )
3、while语句和do - while语句的一般形式分别如下,其主要区别是:while 语句先判断循环条件,只有条件满足才进入循环,如果一开始条件就不满足,则循环一次都不执行。而do - while语句先执行循环体,后判断循环条件,所以无论循环条件的值如何,至少会执行一次循环体。 
(   T  )
4、c 语言标准格式输入函数 scanf() 的参数表中要使用变量的地址值。 
(   F  )
5、c 语言标准输出操作中 ,putchar() 函数可以输出显示一个字符串。 
(   T  )
6、数组定义后,数组名表示该数组所分配连续内存空间中第一个单元的地址,即首地址。 
(   T  )
7、c 语言具有简洁明了的特点。 
(   F  )
8、’ x61’代表字符‘ a’。 
(   T  )
9、逻辑表达式的值只能为1或0。 
(   T  )
10、如果函数定义出现在函数调用之前,可以不必加函数原型声明 

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

1、设a=12,a定义为整型变量,表达式a*=2+3的值为________。
2、在定义函数时函数名后面括号中的变量名称为________。
3、已知a=5,则表达式"a+=a*=3"的值是________。
4、下列程序段的运行结果是________。
main()
{
int i=1,s=0;
for( ; ; )
{
s=s+i ;
i++;
if(i>4) break ;
}
printf("%d\n",s);
}
5、编译预处理包括宏定义、文件包含、( )等。

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

1、以下程序的输出结果为________。
main()
{
char m ,n ;
m=getchar();
/*(输入d)*/n=m-34;
printf("%c",n);
}
2、以下程序的输出结果是 ________ 。
main()
{
int x=0;
sub(&x,8,1);
printf("%d\n",x);
}
sub(int *a,int n,int k)
{
if(k<=n) sub(a,n/2,2*k);
*a+=k;
}
3、输入一个3*3的实数矩阵,求主对角线元素中的最大值。
main()
{
float s[3][3],max1,max2,x;
int i,j;
for(i=0;i<3 ;i++) for(j=0;j<3;j++)
{
scanf("%f", &x);
s[i][j]=x;
}
max=s[0][0];
for(i=1;i<3;i++) if(max<________) max=________;
printf("max1=%f\n",max);
}
4、下列给定程序中,函数proc()的功能是计算正整数m 各位上数字的平方和。 例如,输入498,则输出应该是161。 请修改程序中的错误,使它能得到正确结果。 注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。 试题程序:
#include<stdlib.h>
#include<stdio.h>
#include<conio.h> long proc(10ng m)
{
long sum=1;
do
{
sum+=(m%10)*(m%10);
m/= 10;
}
while(m)
return(sum);
}
void main()
{
long n;
system("cls");
printf("please enter a number:");
scanf("%1d",&n);
printf("\n%ld\n",proc(n));
}

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

1、编写程序:计算字符串中子串出现的次数 。请输入两个字符串,以回车隔开,母先串在前,子串在后,比如:
abca
a
2
2、判断101-200之间有多少个素数,并输出所有素数。
3、题⽬描述
输⼊n(3≤n≤30)个学⽣的数据记录,对于每⼀个学⽣,其记录包含了学号、姓名、3门课程(程序设计基础、计算机导论、⾼等数学)的成绩共5项。
要求查找程序设计基础低于平均分的学⽣,并输出该⽣的所有信息
要求使⽤结构体数组实现,结构体中包括了每个学⽣的5项记录。
输⼊
共有5⾏,每⾏包含了⼀个学⽣的学号(整数)、姓名(长度不超过30的⽆空格字符串)和程序设计基础、计算机导论、⾼等数学等3门课程的成绩(0⾄100之间的整数),⽤空格隔开。
输出
输出程序设计基础低于平均分的学⽣的所有信息;每个输出占1⾏;如果没有找到的话,输出“No”
样例输⼊
3
20####0377 chensiyuan 99 91 90
20####0386 wangting 94 93 88
20####0436 chenhui 85 88 90
样例输出
20####0436 chenhui 85 88 90