
《C语言程序设计》期末考试试卷(A卷120分钟)
年级 院系专业 姓名 学号 座位号
| 题号 | 一 | 二 | 三 | 四 | 五 | 六 | 七 | 八 | 得分 |
| 得分 |
| 得分 |
下列各题A)、B)、C)、D)四个选项中只有一个是正确的,请将正确选项填在答题卡相应题目的横线上。答在试卷上不得分。
1.下面程序段执行后,a的值是______。
int a;
printf("%d \\n", (a=3*5, a*4, a+5) );
A)60 B)20 C)15 D)10
2.下列程序段的输出是______。
int x=023;
printf("%d \\n", --x );
A)19 B)18 C)23 D)22
3.执行下列语句后,a的值是______。
int a=8;
a+=a-=a*a;
A)-240 B) C)112 D)-112
4.执行下列语句后,输出的值是______。
int x=6;
printf("%d,%d,%d\\n",x,x++,--x);
A)5,5,5 B)6,5,5 C)7,6,5 D)5,6,5
5.指出下列程序段所表示的逻辑关系是______。
if(a {
if(c==d)
x=1;
}
else
x=2;
A)若a=b且c!=d,则x=2。
B)若a=b,则x=2。
C)若a D)若a6.下列程序段的执行结果是______。
int i,x;
for(i=1,x=1;i<=20;i++)
{
if(x>=10) break;
if(x%2==1)
{
x+=5;
continue;
}
x-=3;
}
printf("%d,%d\\n",x,i);
A)6,4 B)7,5 C)10,6 D)14,7
7.下列程序的执行结果是______。
#include "stdio.h"
#include "string.h"
main()
{
static char s[10]={'C','h','i','n','a'};
printf("%d\\n",strlen(s));
}
A)6 B)5 C)11 D)10
8.函数的数据类型是______决定的。
A)调用该函数时临时 B)调用函数的实参
C)return语句的表达式类型 D)函数的形参
9.执行下列程序段后,*(p+5)的值是______。
static char s[]="Hello";
char *p;
p=s;
A)'o' B)'\\0' C)'o'的地址 D)不确定的值
10.以下程序的输出结果是______。
#include "stdio.h"
main()
{
static int a[]={1,2,3,4,5,6},*p;
p=a; *(p+3)+=2;
printf("%d,%d\\n",*p,*(p+3));
}
A)0,5 B)1,5 C)0,6 D)1,6
11.在以下定义中,标识符P______。
int (*p)[3];
A)定义不合法。
B)是一个指针数组名,每个元素是一个指向整型变量的指针。
C)是一个指针,它指向一个具有三个元素的一维数组。
D)是一个指向整型变量的指针。
12.sizeof(int)是______。
A)一个整型表达式 B)一个不合法的表达式
C)一种函数调用 D)一条语句
13.有宏定义:#define MULT1(a,b) a*b
#define MULT2(a,b) (a)*(b)
在后面的程序中有宏引用:y=MULT1(3+2,5+8);
z=MULT2(3+2,5+8);
则y和z的值是______。
A)y=65,z=65 B)y=21,z=65 C)y=65,z=21 D)y=21,z=21
14.设有程序段:
union MYTYPE { long x; int y[4]; char z[6];}them;
main(){ printf(“%d\\n”,sizeof(them)); }
则程序的输出结果是______。
A)18 B)6 C)8 D)4
15.以读写方式打开一个已有的文本文件file1,下面fopen函数正确的调用方式
是______。
A)FILE *fp; B)FILE *fp;
fp=fopen("file1 fp=fopen("file1
C)FILE *fp; D)FILE *fp;
fp=fopen("file1 fp=fopen("file1
16. 设有如下定义:
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
17.若fun( int x) { printf(“%d\\n”,x);}, 则fun_______。
A)返回值为 void 类型 B)返回值无法确定
C)返回值为 int 类型 D)没有返回值
18.实参和和形参之间的数据传送是_______。
A)地址传送 B)实参传给形参,再由形参传给实参
C)值传送 D)由用户指定传送方式
19.以下程序的输出结果是______。
char *s=”ABCD”, *p;
for( p=s; *p ; p++)
printf("%s\\n", p);
A)ABCD B)A C)D D)ABCD
BCD B C ABC
CD C B AB
D D A A
20.下列程序段的输出是______。
int fun( int x)
{
static int a=3;
a+=x;
return a;
}
void main( void )
{
int k=2, m=1, n;
n=fun(k);
n=fun(m);
printf( “%d\\n”, n);
}
A)3 B)4 C)6 D)9
| 得分 |
请将正确答案填在答题卡相应题目的横线上。答在试卷上不得分。
1.C语言有 ⑴ 、 ⑵ 、 ⑶ 、 ⑷ 和 ⑸ 五种常量。
2.C程序的变量不仅要事先 ⑹ ,而且还必须 ⑺ 后才能使用。
3.C语言在给出逻辑运算结果时,以 ⑻ 代表“真”,以 ⑼ 代表“假”;在判断一个量是否为“真”时,以 ⑽ 代表“假”,以 ⑾ 代表“真”。
4.C语言规定只有 ⑿ 数组和 ⒀ 数组才能初始化;这种数组不赋初值,系统会对所有数组元素自动赋以 ⒁ 值。
5.对两个指针变量进行关系运算的条件是 ⒂ ,其结果表示 ⒃ 。
6.一个C文件是一个 ⒄ 或 ⒅ ,它把数据看成是 ⒆ ,对文件的存取是以 ⒇ 为单位。
| 得分 |
阅读下列程序,在横线上填入适当的内容使程序完整。请将正确答案填在答题卡相应题目的横线上。答在试卷上不得分。
1.下列程序是求Fibonacci数列:1,1,2,3,5,8……的前40个数,要求每行输出4个数。
main()
{
long int f1,f2;
int i;
f1=1 ; f2=1;
for(i=1;i<= ⑴ ;i++)
{
printf("%12ld %12ld ",f1,f2);
if( ⑵ ) printf("\\n");
f1= ⑶ ;
f2= ⑷ ;
}
}
2.下列程序是求一个3×4矩阵中值最小元素。
min_value( ⑸ )
{ int i,j,k,min;
⑹ =array[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if( ⑺ ) min= ⑻ ;
⑼ ;
}
main()
{ static int a[3][4]={ 1,2,3,4,5,6,7,8,9 };
printf("min value is %d\\n",min_value( ⑽ ));
}
3.下列程序的功能是:将字符串a复制到字符串b中。
void copy_string(char *from, ⑾ )
;
{
for(;*from; ⑿ )
⒀ ;
*to= ⒁ ;
}
main()
{ char *a="I am a boy!";
char *b="This is a test!";
⒂ ;
printf("a=%s\\a=%s\\n",a,b);
}
4.有一个班,3个学生,各学四门棵。下列程序的功能是:查找有一门以上课程不及格的学生,打印出他们的全部课程的成绩。
main()
{ ⒃ ;
static float score[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
search(score,3);
}
void search( float (*p)[4], int n)
;
{ int i,j,flag;
for(j=0;j for(i=0;i<4;i++) if( ⒄ ) flag=1; if( ⒅ ) { printf("No.%d is fail\\n",j+i); for(i=0; ⒆ ;i++) printf("%5.1f ", ⒇ ); printf("\\n"); } } } 参: 一. 单项选择题:(每题2分,共40分) CBDBB CBCBD CABBB BCCAC 二. 填空题:(每题2分,共20分) 1常数 2 字符 3 字符串 4、转义序列 5符号常量 6定义 7 赋值 8 1 9 0 10 非0 11 0 12 static 13 extern 14 0 15指向同一数组 16位置的前后 17字节流 18二进制流 19一连串的字符 20字符(字节) 三. 程序归纳题(每题2分,共40分) 1 20 2 i%5==0 3 f1+f2 4 f1+f2 5 int array[3][4] 6 min 7 min 11 char *to 12 from++,to++ 13 *to=*from 14 ‘\0’ 15 copy_string(a,b) 16 void search( float (*p)[4], int n) 17 p[j][i]<60 18 flag==1 19 i<4 20 p[j][i] 安徽大学20 -20 学年第 学期 《C语言程序设计》期末考试试卷(B卷120分钟) 年级 院系专业 姓名 学号 座位号 下列各题A)、B)、C)、D)四个选项中只有一个是正确的,请将正确选项填在答题卡相应题目的横线上。答在试卷上不得分。 1.执行程序: int a; printf("%d \\n", (a=3*5, a*4, a+5) );后,a的值是______。 A)60 B)20 C)15 D)10 2.程序段:int x=023; printf("%d \\n", --x );的输出是______。 A)19 B)18 C)23 D)22 3.程序段:static char s[10]={'C','h','i','n','a'}; printf("%d\\n",strlen(s));的输出是______。 A)6 B)5 C)11 D)10 4.若fun( int x) { printf(“%d\\n”,x);}, 则fun_______。 A)返回值为 void 类型 B)返回值类型无法确定 C)返回值为 int 类型 D)没有返回值 5. 有宏定义:#define MULT1(a,b) a*b #define MULT2(a,b) (a)*(b) 且引用宏:y=MULT1(3+2,5+8); z=MULT2(3+2,5+8); 则y和z的值是______。 A)y=65,z=65 B)y=21,z=65 C)y=65,z=21 D)y=21,z=21 6.程序段char s[]="Hello", *p; p=s;执行后,*(p+5)的值是______。 A)'o' B)'\\0' C)'o'的地址 D)不确定的值 7. 程序段:char *s=”ABCD”, *p; for( p=s; *p ; p++) printf("%s\\n", p);的输出是______。 A)ABCD B)A C)D D)ABCD BCD B C ABC CD C B AB D D A A 8. 若定义:int (*p)[3]; 则标识符p______。 A)定义不合法。 B)是一个指针数组名,每个元素是一个指向整型变量的指针。 C)是一个指针,它指向一个具有三个元素的一维数组。 D)是一个指向整型变量的指针。 9. 定义: struct sk {int a; float b;} data,*p; 且 p=&data; 则正确引用成员a的方式是 ______。 A) p.data.a B) (*p).a C) p->data.a D) (*p).data.a 10. 以二进制只读方式打开一个已有的文本文件file1,正确调用fopen函数的方式是______。 A)FILE *fp; B)FILE *fp; fp=fopen("file1 fp=fopen("file1 C)FILE *fp; D)FILE *fp; fp=fopen("file1 fp=fopen("file1 请将正确答案填在答题卡相应题目的横线上。答在试卷上不得分。 7.C程序一个函数的定义由__________和____________两部分组成。 8.C语言的整型变量可分为基本型、短整型、________和________。 9.C语言在判断一个量是否为“真”时,以____代表“假”,以____代表“真”。 10.C语言中的break语句只能用于______和______语句。 11.对________和________型数组不赋初值,系统会对所有元素自动赋以0值。 12.C语言中“文件包含”是通过____________命令完成的,而符号常量是通过____________命令定义的。 13.对于数组x[5][5],*(x+2)+3表示__________,*(x[3]+2)表示__________。 14.若定义:struct {int y, m, d;} today, *pdata; 则为today分配内存 ____ 字节,为pdata分配内存 ____ 字节。 15.C语言文件按数据的存放形式可分为________文件和_________文件。 16.C语言文件是一个________序列,这类文件称为_________文件。 阅读下列函数,总结其主要功能填在答题卡相应的横线上。答在试卷上不得分。 1. int fun1 (char *str){ char *ptr=str; while(*ptr++); return ptr-str-1; } 2. double fun2(double x, double y, double z){ return x>(y>z?y:z)?x:(y>z?y:z); } 3. void funs3( int num[], int size ){ int i=0, tmp; while( i { for(;*f!='\\0';f++,t++) *t=*f; *t='\\0'; } 5.void fun5(char *ps) { int a1=0, a2=0; while (*ps!= '\\0') { if (*ps>='a'&&*ps<='z') a1++; else if (*ps>='0'&&*ps<='9') a2++; p++; } printf("%d,%d \\n",a1, a2); } 阅读程序,将其运行结果填在答题卡相应题目的横线上。答在试卷上不得分。 1. #include "stdio.h" void main() { static int a[]={1,2,3,4,5,6},*p; p=a; *(p+3)+=2; printf("%d,%d\\n",*p,*(p+3)); } 2. #include "stdio.h" void main() { int x=1; { int x=2; { int x=3; printf("%2d",x); } printf("%2d",x); } printf("%2d",x); } 3. #include #include void sort( char **str, int n){ char *tmp; int i,j; for( i=0; i tmp=str[j], str[j]=str[j+1], str[j+1]=tmp; } void main() { char **ps,*str[3]={ "BOOK","COMPUTER","CHINA"}; int i; ps=str; sort(ps,3); for(i=0; i<3; i++) printf("%d %s ",i+1, str[i]); } 4. #include int leap_year(int year){ return year%4==0 && year%100!=0 || year%400==0; } void main(){ int month_day[]={31,28,31,30,31,30,31,31,30,31,30,31 }, days,i; struct date { int year; int month; int day; }mdate={2008,5,1}; if(leap_year(mdate.year)) month_day[1]++; for(i=1,days=mdate.day;i printf("%d-%d is the %dth day in %d mdate.month,mdate.day,days,mdate.year); } 5. #include void add( int *x, int *y, int n){ while(n--) *x++ += *y++; } void main(){ int i=5; static int s1[]={2, 1, 0, 3, 2}, s2[5]; add(s2, s1, 5); while(i--) printf("%2d", s2[i]); } 阅读下列程序,在指定位置上填入适当的内容使程序完整。请勿改动其它内容。请将正确答案填在答题卡上。答在试卷上不得分。 1.函数insert将一个指定的单精度数按递减规律插入数组num中,注:数组num中已有12个按照递减顺序排好序的单精度数。 void insert( float num[13], float new ) { int i=11; /***answer begin***/ …… /***answer end***/ } 2.编写函数mycmp实现库函数strcmp的功能:两个字符串的比较。 int mycmp(char *p1,char *p2) { /***answer begin***/ …… /***answer end***/ } 3.设有三个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。 #include struct person { char name[20]; int count; }leader[3]={“Li”,0,“Zhang”,0,”Wang“,0}; main() { int i,j; char leader_name[20]; for(i=1;i<=10;i++) {/***answer begin***/ …… /***answer end***/} for(i=0; i<3;i++) printf("%5s:%d\\n",leader[i].name,leader[i].count); } 4. 从键盘上输入一个字符串,将其中的小写字母转换成大写字母,然后输出到名为“test”的文本文件中保存。输入字符串以“!”结束。 #include void main() { int i; char str[80]; FILE *fp; if( (fp=fopen("test { printf("cannot open file\\n"); exit(0); } printf("Input a string(end with !):"); gets(str); /***answer begin***/ …… /***answer end***/ } 参: 一. 单项选择题:(每题2分,共20分) CBBCB BACBA 二. 填空题:(每题2分,共20分) 1函数说明 2函数体 3长整型 4无符号型 5 0 6 非0 7 switch 8 循环 9 extern 10 static 11 #include 12 #define 13 &x[2][3] 14 x[3][2] 15 6 16 2 17文本 18二进制 19字符(字节) 20流式 三. 程序归纳题(每题2分,共10分) 1求字符串长度 2 求3个double型数中的大数 3 翻转整型数组 4 复制字符串 5 统计指定字符串中小写字母、数字的个数 四. 程序分析题(每题2分,共10分) 1 1,6 2 3 2 1 3 1 BOOK 2 CHINA 3 COMPUTER 4 5-1 is the 122th day in 2008 5 2 3 0 1 2 注:标点符号错误不另扣分 五. 程序设计题(每题10分,共40分) 1.num[12]=new; 存储新值:2分 while( i>=0 && data[i]< data[i+1] ) 循环至插入点:2分 { 复合语句:1分 new=num[i+1]; 暂存新值:1分 num[i+1]=num[i]; 更新旧值:2分 num[i]=new; 更新新值:1分 i--; 循环计数:1分 } 2. while(*p1&&*p2&&*p1==*p2) 依次比较两个字符串直至其结束:6分 p1++,p2++; 更新位置指示:2分 return *p1-*p2; 返回差值:2分 3. scanf("%s",leader_name); 唱票:2分 for(j=0;j<3;j++) 循环寻找得票人:2分 if(strcmp(leader_name, leader[j].name)==0) 寻找得票人:4分 leader[j].count++; 更新得票人票数:2分 4. for(i=0; str[i]!='!'; i++) 依次比较各字符直至字符串结束:2分 if(str[i]>='a' && str[i]<='z') 判断是否是小写字母:2分 str[i]-=32; 转换为大写字母:2分 printf("Writting %s into file test",str); fputs(str,fp); 将字符串存储到文件中:2分 fclose(fp); 关闭文件:2分 、题号 一 二 三 四 五 六 七 八 得分 得分
一. 单项选择题:(每题2分,共20分)得分
二. 填空题:(每空1分,共20分)得分
三. 程序归纳题(每题2分,共10分)得分
四. 程序分析题(每题2分,共10分)得分
五. 程序设计题(每题10分,共40分)得分
