第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 ;
}