三、程序填空题导读:在程序填空题中,已经给出了程序的主干,读者首先要理解程序的思路,再选择正确的内容填入空白处,使程序完成既定的功能。这类习题的设计就是要引导读者逐步掌握编程的方法。本节习题的难度适中,可能有些典型的程序在课堂上已经有所接触,读者一定要独立完成它,这样就可以逐步提高自己的编程能力。在程序设计语言学习的中期,读者对程序设计已经有了初步的了解,而自己编写程序又不知从何处入手,此时解答此类题目可以避免盲目性,从而提高学习的效率。【3.1】下面程序的功能是不用第三个变量,实现两个数的对调操作。#includestdio.hmain(){inta,b;scanf(%d%d,&a,&b);printf(a=%d,b=%d\n,a,b);a=①;b=②;a=③;printf(a=%d,b=%d\n,a,b);}【3.2】下面程序的功能是根据近似公式:π2/6≈1/12+1/22+1/32+……+1/n2,求π值。#includemath.hdoublepi(longn){doubles=0.0;longi;for(i=1;i=n;i++)s=s+①;return(②);}【3.3】下面的程序的功能是求一维数组中的最小元素。findmin(int*s,intt,int*k){intp;for(p=0,*k=p;pt;p++)if(s[p]s[*k])①;}main(){inta[10],i,*k=&i;for(i=0;i10;i++)scanf(%d,&a[i]);findmin(a,10,k);printf(%d,%d\n,*k,a[*k]);}【3.4】下面程序的功能是计算1-3+5-7+……-99+101的值。main(){inti,t=1,s=0;for(i=1;i=101;i+=2){①;s=s+t;②;}printf(%d\n,s);}【3.5】有以下程序段:s=1.0;for(k=1;k=n;k++)s=s+1.0/(k*(k+1));printf(%f\n,s);填空完成下述程序,使之与上述程序的功能完全相同。s=0.0;①;k=0;do{s=s+d;②;d=1.0/(k*(k+1));}while(③);printf(%f\n,s);【3.6】下面程序的功能是从键盘上输入若干学生的学习成绩,统计并输出最高成绩和最低成绩,当输入为负数时结束输入。main(){floatx,amax,amin;scanf(%f,&x);amax=x;amin=x;while(①){if(xamax)amax=x;if(②)amin=x;scanf(%f,&x);}printf(\namax=%f\namin=%f\n,amax,amin);}【3.7】下面程序的功能是将形参x的值转换为二进制数,所得的二进制数放在一个一维数组中返回,二进制数的最低位放在下标为0的元素中。fun(intx,intb[]){intk=0,r;do{r=x%①;b[k++]=r;x/=②;}while(x);}【3.8】下面程序的功能是输出1到100之间每位数的乘积大于每位数的和的数。例如数字26,数位上数字的乘积12大于数字之和8。main(){intn,k=1,s=0,m;for(n=1;n=100;n++){k=1;s=0;①;while(②){k*=m%10;s+=m%10;③;}if(ks)printf(%d,n);}}【3.9】下面程序的功能是统计用0至9之间的不同的数字组成的三位数的个数。main(){inti,j,k,count=0;for(i=1;i=9;i++)for(j=0;j=9;j++)if(①)continue;elsefor(k=0;k=9;k++)if(②)count++;printf(%d,count);}【3.10】下面程序的功能是输出100以内的个位数为6、且能被3整除的所有数。main(){inti,j;for(i=0;①;i++){j=i*10+6;if(②)countinue;printf(%d,j);}}【3.11】下面程序的功能是用辗转相除法求两个正整数m和n的最大公约数。hcf(intm,intn){intr;if(mn){r=m;①;n=r;}r=m%n;while(②){m=n;n=r;r=m%n;}③;}【3.12】下面程序的功能是使用冒泡法对输入的10个浮点数从小到大进行排序。排好序的10个数分两行输出。程序如下:#includestdio.hmain(){①;inti,j;printf(Input10numbersplease\n);for(i=0;②;i++)scanf(%f,&a[i]);printf(\n);for(i=2;③;i++)for(j=0;④;j++)if(⑤){x=a[j];⑥;a[j+1]=x;}printf(Thesorted10numbers;\n);for(i=0;⑦;i++){if(⑧)printf(\n);printf(%f\t,a[i]);}printf(\n);}【3.13】下面程序的功能是读入20个整数,统计非负数个数,并计算非负数之和。#includestdio.hmain(){inti,a[20],s,count;s=count=0;for(i=0;i20;i++)scanf(%d,①);for(i=0;i20;i++){if(a[i]0)②;s+=a[i];count++;}printf(s=%d\tcount=%d\n,s,count);}【3.14】下面程序的功能是删除字符串s中的空格。#includestdio.hmain(){char*s=Beijingligongdaxue;inti,j;for(i=j=0;s[i]!='\0';i++)if(s[i]!='')①;else②;s[j]='\0';printf(%s,s);}【3.15】下面程序的功能是将字符串s中所有的字符'c'删除。请选择填空。#includestdio.hmain(){chars[80];inti,j;gets(s);for(i=j=0;s[i]!='\0';i++)if(s[i]!='c')①;s[j]='\0';puts(s);}【3.16】下面程序的功能是输出两个字符串中对应相等的字符。请选择填空。#includestdio.hcharx[]=programming;chary[]=Fortran;main(){inti=0;while(x[i]!='\0'&&y[i]!='\0')if(x[i]==y[i])printf(%c,①);elsei++;}【3.17】下面程序的功能是将字符串s中的每个字符按升序的规则插到数组a中,字符串a已排好序。#includestring.hmain(){chara[20]=cehiknqtw;chars[]=fbla;inti,k,j;for(k=0;s[k]!='\0';k++){j=0;while(s[k]=a[j]&&a[j]!='\0')j++;for(①)②;a[j]=s[k];}puts(a);}【3.18】下面程序的功能是对键盘输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为abcdefg和abceef,则输出为-1。#includestdio.hmain(){charstr1[100],str2[100],c;inti,s;printf(Enterstring1:);gets(str1);printf(Enterstring2:);gets(str2);i=0;while((str1[i]==str2[i]&&str1[i]!=①))i++;s=②;printf(%d\n,s);}【3.19】下面的函数expand在将字符串s复制到字符串t时,将其中的换行符和制表符转换为可见的转义字符表示,即用'\n'表示换行符,用'\t'表示制表符。expand(chars[],chart[]){inti,j;for(i=j=0;s[i]!='\0';i++)switch(s[i]){case'\n':t[①]=②;t[j++]='n';break;case'\t':t[③]=④;t[j++]='t';break;default:t[⑤]=s[i];break;}t[j]=⑥;}【3.20】下面的函数index(chars[],chart[])检查字符串s中是否包含字符串t,若包含,则返回t在s中的开始位置(下标值),否则送回-1。index(chars[],chart[]){inti,j,k;for(i=0;s[i]!='\0';i++){for(j=i,k=0;①&&s[j]==t[k];j++,k++);if(②)return(i);}return(-1);}n【3.21】下面程序的功能是计算S=k!。k=0longfun(intn){inti;longs;for(i=1;i①;i++)s*=i;return(②);}main(){intk,n;longs;scanf(%d,&n);s=③;for(k=0;k=n;k++)s+=④;printf(%ld\n,s);}【3.22】下面程序的功能是显示具有n个元素的数组s中的最大元素。#defineN20main(){inti,a[N];for(i=0;iN;i++)scanf(%d,&a[i]);printf(%d\n,①);}fmax(ints[],intn){intk,p;for(p=0,k=p;pn;p++)if(s[p]s[k])②;return(k);}【3.23】下面程序的功能是由键盘输入n,求满足下述条件的x、y:nx和ny的末3位数字相同,且x≠y,x、y、n均为自然数,并使x+y为最小。#includestdio.hpow3(intn,intx){inti,last;for(last=1,i=1;i=x;i++)last=①;return(last);}main(){intx,n,min,flag=1;scanf(%d,&n);for(min=2;flag;min++)for(x=1;xmin&&flag;x++)if(②&&pow3(n,x)==pow3(n,min-x)){printf(x=%d,y=%d\n,x,min-x);③;}}【3.24】下面的程序是用递归算法求a的平方根。求平方根的迭代公式如下:#includemath.hdoublemysqrt(doublea,doublex0){doublex1,y;x1=①;if(fabs(x1-x0)0.00001)y=mysqrt(②);elsey=x1;return(y);}main(){doublex;printf(Enterx:);scanf(%lf,&x);printf(Thesqrtof%lf=%lf\n,x,mysqrt(x,1.0));}【3.25】以下程序是计算学生的年龄。已知第一位最小的学生年龄为10岁,其余学生的年龄一个比一个大2岁,求第5个学生的年龄。#includestdio.hage(intn){intc;if(n==1)c=10;elsec=①;return(c);}main(){intn=5;printf(age:%d\n,②);}【3.26】下面的函数sum(intn)完成计算1~n的累加和。sum(intn){if(n=0)printf(dataerror\n);if(n==1)①;else②;}【3.27】下面的函数是一个求阶乘的递归调用函数。facto(intn){if(n==1)①;elsereturn(②);}【3.28】组合问题,由组合的基本性质可知:(1)C(m,n)=C(n-m,n)(2)C(m,n+1)=C(m,n)+C(m-1,n)公式(2)是一个递归公式,一直到满足C(1