文档库 最新最全的文档下载
当前位置:文档库 › 2009和2010年的C语言A

2009和2010年的C语言A

2009和2010年的C语言A
2009和2010年的C语言A

华南农业大学期末考试试卷(A卷)

2008学年第2 学期考试科目:程序设计

考试类型:(闭卷)考试考试时间:120 分钟

学号姓名年级专业

注意:1.本次考试由三部分组成:试卷、机读卡、答卷纸

2.本试卷第一、二题答案用2B铅笔填涂在机读卡,书写在本试卷无效。

3.第三、四题答案书写在答卷纸上。

4. 只收机读卡、答卷纸

一、是非判断题(每小题1分,10小题,共10分,在机读卡中正确填涂A,错误填涂B)

1. C语言允许直接访问物理地址,可以直接对硬件进行操作。

2. 在main函数中说明的变量,有效范围是main函数及其调用的函数。

3. void play(int a, b); 是一个合法的函数说明。

4. 结构体的成员类型不能为结构体类型。

5. 函数的实参和形参可以是相同的名字。

6. do-while循环语句的特点是先执行循环体,然后判断循环条件是否成立。

7. C程序执行的入口是main函数,所以main函数必须放在程序的开头。

8. 注释内容太多会影响程序的执行效率。

9. C语言规定,标识符中的字母一般区分大、小写。

10. 若定义的函数没有参数,则函数名后的圆括号可以省略。

二、选择题(每小题2分,30小题,共60分)

1. 下面标识符中,不合法的用户标识符为()

A.Char B.a_10 C._12ab D.void

2. 下列C常量中不合法的是()

A.'8' B.'800' C."8" D."800"

3.字符串常量"super\\n\\"中字符个数为()

A.8 B.9 C.11 D.13

4. 下面对C语言运算符的优先级叙述正确的是()。

A.算术运算符> 关系运算符> !(非)> &&(与)> ||(或)> 赋值运算符

B.算术运算符>!(非)>关系运算符> &&(与)> ||(或)> 赋值运算符

C.!(非)> 关系运算符>算术运算符> &&(与)> ||(或)> 赋值运算符

D.!(非)> 算术运算符> 关系运算符> &&(与)> ||(或)> 赋值运算符

5. 设int a=15, b=9; 经过赋值语句a=a/(a-b); 后a的值()

A.3 B.–8 C.2 D.2.5

6. 设变量x为float型且已赋值,则以下语句中能将x中的数值保留到小数点后两位,并将第三位四舍五入的是()

A.x=x*100+0.5/100.0; B.x=(x*100+0.5)/100.0;

C.x=(int)(x*100+0.5)/100.0; D.x=(x/100+0.5)*100.0;

7. 若num、a、b和c都是int型变量,则执行表达式num=(a=6,b=12,c=24); 后num的值为()

A.12 B.24 C.48 D.52

8. 能表示条件0≤x ≤10的表达式是()

A.0<= x <=10 B.x >=0, x<=10

C.0≤x ≤10 D.x>=0&& x<=10

9. 在以下给出的表达式中,与while(E)中的(E)不等价的表达式是()。

A.(!E==0) B.(E>0||E<0) C.(E==0) D.(E!=0)

10. 设x、y均为整型变量,且x=10,y=3,则以下语句的输出结果是printf(“%d,%d\n”,x--,--y);()

A.10,3 B.9,3 C.9,2 D.10,2

11. 调用scanf(“%d,%d”,&a,&b);时,正确的键盘输入是()

A.10,20 B.a=10,b=20

C.10:20 D.10 20

12. 在switch语句中,执行完一个case分支后要使流程跳出switch结构,应使用()语句。

A.continue B.break

C.else D.return

13. 执行语句for(i=1; i++<4; ); 后,变量i的值是()

A.3 B.4 C.5 D.不定

14. 设有如下程序段

int k=10;

while(k>0)k=k+1;

则下面描述中正确的是()

A.循环体语句执行多次B.循环是无限循环

C.循环体一次也不执行 D.循环体语句执行10次

15. 若变量已正确定义,要求程序段完成求5!的计算,不.能.完成此操作的程序段是()

A.for(i=1,p=1;i<=5;i++) p*=i;

B.for(i=1;i<=5;i++) { p=1; p*=i;}

C.i=1;p=1;while(i<=5) {p*=i; i++;}

D.i=1;p=1;do{p*=i; i++; } while(i<=5);

16. 若有int s[4] = {1,2,3,4};,则s[s[0]+2*s[2]-s[3]] 的值是()

A.1 B.2 C.3 D.4

17. 数组名作为参数传递给函数,作为该参数的数组名被处理为()

A.该数组的长度B.该数组的元素个数

C.该数组中元素的值D.该数组的首地址

18.若要求从键盘读入含有空格字符的字符串,应使用函数()。

A. getc()

B. gets()

C. getchar()

D. scanf()

19. C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是()

A. void

B. int

C. float

D. double

20. 有以下程序:

main()

{ int x=2,y=2;

if (x-y)

printf(“###”);

else

printf(“***”);

}

程序执行后的输出结果是()。

A.### B.***

21.有以下程序:

main()

{ int a=0,b=0,c=0,d=0;

if (a=1) b=1;c=2;

else d=3;

printf(“%d,%d,%d,%d\n”,a,b,c,d);

}

程序执行后的输出结果是()。

A.0,1,2,0 B.0,0,0,3 C.1,1,2,0 D .编译有错22. 有以下程序:

main()

{ int i,j.k,sum;

for (i=2;i<7;i++)

{ sum=1;

for(j=i;j<7;j++)

sum=sum+j;

}

printf(“%d”,sum);

}

程序执行后的输出结果是()。

A.48 B.49 C.1 D.7

23. 有以下程序:

main()

{ int y=10;

while(y--) ; printf(“y=%d\n”,y);

}

程序执行后的输出结果是()。

A.y=0 B.y=-1 C.y=1 D .while构成无限循环24. 有以下程序:

main()

{ int i, t[ ][3]={9,8,7,6,5,4,3,2,1};

for (i=0;i<3;i++) printf(“%d”,t[2-i][i]);

}

程序执行后的输出结果是()。

A.753 B.357 C.369 D .751

25. 不能把字符串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!”;

26.有以下程序:

swap(int x, int y)

{ int t;

t=x;x=y;y=t;

}

main()

{ int a=3,b=4;

swap(a,b);

printf (“%d,%d”,a,b);

}

程序执行后的输出结果是()。

A.4,3 B.3,4

27.有以下程序:

int fun1(double a) {return a*=a;}

int fun2(double x,double y)

{

double a=0,b=0;

a=fun1(x); b=fun1(y);

return(int)(a+b);

}

main()

{ double w;

w=fun2(1.1,2.0);

printf (“%f”,w);

}

程序执行后变量w中的值是()。

A.5.21 B.5 C.5.0 D.0.0 28.有以下程序:

int fun ( int x[ ],int n)

{ static int sum=0,i;

for (i=0;i

sum=sum+x[i];

return sum;

}

main()

{ int a[]={1,2,3,4,5},b[]={6,7,8,9},s=0;

s=fun(a,5)+fun(b,4);

printf (“%d\n”,s);

}

程序执行后的输出结果是()。

A.45 B.50 C.60 D.55 29. 有以下程序:

fun ( char p[ ][10])

{ int n=0, i;

for (i=0;i<7;i++)

if (p[i][0]==?T?) n++;

return n;

}

main()

{ char str[7][10]={“Mon”, “Tue”, “Wed”, “Thu”, “Fri”, “Sat”, “Sun”};

printf (“%d\n”,fun(str));

}

程序执行后的输出结果是()。

A.1 B.2 C.3 D.0

30. 有以下程序:

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

三、程序填空题(每空2分,10小题,共20分,注意将答案写在答题纸上)

1. 输入一行字符(以回车符结束),统计字母个数并输出统计结果,请填空。

#include "stdio.h"

main()

{ int zm=0;

char ch;

printf("\nInput a string:");

while(①)

{

if(②)

zm++;

}

printf("zm=%d\n",zm);

}

2.打印9×9乘法表。输出格式要求为:

1*1=1

2*1=1 2*2=4

3*1=3 3*2=6 3*3=9

………………………………………

main()

{ int m,n;

for(m=1;m<=9;m++)

{

for(n=1; ③;n++)

printf(“%d*%d=%d ”,m,n,m*n);

④;

}

}

3.下面程序读入10个学生的成绩,统计及格学生的个数并计算平均分。请填空:main()

{ int i, count=0;

float a[10],sum=0,ave;

for(i=0;i<10;i++)

scanf(“%f”,&a[i]);

for(i=0;i<10;i++)

{

if ⑤count=count+1;

⑥;

}

ave=sum/10;

printf(“count=%d,ave=%f”,count,ave);

}

4. 由键盘输入10个整数,将其首尾对调并输出。

#include "stdio.h"

main()

{

int a[10],i,j,t;

for (i=0;i<10;i++) /*键盘输入并存储*/

scanf("%d", &a[i]);

for ( ⑦) /*首尾对调*/

{ ⑧}

for (i=0;i<10;i++) /*输出*/

printf("%d", a[i]);

}

5.下面程序,实现输出200到500之间的所有素数。

#include "stdio.h"

#include "math.h"

int su(int n)

{ int flag = 1,i;

for (i=2;⑨;i++)

{ if ( ⑩)

{ flag=0;

break;

}

}

return flag;

}

main()

{ int t;

for (t=200;t<=500;t++)

if (su(t))

printf("%d\n",t);

}

四、编程题(10分)

编写从整型数组中查找给定数值的函数search(int a[10],int x),若找到则输出该数值在数组中的位置(从1开始),若未找到则输出0。要求:(1)该整型数组在主函数中由键盘输入,(2)查找结果在主函数中输出。

华南农业大学期末考试试卷参考答案(A卷)

一、是非判断题(每小题1分,10小题,共10分,在机读卡中正确填涂A,正确

填涂B)

二、选择题(每小题2分,30小题,共60分,在机读卡上填涂答案)

三、程序填空题(每空2分,10小题,共20分)

四、编程题(10分)

#include "stdio.h"

int search(int a[10],int x)

{ int i;

for (i=0;i<10;;i++)

if (a[i]==x)

return i+1;

return 0;

}

main()

{ int a[10],i,x,pos;

for (i=0;i<10;i++) scanf(“%d”,&a[i]);

scanf(“%d”,&x);

if (pos=search(a,x)) printf("%d\n",pos);

else printf(“No found!\n”)

}

华南农业大学期末考试试卷(A 卷)

2010学年第1学期 考试科目: 程序设计(C 语言) 考试类型:(闭卷)考试 考试时间: 120 分钟 学号 姓名 年级专业

一、判断题(在机读卡上答题,每小题1分,共20分)

用2B 型铅笔涂答题卡!!!按题号顺序,正确的判断涂黑“A ”、错误的判断涂黑“B ” 1、能正确表达逻辑关系“0

2、在switch 语句中,switch 与case 后的表达式可以为任意类型。

3、在逻辑表达式的求解过程中,并非所有的逻辑运算符都被执行。

4、do-while 循环语句中,根据情况可以省略关键字while 。

5、while 循环语句至少无条件执行一次循环体。

6、for 循环语句先判断循环条件是否成立,然后再决定是否执行循环体。

7、goto 语句和break 语句都能实现使程序执行的流程从循环体内跳至循环体外。

8、C 语言中,对数组定义大小时,若想在程序运行时改变大小,可用下面的语句段定义: int m;

scanf("%d",&m); int x[m];

9、定义数组时,数组下标可以是整型常量或正整型常量表达式。 10、一个函数中有且只能有一个return 语句。

11、在一个函数中定义的静态局部变量不能被另一个函数引用。

12、用数组名作为函数调用时的实参,实际上传递给形参的是数组全部元素的值。 13、在C 语言中,主函数可以调用任意一个函数,但是不能使用其它函数中定义的变量 14、C 语言规定,程序中各函数之间既允许嵌套定义,也允许嵌套调用。

15、宏定义不是C 语句,不必在行末加分号,若加了分号,则编译时会出现语法错误。 16、进行宏定义时,可以引用已经定义的宏名进行层层置换。 17、C 语言的所有预编译语句均以#开头。

18、通过函数调用只能得到一个返回值,利用宏替换也只能得到一个结果。 19、被包含文件修改后,凡包含此文件的所有文件都要重新编译。

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 )'\0xa5'

B )'\031'

C )'\b'

D )'\"'

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); }

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、设int a=3;,则表达式a<1&&--a>1的运算结果和a 的值分别是()

A )0和2

B )0和3

C )1和2

D )1和3 29、下列程序的运行结果是()

main()

{ int i=0;

while(i-->0);

printf("%d ",i);

}

A)10 B)0 C)10987654321 D)-1 30、下面程序的运行结果是()

main()

{ int x=3;

do{ printf("%3d",x-=2; }while(!(--x));

}

A)死循环B)1 -2 C)10 D)1

31、下面程序的运行结果是()

main()

{ int i=0,sum=0;

while(i++<6) sum+=i;

printf("%d",sum);

}

A)15 B)16 C)21 D)不确定

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)

{ 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 )出错

三、阅读程序填空题(在答卷上答题,每空1分,共20分)

1、下列程序的主要功能是输入实数x ,按照如下公式计算并输出y 的值,请填空完善程序。

??

?

??>=-<<=-<=)(15x 113x 15)x (0 16x 0)

(x x y

main()

{ float x,y; printf("x="); scanf("%f",&x);

if( 01) ) y=x;

else if( 02) ) y=6*x-1; else y= 03) ; printf("y=%f",y); }

2、某物品原有价值为p ,使用后其价值降低,价值的折扣率根据时间t (月数)确定如下:

?????

????≥<≤<≤<≤<折扣

折扣折扣折扣无折扣

10% 21t 8% 21t 125% 12t 62% 6t 3 3t 下面程序根据输入的时间和原有的价值计算物品的现有价值,请填空完善程序。

main() { int t,d; float p;

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、根据以下给定公式计算e 的值(取前n 项),请填空完善程序。

++++++

=!

!!!n 1

3121111e main()

{ double sum=1.0,x=1.0,y=1.0; int n;

scanf("%d", 07) ); while(n){ y=y*x;

sum+= 08) ; x++; n--; }

printf("sum=%f",sum); }

4、下面程序完成输入一个整数并判断是否为素数,请填空完善程序。

#include"math.h" main() { int n,k,i=1; scanf("%d",&n); k=sqrt(n); for(i=2;i<=k;i++)

if( 09) ) break;

if( 10) ) printf("%d is a prime\n",n);

}

5、下面程序的功能是对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一

个不同字符的ASCII码之差,请填空完善程序。

#include

main()

{ char str1[81],str2[81];

int i;

gets(str1);

gets(str2);

i=0;

while(str1[i]==str2[i]&& 11) ) i++;

printf("%d\n", 12) );

}

6、下面程序的功能是求数组s中的最大元素及它的下标,请填空完善程序。

main()

{ int s[4][4],max,i,j,row,col;

for(i=0;i<4;i++)

for(j=0;j<4;j++) scanf("%d",&s[i][j]);

13) =s[0][0];

for(i=0;i<4;i++)

for(j=0;j<4;j++)

if(s[i][j]>max){

14) ;row=i;col=j;

}

printf("s[%d][%d]=%d\n",row,col,max);

}

7、函数del(s,i,n)的功能是从字符串s中删除从i个字符开始的n个字符。main函数调用del

函数,从字符串"mangement"中删除从第3个字符开始的4个字符,然后输出删除子串

后的字符串。请填空完善程序。

void del(char s[], int i, int n)

{

int j,k,length=0;

while(s[length]!='\0') 15) ;

--i;

j=i;

k=i+n;

while(k

s[j]='\0';

}

main()

{ char str[]="mangement";

del( 17) );

printf("The new string is %s",str);

}

8、下面程序是用递归法将一个整数n转换成字符串,譬如:123,应输出“123”,n的为

数不固定,可以为任意位数的整数,请填空完善程序。

void tranvers(int n)

{ if(n/10!=0) tranvers( 18) );

printf("%c", 19) );

}

main()

{ int n;

scanf("%d",&n);

printf("The string is:");

if(n<0){

printf("-");

n=-n;

}

20) ;

四、编写程序题(在答卷上答题,第1,2小题各5分;第3小题10分,共20分)

1、编程计算1+3+5+...+99的结果并显示,要求画出算法的流程图。 (程序正确3分,流程图正确2分)。

2、编程显示1900年至2500年中是闰年的年份,每行显示10个年份。

3、根据如下main 函数要求,编写两个函数:

(1)按指定模式(升序/降序)冒泡排序函数px()。(7分)

(2)输出排序后结果的函数output()。(3分)

#include #define TRUE 1 void main()

{

int a[10]={1,9,2,6,5,10,3,7,20,4},md=0; void px(int x[],int n,int mode) ; void output(int y[],int n); do{

printf("(1.升序 2.降序 0.结束程序)请选择:"); scanf("%d",&md) ; if(md==0) break; else if(md==1){ px(a,10,1) ; output(a,10) ; }else if(md==2){ px(a,10,2) output(a,10);

}else printf("选择不在0-2的范围"); }while(TRUE); }

华南农业大学期末考试(A卷)参考答案

2010学年第1学期考试科目:程序设计(C语言)

一、判断题(机读,正确的判断涂黑“A”、错误的判断涂黑“B”每小题1分,共20分)

BBABB AABBB ABABA AABAB

二、单项选择题(机读,每小题2分,共40分)

BBABC BDBDB CCBDC ACCAB

三、阅读程序填空题(每空1分,共20分)

小题各5分,第3小题10分,共20分)

四、编写程序题(第1、2

{ int y,n=1;

for(y=1900;y<=2500;y++)

if(y%4==0&&y%100!=0||y%400==0){

printf("%d ",y); n++;

if(n%10==0) printf("\n");

}

}

3、void px(int x[],int n,int mode) //冒泡排序(7分)

{ int i,j,t;

for(i=0;i

for(j=1;j

if(mode==1)

{if(x[j-1]>x[j]){t=x[j-1];x[j-1]=x[j];x[j]=t;}}

else

if(x[j-1]

for(i=0;i

printf("%d ",y[i]);

}

相关文档