知ing

最新计算机二级C语言上机试题汇编100套

NCRE研究组 编 / 高等教育出版社

゛Zirro、Y 上传

查看本书

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; 

/ **********found**********/ 

for(i=0; i<___1___; i++) 

{ len=strlen(ss[i]); 

if(i==0) *n=len; 

/ **********found**********/ 

if(len ___2___ *n) 

{ *n=len; 

k=i; 

/ **********found**********/ 

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++ ) 

/ **********found***********/ 

if(( 'a' <= tt[i] )||( tt[i] <= 'z' ) ) 

/ **********found***********/ 

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是非素数,则把该数存入数组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 ; 

※※※※※※※※※※※※※※※※※※※※※※※※※ 


查看更多