第1页共11页一、单项选择题:(10分,每题2分)1.char*p[10];该语句声明了一个:。A)指向含有10个元素的一维字符型数组的指针变量pB)指向长度不超过10的字符串的指针变量pC)有10个元素的指针数组p,每个元素可以指向一个字符串D)有10个元素的指针数组p,每个元素存放一个字符串2.若intx;且有下面的程序片断,则输出结果为:。for(x=3;x6;x++){printf((x%2)?##%d:**%d\n,x);}A)##3B)**3C)**3D)##3**4**4##4##4**5##5##5**53.在while(!x)语句中的!x与下面条件表达式等价的是:。A)x!=0B)x==1C)x!=1D)x==04.已知structpoint{intx;inty;};structrect{structpointpt1;structpointpt2;};structrectrt;structrect*rp=&rt;则下面哪一种引用是不正确的_______。A)rt.pt1.xB)(*rp).pt1.xC)rp-pt1.xD)rt-pt1.x5.若二维数组a有m行n列,则下面能够正确引用元素a[i][j]的为:。A)*(a+j*n+i)B)*(a+i*n+j)C)*(*(a+i)+j)D)*(*a+i)+jCDDDC二、分析程序并写出运行结果。(25分,每题5分)1.#includestdio.hmain(){intn;staticchar*monthName[]={Illegalmonth,January,February,March,April,May,June,July,August,September,October,November,December};第2页共11页for(n=1;n=12;n++){printf(%s\n,monthName[n]);}}运行结果是:JanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecember2.#includestdio.h#defineARR_SIZE7voidYH(inta[][ARR_SIZE],intn);voidPrintYH(inta[][ARR_SIZE],intn);main(){inta[ARR_SIZE][ARR_SIZE];YH(a,ARR_SIZE-1);PrintYH(a,ARR_SIZE-1);}voidYH(inta[][ARR_SIZE],intn){inti,j;for(i=1;i=n;i++){for(j=1;j=i;j++){if(j==1||i==j){a[i][j]=1;}else{a[i][j]=a[i-1][j-1]+a[i-1][j];第3页共11页}}}}voidPrintYH(inta[][ARR_SIZE],intn){inti,j;for(i=1;i=n;i++){for(j=1;j=i;j++){printf(%4d,a[i][j]);}printf(\n);}}运行结果是:111121133114641151010513.#includestdio.hmain(){inti,n;for(i=1;i=5;i++){printf(Pleaseentern:);scanf(%d,&n);if(n=0)continue;printf(n=%d\n,n);}printf(Programisover!\n);}程序运行时输入:1-23-45↙运行结果是:n=1Pleaseentern:Pleaseentern:n=3Pleaseentern:Pleaseentern:n=5Programisover!4.#includestdio.hvoidFunc(intn);main()第4页共11页{inti;for(i=0;i2;i++){Func(i);}}voidFunc(intn){staticintt=1;printf(t=%d\n,t++);}运行结果是:t=1t=25.#includestdio.hintFunc(inti);main(){inti;for(i=3;i5;i++){printf(%d,Func(i));}printf(\n);}intFunc(inti){staticintk=10;for(;i0;i--){k++;}return(k);}运行结果是:1317三、阅读并完成程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。(20分,每空2分)1.下面程序用于读入10个字符串,然后找出最大的字符串并打印。#includestdio.h#includestring.hmain(){charstr[10][80],maxstring[80];第5页共11页inti;printf(Entertenstrings:\n);for(i=0;i10;i++){scanf(%s,str[i]);}strcpy(maxstring,str[0]);for(i=1;i10;i++){if(strcmp(maxstring,str[i])0)或strcmp(str[i],maxstring)0{strcpy(maxstring,str[i]);}}printf(Themaxstringis:%s\n,maxstring);}2.下面这个程序用于交换两个数组的对应元素的值。#includestdio.h#defineARRAY_SIZE10voidSwap(int*x,int*y);voidExchange(inta[],intb[],intn);voidInputArray(inta[],intn);voidPrintArray(inta[],intn);main(){inta[ARRAY_SIZE],b[ARRAY_SIZE],n;printf(Inputarraylenthn=10:);scanf(%d,&n);printf(Inputarraya:\n);InputArray(a,n);printf(Inputarrayb:\n);InputArray(b,n);Exchange(a,b,n);printf(Afterswap:\n);printf(Arraya:\n);PrintArray(a,n);printf(Arrayb:\n);PrintArray(b,n);}voidSwap(int*x,int*y){inttemp;temp=*x;第6页共11页*x=*y;*y=temp;}voidExchange(inta[],intb[],intn){inti;for(i=0;in;i++){Swap(&a[i],&b[i]);}}voidInputArray(inta[],intn){inti;for(i=0;in;i++){scanf(%d,&a[i]);}}voidPrintArray(inta[],intn){inti;for(i=0;in;i++){printf(%d,a[i]);}printf(\n);}3.从键盘任意输入一个年号,判断它是否是闰年。若是闰年,输出Yes,否则输出No。已知符合下列条件之一者是闰年:能被4整除,但不能被100整除。能被400整除。#includestdio.hmain(){intyear,flag;printf(Enteryear:);scanf(%d,&year);if(year%4==0&&year%100!=0||year%400==0){flag=1;}else第7页共11页{flag=0;}if(flag){printf(Yes!\n);}else{printf(No!\n);}}四、在下面给出的4个程序中,共有15处错误(包括语法错误和逻辑错误),请找出其中的错误,并改正之。(在错误的代码下边画一根横线,把正确的代码写在旁边;漏掉的代码正确插入合适的位置。30分,每找对1个错误,加1分,每修改正确1个错误,再加1分。)1.编程计算矩阵相乘之积。#includestdio.h#defineROW2#defineCOL3//voidMultiplyMatrix(inta[ROW][COL],intb[COL][ROW],intc[ROW][ROW]);main(){inta[ROW][COL],b[COL][ROW],c[ROW][ROW],i,j;printf(Inputarraya:\n);for(i=0;iROW;i++){for(j=0;jCOL;j++){scanf(d,&a[i][j]);//%d}}printf(Inputarrayb:\n);for(i=0;iCOL;i++){for(j=0;jROW;j++){scanf(d,&b[i][j]);}}MultiplyMatrix(a,b,c);printf(Results:\n);for(i=0;iROW;i++){for(j=0;jROW;j++){第8页共11页printf(%6d,&c[i][j]);//c[i][j]}printf(\n);}}voidMultiplyMatrix(inta[ROW][COL],intb[COL][ROW],intc[ROW][ROW]){inti,j,k;for(i=0;iROW;i++){for(j=0;jROW;j++){for(k=0;kCOL;k++){//c[i][j]=0;c[i][j]=c[i][j]+a[i][k]*b[j][k];//b[k][j]}}}}2.编程输入10个数,找出其中的最大值及其所在的数组下标位置。#includestdio.hintFindMax(intnum[],intn,int*pMaxPos);main(){intnum[10],maxValue,maxPos,minValue,minPos,i//;printf(Input10numbers:\n);for(i=0;i10;i++){scanf(%d,num[i]);//&num[i]}maxValue=FindMax(num,10,*maxPos);//&maxPosprintf(Max=%d,Position=%d\n,maxValue,maxPos);}intFindMax(intnum[],intn,int*pMaxPos){inti,max;max=num[0];for(i=1,in,i++)//i=1;in;{if(num[i]max){max=num[i];*pMaxPos=i;第9页共11页}}returnmax;}3.韩信点兵。韩信有一队兵,他想知道有多少人,便让士兵排队报数:按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10。你知道韩信至少有多少兵吗?#includestdio.hmain(){intx;//x=0while(1){if(x%5=1&&x%6=5&&x%7=4&&x%11=10)//x%5==1&&x%6==5&&x%7==4&&x%11==10{break;}x++//x++;}printf(x=%d\n,x);}4.下面函数Squeez()的功能是删除字符串s中所出现的与变量c相同的字符。voidSqueeze(chars[],charc);//voidSqueeze(chars[],charc){inti,j;//j=0;for(i=0;s[i]!='\0';i++){if(s[i]!='c')//c{s[j]=s[i];j++;}s[i]='\0';//s[j]='\0';}或//s[j]='\0';}五、编程(15分)从键盘任意输入某班10个学生的成绩,调