C填空题50题.doc
一、程序填空 共50题 (共计1500分)第1题 (30.0分) 题号:625/*-【程序填空】-功能:有一整数数组x(正序排列),判断是否有数组元素xi=i 的情况发生。-*/int index_search(int x, int n) int first = 0; int last = n-1; int middle, index; index = -1; while (first <= last) middle = (first + last) / 2; /*SPACE*/ if (【?】) index = middle; break; /*SPACE*/ else if (【?】) last = middle - 1; else first = middle + 1; return index;#include <stdio.h>void main(void) int x = -1, 0, 1, 3, 5, 7, 9, 10; int n = sizeof(x)/sizeof(int); int answer, i; printf("nIndex Search Program"); printf("n="); printf("nnGiven Array :"); for (i = 0; i < n; i+) printf("%5d", xi); /*SPACE*/ 【?】; if (answer >= 0) printf("nnYES, x%d = %d has been found.", answer, answer); else printf("nnNO, there is no element with xi = i");答案: 1). xmiddle = middle 2). xmiddle > middle 或 middle<xmiddle 3). answer = index_search(x, n)第2题 (30.0分) 题号:627/*-【程序填空】-功能:调用函数fun计算m=1-2+3-4+9-10,并输出结果。-*/int fun( int n) int m=0,f=1,i; /*SPACE*/ for(i=1;【?】;i+) m+=i*f; /*SPACE*/ 【?】; /*SPACE*/ return 【?】;main() printf("m=%dn", fun(10);答案: 1). i<=n 2). f= -f 3). m第3题 (30.0分) 题号:628/*-【程序填空】- 题目:请补充函数fun(),该函数的功能是求一维数组xN的平均值,并对所得结果进行 四舍五入(保留两位小数) 例如:当x10=15.6, 19.9, 16.7, 15.2, 18.3, 12.1, 15.5, 11.0, 10.0, 16.0, 结果为:avg=15.030000。- 注意:仅能用表达式或语句替换填空标记,填勿改动主函数main和其他函数中的任何内容。 -*/#include<stdio.h>#include<conio.h>double fun(double x10) int i; long t; double avg=0.0; double sum=0.0; for(i=0;i<10;i+) sum += xi; avg=sum/10;/*SPACE*/ avg=【?】;/*SPACE*/ t=【?】; avg=(double)t/100; return avg;main() double avg,x10=15.6,19.9,16.7,15.2,18.3,12.1,15.5,11.0,10.0,16.0; int i; printf("nThe original data is :n"); for(i=0;i<10;i+) printf("%6.1f",xi); printf("nn"); avg=fun(x); printf("average=%fnn",avg);答案: 1). avg * 1000 或 avg * 1000+5 2). ( avg + 5 )/10 或 avg/10第4题 (30.0分) 题号:629/*-【程序填空】- 题目:从键盘输入一组无符号整数并保存在数组xxN中,以整数0结束输入,要求这些 数的最大位数不超过位,其元素的个数通过变量num传入函数fun()。请补充函 数fun(),该函数的功能是:从数组xx中找出个位和十位的数字之和大于5的所 有无符号整数,结果保存在数组yy中,其个数由函数fun()返回。 例如:当xx8=123,11,25,222,42,333,14,5451时,bb4=25,42,333,5451。- 注意:仅能用表达式或语句替换填空标记。填勿改动主函数main和其他函数中的任何内容。 -*/#include <stdio.h>#define N 1000int fun(int xx,int bb,int num) int i, n=0; int g, s; for(i=0;i<num;i+) /*SPACE*/ g=【?】; s=xxi/10%10; if(g+s)>5)/*SPACE*/ 【?】; return n;main() int xxN; int yyN; int num=0,n=0,i=0; printf("Input number :n"); do scanf("%u",&xxnum); while(xxnum+!=0); n=fun(xx,yy,num); printf("nyy="); for(i=0;i<n;i+) printf("%u ",yyi);答案: 1). xxi%10 2). bbn+=xxi第5题 (30.0分) 题号:633/*-【程序填空】-题目:对只包含'-'和字母字符的字符串str进行如下处理: 删除str中前导和尾部连续的'-'字符,保留串中字母字符以 及字母间的'-'字符。 例如,str中初始字符串为"-C-Language-Test-"。 处理后,str中的字符串为"C-Language-Test"。 程序中isalpha函数功能是判断参数是否是字母,是字母, 函数值为真,否则函数值为假。-注意:请勿改动主函数main()中的其他内容。-*/#include <stdio.h>#include <ctype.h>void main() char str="-C-Language-Test-" int i,start,end; i=0; while(stri+='-') ; start=i-1;/*SPACE*/ while(stri != 【?】) if(isalpha(stri) end=-1; else if(isalpha(stri-1) end=i-1; i+; strend+1='0' for(i=start;i<=end+1;i+)/*SPACE*/ stri-【?】 = stri; printf("%sn",str);答案: 1). 0 或 '0' 2). start第6题 (30.0分) 题号:635/*-【程序填空】-题目:1、第一个for循环中给a数组10个元素依次赋字符 'A'、'B'、'C'、'D'、'E'、'V'、'W'、'X'、'Y'、'Z'。 2、第二个for循环中使a数组10个元素的值对称折叠,变成 'A'、'B'、'C'、'D'、'E'、'E'、'D'、'C'、'B'、'A'。 3、第三个for循环输出的字符依次是 'A'、'B'、'C'、'D'、'E'、'A'、'B'、'C'、'D'、'E'。-注意:请勿改动主函数main()中的其他内容。-*/#include <stdio.h>void main() int a10; int i; for(i=0;i<10;i+) if(i<5) ai=i+65;/*SPACE*/ else ai=【?】; for(i=0; i<5; i+) a9-i=ai; for(i=0;i<10;i+)/*SPACE*/ printf("%ct",ai<5 【?】); printf("n");答案: 1). i+81 或 81+i 或 i+'Q' 或 'Q'+i 或 'V'+i-5 或 'V'-5+i 或 i-5+'V' 或 i+'V'-5 2). ? i:i-5 或 ? i:14-i第7题 (30.0分) 题号:636/*-【程序填空】-题目:将输入的一个十进制正整数转换为十六进制字符形式并显示。-注意:请勿改动主函数main()中的其他内容。-*/#include <stdio.h>void main() char dex17="0123456789ABCDEF" int c8,i,base=16; int n; printf("输入十进制正整数 "); scanf("%d",&n); i=0; do/*SPACE*/ ci+=【?】; n=n/base; while(n); printf("对应的十六进制数 "); for(-i;i>=0;i-)/*SPACE*/ printf("%c",dex【?】); printf("n");答案: 1). n%base 或 n % 16 或 n & (base-1) 或 n & 15 或 n & 0xf 或 n & 0x0f 2). ci第8题 (30.0分) 题号:637/*-【程序填空】-题目:统计字符串str中单词的数量、最长单词的字母数、最短单 词字母数。单词之间至少有一个空格。假设str中最长单词 不超过20个字母。程序中isalpha函数功能是判断参数是否 是字母字符,如果是字母字符,函数返回真,否则函数返 回假。-注意:请勿改动主函数main()中的其他内容。-*/#include <stdio.h>#include <ctype.h>void main() int i,len=0; int numofword,maxlen,minlen; char str1000="Robots can feel happy, sad, angry, drowsy, hungry or fearful. They also have various personalities."/*SPACE*/ numofword=【?】; maxlen=0; minlen=20; for(i=0;stri;i+) if(!(isalpha(stri) && isalpha(stri-1) maxlen=len>maxlen? len: maxlen; minlen=len<minlen? len: minlen; len=0; numofword+; else if(isalpha(stri)/*SPACE*/ 【?】; printf("单词数=%d,最长单词字母数=%d,最短单词字母数=%dn",numofword,maxlen,minlen);答案: 1). 0 2). len+ 或 +len 或 len=len+1 或 len=1+len 或 len+=1第9题 (30.0分) 题号:634/*-【程序填空】-题目:随机产生10个范围在0,99之间,互不相同的正整数存入 数组t,并求出这10个数据的最小值和次小值。其中最小值 存入min1,次小值存入min2。程序中rand()函数功能是产 生一个随机正整数。-注意:请勿改动主函数main()中的其他内容。-*/#include <stdio.h>#include <stdlib.h>void main() int n100=0,t10; int i=0,k; int min1=100, min2=100; srand(32767); while(i<10) do k=rand()%100; while(nk); nk=1;/*SPACE*/ t【?】=k; for(i=0;i<10;i+) printf("%dt",ti); if(ti<min1)/*SPACE*/ 【?】; min1=ti; else if(ti<min2) min2=ti; printf("nmin1= %d,min2= %dn",min1,min2);答案: 1). i+ 2). min2=min1第10题 (30.0分) 题号:638/*-【程序填空】-题目:函数gcd()计算整型数组a中相邻两元素的最大公约数,最 小公倍数,其中最大公约数存入数组b中,最小公倍数存入 数组c中。-注意:请勿改动主函数main()中的其他内容。-*/#include <stdio.h>#include <conio.h>void gcd(int a,int n,int b,int c) int i,x,y,z;/*SPACE*/ for(i=0;i<【?】;i+) x=ai; y=ai+1; while(z=x%y) x=y;y=z; bi=y;/*SPACE*/ ci=ai*ai+1/【?】; int main() int a5=8,12,5,7,14; int b4,c4; int i; gcd(a,5,b,c); for(i=0;i<5;i+) printf("%dt",ai); printf("n"); for(i=0;i<4;i+) printf("%dt",bi); printf("n"); for(i=0;i<4;i+) printf("%dt",ci); printf("n"); getch(); return 0;答案: 1). n-1 或 =n-2 2). bi 或 y第11题 (30.0分) 题号:639/*-【程序填空】-题目:函数reverse()对字符串str进行逆序。-注意:请勿改动主函数main()中的其他内容。-*/#include<stdio.h>#include<string.h>#include<conio.h>void reverse(char str) int len, j; char c;/*SPACE*/ len = 【?】(str);/*SPACE*/ for (j=len-1; 【?】; j-) c=strj; strj=strlen-1-j; strlen-1-j=c; int main() char a80; printf("Please enter a string: "); gets(a); reverse(a); printf("The inversed string is: "); puts(a); getch(); return 0;答案: 1). strlen 2). j>=len/2 或 j>=len>>1 或 j>=(len>>1)第12题 (30.0分) 题号:640/*-【程序填空】-题目:对主函数main()中数组a进行处理:如果相邻元素相同则保留 一个。例如对数组a处理后,它的前11个元素为 -5,7,-4,25,0,2,4,16,8,5,20。-注意:请勿改动主函数main()中的其他内容。-*/#include <stdio.h>#include <conio.h>int main() int a20=-5,-5,7,-4,-4,25,25,0,0,0,2,4,16,16,8,5,5,5,5,20; int i,prev,next; prev=0; next=1; while(next<20)/*SPACE*/ if(aprev!=【?】) a+prev=anext; next+; /*SPACE*/ for(i=0;i【?】prev;i+) printf("%d ",ai); printf("n"); getch(); return 0;答案: 1). anext 2). <=第13题 (30.0分) 题号:641/*-【程序填空】-题目:程序输出由03四个数字组成的符合下列条件的4位整数: 1. 每个4位整数中,03四个数字只能出现一次; 2. 百位数不能为3,十位数不能为2。 3.本题答案正确可能无法评到分,如对请与老师联系。-注意:请勿改动主函数main()中的其他内容。-*/#include <stdio.h>#include <conio.h>int main()int g,s,b,q;int num=0;for(b=0;b<4;b+)if(b=3) continue;for(s=0;s<4;s+)if(b=s)|(s=2) continue;/*SPACE*/for(q=【?】;q<4;q+)if(q=b)|(q=s) continue;/*SPACE*/g=【?】-q-b-s;printf("%dn",q*1000+b*100+s*10+g);num+;printf("%dn",num);getch();return 0;答案: 1). 1 2). 6 或 1+2+3第14题 (30.0分) 题号:642/*-【程序填空】-题目:在一维数组a中找出最大,最小元素,并将最大元素和数组 最后一个元素交换,最小元素和数组首元素交换。-注意:请勿改动主函数main()中的其他内容。-*/#include <stdio.h>#include <conio.h>int main() int a10=15,8,12,6,10,1,4,5,9,-3; int i,t,max_index,min_index; max_index=min_index=0; for(i=1;i<10;i+) if(ai>amax_index) max_index=i; if(ai<amin_index) min_index=i; t=a0;a0=amin_index;amin_index=t;/*SPACE*/ if(max_index=【?】) t=amin_index;amin_index=a9;a9=t; else/*SPACE*/ 【?】; for(i=0;i<10;i+) printf("%dt",ai); printf("n"); getch(); return 0;答案: 1). 0 2). t=amax_index;amax_index=a9;a9=t 或 t=a9;a9=amax_index;amax_index=t;第15题 (30.0分) 题号:643/*-【程序填空】-题目:下面的程序首先随机产生20个大于或等于900且小于1000的 素数,然后将这些素数保存在数组array中,并将这些素数 在屏幕上以每行打印5个的格式输出,请将程序补充完整。-注意:请勿改动主函数main()中的其他内容 且不能使用C语言的库函数。-*/#include <stdio.h>#include <stdlib.h>#include <math.h>/*函数isPrime(int m)用于判断整数m是否为素数*/int isPrime(int m) int flag=0; int i=2,k; k=(int)sqrt(m);/*