1湖南省计算机二级3[1].(6分)程序阅读填空(2)

2019-01-27 19:48

答案:① 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 main()

{ 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 main( )

{ 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 main()

{ 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 age( int n ) { int c;

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


1湖南省计算机二级3[1].(6分)程序阅读填空(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:八年级下语文第二单元练习

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: