
( 2007-2008 年 二 学期)
课程编号: 06040020 课程名称:C语言程序设计(A)
注意:考试时间为120分钟。程序中表示空格。所有答案请写在答题卡上。
一、基础知识(每题2分,共20分)
1、若int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}}; 则数值为9的表达式是【 1 】。
A)a[1] B)*(a+1) C)*(*(a+1)) D)*a+1
2、以下语句的输出结果是【 2 】。
printf("%d\\n",strlen("\\\"\\065\\xff\\n"));
A)5 B)14 C)9 D)6
3、下面程序的输出结果是【 3 】。
int i=65536;
printf("%d\\n", i);
A)-1 B)1 C)0 D)65536
4、若有条件表达式(exp)?a++:b--; 则以下表达式中能完全等价于表达式(exp)的是【 4 】。
A)(exp= =0) B)(exp!=0)
C)(exp= =1) D)(exp!=1)
5、对一维数组 a 的正确说明是【 5 】。
A)int a(10); B)int n=10,a[n];
C)int n; D)#define SIZE 10
scanf("%d",&n); int a[SIZE];
int a[n];
6、以下程序的输出结果是【 6 】。
#include void main() {int i=010,j=10; printf("%d,%d\\n",++i,j--); } A)11,10 B)9,10 C)010,9 D)10,9 7、设x、y、t均为int型变量,则执行语句:x=y=3;t=++x||++y;后,y的值为【 7 】。 A)不定值 B)3 C)4 D)1 8、若a为int类型,且其值为12,则执行完表达式a+=a-=a*=a后,a的值是【 8 】。 A)-1 B)144 C)0 D)-126 9、不是无限循环的语句为【 9 】。 A)for(y=0,x=1;x>++y;x=i++)i=x; B)for( ; ;x++=i); C)while(1){x++;} D)for(i=10; ;i--) sum+=i; 10、判断字符串a 和b 是否相等,应当使用【 10 】。 A)if(a==b) B)if(a=b) C)if(strcpy(a,b)) D)if(strcmp(a,b)) 二、输出结果(每题5分,共30分) 1、下列程序输出结果为【 1 】。 # include void main() {int a=15; printf("%d",a=a<<2); } 2、下列程序输出结果为【 2 】。 # include void main() {int n,i,s; n=28; s=1; for(i=2;i if(s==n) printf("%d Yes\\n",n); else printf("%d No\\n",n); } 3、下列程序输出结果为【 3 】。 # include void main() {int i,j,m,n; m=n=0; for(i=0;i<2;i++) for(j=0;j<2;j++) if(j>=i)m=1;n++; printf("%d\\n",n); } 4、下列程序输出结果为【 4 】。 #include void fot(int *pl,int *p2) { printf("%d,%d\\n",*(pl++),++*p2); } int x=971,y=369; void main() { fot(&x,&y); fot(&x,&y); } 5、下列程序输出结果为【 5 】。 #include struct abc {int a,b,c; }; void main() {struct abc s[2]={{1,2,3},{4,5,6}}; int t; t=s[0].a+s[1].b; printf("%d\\n",t); } 6、下列程序输出结果为【 6 】。 # include void main() {int a,b; for(a=1,b=1;a<=50;a++) {if(b>=20) break; if(b%3==1) {b+=3; continue; } b-=5; } printf("%d\\n",a); } 三、填空题(每空2分,共24分) 1、程序的功能是:用选择法对数组中10个整数按由小到大排序。 #include void main() {void sort(int array[],int n); int a[10],i; printf("enter the array\\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); sort(【 1 】); printf("the sorted array:\\n"); for(i=0;i<10;i++) printf("%d ",a[i]); printf("\\n"); } void sort(int array[],int n) {int i,j,k,t; for(i=0;i for(【 2 】;j t=array[k]; array[k]=array[i]; array[i]=t; } } 2、以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。例如:输入的八进制字符串为556,则输出十进制数366。 #include void main() {char *p,s[6]; int n; gets(s); p=【 4 】; n=*p-'0'; while(【 5 】!='\\0') n=n*8+*p-'0'; printf("【 6 】\\n",n); } 3、以下程序的功能是:求两整数的最大公约数。 # include int gongyue(int a,int b) {int temp; if(b>a) {temp=a; 【 7 】; b=temp; } while(【 8 】) {temp=a%b; a=b; b=【 9 】; } return(a); } void main() {int x=12,y=16; printf("zui da gong yue shu wei :%d\\n",gongyue(x,y)); } 4、以下程序的功能是:用递归方法计算学生的年龄。已知第一位学生年龄最小,为10岁,其余学生一个比一个大2岁,求第5位学生的年龄。 #include int age(int n) {int c; if (n==1)c=10; else c=【 10 】; return (【 11 】); } void main() { printf("age:%d\\n【 12 】); } 四、问答题(本题17分) 程序1、 # include void main() {void swap(int *p1,int *p2); int a,b; int *pointer_1,*pointer_2; scanf("%d,%d",&a,&b); pointer_1=&a; pointer_2=&b; if(aswap(pointer_1,pointer_2); printf("\\n%d,%d\\n",a,b); } void swap(int *p1,int *p2) {int temp; temp=*p1; *p1=*p2; *p2=temp; } 问题1:如果要使a值为3,b值为8,应如何输入?(3分) 问题2:若按问题1中的要求输入,则输出结果是什么?(3分) 问题3:如果swap()函数如下,则输出结果是什么?(4分) void swap(int *p1,int *p2) {int *temp; temp=p1; p1=p2; p2=temp; } 程序2、 # include # include void main() {FILE *in,*out; char infile[10],outfile[10]; printf("Enter the infile name:\\n"); scanf("%s",infile); printf("Enter the outfile name:\\n"); scanf("%s",outfile); if((in=fopen(infile,"r"))==NULL) {printf("cannot open infile\\n"); exit(0); } if((out=fopen(outfile,"w"))==NULL) {printf("cannot open outfile\\n"); exit(0); } while(!feof(in))fputc(fgetc(in),out); fclose(in); fclose(out); } 运行时输入的两个字符串分别是“a.txt”和“b.txt”。 问题4:如果文件a.txt的内容是:“Hello!”,文件b.txt的内容是:“World!”,程序运行后,文件b.txt的内容是什么?(3分) 问题5:如果运行时显示“cannot open infile”,表示什么含义?(4分) 五、改错题(每题3分,共9分) (注:请在答题卡上写出正确的语句) 1、程序的功能是:逆置数组。若数组的值为:1,5,3,7,逆置后为:7,3,5,1。 # include void main() {int i,t,a[]={1,7,3,6,5,9}; for(i=0;i<=5;i++) /*****Error*****/【 1 】 t=a[i],a[i]=a[5-i],a[5-i]=t; for(i=0;i<6;i++) printf("%3f",a[i]); /*****Error*****/【 2 】 printf("\\n"); } 2、程序的功能是:输出斐波那契(Fibonacci)数列的第10项。 #include void main() {int i=1,j=1,k=0; while(k++<=10) /*****Error*****/【 3 】 j=j+i,i=j-i; printf("%d\\n",j); }
