第79套:
给定程序中,函数fun的功能是:求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串,且串长<N。
 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
 注意:源程序存放在考生文件夹下的BLANK1.C中。
 不得增行或删行,也不得更改程序的结构!
 给定源程序:
#include <stdio.h> 
#include <string.h> 
#define M 5 
#define N 20 
int fun(char (*ss)[N], int *n) 
{ int i, k=0, len= N; 
for(i=0; i<___1___; i++) 
{ len=strlen(ss[i]); 
if(i==0) *n=len; 
if(len ___2___ *n) 
{ *n=len; 
k=i; 
} 
} 
return(___3___); 
} 
main() 
{ char ss[M][N]={"shanghai","guangzhou","beijing","tianjing","chongqing"}; 
int n,k,i; 
printf("\nThe original strings are :\n"); 
for(i=0;i<M;i++)puts(ss[i]); 
k=fun(ss,&n); 
printf("\nThe length of shortest string is : %d\n",n); 
printf("\nThe shortest string is : %s\n",ss[k]); 
} 
解题思路:
 第一处:字符串数组共有M个字符串,所以在循环中终止值应填:M。
 第二处:由于本题是取长度最短的字符串,*n总是保存长度最短值,所以应填:<。
 第三处:其中k是保存长度最短的字符串所在的行下标,所以应填:k。
给定程序MODI1.C中函数 fun 的功能是:将tt所指字符串中的小写字母都改为对应的大写字母,其它字符不变。
 例如,若输入"Ab, cD",则输出"AB, CD"。
 请改正程序中的错误,使它能得出正确的结果。
 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
 给定源程序:
#include <stdio.h> 
#include <string.h> 
char* fun( char tt[] ) 
{ 
int i; 
for( i = 0; tt[i]; i++ ) 
if(( 'a' <= tt[i] )||( tt[i] <= 'z' ) ) 
tt[i] += 32; 
return( tt ); 
} 
main( ) 
{ 
char tt[81]; 
printf( "\nPlease enter a string: " ); 
gets( tt ); 
printf( "\nThe result string is:\n%s", fun( tt ) ); 
} 
解题思路:
 第一处:判断是小写字母,则条件应该是与的关系。
 第二处:小写字母的ASCII值减去32正好是其大写字母。
请编写函数fun,其功能是: 将所有大于1小于整数m的非素数存入xx所指数组中, 非素数的个数通过k传回。
 例如,若输入:17,则应输出:4 6 8 9 10 12 14 15 16。
 注意: 部分源程序在文件PROG1.C中。
 请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入你编写的若干语句。
 给定源程序:
#include <stdio.h> 
void fun( int m, int *k, int xx[] ) 
{ 
} 
main() 
{ 
int m, n, zz[100]; 
printf( "\nPlease enter an integer number between 10 and 100: " ); 
scanf( "%d", &n ); 
fun( n, &m, zz ); 
printf( "\n\nThere are %d non-prime numbers less than %d:", m, n ); 
for( n = 0; n < m; n++ ) 
printf( "\n %4d", zz[n] ); 
NONO(); 
}
解题思路:
 本题是考察考生如何判断一个数不是素数,如果所给出的数是非素数且小于指定的数,那么这些数应存放到指定的数组xx中保存,最后由形参xx返回。在给出的程序中函数isP就是判断一个数是否是素数,若是非素数,则返回1,否则返回0。本题是用for(i=2;i<m;i++)循环语句分别判断i是否为非素数,如果i是非素数,则把该数i存入数组xx中。其中,i是控制变量,m是试题给出的整数。
 参考答案:
#include <stdio.h> 
int isP(int m) 
{ 
int j, tag = 0 ; 
for(j = 2 ; j < m && !tag ; j++) 
if(m % j == 0) tag = 1 ; 
return tag ; 
} 
void fun( int m, int *k, int xx[] ) 
{ 
int i, cnt = 0 ; 
for(i = 2 ; i < m ; i++) 
if(isP(i)) xx[cnt++] = i ; 
*k = cnt ; 
}