二 一年上半年全国高等教育自学考试计算机基础与程序设计试卷 一 单项选择题 ( 本大题共 20 小题, 每小题 1 分, 共 20 分 ) 在每小题列出的四个选项中只有一个选项是符合题目要求的, 请将正确选项前的字母填在题后的括号内 1.I/O 设备指的是计算机的 ( ) A 存储设备 B 输入和输出设备 C 控制器 D 运算器 2. 具有只读功能的内存储器是指 ( ) A ROM B RAM C 硬盘 D CD-ROM 3.C 语言源程序的基本单位是 ( ) A 过程 B 函数 C 子程序 D 语句 4. 字符串常数 "CHINA" 在内存中存储时占的字节数是 ( ) A 5 个 B 6 个 C 7 个 D 8 个 5. 设有 int p,q; 以下不正确的语句是 ( ) A p*=3 B p/=q C p+=3 D p&&=q
6. 如果 a=1,b=2,c=3,d=4, 则表达式 a>b?a:c<d?c:d 的值为 ( ) A 1 B 2 C 3 D 4 7. 下面程序段的运行结果是 ( ) main( ) {Int a=11,b=10; a-=b+1; printf("%d\n",a); } A 1 B 0 C 2 D 5 8. 下列程序段执行后输出结果为 ( ) int i=-1; if(i<=0)printf("****\n"); else printf("%%%%\n"); A ****C B %%%% C %%%%C D **** 9. 若所用变量已正确地定义, 则下列程序段输出结果为 ( ) a=10;b=50;c=30; if(a>b)a=b b=c;c=a printf("a=%d,b=%d,c=%d\n",a,b,c); A a=10,b=50,c=10 B a=10,b=30,c=10
C a=50,b=30,c=10 D a=50,b=3,c=50 10. 下述循环的循环次数是 ( ) int k=2; while(k=0)printf("%d",k); k--;printf("\n") A 无限次 B 0 次 C 1 次 D 2 次 11. 在下列选项中, 没有构成死循环的程序段是 ( ) A int i=100; while(1) {i=i%100+1; if(i>100)break; } B for(;;) C int k=1000; do(++k;) while(k>=10000); D int s=36; while(s);--s; 12. 若有以下定义和语句, 且 0<=i<10, 则对数组元素的错误引用是 ( ) int a[]={0,1,2,3,4,5,6,7,8,9},*p,i; p=a A *(a+i) B a[p-a] C p+i D *(&a[i]) 13. 下面能正确将字符串 "Boy" 进行完整赋值操作的语句是 ( ) A char s[3]={'b','o','y'};
B char s[ ]="Boy"; C char s[3]={"boy"}; D char s[3]; s[0]='b';s[1]='o';s[2]='y' 14. 以下程序段的输出结果是 ( ) char arr[ ]="ABCD"; char*ptr; for(ptr=arr;ptr<arr+4;ptr++) printf("%s\n",ptr); A ABCD B A C D D ABCD B C BCD C B CD D A D 15. 下面说法不正确的是 ( ) A 一个源程序文件由一个或多个函数组成 B 一个 C 程序由一个或多个源程序文件组成 C 一个 C 程序以函数为独立的编译单位 D 一个 C 程序必须有一个 main( ) 函数 16.C 语言的 auto 型变量是 ( ) A 存储在动态存储区中 B 存储在静态存储区中 C 存储在计算机 CPU 的寄存器中 D 存储在外存储器中 17. 以下程序的运行结果是 ( ) void swapl(x,y) int x,y; {int t;t=x;x=y;y=t;} void swap2(p1,p2)
int *p1,*p2; {*p1=*p2;*p2=*p1;} main( ) {int a=3,b=5,*x1=&a,*x2=&b; swap1(a,b); printf("a=%d,b=%d\n",a,b); swap2(x1,x2); printf("a=%d,b=%d\n",a,b);} A a=5,b=3 B a=3,b=5 C a=5,b=3 D a=3,b=5 a=5,b=3 a=3,b=5 a=3,b=3 a=5,b=5 18. 下列定义中, 不是指针数组定义的是 ( ) A int *p[5]; B float *q[4]; C int (*r)[6]; D char *w[7]; 19. 以下程序的运行结果是 ( ) #define sl(x)(3.14*(x)*(x)) #include<stdio.h> main( ) {float x,s; s=s1(10); printf("%.2f\n",s);} A 3.14 B 31.40 C 314.00 D 6.28 20. 测试文件是否结束函数的函数名是 ( ) A feof
B EOF C eof D FEOF 二 多项选择题 ( 本大题共 10 小题, 每小题 2 分, 共 20 分 ) 在每小题列出的五个选项中有二至五个选项是符合题目要求的, 请将正确选项前的字母填在题后的括号内 多选 少选 错选均无分 21. 下列哪些设备属外存储设备 ( ) A RAM B 光盘 C 硬盘 D 软盘 E 磁带 22.?X*.C 可以代表的文件是 ( ) A AXCD.C B AXCD.D C ABX.C D RX.C E XX1234.C 23. 若有 int x;float y; 指出下面结果为整型数的表达式 ( ) A (int)(x+y) B (int)x+y C 'a'+x D x+(int)y E x*y 24. 若所用变量已正确定义, 下列 for 循环语句中语法正确的有 ( ) A for(x=0;i=0;i<=10;i++) x++; B for(x=0,i=0,i<=10,i++) x++; C for(x=0,i=0;i<=10;i++)
x++; D i=0;x=0; for(i<=10;i++) x++ E i=0;x=0; for(;i<=10;i++) x++ 25. 若有定义及赋值 :( ) int y,*p,*p1; p=&y;p1=p;*p1=4; 则可以输出变量 y 的地址的语句是 A printf("%u\n",y); B printf("%u\n",p); C printf("%u\n",*p); D printf("%u\n",&y); E printf("%u\n",*p1); 26. 若有定义及赋值 :( ) int a[10]={0,1,2,3,4,5,6,7,8,9},*p; p=a; 则引用 a 中值为 5 的元素的表达式是 A a[5] B a[4] C *(a+5) D p[5] E *(p+4) 27. 若有定义及赋值 :( ) int a[6][6],*p; p=*a; 则下列各式中表示地址的表达式是 A a[1]
B a[1]+1 C a[3][3] D &a[1][3] E p[0][0] 28. 若有定义及赋值 :( ) int x[5][6],*p; p=*x; 则不能正确引用数组元素 x[0][2] 的值的表达式是 A x[0][2] B p[0][2] C x[0]+2 D *x+2 E *(*x+2) 29. 下面各式正确的是 ( ) A struct 1_num {long num;struct 1_num*next;}num1,*p1; p1=&num1; B struct animal {char name [30],float weight,}rabbits; C struct star {int bh,char name [20],}my_star; my_star.name="moon"; D struct {char x[20];char y[30];int u;}x1,y; E struct food {int code;char name [30];struct food *p;}; struct food *tail; 30. 设有 int y,u=0,x=15, 下列各项中能使 y 值为 0 的是 ( ) A y=x x; B y=x u; C y=x>>4;
D y=x&u; E y=~u; 第二部分非选择题 三 填空题 ( 本大题共 10 小题, 每小题 1 分, 共 10 分 ) 31. 写出查看 A 盘 TC 子目录下扩展名为 C 的所有文件的目录操作命令 C:\> 32. 组成 C 程序的基本单位是 33.putchar( ) 函数的功能是 34. 当 s=7 时, 执行以下程序段后 x= if((s>0)&&(s<=10)) if((s>=3)&&(s<=6))x=2; else if((s>1) (s>8))x=3; else x=1; else x=0; 35. 设 i 和 x 都是 int 型, 则 for 循环语句最多执行次数为 for(i=0,x=0;i<=9&&x!=876;i++)scanf("%d",&x); 36. 以下程序的输出结果是 main( ) {int a[12]={1,2,3,4,5,6,7,8,9,10,11,12},*p[4],i; for(i=0;i<4;i++)p[i]=&a[i*3]; printf("%d\n",p[3][2]);} 37. 定义变量可以在函数内部, 也可以在函数外部, 在函数内部定义的变量称为 38. 若有定义 int x=3,*p; 则使 p 指向变量 x 的赋值语句为 39. 共用体的所有成员共享同一段存储空间, 它的各个成员的数据类型可以是 40. 设有 FILE*fp; 则关闭 fp 所联系文件的 C 语句是 四 简答题 ( 本大题共 4 小题, 第 41 42 每小题 2 分, 第 43 44 每小题 3 分, 共 10 分 ) 41. 简述在 Turbo C 2.0 集成开发环境下完成一个 C 程序的全过程
42. 写出下列程序段所对应的数学式子 if(x!=0) if(x>0)y=1; else y=-1; else y=0; 43. 定义 char *string="i am a boy"; 和定义 char *string; string="i am a boy"; 等价吗? 为什么? 44. 简述 C 对 ASCII 码文件或二进制文件的操作步骤 五 阅读分析题 ( 本大题共 10 小题, 每小题 2 分, 共 20 分 ) 45. 阅读下列程序, 写出运作结果 main( ) {int a=100,b=-1; printf("a=%d,%x\n",a,a); printf("b=%x,%u\n",b,b);} 46. 下面是判断一个学生考试成绩及格与否的程序 ( 成绩 A, 或 B, 或 C 者为及格 ; 成绩为 D 者不及格 ): main( ) {char mark=''a''; switch(mark) {case''a'': case''b'': case''c'':printf(">=60\n");
2001 年 ( 上 ) 计算机基础与程序设计试卷答案 计算机基础与程序设计试卷参考答案 一 单项选择题 ( 本大题共 20 小题, 每小题 1 分, 共 20 分 ) 1.B 2.A 3.B 4.B 5.D 6.C 7.B 8.D 9.A 10.B 11.C 12.C 13.B 14.D 15.C 16.A 17.D 18.C 19.C 20.A 二 多项选择题 ( 本大题共 10 小题, 每小题 2 分, 共 20 分 ) 21.BCDE 22.ADE 23.ACD 24.CE 25.BD 26.ACD 27.ABD 28.CD 29.ADE 30.ACD 三 填空题 ( 本大题共 10 小题, 每小题 1 分, 共 10 分 ) 31.DIR A:\TC\*.C 32. 函数 33. 向终端输出一个字符 34.3 35.10 次 36.12 37. 局部变量 38.p=&x
39. 不相同的 40.fclose(fp) 四 简答题 ( 本大题共 4 小题, 第 41 42 题每题 2 分 ; 第 43 44 题每题 3 分, 共 10 分 ) 41.[ 参考答案 ] (1) 利用编辑功能生成 C 源程序 (2) 利用编译功能生成相应的目标程序 (3) 利用连接功能生成可执行程序 (4) 运行可执行程序 42. [ 参考答案 ] y=-1(x<0) y=0(x=0) y=1(x>0) 43. [ 参考答案 ] (1) 等价 (1 分 ) (2) 因为 string 是字符型指针变量 (1 分 ) (3) 无论哪种赋值方式都只是将字符串的首地址赋给了 string, 而不是将整个字符串赋给了 string (1 分 ) 44[ 参考答案 ] (1) 按规定的格式打开文件 (1 分 ) (2) 对打开的文件进行读 / 写操作 (1 分 ) (3) 关闭已打开的文件 (1 分 ) 五 阅读分析题 ( 本大题共 10 小题, 每小题 2 分, 共 20 分 ) 45. [ 参考答案 ] a=100,64(1 分 ) b=ffff,65535(1 分 ) 46. [ 参考答案 ] (1) 该程序有逻辑错误 当 mark 为 ''A''( 或 ''B'' 或 ''C'') 时, 三条 printf 语句全部要执行一次 (1 分 ) (2) 要得到正确的结果, 应做下面修改 :(1 分 ) case''c':printf(">=60\n");break;
case''d'':printf("<60\n");break; 47. [ 参考答案 ] a=8(2 分 ) 48. [ 参考答案 ] 该程序用于求 u 和 v 的最大公约数 (2 分 ) 49. [ 参考答案 ] while 语句可以改为 :(2 分 ) r=b%a; do { if(f= =0)break; b=a;a=r; }while((r=b%a)!=0); 50. [ 参考答案 ] 51. [ 参考答案 ] 不合适 会产生整数溢出 即使定义为 long 型, 输入的 m 值也不宜过大, 否则仍会产生溢出 (2 分 ) 52. [ 参考答案 ] 只要将 s=s+fac(i) 改为 : s=s+fac(fac(i)) 即可 (2 分 ) 53. [ 参考答案 ] (1) 前一句用于创建一个新结点, 并使指针 P 指向新结点 (1 分 ) (2) 后一句用于接受调用程序的实参, 并将其值赋给新结点的成员 amount (1 分 ) 54. [ 参考答案 ] (1) 前一句用于将新结点与原 head 指向的结点串接在一起 (1 分 ) (2) 后一句用于使 head 指向新加入的结点 P (1 分 ) 六 程序设计题 ( 本大题共 2 小题, 第 55 题 8 分, 第 56 题 12 分, 共 20 分 )
55. [ 参考答案 ] 参考程序如下 : #include<stdio.h> void main(void) { int i,j,im,jm,x[3][3],max; for(i=0;j<3;i++) for(j=0;j<3;j++) scanf("%d",&x[i][j]); for(j=0;j<3;j++) { max=x[0][j];im=0;jm=j; for(i=1;i<3;i++) if(max<x[i][j]) { max=x[i][j]; im=i; jm=j; } printf("i=%d j=%d max=%d\n",i,j,max); } } 56. [ 参考答案 ] 参考程序如下 : #include<stdio.h> void strcpy(char *,char * ); void main(void) { char *str1,*str2="abcdef"; strcpy(str1,str2);
printf("%s",str1); } void strcpy(char *s1,char *s2) { int i=0; while((s1[i]=s2[i])!=''\0'') i++; }