答案:① float a[10],x ② i<=9 ③ i<=8 ④ j<=9-i ⑤ a[j]>a[j+1] ⑥ a[j]=a[j+1] ⑦ i<=9 ⑧i%5==0
【3.9】下面程序的功能是读入20个整数,统计非负数个数,并计算非负数之和。 #include \main()
{ int i,a[20],s,count; s=count=0;
for(i=0;i<20;i++ ) scanf(\① ); for(i=0;i<20;i++) { if(a[i]<0) ② ; s+=a[i]; count++; }
printf(\; }
答案:① &a[i] ② continue
注释:①是基本概念,使用scanf函数输入数组元素的值。当输入的元素值小于0时,应当跳过后面的语句,取下一个数,所以②要填入continue。
【3.10】下面程序的功能是删除字符串s中的空格。 #include
{ char *s=\; int i,j;
for(i=j=0;s[i]!='\\0';i++) if(s[i]!= ' ') ① ; else ② ; s[j]= '\\0'; printf(\; }
答案:① s[j++]=s[i] ② s[j]=s[i]
【3.11】下面程序的功能是将字符串s中所有的字符'c'删除。请选择填空。 #include
{ char s[80]; int i,j; gets(s);
6
for(i=j=0;s[i]!= '\\0';i++ ) if(s[i]!= 'c') ① ; s[j]= '\\0'; puts(s); }
答案:① s[j++]=s[i]
【3.12】下面程序的功能是输出两个字符串中对应相等的字符。请选择填空。 #include
char x[]=\; char y[]=\; main()
{ int i=0;
while(x[i]!= '\\0' && y[i]!= '\\0') if(x[i]==y[i])
printf(\① ); else i++; }
答案:① x[i++]
【3.13】下面程序的功能是将字符串s中的每个字符按升序的规则插到数组a中, 字符串a已排好序。
#include
{ char a[20]=\; char s[]=\; int i,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); }
答案:① i=strlen(a);i>=j;i-- ② a[i+1]=a[i]
【3.14】下面的函数index(char s[], char t[])检查字符串s中是否包含字符串t,若包含,则返回t在s中的开始位置(下标值),否则送回-1。
7
index(char s[], char t[]) { int i,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); }
① t[k]!= '\\0' ② t[k]== '\\0'
【3.15】下面程序的功能是计算S= k! 。 k=0
long fun(int n) { int i; long s;
for(i=1;i ① ;i++) s*=i;
return( ② ); }
main()
{ int k,n; long s;
scanf(\; s= ③ ;
for(k=0;k<=n;k++) s+= ④ ;
printf(\; }
答案:① <=n ② s ③ 0 ④ fun(k)
【3.16】以下程序是计算学生的年龄。已知第一位最小的学生年龄为10岁,其余学生的年龄一个比一个大2岁,求第5个学生的年龄。 #include
if( n==1 ) c=10; else c= ① ; return(c); }
main()
{ int n=5;
8
printf(\② ); }
答案:① 2+age(n-1) ② age(5)
注释:由于程序是递归算法,因此首先要建立问题的递归数学模型。根据原题的描述可以写出如下递归公式: age(n) = 10 (n=1)
age(n) = 2+age(n-1) (n>1)
对照程序和递归公式可以看出:n的含义是第n位学生。很显然,要求第5位学生的年龄,②处应当是调用函数age,实参的值应当是5。在①处应该是函数的递归调用,根据递归公式,应当填写:2+age(n-1)。
【3.17】下面的函数是一个求阶乘的递归调用函数。 facto(int n)
{ if( n == 1 ) ① ; else return( ② ); }
答案:① return(1) ② n*facto(n-1)
注释:我们熟悉的求n!的算法一般是采用循环语句实现,但在此程序中根本没有循环语句。这时我们应该想到:是采用递归算法实现的。首先写出求n!的递归公式; n!=1 当n=1时 n!=n*(n-1) 当n>1时
根据此递归定义,可以很容易完成程序。
【3.18】下列函数是求一个字符串str的长度。 ?????? int strlen( char *str ) ??????{ if( ① ) return (0); ?? ???? else return ( ② ); }
答案:① *str=='\\0' ② 1+strlen(str+1)
注释:求串长算法的关键是确定串结束标记'\\0'的位置。根据求串长的方法,可以得到如下递归算法:指针str指向字符串的首字符 如果 当前字符(*str)== 串结束标记'\\0' 则 串长=0
否则 串长 = 1+除第一个字符之外的剩余字符串的串长 因此,在①的位置上应当填写\,以判断当前字符(*str)是否是串结束标记'\\0'。在②的位置应当是根据上面的递归算法进行递归调用,因此应当填写\。
【3.19】函数revstr(s)将字符串s置逆,如输入的实参s为字符串\, 则返回时 s 为字符串\。递归程序如下: revstr( char *s )
9
{ char *p=s, c; while(*p) p++; ① ; if(s
revstr(s+1); ③ ; } }
如下是由非递归实现的revstr(s)函数: revstr (s) char *s;
{ char *p=s, c; while( *p ) p++; ④ ;
while( s
答案:① p-- ② *p='\\0' ③ *p=c ④ p-- ⑤ *s++
注释:在递归算法中,指针s指向字符串首部要反向的字符,即要将指针s所指向的字符与指针p 所指向的字符串尾的字符('\\0')进行交换,在交换过程中,将尚没有交换的字符串的中间部分作为一个整体,进行递归处理。程序中首先执行\,将首字符存入临时变量;然后执行\,将尾字符存入串首;执行\是递归处理串的中间部分,这时,在②处应当填入\,即存入串结束标记。这是这一程序中的关键所在。在③处要完成将存在临时变量c中的字符存入串尾的工作,应当填写\。
【3.20】下面函数用递归调用的方法,将str中存放的长度为n的字符串反转过来,例如原来是\,反序为\。 void invent(char *str,int n) { char t;
t=*str; *str=*(str+n-1); *(str+n-1)=t; if( n>2 ) invent ( ① ,n-2); else ② ; }
答案:① str+1 ② return ①改为 n-2
10
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库1湖南省计算机二级3[1].(6分)程序阅读填空(2)在线全文阅读。
相关推荐: