版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三部分江苏省二级统考近五年试题汇编【说明】基础题部分全部略去。2001年春季笔试题及上机题选择题21.以下所列语句中,合法的语句是:。a=1,b=2B.++a;C.a=a+1=5;D.y=int(a);22.以下所列字符常量中,不合法的是:。A.’\0xff’B.’\65’C.’$’D.’\x1a’23.如有以下定义:“inty[4][4]={1,2,3,4,5,6,7,8,9,10},*py1=y[1],(*py2)[4]=y;”,则不能正确引用值为7的数组元素的表达式是:。A.*(y[1]+2)B.*(y+1)+2C.py1[2]D.py2[1][2]24.以下不致造成死循环的语句是:。for(y=0,x=1;x>++y;x=i++)i=x;for(;;x+=i);while(x=8)x--;for(i=10,sum=0;sum<=i;)sum=--i;25.以下说法中正确的是:。一个结构只能包含一种数据类型不同结构中的成员不能有相同的成员名两个结构变量不可以进行比较关键字typedef用于定义新的数据类型26.设有定义:”floaty=3.45678;intx;”,则以下表达式中能实现将y中数值保留小数点后2位,第3位四舍五入的表达式是:。A.y=(y*100+0.5)/100.0B.x=y*100+0.5,y=x/100.0C.y=y*100+0.5/100.0D.y=(y/100+0.5)*100.027.以下程序段输出结果是:。 inta=10,b=11,c=12,s; s=a++<=10&&b--<=2&&c++;printf(“%d,%d,%d,%d”,s,a,b,c); A.0,11,10,13B.1,11,10,13C.0,11,10,12D.1,11,10,1228.下列程序段执行后变量j的值是:。 intj;char*s=”x\045\””;for(j=0;*s++;j++); A.7B.3C.4D.529.设有以下说明,则值为210的表达式是:。 structs {inta;int*b;}; intx0[]={110,120},x1[]={210,220}; structsx[]={{100},{200}},*p=x; x[0].b=x0;x[1].b=x1;*p->bB.(++p)->aC.*(p++)->bD.*(++p)->b30.设有“chars[]=”Program”,*p=s;”,则以下叙述中正确的是:。数组s的内容与指针变量p中内容相同数组s的长度与strlen(p)的值相等p[5]的值等于s[5]的值sizeof(s)等于sizeof(*p)二、填空题1.若有定义语句“staticcharstr[4][20]={“thank”,”you”,”very”,”much!”};”则str数组中存储’\0’的数组元素有:个。2.设有语句“inta=2,b=3,c=2;a+=b*=(++b-c++);“,变量b的值是。3.以下程序输出结果是:。 #defineT(x,y,z)x*y*z/4main(){inta=1,b=3,c=5;printf("%d",T(b+a,a*++b,a+b+c));}4.以下程序输出结果是:。 main(){printf("%d",fun(5));}fun(intn){if(n==1)return1;returnn-fun(n-1);}5.以下程序输出结果是:。main(){enumcolor{RED=5,BLUE,WHITE=0,BLACK};char*colorname[]={"red","blue","white","black"};printf("%s",colorname[BLACK]);}6.【程序】main(){intj,k,s,m;for(k=1;k<10;k++){s=1;m=k+2;for(j=k;j<m;j++,k++)s+=j;}printf("s=%d,k=%d",s,k);}程序输出结果s=,k=。7.【程序】func(inta,intb){returna+b;}main(){intx=6,y=7,z;z=func(func(x++,y++),func(--x,--y));printf("%d",z);}以上程序输出结果是(所用编译系统传递函数参数的顺序为自右向左)。8.【程序】main(){inti,p[9]={1,2,3,4,5,6,7,8,9},*p1[3],**p2;for(i=0;i<3;i++)p1[i]=&p[6-3*i];p2=p1+2;for(i=1;i<3;i++)printf("%d,%d\n",*(++p1[i]+2)+1,*(*p2--+1)+2);}程序运行时输出的第一行是,第二行是。9.【程序】fun(int*s,intn1,intn2){intt;while(n1<n2){t=*(s+n1);*(s+n1)=*(s+n2);*(s+n2)=t;n1++;n2--;}}main(){inta[10]={1,2,3,4,5,6,7,8,9,0},i,*p=a;fun(p,0,3);fun(p+3,1,6);for(i=0;i<10;i++){if(i%5==0)printf("\n");printf("%d",a[i]);}}程序输出的第一行是,第二行是。10.【程序】#include<stdio.h>main(){structst{ intx,y; }st1[5]={10,11,20,21,30,31,40,41,50,51},st2[5];FILE*fp;inti;fp=fopen("stud.dat","wb+");fwrite(st1,sizeof(structst),5,fp);rewind(fp);for(i=0;i<3;i++){fread(&st2[i],sizeof(structst),1,fp);fseek(fp,sizeof(structst),SEEK_CUR);/*本函数使用说明见试卷尾部注释*/}fseek(fp,-4L*sizeof(structst),SEEK_END);for(i=3;i<5;i++){fread(&st2[i],sizeof(structst),1,fp);fseek(fp,sizeof(structst),SEEK_CUR);}for(i=0;i<5;i+=2)printf("%d,%d\n",st2[i].x,st2[i].y);fclose(fp);}以上程序输出结果的第一行是,第二行是,第三行是_____。(1)rewind(文件类型指针):将文件的读写指针移动到文件的首部。(2)fseek(文件类型指针,偏移量,起始位置):将文件的读写指针移动到文件的指定位置。起始位置:分别用如下三个符号常量表示三种选择:SEEK_SET文件首,SEEK_END文件尾,SEEK_CUR文件当前位置。偏移量:指针移动的目的地位置相对于起始位置的字节数,要求为长整型,数值为正数时表示从起始位置向后(文件尾)移动,反之向前(文件首)移动。(3)fread(buffer,size,count,fp)/fwrite(buffer,size,count,fp):fread函数用来依次读入一组数据,fwrite函数用来一次向文件中写一组数据,其中buffer指明起始地址,size表示要读写的字节数,count为要进行读写多少个size字节的数据项,fp为文件指针。11.以下程序打印所有符合下列条件的3位正整数:是某一个数的平方数,其中有两位数字相同。如:100、121等。main(){inta,b,c,n,k;for(k=10;;k++){n=(1);if(n>999)(2);a=n/100;b=(3);c=n%10;if(!((a-b)*(b-c)*(c-a)))printf("\n%d,%d",n,k);}}12.以下程序实现将a数组中后8个元素从大到小排序的功能。voidsort(int*x,intn);main(){inta[12]={5,3,7,4,2,9,8,32,54,21,6,43},k;sort((1),8);for(k=0;k<12;k++)printf("%d",a[k]);}voidsort(int*x,intn){intj,t;if(n==1)return;for(j=1;j<n;j++)if((2)){t=x[0];x[0]=x[j];x[j]=t;}sort(x+1,(3));}13.函数insertstr功能是:在字符串str中所有出现子串str1的后面插入子串str2。【程序】char*insertstr(char*str,char*str1,char*str2){char*p,*p1,*q1,*t1;inti,len2;if(*str=='\0'||*str1=='\0'||*str2=='\0')returnstr;len2=strlen(str2);p=str;t1=str2;while(*p!='\0'){p1=p;q1=str1;while(*p1==*q1&&(1)){p1++;q1++;}if(p!=p1&&*q1=='\0'){p=(2);while(*p1++!='\0');for(;p1>=p;p1--)*((3))=*p1;for(i=0;*(t1+i)!='\0';i++)*p++=(4);}(5);}returnstr;}14.以下程序中函数padd的功能是:调整pa指向的链表中各结点的位置,使得所有x值为偶数的结点出现在链表的前半部,所有x值为奇数的结点出现在链表的后半部。#include<stdlib.h>typedefstructp{ intx; structp*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;}}returnpa;}main(){PNODEa[10]={{1},{2},{3},{4},{5},{6},{7},{8},{9},{10}},*ha=a,*p;inti;for(i=0;i<9;i++)a[i].next=&a[i+1];a[9].next=(4);ha=padd(ha);p=ha;printf("\n");while(p){printf("%d->",p->x);p=p->next;}}2001年(春)C语言上机试卷一、改错题【题目】本程序计算并输出二维数组a的每一列最小元素的值及其行号、列号,整个数组a中最小元素的值及其行号、列号。含有错误的源程序为:#include"stdio.h"#definen4#definem3inta[n][m],s[m];p(intj){intk,i,x;x=a[0][j];i=0;for(k=1;k<n;k++)if(a[k][j]<x){i=k;s[j]=x=a[k][j];}returni;}main(){intindex[m],i,j,k;for(i=0;i<n;i++)for(j=0;j<m;j++)scanf("%d",a[i][j]);for(j=0,j<m;j++){index[j]=p[j];printf("a[%d,%d]=%d\n",index[j],j,s[j]);}i=s[1];k=0;for(j=1;j<m;j++)if(s[j]<i){i=s[j];k=j;}printf("min=a[%d,%d]=%d",index[k],k,i);}注:调试程序时,可以随意输入测试数据,最后运行本程序时,必须从键盘输入下列数据:641697138181551219【要求】:1.将上述程序录入到文件myf1.c中,然后根据题目的要求以及程序中语句之间的逻辑关系对程序中的错误进行修改。2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理语句,但不能增加其他语句,也不能删去整条语句。3.将改正后的源程序(文件名myf1.c)放在考试盘的根目录下,供阅卷用。二、编程题【题目】建立数组a[3][8],其中前两行元素产生方法是:用初值x1=26及公式xi+1=(25*xi+357)%1024,产生一个数列:x1,x2,…,x16。其中x1~x8作为a的第一行元素;x9~x16作为a的第二行元素;第三行的元素值取前两行同列元素的最大公约数。最后把数组a的元素写到文件myf2.out中,每写完a的一行元素要换行。【要求】1.将源程序取名为myf2.c输出结果文件取名为myf2.out。2.数据文件的打开、使用、关闭均按TURBOC文件操作实现。3.源程序文件和运行结果文件均需放在考试盘的根目录下,供阅卷用。4.不要将myf2.obj和myf2.exe保存到考试盘上。2001年秋季笔试题及上机题一、选择题21、均为非法常量的是(21)。A.–0x18,01177,0xf B.‘\\’,’\01’,12,456C.‘as’,-0fff,’\0xa’ D.0xabc,’\0’,”a”22、以下程序的运行结果是(22)。#include”stdio.h”#definePI3.14#defineF(y)((y)*(y))#defineP(a)printf(“%d”,a)main(){intx=PI;P(F(1+2)*x);}A.10 B.25 C.15 D.2723、ints[2]={0,1},*p=s;错误的是(23)。A.s++; B.p++; C.*p++; D.(*p)++;24、下列正确的声明说明语句是(24)。floatm=15,n=4,q=m%n;staticinty[16/2];charp[2][]={“DOS”,”WINDOWS”};char*p[]={“DOS”,”WINDOWS”,”UNIX”};25、a,b是不等的整数,(a/b)*b+a%b的值为(25)。A.a B.b C.a被b除的余数 D.a被b除商的整数部分26、inti,j;执行:j=(i=1,i+9)>9?i++||++i:++i;后,i,j的值为(26)。A.10,10 B。2,2 C。2,3 D。2,127、填空处应填(27)。A.search(c[3][4],12,8) B.search(&c[0][0],12,8)C.search(&c,12,8) D.search(**c,12,8)intsarch(intx[],intn,intk){intj;for(j=0;j<n;j++)if(x[j]==k)returnj;return–1;}main(){intk,c[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};if(___!=-1)printf(“found”);elseprintf(“notfound”);}28、struct{intx,y;}c[3]={{1,2},{2,3}};正确的语句是(28)。C[2]={3,4};C[2]=C[1];C[2]=C[1]-C[0];if(c[1]>c[0])c[2]=c[1];elsec[2]=c[0];29、表达式值为3的是(29)。structs{intd;structs*next;};staticstructsa[3]={1,&a[1],2,&a[2],3,&a[0]},*ptr=&a[0];A.ptr->dB.(ptr->next)->dC.(ptr+1)->next->dD.(ptr+2)->next->d30、以下程序的输出是(30)。main(){staticcharc[][6]={“QUICK”,”FOX”,”JEMP”,”DAZY”};staticchar*cp[]={c[0],c[1],c[2],c[3]},**cpp=cp;printf(“%c”,**++cpp);}A.F B.O C.A D.E二、填空题基本概念(共5分)函数值通过(1)语句返回(2)类型的函数没有返回值,故不能作为表达式分量。执行intb[3]={0,1,2};b[2]=b[(b[0]=2)+b[1]-1]-2;后,b[0]、b[1]、b[2]的各元素值为:(3)。执行下列程序后,s中的字符串为:(4)。#include”stdio.h”main(){FILE*fp;floatx=-1.2;chars[11]={0};fp=fopen(“a.dat”,”w+”);fprintf(fp,”%6.3f”,x);rewind(fp);fgets(s,10,fp);puts(s);fclose(fp);}变量b的初值为:(5)。inta[][4]={1,2,3,4,5,6,7,8,9},*p=&a[1][0],b=*(p-2)+*(p+2)-*(p+5);阅读程序题(共7分)以下程序的输出为:(6)。main(){inti=0,j=10,k=2,s=0;for(;i<=j;){i+=k++;s=s+i;}printf(“%d\n”,s);}以下程序的输出为:(7)。voidtrans(intm,intn){intq;if(m/n)trans(m/n,n);if((q=m%n)<10)printf(“%c”,q+’0’);elseprintf(“%c”,q-10+’a’);}main(){printf(“\n”);trans(35,12);}以下程序的输出为:(8)。intfunc(intm){staticintk=1;while(m)k*=m--;returnk;}main(){inti,j;i=func(3);j=func(5);printf(“%d%d\n”,i,j);}以下程序的输出第一行为:(9)第二行为:(10)voidrev(int*p,intn){intt;if(n>1){t=p[0];p[0]=p[n-1];p[n-1]=t;rev(p+1,n-2);}}main(){intj,a[5]={1,2,3,4,5};rev(a+1,4);for(j=0;j<5;j++)printf(“%d”,a[j]);printf(“\n”);rev(a,3);for(j=0;j<5;j++)printf(“%d”,a[j]);}以下程序的输出第一行为:(11)第三行为:(12)。main(){inta[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},j,k;for(j=1;j<4;j++){for(k=0;k<4;k++){if(j>k+1)continue;if(j<k)break;printf(“%d,”,a[j][k]);}printf(“\n”);}}完善程序(共18分)用递推法计算一级数的近似值,直到:|x(2n+1)/n!|<1e-6为止。级数:x-x3/(3*1!)+x5/(5*2!)-x7/(7*3!)+….+x(2n+1)/((2n+1)*n!)+…..#include<stdio.h>#include<math.h>floatg(floatx){floatt=x,sum=t,s=1;intn=0;while((13)>1e-6){n++;s=-s;t=t*(14);sum=sum+s*t/(15);}returnsum;}main(){floatx;scanf(“%f”,&x);printf(“s=%f”,g(x));}下列程序中函数mfgets实现了库函数fgets的功能,既从指定的文件中读一行字符(遇到回车符或文件结束符时,在该字符前出现的全部字符既为一行字符),保存到参数line指定的地址开始的内存单元中,函数返回值为保存已经读入的字符串的首地址。#include<stdio.h>char*mfgets(char*line,(16)){charch,*str=line;while((ch=fgetc(fp))!=EOF&&ch!=’\n’)(17)=ch;*str=’\0’;return((str==line)?NULL:(18));}main(){FILE*fp;chars[11];fp=fopen(“a.dat”,”r”);printf(“%s”,mfgets(s,fp));fclose(fp);}将1~20的自然数围成一圈,使其相邻的两数之和均为素数,程序中数组a存放1~20中的奇数,数组b存放1~20中的偶数,数组c存放最后结果(既满足上述性质的圈)。程序首先将1(奇数)放入c,从b中选一偶数放入c中,使相邻两数之和为素数;然后再从a中选一奇数放入c,使相邻两数之和为素数,重复此过程直到c中放满为止。intpr(intn)/*判断n是否为素数*/{inti,flg=1;for(i=2;j<=n/2;i++)if(n%i==0)(19);returnflg;}ints(intx[],intm,inti)/*在x[1]至x[i]中找到一个数与m之和为素数*/{intf=1,n=0;while((20))if(x[i]==0)i--;else{n=x[i];if((21)){x[i]=0;f=0;}elsei--;}if(i>0)returnn;elsereturn0;}main(){inta[11],b[11],c[21],i,j,k,m,n;for(i=1;i<=10;i++){a[i]=2*i-1;b[i]=2*i;}c[1]=a[1];m=c[1];a[1]=0;j=2;whike(j<=20){if(m%2)n=s(b,m,10);elsen=s(a,m,10);if(n>0){c[l]=n;k++;(22);}else{printf(“fail!\n”);exit(0);}}if(pr(c[1]+n)){printf(“\nsuccess!”);for(j=1;j<=20;j++)printf(“%d“,c[j]);}elseprintf(“fail!\n”);}以下程序从文件in.dat中读入一组整数,其中每个整数代表一个字符串(例如,10代表字符串”for”),用查表方法将所有读入的整数转换成对应的字符串,按顺序存放在数组text中并输出。struct{intcode;charstr[10];}tab[10]={10,”for”,11,”while”,12,”do”,13,”if”,14,”else”,15,”switch”,16,”break”,17,”goto”,18,”case”,19,”continue”};main(){FILE*fp;intn,loc,j;chartext[80],*pt=(23);fp=fopen(“in.dat”,”r”);if(fp==NULL)exit(1);while(!feof(fp)){fscanf(fp,”%d”,&n);loc=find(n);if(loc>=0){strcat(pt,tab[loc].str);pt+=(24);}}*pt=’\0’;puts(text);}intfind(intn)/*折半查找法*/{intlow=0,high=9,mid;while(low<=high){mid=(low+high)/2;if(n==tab[mid].code)returnmid;elseif(n>tab[mid].code)low=(25);elsehigh=mid-1;}(26);}设链表上的结点的数据结构定义如下:structnode{intx;structnode*next;};假设已经建立了一个链表,h为链首指针。函数deladd的功能是:若链表上能找到结点的x值为value,则从链表上删除该结点(假定链表上的各个结点的值是不同的);否则构造一个新结点,其值为value,并将新结点插入链尾。该函数要求返回新链表的首指针。structnode*deladd(structnode*h,intvalue){structnode*p1,*p2;intflag=0;p1=p2=h;while(p1&&flag==0){if(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=(structnode*)malloc(sizeof(structnode));p1->x=value;p1->next=0;if(h==0)h=p1;else(30);}returnh;}2001年秋上机试卷一、改错题【题目】下面的程序判断一个正整数是否为降序数,再打印组成该整数的每个字符。设正整数m=d0d1d2d3…dk-1,若满足di>=di+1,i=0,1,…,k-2,则m就是一个降序数,如21、433是两个降序数。含有错误的源程序如下:voidmain(){intnum,k,di,n,isdec;longm;chardigit[10];scanf("num=%d",num);for(;num>0;num--){n=0;isdec=1;k=0;scanf("%ld",&m);while(m!=0){di=m%10;digit[n++]=m%10;m=m/10;if(k<=di)k=di;elseisdec=0;}for(;n>=0;n--){putchar(digit[n]);putchar('');}if(isdec)printf("isdecreaordernumber\n");elseprintf("isnotdecreaordernumber\n");}}【要求】1.将上述程序录入到文件myf1.c中,然后根据题目的要求以及程序中语句之间的逻辑关系对程序中的错误进行修改。2.改错时,可以修改语句中的一部分内容,调整语句的次序,增加少量的变量说明或编译预处理命令,但不能增加其他语句,也不能删去整条语句。3.改正后的源程序myf1.c保存在考试盘的根目录下,供阅卷用,否则不予评分。二、编程题【题目】程序功能:将一字符串做压缩处理。编程要求:1.编写一个函数intcompress(chars[]),将s中连续出现的多个相同字符压缩成一个字符,统计被删除的字符个数,并返回被删除的字符个数。2.编写主函数main。从键盘上读入一行字符数据放入一个字符型数组中,调用compress函数对该字符数组中的字符做压缩处理,将压缩后的字符串写入结果文件myf2.out中。3.用以下数据测试程序:@@@@@@Iwwillllsuccessful&&&&&&andyoutoo!!!!!!##########【要求】1.将源程序文件取名为myf2.c,输出结果文件取名为myf2.out。2.数据文件的打开、使用和关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。3.源程序文件和运行结果文件均需保存在考试盘的根目录下,供阅卷用。4.不要复制扩展名为OBJ和EXE的文件到考试盘上。2002年春季笔试题及上机题选择题21、以下标识符中,(21)不能作用户标识符。 A、scanfB、for C、_sum D、F222、已有声明语句“”,与表达式charch=’B’的值不相同的表达式是(22)。(字符A的ASCII码以十进制表示为65) A、ch=0x42 B.Ch=0102 C.ch=’\102’ D.ch=06623、若要对a进行++运算,则a应具有以下说明(23)。 A.inta[3][2] B.Char*a[]={“12”,”ab”}; C.intb[10],*a=b; D.Char(a)(char)24、以下对于break语句使用的正确陈述是(24)。 A、任何位置 B、循环或switch结构中 C、只在switch结构中 D、只在循环结构中25、若有声明“inta=5,b=4,c=3,*p=&a;”,则下列(25)表达式语句是正确的。(*p)++=c;B.*(*p)++;C.printf(a%4==0?”%3d\n”:”%3d”,*p);D.a>20?return*p-20:return*p-1;26、设“intx=2,y=3,z=(++x<=y--)?((--y==1)?y--:--y):y--;”,则x,y,z的值为(26)。 A.3,0,1 B.2,0,0 C.3,1,1 D.2,2,127、下列程序的运行结果(27)。 A.45 B.33 C.17 D.27 main() {staticinta[3][3]={1,3,5,7,9,11,13,15,17},y,x,*p=&a[2][2]; for(x=0;x<3;x++)y+=*(p-4*x); printf(“\n%d”,y);}28、设有函数f的定义如下: Voidf(intx,int*y) {y=x*x*x;} main() {intj,c[4]={1,2,3,4},s[4]={0}; for(j=0;j<4;j++) /*调用f函数*/ printf(“%d”,s[j]);}若在main函数中欲调用函数f,则正确的调用语句是(28)。 A.f(c,s) B.f(c[i],s[i]);C.f(*(c+i),&s[i]);D.f(c+i,s+i);29、设有定义如下:typedefstruct{intx,y;}POINT;typedefenum{RED,YELLOW,BLUE,GREEN}COLOR;struct{POINTxy;COLORc;}pixel,*p=&pixel;以下对变量pixel的赋值操作中正确的是(29)。pixel={1,2,BLUE};scanf(“%d%d%d%d”,p->xy.x,p->xy.y,&pixel.c);p->xy.x=1;p->xy.y=2;p->c=BLUE;D、scanf(“%d%d”,&pixel.xy);pixel.color=2;30、执行以下程序段后,x,w的值为(30)。intx=0,y=1,z=2,w;if(x++)w=x;elseif(x++&&y>=1)w=y;elseif(x++&&z>1)w=z;A.0,1 B.1,1 C.2,1 D.3,2二、填空题基本概念(共5分)一个C程序须有一个且只有一个(1)函数。intk=1;执行:while(k++<5);后k的值为:(2)。在程序中需要调用sqrt函数时必须包含头文件(3).FILE*fp1,*fp2;longa[2]={12345678,12345678};执行:fp1=fopen(“f1.dat”,”w”);fprintf(fp1,”%ld%ld”,a[0],a[1]);fclose(fp1);fp2=fopen(“f2.dat”,”wb”);fwrite(a,sizeof(long),2,fp2);fclose(fp2);f1,dat,f2.dat文件的长度分别是:(4)字节和(5)字节。阅读程序(共7分)以下程序运行后输出(6)。#include<stdio.h>intf(char*s1,char*s2){staticintn1,n2;while(*s1++)n1++;while(*s2++)n2++;returnn1-n2;}main(){printf(“%d”,f(“c:\\program”,”\12a\t34\n”));}下列程序运行后,x的值(7)。main(){intx,y;for(x=1,y=1;x<=100;x++){if(y>=20)break;if(y%3==1){y+=3;continue;}y-=5;}printf(“%d\n”,x);}以下程序运行后输出(8)。#include<stdio.h>#include<string.h>main(){chars[20]=”acef”,s1[]=”bd”;inti,j,k;for(k=0;s1[k]!=’\0’;k++){j=0;while(s1[k]>=s[j]&&s[j]!=’\0’)j++;for(i=strlen(s);i>=j;i--)s[i+1]=s[i];s[j]=s1[k];}puts(s);}以下程序运行后输出结果的第一行是(9),第二行是(10)。intm=5,n=7,a[10]={0,1,2};voidf1(void);voidf2(intm);main(){inti;for(i=0;i<7;i++)f1();f2(1);printf(“\n%d,%d”,a[m],a[n]);}voidf1(void){staticintn=3;a[n]=a[n-1]+a[n-2]+a[n-3];n++;}voidf2(intm){for(;m<3;m+=2){intm;for(m=1;m<4;m++)printf(“%d,”,a[m++]);}}以下程序运行后输出结果的第一行是(11),第二行是(12)。0externintm1,m2;voidfun(intn,int*p1,int*p2){inti;*p1=1;*p2=1;for(i=1;i<=n;i++){*p1+=3;*p2*=3;}m1+=*p1;m2+=*p2;}intm1,m2;main(){inti,k1[4],k2[4];for(i=0;i<4;i++)fun(i,&k1[i],&k2[i]);for(i=0;i<4;i++)printf(“%d,”,k1[i]);printf(:%d\n”,m1);for(i=0;i<4;i++)printf(“%d,”,k2[i]);printf(“%d”,m2);}完善程序(共18分)以下程序中函数encode完成一字符串的加密功能。将s1字符串中的字符经过变换后保存在s2指向的数组中。二维数组cs保存了一个明码密码对照表,第一行是明码字符,第二行是对应的密码字符。加密方法如下:从s1字符串中每取一字符,均在cs表中第一行中查找有无该明码字符,若找到则将对应的密码字符放入存入s2中,否则将s1中的原有字符放入s2中。#include<string.h>#include<stdio.h>charcs[2][10]={“aceghjlnp”,”fonptiude”};voidencode(char*s1,char*s2){intn,i,j;for(n=0;s1[n]!=’\0’;n++){for(i=0;i<10&&s1[n]!=cs[0][i];(13))if(i<10)s2[n]=(14);elses2[n]=(15);}s2[n]=’\0’;}main(){charts[80]=”jntwrnwt”,td[80];encode(ts,td);puts(td);}11、以下程序依次输入某单位没位职工的姓名和工资数(整数型),然后计算发放工资时所需发给每位职工的不同面值纸币张数,并计算总和以及累计所需不同币值纸币的张数。#include<stdio.h>#include<string.h>struct{charname[10];/*姓名*/inttotal;/*工资数*/intmnum[7];/*发放工资时所需不同币值纸币的张数*/}st[21];intmvalue[7]={100,50,20,10,5,2,1};main(){FILE*fp;intn=0,i,j,wage;fp=fopen(“wage.dat”,”r”);if(fp==NULL)exit(1);while(!feof(fp)){fscanf(fp,”%s%d”,st[n].name,&st[n].total);wage=st[n].total;for(j=0;j<7&&wage;j++){st[n].mnum[j]=(16);wage=(17);}(18);}strcpy(st[n].name,”summary”);for(i=0;i<n;i++){st[n].total+=st[i].total;for(j=0;j<7;j++)st[n].mnum[j]+=(19);}for(i=0;i<n+1;i++){printf(“\n%s%d=”,st[i].name,st[i].total);for(j=0;j<7;j++)printf(“%d“,st[i].mnum[j]);}}12、以下函数的功能是以十进制字符形式打印出任一int型数。#include<stdio.h>voidf(intn){intj;if(n<0){putchar(‘-‘);(20);}if((21)!=0)f(j);putchar((22)+’0’);}13、以下程序中函数maxmin的功能是:对于x中存储的任意一个四位整数,求出:(1)组成以这个整数的四个数字由大到小排列后构成的最大的四位数;(2)组成以这个整数的四个数字由小到大排列后构成的最小的四位数;。#include”stdio.h”voidmaxmin(intx,int*pmax,int*pmin){intnum[4],i,j,k,t;*pmax=0;*pmin=0;for(i=0;i<4;i++){num[i]=x%10;x=(23);}for(i=0;i<3;i++){k=i;for(j=i+1;j<4;j++)if(num[k]<num[j])k=j;if((24)){t=num[i];num[i]=num[k];num[k]=t;}}for(i=0;i<4;i++){*pmax=*pmax*10+(25);*pmin=*pmin*10+(26);}main(){intn=3169,max=0,min=0;maxmin(n,&max,&min);printf(“\n%d%d”,max,min);}14、设链表上的结点的数据结构定义如下:structnode{intx;structnode*next;};函数create的功能是:创建一个有序的链表(结点中x的值按升序排列),链表中结点的个数为参数n的值,函数返回该有序链表的头指针。算法思想如下:每产生一个新结点,插入到链表中的恰当位置,使得插入新结点后的链表仍然保持有序。(27)creat(intn){structnode*p,*p1,*p2,*h=NULL;inti=0;if(n<1)returnNULL;while((28)){p=(structnode*)malloc(sizeof(structnode));scanf(“%d”,&p->x);p->next=NULL;if(h==NULL)(29);else{p1=p2=h;while(p2&&p->x>=p2->x){p1=p2;p2=p2->next;}if(p2==h){(30);h=p;}else{p->next=p2;p1->next=p;}}i++;}returnh;}2002年春上机试卷一、改错题【题目】下面的程序能够从键盘上接受一个含有空格的字符串,然后按照字典序对所有字符排序,再删除重复出现的字符。含有错误的源程序如下:#include"stdio.h"voidmain(){charstr[100],*p,*q,*r,c;printf("Inputastring:");scanf("%s",str);for(p=str;*p;p++){for(q=r=p;*q;q++)if(*r>*q)*r=*q;if(r/=p){c=*r;*r=*p;*p=c;}}for(p=str;*p;p++){for(q=p;*p==*q;q++);strcpy(p+1,q);}printf("result:%s\n",str);}【要求】1.将上述程序录入到文件myf1.c中,然后根据题目的要求以及程序中语句之间的逻辑关系对程序中的错误进行修改。2.改错时,可以修改语句中的一部分内容,调整语句的次序,增加少量的变量说明或编译预处理命令,但不能增加其他语句,也不能删去整条语句。3.改正后的源程序myf1.c保存在考试盘的根目录下,供阅卷用,否则不予评分。二、编程题【题目】程序功能:将一个4×4二维数组中全部元素逆时针旋转90°。编程要求如下:1.编写函数introtate(inta[4][4],intb[4][4]),将数组a中元素逆时针旋转90°后的元素保存在数组b中,计算b数组主对角线上全部元素之和作为函数的返回值。2.编写主函数main,从键盘上读入16个数据放入一个二维数组中,调用rotate函数,将旋转后的二维数组全部元素按行写入到结果文件myf2.out中,最后将旋转后数组中主对角线上全部元素之和写入到结果文件myf2.out中。3.使用以下测试数据:旋转前:旋转后:1591313141516261014910111237111556784812161234【要求】1.将源程序文件取名为myf2.c,输出结果文件取名为myf2.out。2.数据文件的打开、使用和关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。3.源程序文件和运行结果文件均需保存在考试盘的根目录下,供阅卷用。4.不要复制扩展名为OBJ和EXE的文件到考试盘上。2002年秋季笔试题及上机题一、选择题21.若有声明语句“chars1[10]={0},s2[10]="books";”,则能将字符串"books"赋给数组s1保存的表达式是____________。A.s1="books";B.strcpy(s2,s1);C.s1=s2;D.strcat(s1,s2);22.表达式“(a=4*5,b=a*2),b-a,a+=2”的值是_____________。A.2B.20C.22D.4223.以下是一个自定义函数的头部,其中正确的是___________。A.intfun(inta[],b)B.intfun(inta[],inta)C.intfun(int*a,intb)D.intfun(chara[][],intb)24.以下数组声明语句中正确的是______________。A.intn,a[n];B.inta[];C.inta[2][3]={{1},{2},{3}};D.inta[][3]={{1},{2},{3}};25.已知在某C语言编译系统中表达式sizeof(int)的值是2,如果希望将常量-70000正确地保存在一个变量a中,该变量声明语句应当是____________。A.inta;B.longinta;C.unsignedinta;D.unsignedlonginta;26.以下声明语句中,用于声明一个行指针变量的是____________。A.int*p(int);B.int*p;C.int(*p)[3];D.int(*p)(int);27.已知A盘根目录下的一个文本数据文件data.dat中存储了100个int型数据,若需要修改该文件中已经存在的若干个数据的值,只能调用一次fopen函数,已有声明语句“FILE*fp;”,则fopen函数的正确调用形式是__________。A.fp=fopen("a:\\data.dat","r+");B.fp=fopen("a:\\data.dat","w+");C.fp=fopen("a:\\data.dat","a+");D.fp=fopen("a:\\data.dat","w");28.在以下程序中,需要在fun函数中声明一个int型变量,以下选项中________不能用作该变量的名字。#include<math.h>inty;main(){inta=1;fun(a);}intfun(intx){__________;/*int型变量声明语句位置*/……/*若干执行语句*/}A.xB.yC.fabsD.fun29.如有语句“intx,y=0,z,*p[3];p[0]=&x;p[1]=&y;p[2]=&z;”,以下表达式中有语法错误的是__________。A.y++B.p++C.++p[0]D.(*p[0])++30.设有声明语句“inta[3][3]={1,2,3,4,5,6,7,8,9};”,以下语句中除___________外均能输出a[1][2]的值。A.printf("%d",*(*(a+1)+2));B.printf("%d",*(&a[2][0]-1));C.printf("%d",*(a[1]+2));D.printf("%d",*(a+1)[2]);二、填空题·基本概念题只能在循环体中出现的语句是_______________语句。&既可以用作单目运算符也可以用作双目运算符,其中用作单目运算符时表示的功能是____________。包含二目运算符的表达式可一般地表示为(x)op(y),其中op代表运算符,x、y代表操作数。若op是“+”运算符,且x和y均为常量时,不能同时为___________常量。当______________语句被执行时,程序的执行流程无条件地从一个函数跳转到另一个函数。在函数内部声明局部变量时缺省了存储类型,该变量存储类型为____________。·阅读程序写出运行结果题以下程序段运行后,x、y、z的值分别是______________。intx=0,y=3,z=2;if(x++&&y++)z--;elseif(x+1==6||y--)z++;设有以下宏定义:#defineN3#defineY(n)((N+1)*n)则执行语句“z=2*(N+Y(5+1));”后,z的值是_______________。[程序]intx=1;main(){inty,k;y=f(3);printf("%d\n%d",x,y);}intf(intx){if(x==3){intx=2;returnx;}elsereturnx;}该程序运行后,输出x的值是_________________,y的值是____________________。[程序]main(){inta[3][3]={1,2,3,4,5,6,7,8,9},m,k,t;for(m=0;m<3;m++)for(k=0;k<=m;k++)if((m+k)%2)t=a[m][k],a[m][k]=a[k][m],a[k][m]=t;for(m=0;m<3;m++){for(k=0;k<3;k++)printf("%d",a[m][k]);printf("\n");}}该程序执行时输出第一行是_______________,第二行是_________________。10.[程序]#include<string.h>intconvert(chars1[],chars2[],int*n1){inti=0,j=0,k,s=0,len;intvalue=0;chartab[16]="0123456789ABCDEF";len=strlen(s1);if(len%4){for(i=0;i<len%4;i++)s=s*2+s1[i]-'0';s2[j++]=tab[s];value=value*16+s;}while(i<len){s=0;for(k=0;k<4;k++)s=s*2+s1[i+k]-'0';s2[j++]=tab[s];value=value*16+s;i=i+4;}s2[j]='\0';*n1=strlen(s2);returnvalue;}main(){charss1[]="1001010",ss2[10];intx,y;y=convert(ss1,ss2,&x);printf("%d\n%d\n%s",x,y,ss2);}该程序执行时输出第一行是_________,第二行是___________,第三行是___________。11.[程序]main(){inta[3][3],i,j;numlist(&a[0][0],9);for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%d,",a[i][j]);printf("\n");}}numlist(int*p,intn){inti;for(i=0;i<n;i++)p[i]=num(i);}num(intn){if(n==0)return1;returnnum(n-1)*2+1;}程序执行时输出的第一行是_________________。·完善程序题12.程序功能是:合并两个已经按照升序排列的一维数组。insert函数功能是:将m插入x指向的含有n个元素的数组中,数组中n个元素已按升序排列,插入m后的n+1个元素仍保持有序。voidinsert(intx[],intn,intm);main(){inta[10]={1,3,5,7,9},b[5]={2,4,8,16,32},k;for(k=0;k<5;k++){insert(a,___________,b[k]);}for(k=0;k<10;k++)printf("%d",a[k]);}voidinsert(intx[],intn,intm){inti,j;if(m>x[n-1])_____________=m;else{for(i=0;_____________;i++);for(j=n;j>=i;j--)x[j]=_________;x[i]=m;}}13.程序功能是:查找满足下列条件的m、n的值。给定正整数k,0<m≤k,0<n≤k,求使(n2-mn-m2)2=1且使n2+m2的值达到最大的m、n的值。#include<stdio.h>main(){longm,n,k,s,flag=0;printf("inputk:");scanf("%ld",&k);n=k;do{m=__________;do{s=n*(n-m)-m*m;if(s*s==1)______________;elsem--;}while(m>0&&!flag);if(m==0)______________;}while(n>0&&!flag);printf("m=%ld,n=%ld",m,n);}14.已知某链表中结点的数据结构定义如下:#include<stdio.h>structnode{intx;structnode*next;};函数loop的功能是:根据dir的值循环移位head指向的链表中的所有结点,当dir为正数时实现循环右移一次,否则循环左移一次。函数返回链表首结点的指针。例如,移位前的链表数据:head->1->3->5->4,右移一次后的链表数据:head->4->1->3->5。算法提示:循环右移时,将链表最后一个结点删除,再将其插入到链表首部;循环左移时,将链表第一个结点删除,再将其连接到链表尾部。structnode*loop(structnode*head,intdir){structnode*p1,*p2;p1=head;if(p1==NULL||p1->next==NULL)returnhead;if(dir>=0){while(p1->next){p2=p1;p1=p1->next;}_______________=NULL;p1->next=___________;head=p1;}else{head=________________;p2=head;while(p2->next)p2=p2->next;____________________;p1->next=NULL;}returnhead;}15.程序功能是:在一行文本中查找给定的单词。一行文本由字母和分隔符组成,分隔符包括若干空格、逗号、句号和换行符。一个单词由若干个连续字母组成。程序说明:main函数中word数组存放欲查找的单词。find_word函数完成在t字符串中查找s指向的字母字符串的功能,如未找到则返回0,否则返回s串在t串中出现的次数,并将所有出现位置的起始下标保存在x指向的数组中。#include<stdio.h>#include<string.h>#include<ctype.h>intfind_word(char*,char*,int*);main(){chartext[80]="Iwillpasstheexaminationinthesummerholiday.",word[20];intj,t,pos[10];puts("enterawordtobefound:");gets(word);t=find_word(text,word,__________);if(_________){printf("Findword'%s'intext.Itlocatein",word);for(j=0;j<t;j++)printf("text[%d]",pos[j]);}elseprintf("notfind");}intfind_word(char*t,char*s,int*x){charw[20];inti,j,k=0;for(i=0;t[i]!='\0';i++){if(isalpha(t[i])){for(j=0;isalpha(t[i+j]);j++)w[j]=__________;w[j]='\0';if(strcmp(s,w)==0)x[k++]=i;i=__________;}}returnk;}2002年(秋)上机试卷改错题【题目】使用Windows搜索工具在磁盘中查找文件时,在被查找的文件名文本框内允许出现含有通配符“*”和“?”的字符串,以达到搜索多个文件的目的,称这样一个字符串为模板。搜索的过程就是在已知的若干文件名字符串中查找与模板匹配的文件名。以下程序实现模板与字符串的匹配判断功能。给出一个模板pat及一个字符串str,模板中可能含有通配符“*”和“?”,其中“*”表示在该位置上有0个或多个任意字符,“?”表示在该位置上有一个任意字符。函数match对它们作匹配判断后,返回1表示匹配,返回0表示不匹配。例如,模板为“e*p?e”,若字符串为“example”,则两者是匹配的;若字符串为“europe”,则两者是不匹配的。程序正确时,当输入的模板为“e*p?e”,若输入字符串为“example”时,则输出“e*p?ematchexample”;若输入字符串为“europe”时,则输出“e*p?eunmatcheurope”。含有错误的源程序如下:voidmatch(char*pat,charstr){char*p=pat,*q=str;inti=0;while((*p!=NULL)&&(*q!=NULL))if(*p==*q||*p=='?')p++,q++;elseif(*p=='*'){p++;while(*q!=*p&&*q!=NULL)q++;}elsei=0;break;if(*p!=NULL||*q!=NULL)i=0;returni;}main(){chara[10],b[10];intyesno;gets(a);gets(b);yesno=match(a,b);printf("%s%s%s\n",a,yesno?"match":"unmatch",b);}【要求】将上述程序录入到文件myf1.c中,然后根据题目的要求以及程序中语句之间的逻辑关系对程序中的错误进行修改。改错时,可以修改语句中的一部分内容,调整语句的次序,增加少量的变量说明或编译预处理命令,但不能增加其他语句,也不能删去整条语句。改正后的源程序myf1.c保存在考试盘的根目录下,供阅卷用,否则不予评分。编程题【题目】有一些十进制整数对ab和cd具有如下特性:ab×cd=ba×dc,其中,a、b是不同的数字且c、d也是不同的数字。例如:12×42=21×24,12×63=21×36,12×84=21×48请按如下要求编程:编写函数intinv(intx),完成将两位数x的个位与十位对换,返回对换后新的两位数。主函数中找出m、n取值在30~50之间,且满足等式:m*n=inv(m)*inv(n)的所有m、n值,并按上述等式的格式写入到文件myf2.out中(每个等式一行,×可用*表示)。【要求】将源程序文件取名为myf2.c,输出结果文件取名为myf2.out。数据文件的打开、使用和关闭等操作均用C语言标准库中缓冲文件系统的文件操作函数实现。源程序文件和运行结果文件均需保存在考试盘的根目录下,供阅卷用。不要将myf2.obj和myf2.exe保存到考试盘上。2003年春季笔试题及上机题一、选择题21.已知有声明语句intx=8,则下列表达式中,值为2的是: A.x+=x-=x B.x%=x-2 C.x>8?x=0:x++ D.x/=x+x22.以下关于函数的叙述中,正确的是:在函数体中可以直接引用另一个函数中声明为static类别的局部变量的值。在函数体中至少必须有一个return语句在函数体中可以定义另一个函数在函数体中可以调用函数自身23.若有声明语句“inta[10],b[3][3];”,则以下对数组元素赋值的操作中,不会出现越界访问的是: A.a[-1]=0 B.a[10]=0 C.b[3][0]=0 D.b[0][3]=024.数组和链表都可以用于存储一组彼此有关联的数据,以下说法中不正确的是:数组占用一块连续的存储区域,链表可能占用若干不连续的存储区域数组和链表所占用的存储区域均不能在程序运行期间动态地分配数组中的数据可以随机存取或顺序存取,链表中的数据只能顺序存取数组的长度是固定的,链表的长度是不固定的25.设有定义和声明语句:typedefstructdtype{inta;structdtype*b;}node;staticnodex[3]={5,&x[1],7,&x[2],9,'\0'}
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中心理主题设计2025年
- 麻纺厂销售区域管理细则
- 服装厂产品包装规范细则
- 麻纺厂生产设备运行管理
- Unit 4 My room教学设计-2025-2026学年小学英语四年级下册外研剑桥(Join in)版(刘兆义主编)
- 西师大版二年级下册六 时 分 秒时、分、秒教学设计及反思
- 某铝塑包装厂印刷标准
- 患者身份识别制度实施细则
- 小学防性侵主题班会说课稿
- 车辆加油费用管控细则
- 关工委制度文档
- 中英文课外阅读:黑骏马
- 单基因遗传病的分子生物学检验-医学院课件
- 华为智慧化工园区解决方案-
- 定量分析化学第六章重量分析法
- GB/T 37942-2019生产过程质量控制设备状态监测
- GB/T 2672-2017内六角花形盘头螺钉
- 电工巡视记录表(施工单位存放)
- 餐饮安全管理规章制度
- 装配钳工技能大赛实操试卷
- 配怀舍饲养管理操作流程
评论
0/150
提交评论