请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
void fun(char *s)
{ int i, n, k; char c;
n=0;
for(i=0; s[i]!=’ ’; i++) n++;
if(n%2==0) k=n-___1___ ;
else k=n-2;
c=___2___ ;
for(i=k-2; i>=1; i=i-2) s[i+2]=s[i];
s[1]=___3___ ;
}
main()
{ char s[80]="abcdefgh";
printf("nThe original string is : %sn",s);
fun(s);
printf("nThe result is : %sn",s);
}
解题思路:
第一处:首先判断字符串的长度是奇数还是偶数,如果是奇数,则k=n-1,所以应填:1。
第二处:取字符串最后一个奇数位的字符,并由变量c保存,所以应填:s[k]。
第三处:第1位奇数位用最一个奇数位字符替换,所以应填:c。
***************************************************
给定程序MODI1.C中 fun 函数的功能是:求 s = aa… aa - ... - aaa - aa - a (此处 aa… aa 表示 n 个 a, a 和 n 的值在 1 至 9 之间)
例如 a = 3, n = 6, 则以上表达式为:
s = 333333 - 33333 - 3333 - 333 - 33 - 3
其值是:296298 a 和 n 是 fun 函数的形参,表达式的值作为函数值传回 main函数。
请改正程序中的错误,使它能计算出正确的结果。
注意: 不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
long fun (int a, int n)
{ int j ;
long s = 0, t = 1 ;
for ( j = 0 ; j < n ; j++)
t = t * 10 + a ;
s = t ;
for ( j = 1 ; j < n ; j++) {
t = t % 10 ;
s = s - t ;
}
return(s) ;
}
main( )
{ int a, n ;
printf( "nPlease enter a and n:") ;
scanf( "%d%d", &a, &n ) ;
printf( "The value of function is: %ldn", fun ( a, n ) );
}
解题思路:
第一处:根据for循环计算t的值可知,变量t的初值不正确,应为0。
第二处:每次循环都是取t除以10的值,而不是取余数,所以应改t=t/10;。
***************************************************
请编写一个函数 void fun(char *tt, int pp[]),统计在tt所指字符串中 ’a’ 到 ’z’ 26个小写字母各自出现的次数,并依次放在pp所指数组中。 例如,当输入字符串:abcdefgabcdeabc 后,程序的输出结果应该是: 3 3 3 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
注意: 部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
给定源程序:
#include
#include
void fun(char *tt, int pp[])
{
}
main( )
{ char aa[1000] ;
int bb[26], k, n ;
printf( "nPlease enter a char string:" ) ; scanf("%s", aa) ;
fun(aa, bb ) ;
for ( k = 0 ; k < 26 ; k++ ) printf ("%d ", bb[k]) ;
printf( "n" ) ;
NONO ( ) ;
}
解题思路:
本题是考察考生在给定的字符串中统计出26个小写字母的次数并存入到指定的数组中且由形参返回。其中数组下标的位置可以通过某一个字符的ASCII值减去97或直接减’a’也可以,就可以得出该字符出现次数存放的位置。例如:字符为b,那么位置为’b’-’a’=1,就是实际存放的位置。
参考答案:
void fun(char *tt, int pp[])
{
char *p = tt ;
int i ;
for(i = 0 ; i < 26 ; i++) pp[i] = 0 ;
while(*p) {
if(*p >= ’a’ && *p <= ’z’) pp[*p - ’a’] += 1 ;
p++ ;
}
}
※※※※※※※※※※※※※※※※※※※※※※※※※