计算机二级C语言上机真题(16)【附详解】
【真题1】 给定程序的功能是判断字符ch 是否与串str 中的某个字符相同;若相
同,什么也不做,若不同,则插在串的最后。
#include < stdio.h >
#include < string.h >
void fun(char *str, char ch )
{ while ( *str && *str != ch ) str++;
/**********found**********/
if ( *str ___1___ ch )
{ str [ 0 ] = ch;
/**********found**********/
___2___ = 0;
}
}
main( )
{ char s[81], c ;
printf( "\nPlease enter a string:\n" ); gets
( s );
printf ("\n Please enter the character to search :
" );
c = getchar();
/**********found**********/
fun(___3___) ;
printf( "\nThe result is %s\n", s);
}
(2011年2月)
解析: 本题着重考察考生对C 语言中函数的调用以及一些简单算法的掌握情
况。
题中第一空填"!=":从题意得知,若字符ch与字符串str 中的某个字符相同,
什么也不做;若不同,则插在str 的最后。因此fun函数中先设置了一个循环从
字符串str 中寻找字符ch,如果找到则中断循环并保留字符ch的地址,否则一
直循环到串尾。因此通过判断*str 的内容即可判断是否已找到字符ch。
题中第二个空填"str[1]":如果没有找到字符ch,则在while循环后str 指针
指向串结束符0x00,此时应将字符ch 写入这里并在下一地址写入一个串结束
符0x00,所以应该是"str[1] = 0;"语句。
题中第三个空填"s,c":此句是调用fun()函数,括弧中是其实际参数。
答案:【1】!= 【2】str[1] 【3】str2
【真题2】 给定程序modi.c 中函数 fun 的功能是:用插入排序法将n个字符进行
排序(降序)。(提示: 插入法排序的思路是:先对数组的头两个元素进行排序,
然后根据前两个元素的情况插入第三个元素,再插入第四个元素…)。 请改正程序中
的错误,使它能统计出正确的结果。 注意:不要改动main 函数,
#define N 80
#include "stdio.h"
#include "string.h"
void insert(char *aa)
{int i,j,n; char ch;
/************found************/
n=stlen(aa);
for(i=1;i< n;i++)
/************found************/
{c=aa[i];
j=i-1;
while ((j >=0)&&(ch< aa[j]))
{ aa[j+1]=aa[j];
j--;
}
aa[j+1]=ch;
}
}
main()
{ char a[N]="QWERTYUIOPASDFGHJKLMNBVCXZ";
int i;
printf("The original string : %s\n",a);
insert(a);
printf("The string after sorting:%s\n\n",a);
}
(2011年2月)
解析: 本题的考核点是插入排序的算法。
插入法排序的思路:先对数组的头两个元素进行排序, 然后根据前两个元素的
情况插入第三个元素,再插入第四个元素…
C 语言中,大小写的字母含意不同。源程序中" While((b >=0)&&(t
>aa[b]))"是错误的,"While"应为小写,程序应改为"while((b >=0)&&(t
>aa[b]))"或相同作用的语句。
C 语言中,分号是语句的组成部分,各语句间以分号作为分隔。源程序中
"aa[b+1] = t"语句是错误的,应改为"aa[b+1]=t;"或相同作用的语句。
【真题3】 请编写函数fun,函数的功能是:将放在字符串数组中的M 个字符串(每
串的长度不超过N),按顺序合并组成一个新的字符串。 例如,字符串数组中的M个
字符串为: AAAA BBBBBBB CC 则合并后的字符串的内容应是:
AAAABBBBBBBCC。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数
main 和其它函数中的任何内容,仅在函数fun 的花括号中填入你编写的若干语句。
#define M 3
#define N 80
void fun(char a[M][N],char *b)
{……}
main()
{char s[M][N]={"AAAA","BBBBBBB","CC"},p[100];
clrscr();
fun(s,p);
printf("%s",p);
}
(2011年2月)
解析: int i,j,d;
for(i=0;i< 100;i++)
b[i]=0;
for(i=0,d=0;i< M;i++)
for(j=0;a[i][j];j++)
b[d++]=a[i][j];
同,什么也不做,若不同,则插在串的最后。
#include < stdio.h >
#include < string.h >
void fun(char *str, char ch )
{ while ( *str && *str != ch ) str++;
/**********found**********/
if ( *str ___1___ ch )
{ str [ 0 ] = ch;
/**********found**********/
___2___ = 0;
}
}
main( )
{ char s[81], c ;
printf( "\nPlease enter a string:\n" ); gets
( s );
printf ("\n Please enter the character to search :
" );
c = getchar();
/**********found**********/
fun(___3___) ;
printf( "\nThe result is %s\n", s);
}
(2011年2月)
解析: 本题着重考察考生对C 语言中函数的调用以及一些简单算法的掌握情
况。
题中第一空填"!=":从题意得知,若字符ch与字符串str 中的某个字符相同,
什么也不做;若不同,则插在str 的最后。因此fun函数中先设置了一个循环从
字符串str 中寻找字符ch,如果找到则中断循环并保留字符ch的地址,否则一
直循环到串尾。因此通过判断*str 的内容即可判断是否已找到字符ch。
题中第二个空填"str[1]":如果没有找到字符ch,则在while循环后str 指针
指向串结束符0x00,此时应将字符ch 写入这里并在下一地址写入一个串结束
符0x00,所以应该是"str[1] = 0;"语句。
题中第三个空填"s,c":此句是调用fun()函数,括弧中是其实际参数。
答案:【1】!= 【2】str[1] 【3】str2
【真题2】 给定程序modi.c 中函数 fun 的功能是:用插入排序法将n个字符进行
排序(降序)。(提示: 插入法排序的思路是:先对数组的头两个元素进行排序,
然后根据前两个元素的情况插入第三个元素,再插入第四个元素…)。 请改正程序中
的错误,使它能统计出正确的结果。 注意:不要改动main 函数,
#define N 80
#include "stdio.h"
#include "string.h"
void insert(char *aa)
{int i,j,n; char ch;
/************found************/
n=stlen(aa);
for(i=1;i< n;i++)
/************found************/
{c=aa[i];
j=i-1;
while ((j >=0)&&(ch< aa[j]))
{ aa[j+1]=aa[j];
j--;
}
aa[j+1]=ch;
}
}
main()
{ char a[N]="QWERTYUIOPASDFGHJKLMNBVCXZ";
int i;
printf("The original string : %s\n",a);
insert(a);
printf("The string after sorting:%s\n\n",a);
}
(2011年2月)
解析: 本题的考核点是插入排序的算法。
插入法排序的思路:先对数组的头两个元素进行排序, 然后根据前两个元素的
情况插入第三个元素,再插入第四个元素…
C 语言中,大小写的字母含意不同。源程序中" While((b >=0)&&(t
>aa[b]))"是错误的,"While"应为小写,程序应改为"while((b >=0)&&(t
>aa[b]))"或相同作用的语句。
C 语言中,分号是语句的组成部分,各语句间以分号作为分隔。源程序中
"aa[b+1] = t"语句是错误的,应改为"aa[b+1]=t;"或相同作用的语句。
【真题3】 请编写函数fun,函数的功能是:将放在字符串数组中的M 个字符串(每
串的长度不超过N),按顺序合并组成一个新的字符串。 例如,字符串数组中的M个
字符串为: AAAA BBBBBBB CC 则合并后的字符串的内容应是:
AAAABBBBBBBCC。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数
main 和其它函数中的任何内容,仅在函数fun 的花括号中填入你编写的若干语句。
#define M 3
#define N 80
void fun(char a[M][N],char *b)
{……}
main()
{char s[M][N]={"AAAA","BBBBBBB","CC"},p[100];
clrscr();
fun(s,p);
printf("%s",p);
}
(2011年2月)
解析: int i,j,d;
for(i=0;i< 100;i++)
b[i]=0;
for(i=0,d=0;i< M;i++)
for(j=0;a[i][j];j++)
b[d++]=a[i][j];