2012秋C程序设计试卷+答案
试题共10页-第1页
华南农业大学期末考试试卷(A 卷)
2012学年第1学期 考试科目: 程序设计(C 语言) 考试类型:(闭卷)考试 考试时间: 120 分钟
学号 姓名 年级专业
考生注意:
1、答案必须分别写在“机读卡”和“答卷”上,写在试题上不得分。
2、必须在机读卡和答卷上正确填写班级、学号、姓名等内容,否则没有考试成绩。
3、在机读卡的学生代号区只填写学号后10位。
4、考试结束,只需交“机读卡”和“答卷”,试题不用交。
一、判断题(在机读卡上答题,本大题共20小题,每小题1分,共20分)
用2B 型铅笔涂答题卡!!!按题号顺序,正确的判断涂黑“A ”、错误的判断涂黑“B ” 1、C 语言称为中级语言是因为它允许直接访问物理地址,能进行位运算,能实现汇编语言
的大部分功能,可以直接对硬件进行操作。
2、一个C 程序总是从main 函数开始执行,并且从main 函数中结束程序。
3、一个算法具有有穷性、确定性、可行性、有零个或多个输入/输出。
4、在C 程序中使用符号常量,能够增强程序的可读性,方便程序的修改。
5、C 程序中使用变量不一定要遵循“先定义,再赋值,后使用”。
6、C 语言可以通过调用标准库函数实现输入输出功能,也可以使用它本身提供的专门的输
入输出语句。
7、能正确表达逻辑关系100≤≤x 的表达式是10||0<=>=x x 。
8、在if 语句中,if 后面的表达式可以是关系表达式与逻辑表达式,而不能是算术表达式。 9、在逻辑表达式的求解过程中,并非所有的逻辑运算符都被执行。 10、带有语句标号的语句的正确书写方法是“语句标号:语句”。 11、for 循环语句只能用于循环次数已经确定的情况。
12、goto 语句和break 语句都能实现使程序执行的流程从循环体内跳至循环体外。 13、while 循环语句至少无条件执行一次循环体。
14、数组必须先定义,然后再使用。
15、定义数组时,数组下标可以是整型常量表达式。
16、已有定义int x[5];,则该定义语句说明x是具有5个元素的一维数组,且数组元素是
x[1],x[2],x[3],x[4],x[5]。
17、一个函数中有且只能有一个return语句。
18、在一个函数中定义的静态局部变量不能被另一个函数引用。
19、宏名没有作用域,在整个文件范围内都有效。
20、在文件包含预处理语句中,被包含的文件应该是目标文件而不是源文件。
二、单项选择题(在机读卡上答题,本大题20小题,每小题2分,共40分)
用2B型铅笔涂答题卡!!!按题号顺序,将答题卡上与选项对应的字母涂黑
21、在一个C程序中()。
A)main函数出现在所有函数之前。C程序不一定都有main函数
B)main函数可以在任何地方出现。一个C程序必须有且仅有一个main函数
C)main函数必须出现在所有函数之后。一个C程序只能有一个main函数
D)main函数出现在固定位置。一个C程序可以有多个main函数
22、C语言中,下列叙述正确的是()。
A)没有逻辑类型,但有构造类型B)既有逻辑类型也有构造类型
C)有逻辑类型,但没有构造类型D)没有逻辑类型也没有构造类型
23、下列转义字符中,错误的是()
A)'\"' B)'\031' C)'\b' D)'\0xa5'
24、已知梯形的上底为a,下底为b,高为h,用C语言写的正确的面积公式是()。
A)1/2*(a+b)*h B)1.0/2*(a+b)*h C)1.0/2.0(a+b)h D)1.0\2*a+b*h
25、已有定义char s1,s2;,下面正确的语句是()
A)scanf("%s%c",s1,s2); B)scanf("%s%c",s1,&s2);
C)scanf("%d%c",&s1,&s2); D)scanf("%c%c",s1,s2);
26、运行下面的程序,正确的输出结果是()
main()
{ float x=68.7563,y=-789.125;
printf("%f,%10.2f\n",x,y);
试题共10页-第2页
试题共10页-第3页
}
A )68.756303, -789.12
B )68.756303, -789.13
C )68.7563, -789.13
D )68.7563,-789.12 27、下列表达式中,值为0的表达式是()
A )3!=0
B )3!=3>4
C )3>4==0
D )6>5>4
28、设a=3,b=2,c=6,d=5,m=7,n=8,则表达式(m=a
A )0和1
B )0和8
C )1和0
D )7和8 29、下列程序的运行结果是()
main()
{ int m=8,n=34,k;
while((k=m%n)!=0) m=n,n=k; printf("%d ",n);
}
A )语法错误
B )8
C )2
D )34 30、下面程序的运行结果是()
main() { int n=1,s=5;
do{ s=s*n;n++;}while(n<5); }
A )120
B )6
C )100
D )200 31、下面程序的运行结果是()
#include
for(j=i;j<7;j++) sum=sum+j; } }
A )48
B )49
C )1
D )7
32、定义如下变量和数组
int i;
int x[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++) printf("%d ",x[i][2-i]); 则语句的输出结果是()。
A)1 5 9 B)1 4 7 C)3 5 7 D)3 6 9
33、不能把字符串Hello!赋给数组a的语句是()
A)char a[10]={'H','e','l','l','o','!'}; B)char a[10]; a="Hello!";
C)char a[10]; strcpy(a,"Hello!"); D)char a[10]="Hello!";
34、若有int s[4]={1,2,3,4};,则s[s[0]+2*s[2]-s[3]]的值是()
A)1 B)2 C)3 D)4
35、C语言程序的三种基本结构是()
A)嵌套结构、递归结构、循环结构B)递归结构、循环机构、转移结构C)顺序结构、选择结构、循环结构D)循环结构、转移结构、顺序结构36、若函数的调用形式如下:
f((x1,x2,x3),(y1,y2))
则函数形参的个数是()。
A)2 B)3 C)4 D)5
37、执行下列程序后的输出结果是()。
int a=3,b=4;
void fun(int x1,int x2)
{
printf("%d,%d",x1+x2,b);
}
main()
{ int a=5,b=6;
fun(a,b);
}
A)3,4 B)11,1 C)11,4 D)11,6
38、以下函数值的类型是()
fun(float x)
试题共10页-第4页
试题共10页-第5页
{ float y; y=3*x-4; return(y); }
A )不确定
B )float
C )int
D )void
39、C 编译系统对文件包含命令#include"file.h"的处理通常是()。
A )编译处理之前
B )编译处理过程之中
C )程序连接时
D )程序执行的开始
40、设有以下宏定义,则执行语句x=2*(N+Y(5+1));后,x (设x 为整型)的值是()
#define N 3
#define Y(n) ((N+1)*n)
A )42
B )48
C )54
D )出错
三、阅读程序填空题(在答卷上答题,本大题共9小题,每空1分,共20分)
1、下面程序统计1至100范围的数能被3或5整除的个数,请填空完善。
#include
void main() { int i,n;
01) ;
for(i=1;i<=100; 02) ) if( 03) ) n++; printf("n=%d",n); }
2、某物品原有价值为p ,使用后其价值降低,价值的折扣率根据时间t (月数)确定如下:
?????
????≥<≤<≤<≤<折扣折扣折扣折扣无折扣10%
21t 8% 21t 125%
12t 62% 6t 3
3t 下面程序根据输入的时间和原有的价值计算物品的现有价值,请填空完善程序。
#include
void main() { int t,d; float p;
试题共10页-第6页
scanf("%d,%f",&t,&p); switch( 04) ){ case 0: d=0;break; case 1: d=2;break; case 2:
case 3:d=5;break; case 4: case 5:
case 6: d=8;break; 05) : d=10; }
printf("Price=%f\n", 06) ); }
3、该程序利用下面公式计算∏的近似值,取前n 项之和,请填空完善程序。
+-+-≈7
1513114/∏
#include
int i,n;
float t=1.0,pi=0;
scanf("%d", 07) ); for(i=1;i<=n;i++){
pi+= 08) ; t= -t; }
printf("pi=%f",pi*4); }
4、下面程序判断输入字符串是否为回文(正读和逆读都一样的字符串),请填空完善程序。
#include
void main() { char str[80]; int n,k,flag=1; gets(str);
for(n=0;str[n]!='\0';n++); for(k=0;k if( 10) ) printf("不是回文!\n"); else printf("是回文!\n"); } 试题共10页-第7页 5、下面程序的功能是输出若干个字符串中长度最短的字符串,注意输入时直接按回车输入 的是空字符串,请填空完善程序。 #include { char str1[80],min[80]; int k,len; printf("input string str1:\n"); gets(str1); strcpy(min,str1); len=strlen(min); gets(str1); while(str1[0]!='\0'){ k=strlen(str1); if( 11) ){ len=k; 12) ; } gets(str1); } printf("len=%d,min=%s\n",len,min); } 6、下面函数的功能实现对一维数组中元素数据由小到大顺序排序,请填空完善程序。 void sort(int a[],int n) { int i,j,t; for(i=0;i for(j=1;j< 13) ;j++) if( 14) ){ t=a[j-1]; a[j-1]=a[j]; a[j]=t; } } 7、下列函数str_cat()的功能是连接两个字符串,请填空完善程序。 void str_cat(char str1[],char str2[2],char str[]) { int i,j; for(i=0;str1[i]!='\0';i++) str[i]=str1[i]; for(j=0;str2[j]!='\0';j++) 15) ; 16) ; } 8、下面程序的功能是用递归方法计算n!,请填空完善程序。 #include double fac (int n) { double k; if(n<=0) exit(0); /*exit()返回操作系统*/ else if( n==1) k=1.0; else 17) ; return k; } void main() { int n; scanf("%d",&n); printf("FAC (%d)=%lf\n",n, 18) ); } 9、下面程序的功能是通过键盘输入10个整数,并把其中最大的数和最小的数显示出来。 #include 19) void search(int a[],int n) { int i; max=min=a[0]; for(i=1;i if(a[i]>max) max=a[i]; if(a[i] } } void main() { int array[10],i; for(i=0;i<10;i++) scanf("%d",&array[i]); search( 20) ) printf("max=%d,min=%d\n",max,min); } 试题共10页-第8页 试题共10页-第9页 四、编写程序题(在答卷上答题,本大题共3小题,第1,2小题各5分;第3小题10分,共20分) 1、编程计算分数序列 ,,,,8 5 533221前10项之和,并在屏幕上显示结果。 2、编程显示1900年至2000年份中的闰年,每行最多显示10个。 3、根据如下main 函数中函数声明格式要求,编写一个判断一个数是否为素数的函数,如 果是素数返回1,否则返回0。要求画出该函数的算法流程图。 #include int prime(int n); int n,m=0; for(n=100;n<=500;n++) if(prime(n)){ printf("%6d",n); m++; } printf("素数的个数:%d",m); } 试题共10页-第10页 答卷共2页-第1页 华南农业大学期末考试答卷(A 卷) 2012学年第1学期 考试科目: 程序设计(C 语言) 考试类型:(闭卷)考试 考试时间: 120 分钟 学号 姓名 年级专业 一、 判断题(在机读卡上答题,本大题共20小题,每小题1分,共20分) 用2B 型铅笔涂答题卡!!!按题号顺序,正确的判断涂黑“A ”、错误的判断涂黑“B ” 二、 单项选择题(在机读卡上答题,本大题共20小题,每小题2分,共40分) 用2B 型铅笔涂答题卡!!!按题号顺序,将答题卡上与选项对应的字母涂黑 三、 阅读程序填空题(本大题共9小题,每空1分,共20分) 四、编写程序题(本大题共3小题,第1、2小题各5分,第3小题10分,共20分)1、 2、 3、 答卷共2页-第2页 答卷共2页-第3页 华南农业大学期末考试(A 卷)参考答案 2012学年第1学期 考试科目: 程序设计(C 语言) 五、 判断题(机读,正确的判断涂黑“A ”、错误的判断涂黑“B ”每小题1分,共20分) AABAB BBBAA BABAB BBABB 六、 单项选择题(机读,每小题2分,共40分) BADBC BDBCA DCBDC ACCAB 七、 阅读程序填空题(每空1分,共20分) 八、 编写程序题(第1、2小题各5分,第3小题10分,共20分) 1、#include int i; float k,s=0,m=1,n=2; for(i=1;i<=n;i++){ s+=m/n; k=m+n; m=n; n=k; } printf("s=%f",s); } 2、 #include void main() { int y,n=0; for(y=1900;y<=2000;y++){ if(y%4==0&&y%100!=0||y%400==0){ printf("%6d",y); n++; if(n%10==0) printf("\n"); } } } 3、程序(5分) int prime(int n) { int i=1,k; k=sqrt(n); while(++i<=k) if(n%i==0) return 0; return 1; } 流程图(5分) 答卷共2页-第4页