第62套:
给定程序中,函数fun的功能是:把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于2)。例如,形参s所指的字符串为:abcdefgh,执行结果为:ahcbedgf。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include <stdio.h>
void fun(char *s)
{ int i, n, k; char c;
n=0;
for(i=0; s[i]!='\0'; 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 : %s\n",s);
fun(s);
printf("\nThe result is : %s\n",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 <stdio.h>
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: %ld\n", 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 <stdio.h>
#include <string.h>
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++ ;
}
}