1.程序填空
给定程序的功能是判断字符ch是否与串str中的某个字符相同:若相同,什么也不做,若不同,则插在串的最后。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果
注意:不得增行或删行,也不得更改程序的结构!
试题程序:
#include <stdio.h>
#include <string.h>
void fun(char*str, char ch )
{ while ( *str && *str != ch ) str++;
if( *str 1 ch )
{ str[0] =ch;
2 = 0;
}
}
main( )
{ char s[81], c;
printf( "\nPlease enter a string:\n" ); gets ( s );
printf ("\n Please enter the character to search : " );
c = getcharO;
fun( 3 ) ;
printf( "\nThe result is %s\n", s);
1.程序填空
【答案】
(1)!=
(2)str[1]
(3)s,c
【评析】
(1)fun函数中先设置了二个循环从字符串str中寻找字符ch,如果找到则中断循环并保留字符ch的地址,否则一直循环到串尾"。因此通过判断*str的内容即可判断是否已找到字符ch。
(2)如果没有找到字符ch,则在while循环后str指针指向串结束符Ox00,此时应将字符ch写入这里并在下一地址写入一个串结束符Ox00,所以应该是"str[1]。O;"语句。
(3)此句是调用fun()函数,括弧中是其实际参数。
2.程序修改
给定程序modi.c中,函数fun的功能是:'根据形参m的值(2≤m≤9),在m行m列的二维数组中存放如下所示的数据,由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 <stdio.h>
#include <conio.h>
#define M 10
int a[M][M]={0};
fun(int **a, int m)
{ int j,k;
for (j=0;j<m;j++)
for (k=0;k<m;l~++)
a[j][k]=k*j;
}
main()
{ int i,j,n;
clrscr0;
printf("Enter n:");scanf("%d",&n);
fun(a,n);
for(i=0;i<n;i++)
{ forO=O;j<n;j++)
print f("%4d",a[i] [j] );
printf("\n");
}
2.程序修改
【答案】
(1)错误:第5行fun(int**a,int m)
正确:fun(int a[][M],Int m)
(2)错误:第9行 a[j][k]=k*j;
正确:a[j][k]=(k+1)*(j+1);
【评析】
第5行:第二个形参m是用户输入的维数,没有别的名堂,第一个形参是为了指明在函数fun()中要产生的多维数组,"**a"是不能正确表示一个多维数组的,我们应当使用"int a[M][M]"。
第9行:循环体的内容是给m维的多维数组赋值,这个多维数组在列方向是由1开始的自然数,在行方向上是行首第一数的n倍数,显然,"a[j][k]=k*j;"不符合题意,我们应当使用"a[j][k]=(k+1)*(j+1);"。
3.程序设计
已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun,函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include <stdio.h>
#include <string.h>
#include <conio.h>
#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;
elrser();
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");
printfCThe top : %s, %d\n",m.num,m.s);
NON0( );
}
NON0( )
{\*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/
FILE *rf, *wf;
STU a[N], m ;
Int i;
rf = fopen("bc09.in", "r,) ;
wf= fopen("bc09.out", "w") ;
for(i = 0 ; i < 10; i++) fscanf(rf, "%s %d", a[i].num, &a[i].s) ;
fun(a, &m) ;
fprintf (wf, "The top : %s, %d\n", m.num, re.s) ;
fclose(rf) ;
fclose(wf) ;
}
3.程序设计
【答案】
fun(STU a[],STU。s)
{ int i;
STU *m;
re=a;
for(i=1;i<N;i++)/*从前往后集顺序比较a数组中的学生成绩,并使m指针始终指向成绩低的学生记录*/
if(a[i].s>m[0].s) m=&a[i];
s[0].s=m[0].s;
strcpy(s[0].Num,m[0].num);/*将m指针中的学生学号复制给s数组中的学号变量*/
}
【评析】
从题目的要求来看,我们应建立一个循环来寻找成绩最高的学生记录。我们给出的参考函数中定义了一个指针存放学生记录中的最高成绩。
·2009年9月计算机等考二级VB模拟题及解析(13) (2009-9-18 11:13:52)
·2009年9月计算机等级考试二级C语言模拟试题(13) (2009-9-18 10:49:55)
·2009年9月计算机等级考试二级C++模拟试题(4) (2009-9-17 11:45:15)
·2009年9月计算机等考二级VB模拟题及解析(12) (2009-9-17 11:28:27)
·2009年9月计算机等级考试二级C语言模拟试题(12) (2009-9-17 11:01:48)