江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
全国计算机二级C题库第61--70套

 

本题目如果下载后发现有错误的地方,请联系网站管理员:QQ121431055

考试时,上机题目有三套,基本操作题、简单应用题、综合应用题

 

61套:

函数fun的功能是进行字母转换。若形参ch中是小写英文字母,则转换成对应

的大写英文字母;若ch中是大写英文字母,则转换成对应的小写英文字母;若是

其它字符则保持不变;并将转换后的结果作为函数值返回。

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

果。

 

 

 

 

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

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

给定源程序:

#include

#include

char fun(char ch)

{

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

if ((ch>='a')___1___(ch<='z'))

return ch -'a' + 'A';

if ( isupper(ch) )

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

return ch +'a'-___2___ ;

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

return ___3___;

}

main()

{ char c1, c2;

printf("\nThe result :\n");

c1='w'; c2 = fun(c1);

printf("c1=%c c2=%c\n", c1, c2);

c1='W'; c2 = fun(c1);

printf("c1=%c c2=%c\n", c1, c2);

c1='8'; c2 = fun(c1);

printf("c1=%c c2=%c\n", c1, c2);

}

解题思路:

第一处:判断形参ch是否是小写字母,所以应填:&&

第二处:小写字母与大写字母的ASCII值相差为32,所以应填:'A'65

第三处:返回处理后的形参ch,所以应填:ch

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

给定程序MODI1.C中函数fun的功能是: 给一维数组a输入任意4个整数, 并按

下例的规律输出。例如输入1234, 程序运行后将输出以下方阵。

4 1 2 3

3 4 1 2

2 3 4 1

1 2 3 4

请改正函数fun中指定部位的错误, 使它能得出正确的结果。

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

给定源程序:

#include

#define M 4

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

void fun(int a)

{ int i,j,k,m;

printf("Enter 4 number : ");

for(i=0; i

 

 

 

 

printf("\n\nThe result :\n\n");

for(i=M;i>0;i--)

{ k=a[M-1];

for(j=M-1;j>0;j--)

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

aa[j]=a[j-1];

a[0]=k;

for(m=0; mprintf("\n");

}

}

main()

{ int a[M];

fun(a); printf("\n\n");

}

解题思路:

第一处:在函数fun体中,a是一个整型数组,所以形参a应定义为指针型整数变量。

第二处:变量书写错误,aa应为a

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

请编写一个函数fun, 它的功能是: 计算并输出给定整数n的所有因子(不包括

1n自身)之和。规定n的值不大于1000

例如,在主函数中从键盘给n输入的值为856, 则输出为:sum=763

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

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入

你编写的若干语句。

给定源程序:

#include

int fun(int n)

{

}

main()

{ int n,sum;

printf("Input n: "); scanf("%d",&n);

sum=fun(n);

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

NONO();

}

 

解题思路:

本题是考察考生怎样利用循环来求出一个数n的所有(除1和自身外)因子i并求出它们的和

s作为函数值返回。判断因子的条件是:n % i == 0,(i是大于1且小于n中所有的正整数)。

参考答案:

int fun(int n)

{

int s = 0, i ;

for(i = 2 ; i < n ; i++) if(n % i == 0) s +=i ;

return s ;

}

 

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

62套:

给定程序中,函数fun的功能是:把形参s所指字符串中下标为奇数的字符右

移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下

标为偶数的字符不动(注:字符串的长度大于等于2)。例如,形参s所指的字符

串为:abcdefgh,执行结果为:ahcbedgf

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

果。

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

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

给定源程序:

#include

void fun(char *s)

{ int i, n, k; char c;

n=0;

 

 

 

 

for(i=0; s[i]!='\0'; i++) n++;

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

if(n%2==0) k=n-___1___ ;

else k=n-2;

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

c=___2___ ;

for(i=k-2; i>=1; i=i-2) s[i+2]=s[i];

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

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

long fun (int a, int n)

{ int j ;

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

long s = 0, t = 1 ;

for ( j = 0 ; j < n ; j++)

t = t * 10 + a ;

s = t ;

for ( j = 1 ; j < n ; j++) {

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

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

#include

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

}

}

 

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

63套:

给定程序中,函数fun的功能是:有N×N矩阵,根据给定的mm<=N)值,将

每行元素中的值均右移m个位置,左边置为0。例如,N=3m=2,有下列矩阵

 

 

 

 

1 2 3

4 5 6

7 8 9

程序执行结果为

0 0 1

0 0 4

0 0 7

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

果。

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

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

给定源程序:

#include

#define N 4

void fun(int (*t)[N], int m)

{ int i, j;

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

for(i=0; i

{ for(j=N-1-m; j>=0; j--)

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

t[i][j+___2___ ]=t[i][j];

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

for(j=0; j<___3___; j++)

t[i][j]=0;

}

}

main()

{ int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j, m;

printf("\nThe original array:\n");

for(i=0; i

{ for(j=0; j

printf("- ",t[i][j]);

printf("\n");

}

printf("Input m (m<=%d): ",N);scanf("%d",&m);

fun(t,m);

printf("\nThe result is:\n");

for(i=0; i

{ for(j=0; j

printf("- ",t[i][j]);

printf("\n");

}

}

解题思路:

第一处:for循环变量的增量,所以应填:i++

第二处:由于右移m个位置,所以应填:m

第三处:左边m列均置于0,所以for循环的终止值应为m

 

 

 

 

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

给定程序MODI1.C中函数 fun 的功能是:计算并输出high以内最大的10个素

数之和。high的值由主函数传给fun函数。

high的值为: 100, 则函数的值为: 732

请改正程序中的错误,使程序能输出正确的结果。

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

给定源程序:

#include

#include

int fun( int high )

{ int sum = 0, n=0, j, yes;

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

while ((high >= 2) && (n < 10)

{ yes = 1;

for (j=2; j<=high/2; j++ )

if (high % j ==0 ){

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

yes=0; break

}

if (yes) { sum +=high; n++; }

high--;

}

return sum ;

}

main ( )

{

printf("%d\n", fun (100));

}

解题思路:

第一处:括号没有匹配。

Error: While statement missing ) in function fun

在函数funWhile语句缺少)

第二处:缺少分号。

Error: Break statement missing ; in function fun

在函数funbreak语句缺少;

这种题型只要通过编译即可发现程序的错误所在。

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

编写函数fun,它的功能是:利用以下所示的简单迭代方法求

方程:cos(x)-x=0 的一个实根。

迭代步骤如下:

1)取 x1 初值为0.0

2x0 = x1,把x1的值赋给 x0

3x1 = cos(x0),求出一个新的x1

4)若x0 - x1的绝对值小于 0.000001,执行步骤(5),否则执

行步骤(2);

 

 

 

 

5)所求x1就是方程 cos(x)-x=0 的一个实根,作为函数值返回。

程序将输出结果Root=0.739085

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

请勿改动主函数main和其它函数中的任何内容,仅在函数fun

的花括号中填入你编写的若干语句。

给定源程序:

#include

#include

float fun()

{

}

main()

{

printf("Root =%f\n", fun());

NONO();

}

 

解题思路:

本题是根据给定的公式及条件来计算方程的一个实根。

参考答案:

float fun()

{

float x0, x1=0.0;

do {

x0=x1;

x1=cos(x0);

} while(fabs(x0-x1)>0.000001);

return x1;

}

 

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

64套:

给定程序中,函数fun的功能是:将a所指3×5矩阵中第k列的元素左移到第0

列,第k列以后的每列元素行依次左移,原来左边的各列依次绕到右边。

例如,有下列矩阵:

1 2 3 4 5

1 2 3 4 5

1 2 3 4 5

k2,程序执行结果为

3 4 5 1 2

3 4 5 1 2

3 4 5 1 2

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

果。

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

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

给定源程序:

#include

#define M 3

#define N 5

void fun(int (*a)[N],int k)

{ int i,j,p,temp;

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

for(p=1; p<= __1__; p++)

for(i=0; i

{ temp=a[i][0];

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

for(j=0; j< __2__ ; j++) a[i][j]=a[i][j+1];

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

a[i][N-1]= __3__;

}

}

main( )

{ int x[M][N]={ {1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5} },i,j;

printf("The array before moving:\n\n");

for(i=0; i

{ for(j=0; jprintf("\n");

}

fun(x,2);

printf("The array after moving:\n\n");

for(i=0; i

{ for(j=0; jprintf("\n");

}

 

 

 

 

}

解题思路:

第一处:外循环p的终止变量的值,试题要求第k列左移,所以应填:k

第二处:矩阵共N列,所以应填:N-1

第三处:把存放在临时变量temp中的值,放到a[i][N-1]中,所以应填:temp

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

给定程序MODI1.C中函数fun的功能是:根据形参m的值(2m9〕,在mm

列的二维数组中存放如下所示规律的数据,由main函数输出。

例如,若输入 2 | 若输入 4

则输出: | 则输出:

1 2 | 1 2 3 4

2 4 | 2 4 6 8

| 3 6 9 12

| 4 8 12 16

请改正程序函数中的错误,使它能得出正确的结果。

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

给定源程序:

#include

#define M 10

int a[M][M] = {0} ;

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

fun(int **a, int m)

{ int j, k ;

for (j = 0 ; j < m ; j++ )

for (k = 0 ; k < m ; k++ )

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

a[j][k] = k * j ;

}

main ( )

{ int i, j, n ;

printf ( " Enter n : " ) ; scanf ("%d", &n ) ;

fun ( a, n ) ;

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

{ for (j = 0 ; j < n ; j++)

printf ( "M", a[i][j] ) ;

printf ( "\n" ) ;

}

}

解题思路:

第一处:在函数体fun中可知,a是一个字符串数组型变量,所以应改为:fun(int a[][M],

int m)

第二处:根据输出的结果可知,应改为:a[j][k]=(k+1)*(j+1);

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

函数fun的功能是:将ab中的两个两位正整数合并形成一个新的整数放在c

中。合并的方式是:a中的十位和个位数依次放在变量c的十位和千位上,b中的

十位和个位数依次放在变量c的个位和百位上。

例如,当a45b=12。调用该函数后,c=5241

 

 

 

 

注意: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入

你编写的若干语句。

给定源程序:

#include

void fun(int a, int b, long *c)

{

}

main()

{ int a,b; long c;

printf("Input a, b:");

scanf("%d%d", &a, &b);

fun(a, b, &c);

printf("The result is: %ld\n", c);

NONO();

}

 

解题思路:

本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。

a十位数字的方法:a/10

a个位数字的方法:a

参考答案:

void fun(int a, int b, long *c)

{

*c=(a)*1000+(b)*100+(a/10)*10+(b/10);

}

 

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

65套:

给定程序中,函数fun的功能是:将a所指4×3矩阵中第k行的元素与第0行元

素交换。

例如,有下列矩阵:

1 2 3

4 5 6

7 8 9

10 11 12

k2,程序执行结果为:

7 8 9

4 5 6

1 2 3

10 11 12

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

果。

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

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

给定源程序:

#include

#define N 3

#define M 4

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

void fun(int (*a)[N], int __1__)

{ int i,j,temp ;

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

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

{ temp=a[0][i] ;

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

a[0][i] = __3__ ;

a[k][i] = temp ;

}

 

 

 

 

}

main()

{ int x[M][N]={ {1,2,3},{4,5,6},{7,8,9},{10,11,12} },i,j;

printf("The array before moving:\n\n");

for(i=0; i

{ for(j=0; jprintf("\n\n");

}

fun(x,2);

printf("The array after moving:\n\n");

for(i=0; i

{ for(j=0; jprintf("\n\n");

}

}

解题思路:

第一处:变量k在函数体fun中已经使用,所以应填:k

第二处:共N行,所以应填:N

第三处:变量值交换,所以应填:a[k][i]

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

给定程序MODI1.C中函数 fun 的功能是: 读入一个字符串(长度<20 ),将该

字符串中的所有字符按ASCII码升序排序后输出。

例如, 若输入: edcba, 则应输出: abcde

请改正程序中的错误,使它能统计出正确的结果。

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

给定源程序:

#include

void fun( char t[] )

{

char c;

int i, j;

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

for( i = strlen( t ); i; i-- )

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

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

if( t[j] < t[ j + 1 ] )

{

c = t[j];

t[j] = t[ j + 1 ];

t[j + 1 ] = c;

}

}

main()

{

char s[81];

printf( "\nPlease enter a character string: " );

gets( s );

 

 

 

 

printf( "\n\nBefore sorting:\n \"%s\"", s );

fun( s );

printf( "\nAfter sorting decendingly:\n \"%s\"", s );

}

解题思路:

第一处:外for循环的初始值应是strlen(t)-1

第二处:由于是按升序排序,所以应 if(t[j]>t[j+1])

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

请编写一个函数fun, 其功能是: ss所指字符串中所有下标为奇数位置上的

字母转换为大写(若该位置上不是字母, 则不转换)。

例如, 若输入"abc4EFg",则应输出"aBc4EFg"

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

请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入

你编写的若干语句。

给定源程序:

#include

#include

void fun( char *ss )

{

}

void main( void )

{

char tt[51];

printf( "\nPlease enter an character string within 50 characters:\n" );

gets( tt );

printf( "\n\nAfter changing, the string\n \"%s\"", tt );

fun(tt) ;

printf( "\nbecomes\n \"%s\"", tt );

NONO();

}

解题思路:

本题是考察考生在字符串指定位置上的字母转换为大写。给出的程序是由i来控制字符串所

在的位置,字符串指针p是指向形参ss,再使用while循环语句对p进行控制来判断字符串是否结

束,在循环体中使用if条件语句来判断位置i是否为奇数且p所指的当前字符是否为'a''z'

字母,如果满足这两个条件,则把该小写字母转换成大写字符,小写字母与大写字母的差是32

所以只小写字母减去32,即可得到该字母的大写字母,且转换后的字母仍存放到原字符串的位

置上,转换结束后,最后通过形参ss返回已转换后的字符串。

参考答案:

void fun( char *ss )

{

char *p = ss ;

int i = 0 ;

while(*p) {

if((i % 2) && (*p >= 'a' && *p <= 'z')) *p -= 32 ;

p++ ;

i++ ;

}

return ss ;

}

 

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

66套:

给定程序中,函数fun的功能是:将形参std所指结构体数组中年龄最大者的

数据作为函数值返回,并在main函数中输出。

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

果。

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

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

给定源程序:

#include

typedef struct

{ char name[10];

int age;

}STD;

STD fun(STD std[], int n)

{ STD max; int i;

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

max= ___1___;

for(i=1; i

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

if(max.age<___2___) max=std[i];

return max;

}

main( )

{ STD std[5]={"aaa",17,"bbb",16,"ccc",18,"ddd",17,"eee",15 };

STD max;

max=fun(std,5);

printf("\nThe result: \n");

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

printf("\nName : %s, Age : %d\n", ___3___,max.age);

}

解题思路:

本题是从结构体中找出年龄最大的记录。

第一处:给存放最大者max赋初值,所以应填:*std

第二处:当前最大者的年龄和结构中所有的年龄进行比较,所以应填:std[i].age

第三处:输出最大者的姓名和年龄,所以应填:max.name

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

给定程序MODI1.C中函数 fun 的功能是:实现两个整数的交换。

 

 

 

 

例如给ab分别输入:60 65,输出为:a = 65 b = 60

请改正程序中的错误,使它能得出正确的结果。

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

给定源程序:

#include

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

void fun ( int a, b )

{ int t;

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

t = b; b = a ; a = t;

}

main ( )

{ int a, b;

printf ( "Enter a , b : "); scanf ( "%d,%d", &a, &b );

fun ( &a , &b ) ;

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

}

解题思路:

第一处:函数形参定义不正确,在定义第2个形参时,也应加上int。由于通过该函数实现

两数交换,在C语言中,必须交换地址中的值,所以应定义为int *a,int *b

第二处:要交换地址中的值,不能交换地址,必须指定地址中的值,因此应改为

t=*b;*b=*a;*a=t;

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

请编一个函数void fun(int tt[M][N ], int pp[N])tt指向一个MN列的

二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。二维

数组中的数已在主函数中赋予。

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

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入

你编写的若干语句。

给定源程序:

#include

#define M 3

#define N 4

void fun ( int tt[M][N], int pp[N] )

{

}

main( )

{ int t [ M ][ N ]={{22,45, 56,30},

{19,33, 45,38},

{20,22, 66,40}};

int p [ N ], i, j, k;

printf ( "The original data is : \n" );

for( i=0; i

for( j=0; j

printf ( "m", t[i][j] );

printf("\n");

}

 

 

 

 

fun ( t, p );

printf( "\nThe result is:\n" );

for ( k = 0; k < N; k++ ) printf ( " M ", p[ k ] );

printf("\n");

NONO( );

}

 

解题思路:

本题是求出二维数组每列中最小元素,并依次放入pp所指一维数组中。

参考答案:

void fun ( int tt[M][N], int pp[N] )

{

int i,j, min, k ;

for(i = 0 ; i < N ; i++) {

min = tt[0][i] ; k = 0 ;

for(j = 1 ; j < M ; j++)

if(min > tt[j][i]) {

\TAB min=tt[j][i] ;

k = j ;

}

pp[i] = tt[k][i] ;

}

}

 

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

67套:

给定程序中,函数fun的功能是:调用随机函数产生20个互不相同的整数放在

形参a所指数组中(此数组在主函数中已置0)。

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

果。

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

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

给定源程序:

#include

#define N 20

void fun( int *a)

{ int i, x, n=0;

x=rand() ;

 

 

 

 

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

while (n<__1__)

{ for(i=0; i

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

if( x==a[i] ) __2__;

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

if( i==__3__){ a[n]=x; n++; }

x=rand() ;

}

}

main()

{ int x[N]={0} ,i;

fun( x );

printf("The result : \n");

for( i=0; i

{ printf("M",x[i]);

if((i+1)%5==0)printf("\n");

}

printf("\n\n");

}

解题思路:

第一处:一共产生20个随机数,所以应填:N

第二处:要求产生不同的20个整数,所以采用for循环对已产生的随机数进行比较,是否有

相同数,如果有相同,则退出循环体,所以应填:break

第三处:当退出循环体还是进行判断,in的值是否相等,如果相等,则表示该随机整数

不重复,可以存放到指定的数组中,所以应填:n

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

给定程序MODI1.C中函数fun的功能是: 先从键盘上输入一个33列矩阵的各

个元素的值, 然后输出主对角线元素之和。

请改正函数fun中的错误或在横线处填上适当的内容并把横线删除,使它能得

出正确的结果。

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

给定源程序:

#include

int fun()

{

int a[3][3],sum;

int i,j;

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

______;

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

{ for (j=0;j<3;j++)

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

scanf("%d",a[i][j]);

}

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

sum=sum+a[i][i];

 

 

 

 

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

}

main()

{

fun();

}

解题思路:

第一处:变量sum进行初始化,由于计算累加和,所以应为:sum=0;

第二处:读入整型数,应使用地址读入,所以应为:scanf("%d",&a[i][j]);

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

编写程序, 实现矩阵(33列)的转置(即行列互换)

例如, 输入下面的矩阵:

100 200 300

400 500 600

700 800 900

程序输出:

100 400 700

200 500 800

300 600 900

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

请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入

你编写的若干语句。

给定源程序:

#include

int fun(int array[3][3])

{

}

main()

{

int i,j;

int array[3][3]={{100,200,300},

{400,500,600},

{700,800,900}};

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

{ for (j=0;j<3;j++)

printf("}",array[i][j]);

printf("\n");

}

fun(array);

printf("Converted array:\n");

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

{ for (j=0;j<3;j++)

printf("}",array[i][j]);

printf("\n");

}

NONO();

}

 

解题思路:

本题是解决矩阵的转置问题。

参考答案:

int fun(int array[3][3])

{

int i,j,arr[3][3] ;

memcpy(arr, array, 9*sizeof(int)) ;

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

for(j = 0 ; j < 3 ; j++)

array[i][j] = arr[j][i] ;

}

 

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

68套:

给定程序中,函数fun的功能是:ss所指字符串数组中长度最长的字符串所

在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。ss所指字符串

数组中共有M个字符串,且串长

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

果。

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

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

给定源程序:

#include

#define M 5

#define N 20

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

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

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

for(i=0; 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

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 1 1

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

2 3 4 m

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

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

能计算出正确的结果。

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

给定源程序:

#include

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

#include

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();

}

 

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

69套:

给定程序中,函数fun的功能是将ab所指的两个字符串转换成面值相同的整

数,并进行相加作为函数值返回,规定字符串中只含9个以下数字字符。

例如,主函数中输入字符串:3248612345,在主函数中输出的函数值为:

44831

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

果。

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

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

给定源程序:

#include

#include

#include

#define N 9

long ctod( char *s )

{ long d=0;

while(*s)

if(isdigit( *s)) {

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

d=d*10+*s-__1__;

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

__2__; }

return d;

}

long fun( char *a, char *b )

{

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

return __3__;

}

main()

 

 

 

 

{ char s1[N],s2[N];

do

{ printf("Input string s1 : "); gets(s1); }

while( strlen(s1)>N );

do

{ printf("Input string s2 : "); gets(s2); }

while( strlen(s2)>N );

printf("The result is: %ld\n", fun(s1,s2) );

}

解题思路:

第一处:数字字符与其对应的数值相差48,所以应填:48

第二处:到字符串下一个位置,所以应填:s++

第三处:返回两个数字字符串经转换成数值的和,所以应填:ctod(a)+ctod(b)

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

给定程序MODI1.C fun 函数的功能是:分别统计字符串中大写字母和小写

字母的个数。

例如, 给字符串 s 输入:AAaaBBb123CCccccd,则应输出结果:

upper = 6, lower = 8

请改正程序中的错误,使它能计算出正确的结果。

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

给定源程序:

#include

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

void fun ( char *s, int a, int b )

{

while ( *s )

{ if ( *s >= 'A' && *s <= 'Z' )

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

*a=a+1 ;

if ( *s >= 'a' && *s <= 'z' )

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

*b=b+1;

s++;

}

}

main( )

{ char s[100]; int upper = 0, lower = 0 ;

printf( "\nPlease a string : " ); gets ( s );

fun ( s, & upper, &lower );

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

}

解题思路:

第一处:在等式右边应写*a

第二处:在等式右边应写*b

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

请编一个函数fun,函数的功能是使实型数保留2位小数,并对第三位进行四

舍五入 (规定实型数为正数)。

 

 

 

 

例如:实型数为 1234.567, 则函数返回 1234.570000

实型数为 1234.564, 则函数返回 1234.560000

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

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入

你编写的若干语句。

给定源程序:

#include

float fun ( float h )

{

}

main( )

{ float a;

printf ("Enter a: "); scanf ( "%f", &a );

printf ( "The original data is : " );

printf ( "%f \n\n", a );

printf ( "The result : %f\n", fun ( a ) );

NONO( );

}

 

解题思路:

本题主要是考察考生保留小数点后两位数并对第三位进行四舍五入。方法是先把这个数乘

100,然后再加0.5(实现四舍五入),再把这个数存放到一个长整型变量中,目的是把小数

点后的小数去除,最后把这个数转换成浮点型数除以100,即可得出所的结果。

参考答案:

float fun ( float h )

{

long w ;

w = h * 100 + 0.5 ;

return (float) w / 100 ;

}

 

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

70套:

给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定

所有数均为正数),作为函数值返回;并将大于平均值的数放在形参y所指数组中,

在主函数中输出。

例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值为:

30.500000

主函数中输出:46 32 40 45 48

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

果。

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

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

给定源程序:

#include

#define N 10

double fun(double x[],double *y)

{ int i,j; double av;

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

av=__1__;

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

for(i=0; i

for(i=j=0; i

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

if(x[i]>av) y[__3__]= x[i];

y[j]=-1;

return av;

 

 

 

 

}

main()

{ int i; double x[N],y[N];

for(i=0; i4.0f ",x[i]);}

printf("\n");

printf("\nThe average is: %f\n",fun(x,y));

for(i=0; y[i]>=0; i++) printf("%5.1f ",y[i]);

printf("\n");

}

解题思路:

第一处:计算平均值时,需对变量av进行初始化为0

第二处:利用for循环计算其平均值,所以应填:x[i]/N

第三处:把数组x中元素值大于平均值的数依次存放到形参y所指的数组中其中位置由变量j

来控制,所以应填:j++

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

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

     1          1          1             1

y = ------- +    --------- +   --------- + …… + -------

     100*100 200*200     300*300        m*m

例如,若m = 2000,则应输出: 0.000160

请改正程序中的语法错误,使它能计算出正确的结果。

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

给定源程序:

#include

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

fun ( int m )

{ double y = 0, d ;

int i ;

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

for( i = 100, i <= m, i += 100 )

{ d = (double)i * (double)i ;

y += 1.0 / d ;

}

return( y ) ;

}

main( )

{ int n = 2000 ;

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

}

解题思路:

第一处:由于计算的实型值要通过函数返回,所以必须定义函数的返回类型,只要intvoid

可以省略,其他都要定义类型。由于返回是实型值,所以应在数名前加上double等定义。如果

使用float则精度不够,所以在这里不能使用float定义。

第二处:在for循环中,两个“;”不可省略,在此把“;”错写成“,”。

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

已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组

中。请编写函数 fun,函数的功能是:找出成绩最低的学生记录,通过形参返回

 

 

 

 

主函数(规定只有一个最低分)

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

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入

你编写的若干语句。

给定源程序:

#include

#include

#define N 10

typedef struct ss

{ char num[10]; int s; } STU;

fun( STU a[], STU *s )

{

}

main ( )

{ STU a[N]={ {"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},

{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71} }, m ;

int i;

printf("***** The original data *****\n");

for ( i=0; i< N; i++ )printf("No = %s Mark = %d\n", a[i].num,a[i].s);

fun ( a, &m );

printf ("***** THE RESULT *****\n");

printf ("The lowest : %s , %d\n",m.num, m.s);

NONO( );

}

解题思路:

本题考察学生在一组记录中找出最低分。我们使用for循环语句来解决这个问题。

参考答案:

 

fun( STU a[], STU *s )

{

 

 

 

 

int i, min = a[0].s, j = 0;

for(i = 1 ; i < N ; i++)

if(min > a[i].s) { /* 如果最低分min仍大于当前分 */

j = i ; /* 记住位置 */

min = a[i].s ; /* 把当前分赋值给min */

}

*s = a[j] ;

}