福建工程学院历年C语言程序设计期末

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

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

C语言程序设计期末

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

(  B  )
1、若i、j已定义成int型,则下列程序段中内循环体的总执行次数是________。
for(i=6;i>0;i--) for(j=0;j<4;j++)
{
…
}
A、20
B、24
C、25
D、30
(  C  )
2、若有以下的说明和语句,则在执行for语句后,*(*(pt+1)+2)表示的数组元素是________。
int[3][3],*pt[3],k;
for(k=0;k<3;k++)
pt[k]-&t[k][0];
A、t[2]Eo]
B、t[2][2]
C、tell[2]
D、t[2][1]
(  C  )
3、以下叙述中不正确的是________。
A、空字符串(即两个双引号连写)只占一个存储单元
B、字符型常量可以放在字符型变量中
C、字符型常量可以放在字符串变量中
D、字符型常量可以与整数混合运算,而字符串常量不可以
(  D  )
4、以下选项中正确的语句组是________。
A、char s[ ];s=“BOOK!”;
B、char *s;s={“BOOK!”};
C、char s[10];s=“BOOK!”;
D、char *s;s=“BOOK!”;
(  C  )
5、以下叙述不正确的是: 。
A、在 C 程序中,语句之间必须要用分号 ";" 分隔
B、若 a 是实型变量, C 程序中 a=10 是正确的,因为实型变量中允许存放整型数
C、在 C 程序中,无论是整数还是实数都能正确无误地表示
D、在 C 程序中, % 是只能用于整数运算的运算符
(  A  )
6、表示一条指令的存储单元的符号地址称________。
A、标号
B、变量
C、偏移量
D、类型
(  A  )
7、C源程序中的命令 #include与#define是在______阶段被处理的。
A、预处理
B、编译
C、连接
D、执行
(  C  )
8、以下非法的赋值语句是________。
A、n=(i=2,++i)
B、j++;
C、++(i+1)
D、x=j>0;
(  B  )
9、下列各项中不属于算法基本特征的是________。
A、可行性
B、递归性
C、确定性
D、有穷性
(  A  )
10、if语句的基本形式是:if(表达式)语句,以下关于"表达式"值的叙述中正确的是______。
A、可以是任意合法的数值
B、必须是整数值
C、必须是正数
D、必须是逻辑值
(  B  )
11、有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变量b。则不能把结点b连接到结点a之后的语句是
struct node char data;
struct node*next;
a,b,*p=&a,*q=&b;
A、next=q;
B、next=&b;
C、p->next=&b;
D、(*p).next=q;
(  B  )
12、有以下程序
main()
{
int a[4][4]={{1,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,k,t;
for(i=0;i<3;i++)
for(k=i+1;k<4;k++)
if(a[i][i]<a[k][k])
{
t=a[i][i];
a[i][i]=a[k][k];
a[k][k]=t;
}
for(i=0;i<4;i++)
printf("%d,",a[0][i]);
}
程序运行后的输出结果是________。
A、6,2,1,1,
B、6,4,3,2,
C、1,1,2,6,
D、2,3,4,6,
(  A  )
13、若有以下程序
#include<stdio.h>
main() {
int a=6,b=0,c=0;
for(;a;) {
b+=a;
a-=++c;
}
printf("%d,%d,%d\n",a,b,c);
}
则程序的输出结果是______。
A、0,14,3
B、1,14,3
C、0,18,3
D、0,14,6
(  A  )
14、有以下程序
struct s
{
int n;
int a[20];
};
void f(int *a,int n)
{
int i;
for(i=0;i<n-1;i++)a[i]+=i;
}
main()
{
int i;
struct s s={10,{ 2,3,1,6,8,7,5,4,10,9}};
f(s.a,s.n);
for(i=0; i<s.n; i++)printf("%d,",s.a[i]);
}
程序运行后的输出结果是________。
A、2,4,3,9,12,12,11,11,18,9,
B、3,4,2,7,9,8,6,5,11,10,
C、2,3,1,6,8,7,5,4,10,9,
D、1,2,3,6,8,7,5,4,10,9,
(  B  )
15、有以下程序
main()
{
int i=10,j=1;
printf("%d,%d\n",i--,++j);
}
执行后输出的结果是________。
A、9,2
B、10,2
C、9,1
D、10,1
(  C  )
16、当输入数据:27 63 时,下面程序的运行结果是________。
A、a=30 b=63 gbs=189 gys=9
B、a=27 b=63 gbs=190 gys=10
C、a=27 b=63 gbs=189 gys=9
D、a=27 b=63 gbs=188 gys=10
(  D  )
17、有如下程序:
main()
{
int n[5] = {1,2,3},i,k = 2;
for(i = 0; i <= k; i++)n[i] = n[i] + 1;
printf("%d\n",n[i]);
}
该程序的输出结果是______。
A、不确定的值
B、4
C、3
D、0
(  B  )
18、int a[10]; 给数组a的所有元素分别赋值为1、2、3、……的语句是________。
A、for(i=1;i<11;i++)a[i]=i;
B、for(i=1;i<11;i++)a[i-1]=i;
C、for(i=1;i<11;i++)a[i+1]=i;
D、for(i=1;i<11;i++)a[0]=1;
(  A  )
19、下列四组选项中,均不是c语言关键字的选项是________。
A、define IF type
B、getc char printf
C、include scanf case
D、while go pow
(  C  )
20、以下函数的返回类型是______。 fff(float x)
{
return 5.86;
}
A、与参数x的类型相同
B、void 类型
C、int类型
D、无法确定

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

(   F  )
1、c程序函数体是由左右方括号[ ]括起来的部分。 
(   F  )
2、c语言对文件读、写之前不必先打开文件,在使用文件之后无需关闭该文件。 
(   T  )
3、for语句的一般形式如下,若表达式2的值为"假",则结束循环。 
(   T  )
4、在嵌套循环(多层循环)中, 每一层循环都应该使用自己的循环变量,以免互相干扰。 
(   T  )
5、以下定义了一个一维数组str,该数组可以存放81个字符型数据。char str[81]; 
(   F  )
6、用strcat(字符串1,字符串2)连接两个字符串函数时,字符串1的存储空间没有限制。 
(   F  )
7、在c语言中, a=a*3=2 是合法的c表达式 
(   T  )
8、c程序是从函数开始执行的。 
(   F  )
9、在标准c中,逻辑表达式中只允许出现逻辑型数据。 
(   T  )
10、C 语言标准格式输出函数 printf() 的参数表是由若干个表达式组成。 

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

1、在c语言中,正确的标识符是由 ________ 组成的,且由 ________ 开头的。
2、若a是int型变量,则计算下表达式a=25/3%3后,a的值为________。
3、有函数调用fun1(x+y, (y,z), 10, fun((x,y-1)));
函数fun1有【1】个参数。
4、设int a[10],*p=a;
则对a[2]的正确引用是p[2]和*(p【1】)。
5、程序的结果是:
#include<stdio.h>
void main()
{
int i,j,x=0;
for(i=0;i<2;i++)
{
x++;
for(j=0;j<=3;j++)
{
if(j%2) continue;
x++;
}
x++;
}
printf("x=%d",x);
}

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

1、执行下列程序段后,输出的a的值是_____________。
main( )
{
int a = 2;
switch(a)
{
case 0: a--;
break;
case 1: a++;
break;
case 2: a=a+5;
break
}
printf("%d",a);
}
2、以下程序的输出结果是________。
#inlcude <stdio.h>
main()
{
int c=67;
putchar(c+30);
}
3、下面程序的运行结果是________。
main()
{
int a[5][5],i,j,n=1;
for(i=0;i<5;i++)for(j=0;j<5;j++)a[i][j]=n++;
printf("the result is:\n");
for(i=0;i<5;i++)
{
for(j=0;j<=i;j++)printf("%4d",a[i][j]);
printf("\n");
}
}
4、请补充main()函数,该函数的功能是:把一个整数插入一个已经按从小到大排序的数组中。插入后,数组仍然有序。 例如,在数组bb[M]={10 20 30 40 50 60 70 80 85 95}
中插入75,结果为 bb[M]={10 20 30 40 50 60 70 75 80 85 95}
注意:部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在main()函数的横线上填入所编写的若干表达式或语句。 试题程序:
#define M 10
void main()
{
int i,j;
int n;
int bb[M+1]={10,20,30,40,50,60,70,80,85,95};
system("CLS");
printf("\nlnput n n");
scanf("%d",&n);
printf("\nn=%d",n);
printf("\n***original list***\n");
for(i=0;i<M;I++) printf("%4d",bb[i]);
for(i=0;i<M;I++)
{
if(n<=bb[i])
{
for(j==M; ________ ;j--) ________ ;
bb[j]=n;
________ ;
}
}
if(i==M) bb[i]=n: printf("\n****new list****\n");
for(i=0;i<M+1;I++) printf("%4d",bb[i]);
}

五、编程题 (共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、编写程序,将用户输入的字符串中删除所有的数字,然后输出剩余的字符。