1、第三部分 江苏省二级统考近五年试题汇编【说明】基础题部分全部略去。2001年春季笔试题及上机题一、 选择题21.以下所列语句中,合法的语句是: 。A. a=1,b=2 B.+a; C.a=a+1=5; D.y=int(a);22.以下所列字符常量中,不合法的是: 。A.0xff B.65 C.$ D.x1a 23.如有以下定义:“int y44=1,2,3,4,5,6,7,8,9,10,*py1=y1,(*py2)4=y;”,则不能正确引用值为7的数组元素的表达式是: 。A.*(y1+2) B.*(y+1)+2 C.py12 D.py21224.以下不致造成死循环的语句是: 。A. for(y
2、=0,x=1;x+y;x=i +)i =x;B. for(; ;x+=i );C. while(x=8)x-;D. for(i =10,sum=0;sum=i ;)sum= -i ;25.以下说法中正确的是: 。A 一个结构只能包含一种数据类型B 不同结构中的成员不能有相同的成员名C 两个结构变量不可以进行比较D 关键字typedef用于定义新的数据类型26.设有定义:”float y=3.45678;int x;”,则以下表达式中能实现将y中数值保留小数点后2位,第3位四舍五入的表达式是: 。A.y=(y*100+0.5)/100.0 B. x=y*100+0.5,y=x/100.0C. y
3、=y*100+0.5/100.0 D.y=(y/100+0.5)*100.027. 以下程序段输出结果是: 。int a=10,b=11,c=12,s;s=a+=10&b-b B. (+p)-a C. *(p+)-b D.*(+p)-b30.设有“char s=”Program”,*p=s;”,则以下叙述中正确的是: 。A. 数组s的内容与指针变量p中内容相同B. 数组s的长度与strlen(p)的值相等C. p5的值等于s5的值D. sizeof(s)等于sizeof(*p) 二、填空题 1.若有定义语句“static char str420=“thank”,”you”,”very”,”mu
4、ch!”;” 则str数组中存储0的数组元素有: 个。2.设有语句“int a=2,b=3,c=2;a+=b*=(+b-c+); “,变量b的值是 。3.以下程序输出结果是: 。#define T(x,y,z) x*y*z/4main() int a=1,b=3,c=5; printf(%d,T(b+a,a*+b,a+b+c); 4.以下程序输出结果是: 。main()printf(%d,fun(5);fun(int n)if(n= =1)return 1; return n-fun(n-1); 5.以下程序输出结果是: 。 main() enum colorRED=5,BLUE,WHITE=
5、0,BLACK; char *colorname=red,blue,white,black; printf(%s,colornameBLACK); 6.【程序】main() int j,k,s,m; for(k=1;k10;k+) s=1;m=k+2; for(j=k;jm;j+,k+)s+=j; printf(s=%d,k=%d,s,k); 程序输出结果s= ,k= 。7.【程序】func(int a,int b) return a+b;main()int x=6,y=7,z; z=func(func(x+,y+),func(-x,-y); printf(%d,z); 以上程序输出结果是 (
6、所用编译系统传递函数参数的顺序为自右向左)。8.【程序】main() int i,p9=1,2,3,4,5,6,7,8,9,*p13,*p2; for(i=0;i3;i+)p1i=&p6-3*i; p2=p1+2; for(i=1;i3;i+) printf(%d,%dn,*(+p1i+2)+1,*(*p2-+1)+2); 程序运行时输出的第一行是 ,第二行是 。9.【程序】fun(int *s,int n1,int n2) int t; while(n1n2) t=*(s+n1); *(s+n1)=*(s+n2); *(s+n2)=t; n1+;n2-; main() int a10=1,2
7、,3,4,5,6,7,8,9,0, i ,*p=a; fun(p,0,3); fun(p+3,1,6); for(i=0;i10;i+) if(i%5= =0)printf(n); printf(%d,ai); 程序输出的第一行是 ,第二行是 。10.【程序】#includemain() struct st int x,y; st15=10,11,20,21,30,31,40,41,50,51,st25; FILE *fp;int i ; fp=fopen(stud.dat,wb+); fwrite(st1,sizeof(struct st),5,fp); rewind(fp); for(i=
8、0;i3;i+) fread(&st2i,sizeof(struct st),1,fp);fseek(fp, sizeof(struct st),SEEK_CUR);/*本函数使用说明见试卷尾部注释*/ fseek(fp,-4L*sizeof(struct st),SEEK_END); for(i=3;i5;i+) fread(&st2i, sizeof(struct st),1,fp); fseek(fp, sizeof(struct st),SEEK_CUR); for(i=0;i999) (2) ; a=n/100; b= (3) ; c=n%10; if(!(a-b)*(b-c)*(c
9、-a)printf(n%d,%d,n,k); 12.以下程序实现将a数组中后8个元素从大到小排序的功能。void sort(int *x,int n);main()int a12=5,3,7,4,2,9,8,32,54,21,6,43,k; sort( (1) ,8); for(k=0;k12;k+)printf(%d,ak);void sort(int *x,int n) int j,t; if(n= =1)return; for(j=1;j=p;p1-) *( (3) )=*p1; for(i=0;*(t1+i)!=0;i+) *p+= (4) ; (5) ; return str; 14
10、.以下程序中函数padd的功能是:调整pa指向的链表中各结点的位置,使得所有x值为偶数的结点出现在链表的前半部,所有x值为奇数的结点出现在链表的后半部。#includetypedef struct p int x; struct p *next; PNODE;PNODE *padd(PNODE *pa)PNODE *p1, *p2,*p; p1=p2=pa; while(p1) if(p1-x%2= =0& (1) ) p=p1; p1=p1-next; (2) =p1; p-next=pa; (3) ; else p2=p1;p1=p1-next; return pa;main()PNODE
11、 a10=1,2,3,4,5,6,7,8,9,10,*ha=a,*p; int i ; for(i=0;i,p-x);p=p-next;2001年(春)C语言上机试卷一、改错题【题目】本程序计算并输出二维数组a的每一列最小元素的值及其行号、列号,整个数组a中最小元素的值及其行号、列号。含有错误的源程序为:#includestdio.h#define n 4 #define m 3int anm,sm;p(int j)int k,i,x; x=a0j;i=0; for(k=1;kn;k+) if(akjx) i=k;sj=x=akj; return i;main()int indexm,i,j,
12、k; for(i=0;in;i+) for(j=0;jm;j+) scanf(%d,aij); for(j=0,jm;j+) indexj=pj; printf(a%d,%d=%dn,indexj,j,sj); i=s1;k=0; for(j=1;jm;j+) if(sj9? i+|+i:+i;后,i,j的值为 (26) 。A10,10B。2,2C。2,3D。2,127、填空处应填 (27) 。A.search(c34,12,8)B. search(&c00,12,8)C. search(&c,12,8)D. search(*c,12,8)int sarch(int x ,int n,int
13、k) int j;for(j=0;jc0)c2=c1;else c2=c0;29、表达式值为3的是 (29) 。struct s int d; struct s *next;static struct s a3=1,&a1,2,&a2,3,&a0, *ptr=&a0;A.ptr-d B.(ptr-next)-d C.(ptr+1)-next-d D.(ptr+2)-next-d30、以下程序的输出是 (30) 。main( ) static char c6=“QUICK”,”FOX”,”JEMP”,”DAZY”;static char *cp=c0,c1,c2,c3, *cpp=cp;prin
14、tf(“%c”, *+cpp);A. FB. O C. A D.E二、填空题l 基本概念(共5分)1、 函数值通过 (1) 语句返回 (2) 类型的函数没有返回值,故不能作为表达式分量。2、 执行int b3=0,1,2;b2=b(b0=2)+b1-1-2;后,b0、b1、b2的各元素值为: ( 3) 。3、 执行下列程序后,s中的字符串为: (4) 。#include”stdio.h”main( ) FILE *fp;float x=-1.2;char s11=0;fp=fopen(“a.dat”,”w+”);fprintf(fp,”%6.3f”,x);rewind(fp);fgets(s,
15、10,fp);puts(s);fclose(fp);4、 变量b的初值为: (5) 。int a4=1,2,3,4,5,6,7,8,9, *p=&a10,b= *(p-2)+ *(p+2)- *(p+5);l 阅读程序题(共7分)5、 以下程序的输出为: (6) 。main( ) int i=0,j=10,k=2,s=0;for(;i=j;)i+=k+;s=s+i;printf(“%dn”,s);6、 以下程序的输出为: (7) 。void trans(int m,int n) int q;if(m/n) trans(m/n,n);if(q=m%n)1) t=p0;p0=pn-1;pn-1=t
16、;rev(p+1,n-2);main( ) int j,a5=1,2,3,4,5;rev(a+1,4);for(j=0;j5;j+)printf(“%d”,aj);printf(“n”);rev(a,3);for(j=0;j5;j+)printf(“%d”,aj);9、 以下程序的输出第一行为: (11) 第三行为: (12) 。main( ) int a44=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,j,k;for(j=1;j4;j+) for(k=0;kk+1)continue; if(jk)break; printf(“%d,”,ajk); print
17、f(“n”); l 完善程序(共18分)10、 用递推法计算一级数的近似值,直到:| x(2n+1)/n! |1e-6为止。级数:x-x3/(3*1!)+x5/(5*2!)-x7/(7*3!)+.+x(2n+1)/(2n+1)*n!)+.#include#includefloat g(float x) float t=x,sum=t,s=1;int n=0;while( (13) 1e-6) n+;s=-s;t=t* (14) ;sum=sum+s*t/ (15) ;return sum;main( ) float x;scanf(“%f”,&x);printf(“s=%f”,g(x);11、
18、 下列程序中函数mfgets实现了库函数fgets的功能,既从指定的文件中读一行字符(遇到回车符或文件结束符时,在该字符前出现的全部字符既为一行字符),保存到参数line指定的地址开始的内存单元中,函数返回值为保存已经读入的字符串的首地址。#includechar *mfgets(char *line, (16) ) char ch, *str=line;while(ch=fgetc(fp)!=EOF&ch!=n) (17) =ch;*str=0;return (str= =line)?NULL: (18) );main( ) FILE *fp;char s11;fp=fopen(“a.dat
19、”,”r”);printf(“%s”,mfgets(s,fp);fclose(fp);12、 将120的自然数围成一圈,使其相邻的两数之和均为素数,程序中数组a存放120中的奇数,数组b存放120中的偶数,数组c存放最后结果(既满足上述性质的圈)。程序首先将1(奇数)放入c,从b中选一偶数放入c中,使相邻两数之和为素数;然后再从a中选一奇数放入c,使相邻两数之和为素数,重复此过程直到c中放满为止。int pr(int n) /*判断n是否为素数*/ int i,flg=1;for(i=2;j0)return n;else return 0;main( ) int a11,b11,c21,i,j
20、,k,m,n;for(i=1;i=10;i+)ai=2*i-1;bi=2*i;c1=a1;m=c1;a1=0;j=2;whike(j0)cl=n;k+; (22) ;else printf(“fail!n”);exit(0);if(pr(c1+n) printf(“n success!”);for(j=1;j=0)strcat(pt,tabloc.str);pt+= (24) ; *pt=0;puts(text);int find(int n) /*折半查找法*/ int low=0,high=9,mid;while(lowtabmid.code)low= (25) ;else high=mi
21、d-1; (26) ;14、 设链表上的结点的数据结构定义如下:struct node int x; struct node *next;假设已经建立了一个链表,h为链首指针。函数deladd的功能是:若链表上能找到结点的x值为value,则从链表上删除该结点(假定链表上的各个结点的值是不同的);否则构造一个新结点,其值为value,并将新结点插入链尾。该函数要求返回新链表的首指针。struct node *deladd(struct node *h,int value) struct node *p1, *p2;int flag=0;p1=p2=h;while(p1&flag= =0)if(
22、p1-x= =value) flag=1;if(p1= =h) h= (27) ;free(p1);else p2-next= (28) ; free(p1); else p2=p1;p1= (29) ;if(flag= =0) p1=(struct node *)malloc(sizeof(struct node);p1-x=value;p1-next=0;if(h= =0)h=p1;else (30) ;return h;2001年秋上机试卷一、改错题【题目】下面的程序判断一个正整数是否为降序数,再打印组成该整数的每个字符。设正整数m=d0d1d2d3d k-1,若满足d i =d i+1
23、,i=0,1,k-2,则m就是一个降序数,如21、433是两个降序数。含有错误的源程序如下:void main()int num,k,di,n,isdec; long m; char digit10;scanf(num=%d,num); for(;num0;num-) n=0;isdec=1;k=0; scanf(%ld,&m); while(m!=0) di=m%10; digitn+=m%10; m=m/10; if(k=0;n-) putchar(digitn); putchar( ); if(isdec)printf( is decrea order numbern); else pr
24、intf(is not decrea order numbern); 【要求】1将上述程序录入到文件myf1.c中,然后根据题目的要求以及程序中语句之间的逻辑关系对程序中的错误进行修改。2改错时,可以修改语句中的一部分内容,调整语句的次序,增加少量的变量说明或编译预处理命令,但不能增加其他语句,也不能删去整条语句。3改正后的源程序myf1.c保存在考试盘的根目录下,供阅卷用,否则不予评分。二、编程题【题目】程序功能:将一字符串做压缩处理。编程要求:1编写一个函数int compress (char s ),将s中连续出现的多个相同字符压缩成一个字符,统计被删除的字符个数,并返回被删除的字符个数
25、。2编写主函数main。从键盘上读入一行字符数据放入一个字符型数组中,调用compress函数对该字符数组中的字符做压缩处理,将压缩后的字符串写入结果文件myf2.out中。3用以下数据测试程序: I wwillll successful & and you too ! #【要求】1将源程序文件取名为myf2.c,输出结果文件取名为myf2.out。2数据文件的打开、使用和关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。3源程序文件和运行结果文件均需保存在考试盘的根目录下,供阅卷用。4不要复制扩展名为OBJ和EXE的文件到考试盘上。2002年春季笔试题及上机题一、 选择题21、以下标识符
26、中, (21) 不能作用户标识符。A、scanf B、forC、_sumD、F222、已有声明语句“”,与表达式char ch=B的值不相同的表达式是 (22) 。(字符A的ASCII码以十进制表示为65)A、ch=0x42B. Ch=0102C. ch=102D. ch=06623、若要对a进行+运算,则a应具有以下说明 (23) 。A. int a32B. Char *a =“12”,”ab”;C. int b10, *a=b;D. Char (a)(char)24、以下对于break语句使用的正确陈述是 (24) 。A、任何位置 B、循环或switch结构中C、只在switch结构中 D
27、、只在循环结构中25、若有声明“int a=5,b=4,c=3,*p=&a;”,则下列 (25) 表达式语句是正确的。A. ( *p)+=c; B. *(*p)+; C. printf(a%4= =0?”%3dn”:”%3d”,*p);D.a20?return *p-20:return *p-1;26、设“int x=2,y=3,z=(+x=y-)?(-y= =1)?y-:-y):y-;”,则x,y,z的值为 (26) 。A. 3,0,1B. 2,0,0C. 3,1,1D. 2,2,127、下列程序的运行结果 (27) 。A. 45 B. 33C. 17 D. 27main( ) static int a33=1,3,5,7,9,11,13,15,17,y,x,*p=&a22; for(x=0;x3;x+)y+=*(p-4*x); printf(“n%d”,y); 28、设有函数f的定义如下: Void f(int x,int *y) y=x*x*x; main( ) int j,c4=1,2,3,4,s4=0;for(j=0;j