知ing

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

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

゛Zirro、Y 上传

查看本书

68套: 

给定程序中,函数fun的功能是:ss所指字符串数组中长度最长的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串,且串长<N。 

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 

注意:源程序存放在考生文件夹下的BLANK1.C中。 

不得增行或删行,也不得更改程序的结构! 

给定源程序: 

#include <stdio.h> 

#define M 5 

#define N 20 

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

int fun(char (*ss) ___1___, int *n) 

{ int i, k=0, len=0; 

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

{ len=strlen(ss[i]); 

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

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

if(len>*n) { 

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

___3___; 

k=i; 

return(k); 

main() 

{ char ss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"}; 

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 longest string is : %d\n",n); 

printf("\nThe longest string is : %s\n",ss[k]); 

解题思路: 

第一处:形参ss的定义,它是一个字符串数组的定义,其宽度为N,所以应填:N。 

第二处:取第一个字符串的长度赋值给变量*n,所以应填:len。 

第三处:每循环一次,判断当前字符串的长度是否大于*n,如果大于,则*n=len。 

*************************************************** 

给定程序MODI1.C中 fun 函数的功能是根据形参m,计算如下公式的值。 

       1     1 

t = 1 + ----- +----- + ----- + ……+ ----- 

2 3 4 m 

例如,若输入 5,则应输出 2.283333。 

请改正程序中的错误或在下划线处填上适当的内容并把下划线删除使它 

能计算出正确的结果。 

注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 

给定源程序: 

#include <stdio.h> 

double fun( int m ) 

double t = 1.0; 

int i; 

for( i = 2; i <= m; i++ ) 

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

t += 1.0/k; 

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

________ 

main() 

int m; 

printf( "\nPlease enter 1 integer number:" ); 

scanf( "%d", &m ); 

printf( "\nThe result is %lf\n", fun( m ) ); 

解题思路: 

第一处:在此变量k没有定义过,再根据公式和for循环语句中所用的变量可知,这里的k实际上是i。 

第二处:应是返回公式的值,函数中公式的值是存放在临时变量t中,所以应填return t;。 

*************************************************** 

编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为: asd asasdfg asd as zx67 asd mklo,子字符串为:as,则应输出6。 

注意:部分源程序在文件PROG1.C中。 

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 

给定源程序: 

#include <stdio.h> 

#include <string.h> 

int fun(char *str,char *substr) 

main() 

char str[81],substr[3]; 

int n; 

printf("输入主字符串: "); 

gets(str); 

printf("输入子字符串: "); 

gets(substr); 

puts(str); 

puts(substr); 

n=fun(str,substr); 

printf("n=%d\n",n); 

NONO(); 

解题思路: 

本题是统计一个字符串在另一个字符串中出现的次数。 

程序流程如下: 

1. 利用strstr函数,首先找到第一个出现的位置。 

2. 利用while循环和strstr依次查找所有出现的位置,并进行统计,并把统计结果作为函数值返回。 

strstr(const char *s1, const char *s2)是字符串s2s1中出现的位置,如果找到则返回位置指针。 

参考答案: 

int fun(char *str,char *substr) 

int cnt = 0 ; 

char *p = str, *q ; 

while(*p) { 

q = strstr(p, substr) ; 

if(q == NULL) break; 

p = q + strlen(substr) ; 

cnt++ ; 

return cnt ; 

main() 

char str[81],substr[3]; 

int n; 

printf("输入主字符串: "); 

gets(str); 

printf("输入子字符串: "); 

gets(substr); 

puts(str); 

puts(substr); 

n=fun(str,substr); 

printf("n=%d\n",n); 

NONO(); 

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


查看更多