C语言真题(2007-2012) 湖南省2007年
五、程序设计题(本大题共4题,共90分) 1、程序分析题。写出下列程序运行的结果。(每小题5分) (1)#include
{ int x=3;
do {printf(\%d\,x-=2); } while(!(--x)); }
运行结果是_____________________________ (2)#include
{int x=4,y=8,z; z=x<<2|y;
printf(\%d\,z); }
运行结果是_____________________________ (3)#include
{ char x=‵E‵,y=‵e‵; printf(\%c, \,x=32);
printf(\%c,\,(x--,++y));
printf(\%c\\n\,x==y?x+=32;y-=32); }
运行结果是_____________________________ (4)#include
{ int t=2; while(t<5) switch(t%2)
{ case 0:t++;printf(\#\);break; case 1:t+=2;printf(\*\); default:printf(\\\n\); } }
运行结果是_____________________________ (5)#include
{ char str1{50}=\Beijing 2008! \,*q=str1;
char str2[50]= \One World One Dream! \,*p=str2; while(*p!='\\0') p++;
while(*q!='\\0') P++=q++; *p=‵\\0‵;
printf(\%s\,str2); }
运行结果是_____________________________ (6)#include
main()
{ char s[]=\abcdefg\,t; int i=0,j=strlen(s)-1; while(i { t=s[j];s[j]=s[i];s[i]=t;i++;j--;} puts(s); } 运行结果是_____________________________ 2、程序填空(每空5分,共30分) (1)下面程序的功能是求1000以内的完数。所谓完数是指一个数的子因子之和等于这个数本身。例如:6是一个完数,因为6=1+2+3。 #include { int i,j,sum; printf(\1000以内的完数有:\\n\); for(i=1;______________________;i++) { sum=0; for(j=1;j _________________________ sum+=j; if(_________________) printf(\%d\\n\,i); } } (2)以下程序是统计一维数组arr中小于平均值的元素个数。 #include int fun(int s[],float aver) { int i,count=0; for(i=0;i if(________________) count++; return count; } main() { int i,arr[N]={87,34,56,78,90,66,88}; float aver=0; for(i=0;i printf(\统计结果为:%d\,_________________); } 3、程序改错,不得增行或删行。(每小题10分,共20分) m(1)下面的程序是求 ?n!,在fun()函数中存在2处 n?1错误,请标记并改正。 #include { int m,n;long sum; for (m=1;m<=x;m++) { t=1; for(n=1;n<=m;n++) t=m*n; sum+=t; } return sum; } main() { int num; printf(\input a number: \); scanf(\%d\,#); printf(\1!+2!+??+%d!=%ld\\n\,num,fun(num)); 1 } (2)下列程序的功能是:从字符串str中,删除所有字母'C',不区分大小写。如:输入字符串\,删除后的字符串为\。在main()函数中有2处错误,请标记并改正。 main() { int t; int a[]={12,21,2,34,87,65,43,25,765,11}; sort(a,10); #include { char str[80]; int i=0,j=0; printf(\\\n请输入字符串:\); gets(str); while(str[i]!=‵\\0‵) { if(str([i]!=‵c‵||str[i]!=‵C‵) str[j]=str[i]; i++; } str[j]=‵\\0'; printf(\\\n删除后的字符串:%s\,str); } 4、程序设计(10分) 已知一个数列从1项开始的前6项为:0,0,1,1,2,4,以后的各项都是其相邻的前3项之和,计算并输出该数列前20项之和。 选考题 【第二组:程序方向】 1、以下程序是从一个二进制文件中读出结构体数据,并将结构体数据输出在屏幕上。在main()函数中有3处错误,请标记并改正,不得增行或删行。 #include { file * f; if((f=fopen(\a.txt\,\r\))==NULL) { printf(\cannot open outfile\\n\);exit(0);} while(feof(f)) { fread(stu,sizeof(struct student),1,f); printf(\%s,%.2f\\n\,stu.name,stu.score); } fclose(f); } 2、下面程序的功能是:用选择法对10个数进行排序(由小到大)。请完成sort()函数。 void sort(int x[],int n) { } printf(\排序后的数是:\\n\ for(i=0;i<10;i++) printf(\ } 湖南省2008年 六、程序分析题(本大题共3题,共75分) 1、程序分析题。(每小题5分,共25分) (1) #include main() { char a=55; a=~a&055; printf(\ } 运行结果是 . (2) #include #define test(x,y) x+y main() { float c; c=2*test(3.2,5.4)/2; printf(\} 运行结果是 . (3) #include void fun() { int x=1; static int y=1; printf(\ } main() { int i; for (i=0;i<2;i++) fun(); } 运行结果是 . (4) #include main() { int a=12,b=0; do { b+=2;a-=2+b; }while (a>=0); } 程序中循环体的执行次数是 . (5) #include main() { int n=132,i=1,j,k,b[10]; while(n!=0) { j=n%6; b[i]=j; n=n/6; i=i+1;} for (k=i-1;k>0;k--) printf(\ 2 程序的功能是 . 2、程序填空题(每空5分,共30分) (1)任意输入坐标平面上一点(x,y),求该点到原点(0,0)间的距离。 #include Node { float x; float y; }Node; main( ) { Node *p; p= ; scanf(\ printf(\ ; } (2) 下列给定程序中,函数fun()的功能是:从N个字符串中找出最长的那个串,并将其地址作为函数值返回。 #include char *fun(char(*q)[M]) { int i; char *p; ; for(i=0; i if (strlen(p)< ) ; return p; } main( ) { charstr[N][M]={ \ \ char *longest; int i; longest=fun(str); printf(\puts(longest); } 3、程序改错,不得增行或删行(每小题10分,共20分) (1)下列程序的功能是求分数序列:89/55,-55/34,34/21,-21/13,13/8 …的前8项之和。程序中有2处错误,请标记并改正。 #include { int i,flag=1; float a=144,b=89,s=0,t; for(i=1;i<=8;i++) { s=s+a/b; flag=-flag; t=b;a=a-b;a=t; } printf(\} (2)下列程序的功能是采用简单插入的排序方法,随机产生10个整数,按从小到大的顺序排列。在程序中有2处错误,请标 记并改正。 #include

