2011-2012第一学期《C语言程序设计》试卷A(2011年11月)

更新时间:2023-11-05 12:58:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、选择题(1-10每题1分,11-30每题1.5分,共40分) 1. 下列选项中,可以作为用户标识符的是(C)

A) void B) 8_8 C) _a_0 D) a*b

在程序中使用的变量名、函数名、标号等统称为标识符。除库函数的函数名由系统定义外,其余都由用户自定义。C 规定,标识符只能是字母(A~Z,a~z)、数字(0~9)、下划线()组成的字符串,并且其第一个字符必须是字母或下划线。

2. 若有定义:float a=22;int i=0,k=18; 则不符合C语言规定的赋值语句是(C)

A)k=i++; B)i =(i*k)>=(i-k); C)i=a; D)k=!a;

3. 若执行了语句:float x=1008; int a=15; 则表达式(int)(x+y)%7/17的值为(C)

A) 23 B) 1 C) 0 D) 无法确定

4. 若有定义语句:int a=1;double b=3.14;,则表达式?X?+a+b的结果的类型是(C)

A)char B)int C)double D)float

5. 如有定义语句:int x=12,y=8,z;,在其后执行语句z=0.9+x/y,则z的值为(B)

A)1.9 B)1 C)2 D)2.4

因为x/y中的/在x、y都是整型时是取整除,就是说取商的整数部分,显然12/8得1余4,所以得数为1;而z被声明的是整型,它只接收整数而不理会小数部分,故尽管0.9+x/y=0.9+1=1.9,但把1.9赋给z后,z只接受了1这个整数部分。

6. 以下是if语句的一种形式:

if(表达式) 语句

其中关于“表达式”的说明正确的是:(D)

A) 必须是逻辑表达式 B) 必须是关系表达式

C) 必须是逻辑表达式或关系表达式 D) 可以是任意合法的表达式 7. 若有定义:int a,b;,通过语句scanf(“%d;%d”,&a,&b);,能把整数3赋给 变量a,5赋给变量b的输入数据是(C)

A)3 5 B)3,5 C)3;5 D)35 “%d;%d” 8. 若有定义语句:int k1=10,k2=20;,执行表达式(B) (k1=k1>k2)&&(k2=k2>k1)后,k1和k2的值分别为

A)0和1 B)0和20 C)10和1 D)10和20

1

k1>k2不成立,k1=0;与运算前面部分为假,程序直接执行下一语句,因此k2=k2>k1没有被运行,k2依然等于20,所以输出k1=0,k2=20.

追问也就是说,在逻辑和运算符中,当第一个(左边)的值为0时,第二个(右边)的运算就不再执行?可以这样理解吗?回答是的。同理逻辑或运算第一个为真是就不执行后面的表达式,直接到下一语句

9. 下列语句中正确的是:(A)

A) char str[10]; str = “Hello”; B) char *str; str = “Hello”; C) char str[10]; str = {“Hello”}; D) char *str; str = {“Hello”};

10. 设有定义 int a[10], *p=a; 以下能够代表数组元素a[4]的是:(B)

A) a+4 B) *(p+4) C) *a+4 D) *p + 4

11. 有以下程序

#include int main() {

int a=1,b=0;

if(--a)表示当a自减1后为零,即为假,则不继续执行 b++;

else if(a==0) b+=2; else b+=3;

printf(“%d\\n”,b); return 0; }

程序运行后的输出结果是 (C) A)0 B)1 C)2 D)3

12. 下列条件语句中输出结果与其他语句不同的是A

A)if(a) printf(“%d\\n”,x); else printf(“%d\\n”,y); B)if(a==0) printf(“%d\\n”,y); else printf(“%d\\n”,x); C)if(a!=0) printf(“%d\\n”,x); else printf(“%d\\n”,y); D)if(a==0) printf(“%d\\n”,x); else printf(“%d\\n”,y);

13. 有以下程序:

#include void main() { int a=7;

2

while(a--);

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

程序运行后的输出结果是 (A) A) -1 B)0 C)1 D)7

a--是先判断a的值是否等于0然后将a的值减去1如while(1--)这个循环次数为1次,而while(--a)与之不同如while(--2)的循环次数为1次

14. 以下不能输出字符A的语句是 B (注:字符A的ASCII码值为

65,字符a的ASCII码值为97) A)printf(“%c\\n”,?a?-32); B)printf(“%d\\n”,?A?); C)printf(“%c\\n”,65); D)printf(“%c\\n”,?B?-1);

15. 有以下程序(注:字符a的ASCII码值为97)

#include void main()

{ char *s={“abc”}; do

{printf(“%d”,*s);++s;} while(*s); }

程序运行后的输出结果是 A)abc B)789 C)7890 D)979898

16. 若有定义语句:double a,*p=&a;以下叙述中错误的是

A)定义语句中的*号是一个地址运算符 B)定义语句中的*号是一个说明符

C)定义语句中的p只能存放double类型变量的地址

D)定义语句中,*p=&a把变量a的地址作为初值赋给指针变量p

17. 有以下程序:

#include double f(double x); void main()

{ double a=0; int i;

for(i=0; i<30; i+=10) a+=f((double)i); printf(“%5.0f\\n”,a); }

double f(double x) {return x*x+1;}

程序运行后的输出结果是 A)503 B)401 C)500 D)1404

3

18. 若定义语句:int year=2009,*p=&year;,以下不能使变量year中的值增至

2010的语句是

A)*p+=1; B)(*p)++; C)++(*p); D)*p++;

19. 以下定义数组的语句中错误的是

A)int num[]={1,2,3,4,5,6};

B)int num[][3]={{1,2},3,4,5,6};

C)int num[2][4]={{1,2},{3,4},{5,6}}; D)int num[][4]={1,2,3,4,5,6};

20. 有以下程序

#include void fun(int *p)

{printf(“%d\\n”,p[5]);} main()

{int a[10]={1,2,3,4,5,6,7,8,9,10}; fun(&a[3]); }

程序运行后的输出结果是 A)5 B)6 C)8 D)9

21. 有以下函数

int fun(char *x,char *y) {int n=0;

while((*x==*y)&&*x!=?\\0?){x++;y++;n++;} return n; }

函数的功能是

A)查找x和y所指字符串中是否有?\\0? B)统计x和y所指字符串中最前面连续相同的字符个数 C)将y所指字符串赋给x所指存储空间 D)统计x和y所指字符串中相同的字符个数

22. 数学上的式子 1

A) 11 && x<=10 D) 以上都不对

23. 若有定义语句:char *s1=”OK”;*s2=”ok”;,以下选项中,能够输出“OK”

的语句是

A)if(strcmp(s1,s2)==0) puts(s1); B)if(strcmp(s1,s2)!=0) puts(s2); C)if(strcmp(s1,s2)==1) puts(s1);

4

D)if(strcmp(s1,s2)!=0) puts(s1);

24. 以下程序的主函数中调用了在其前面定义的fun函数

#include

void main() {double a[15],k; k=fun(a); }

则以下选项中错误的fun函数首部是 A)double fun(double a[15]) B)double fun(double *a) C)double fun(double a[]) D)double fun(double a)

25. 有以下程序: #include int f(int m)

{ static int n=0; n+=m; return n; }

void main() { int n=0;

printf(“%d,”,f(++n)); printf(“%d\\n”,f(n++)); }

程序运行后的输出结果是 A)1,2 B)1,1 C) 2,3 D) 3,3

26. 若有定义语句:int a=3,b=2,c=1;,以下选项中错误的赋值表达式是 A)a=(b=4)=3; B)a=b=c+1; C)a=(b=4)+c; D)a=1+(b=c=4);

27. 有以下程序 #include void main() { int s;

scanf(\ while(s>0) { switch(s)

{ case1:printf(\

5

case2:printf(\ case3:printf(\

default:printf(\ }

scanf(\ } }

运行时,若输入1 2 3 4 5 0<回车>,则输出结果是 A)6566456 B)66656 C)66666 D)6666656

28. 有以下程序

#include

#define S(x) 4*(x)*x+1 void main() { int k=5,j=2;

printf(\}

程序运行后的输出结果是

A)197 B)143 C)33 D)28

29. 有如下程序,其中k的初始值为八进制数

#include void main() { int k=011;

k++;

printf(“%d\\n”, k); }

则程序运行后的输出结果是:

A) 12 B) 11 C) 10 D) 9

30. 设有定义:struct {char mark[12];int num1;double num2;} t1,t2;,若变量

均已正确赋初值,则以下语句中错误的是

A)t1=t2; B)t2.num1=t1.num1; C)t2.mark=t1.mark; D)t2.num2=t1.num2;

二、填空题(【1】-【10】每空1分,【11】-【20】每空2分,共30分)

1、以下程序实现两个字符串的连接。不用strcat函数,填空请将程序补充完整 void str_cat(char S1[80],S2[40]) {

int i=0,j=0;

while ( 【1】)

6

i++;

while (S2[j]!=?\\0?)

【2】

【3】

printf(“\\n连接后的字符串为: %s”, S1); }

2、以下程序计算1!+2!+?+10!的值,请填空:

void main() {

int f=1,i,j,sum=0; for(j=1;j<=10;j++) {

for(i=1;【4】; i++) 【5】 【6】

f=1;

}

printf(\…+10!=%d\}

3、请将以下程序补充完整,实现求二维数组中最大元素值及其行列号。

void main()

{ int a[5][5], i, j; for (i=0; i<5; i++) { for ( j=0; j<5; j++) { scanf(“%d”, &a[i][j]); } }

int sum = a[0][0], row,col; for (i=0; i<5; i++)

{ for ( j=0; j<5; j++) { if (【7】) { 【8】 【9】

【10】

}

7

} } printf(“a[%d][%d]=%d”, row, col, sum ); }

4、以下程序是从键盘输入字符统计小写字母个数,读入字符‘#’时停止统计,请填空:

void main() {

int n=0,c;

while( (c=getchar())!=【11】 ) {

if(【12】) n++; }

printf(\}

5、以下程序是找年龄最大的人,输出其姓名和年龄。请将以下程序补充完整:

#define N 4 struct man

{char name[20]; int age;

} person[N]={“li”,18,”wang”,19,”zhang”,22,”sun”,20}; void main() {

struct man *q,*p; int i, m=0;

p = person;q=person; for (i=0; i

if (m< _【13】) { q=p++;

【14】 }

print(“【15】,%d”, q->name, q->age); }

6、以下程序实现数组的逆序输出,请填空:

#define N 5

8

void main()

{ int a[N]={9,6,8,4,1},i, temp; printf(“\\n original array: \\n”); for (i=0;i

for (i=0; 【17】; i++ ) { temp = a[i];

【18】 a[N-i-1]=temp; }

printf(“sorted array:\\n”); for (i=0; i

7 从键盘读取一个字符串,统计出现某特定字符个数. 请完善该程序:

void main()

{ int i=0,num=0; char str[20],ch; ch=getchar(); 【19】

while (str[i]!=?\\0? ) {

if(【20】) num++; i++; }

printf(“the %c num is %d\\n”,ch,num); }

三、读程序,写出运行结果(每小题3分,共15分) 1.

void func1(int i); void func2(int i);

char st[]=\void func1(int i) {

printf(\ if(i<3)

{i+=2;func2(i);}

9

}

void func2(int i) {

printf(\

if(i<3){i+=2;func1(i);} }

void main()

{ int i=0; func1(i); printf(\ 2.

void main() { int i=0,s=0; do{ if(i%2){i++;continue;} i++; s+=i; }while(i<7); printf(\} 3.

void f(int x,int y) { int t; if(x

void main() { int a=4,b=3,c=5; f(a,b); f(a,c); f(b,c); printf(\} 4.

void fun(int *a,int i,int j) { int t; if(i

10

本文来源:https://www.bwwdw.com/article/3f82.html

Top