国家二级C语言机试(操作题)模拟试卷841
程序填空题
1.给定程序中,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的长度,将其余字符串右边用字符“*”补齐,使其与最长的字符串等长。ss所指字符串数组中共有M个字符串,且串长<N。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include<stdio.h>
#include<string.h>
#define M 5
#define N 20
void fun(char(*ss)[N])
{ int i,j,n,len=0;
for(i=0;i<M;i++)
{len=strlen(ss[i]);
if(i==0)n=len;
if(len>n)n=len;
}
for(i=0; i<M; i++) {
/**********found**********/
n=strlen(___1___);
for(j=0;j<len-n;j++)
/**********found**********/
ss[i][___2___]=’*’;
/**********found**********/
ss[i][n+j+___3___]=’\0’;
}
}
main()
{ char ss[M][N]={\\
(1)ss[i]
(2)n+j
(3)1
解析:函数fun的功能是求出形参ss所指字符串数组中最长字符串的长度。
第一空:第一个循环求最长字符串的长度“len”,在第二个循环内在其他字符串的后面补“*”,使其达到长度“len。”在“for(=i=0;j<len-n;j++)”语句中,“i<len-n”是在字符串的后面填“len-n”个“*”,故n是字符串“ss[i]”的长度,因此,第一空应为“ss[i]”。
第二空:循环“for(j=0;j<len-n;j++)”目的是在字符串的后面填len-n个“*”,第二空处应为“n+j”。
第三空:字符串以“\0”结束,因此,需在字符串后加结束符,故第三空应为“1”。
程序修改题
2.给定程序MODI1.C中fun函数的功能是:将p所指字符串中每个单词的最后一个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。
例如,若输入“I am a student to take the examination.”,则应输出“I aM A studen T tO takEthEexamination.”。
请修改程序中的错误之处,使它能得出正确的结果。
注意:不要改动main函数,不得删行,也不得更改程序的结构!
#include<ctype.h>
#include<stdio.h>
#include<string.h>
void fun(char*p)。
{
int k=0,
for(;*p;p++)
if(k)
{
/**********found**********/
if(p==’ ’)
{
k=0;
/**********found**********/
*(p)=toupper(*(p-1))
}
}
else
k=1;
}
main()
{
char chrstr[64];
int d;
printf(\\
(1)if(p==’ ’)
(2)*(p-1)=toupper(*(p-1));
解析:函数的功能是将每个单词的最后一个字母改成大写。
(1)第一个错误标识下的if语句应该是判断字符串中的字符是否是空格,根据“for(;*p;p++)”语句中for循环条件中p的定义应该为字符型指针变量,*p是取p所指存取单元的值,所以“if(p==’ ’)”应该改为“if(*p==’ ’)”。
(2)题干中要求是将每个单词的最后一个字母改成大写,所以它的位置应该是挨着空格的前一个字符,应该是指针p指向字符的前一个位置,“*p=toupper(*(p-1))”是将改动的值赋给了p所指的空格,所以应该改为“*(p-1)=toupper(*(p-1));”且语句未尾应有分号。
程序设计题
3.请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列。
例如,原来的字符串为:CEAedca,排序后输出为:CedeEAa。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数mam和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include<stdio.h>
#include<ctype.h>
#include<string.h>
void fun(char*s,int num)
{
}
NONO()
{
/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/
char s[10];
FILE*rf,*wf;
int i=0;
rf=fopen(\\
char t; int i,j;
for(i=1;i<num-2;i++)
//对n个元素进行循环选择
for(j=i+1,j<num-1,j++)
if(s[i]<s[j])
//将str[i]设为最大值,和剩下的j~num-1进行比较
{t=s[i];
s[i]=s[j] ;
s[j]=t;
}
解析:选择排序法中的降序排序,首先从数组中挑选一个最大的元素的asciil码,把它和第一个元素交换,接着从剩下的num-1个元素中再挑出一个最大的元素的ascin码,把它和第二个元素交换,不断重复以上过程,直到比较完最后两个元素。
本文档预览:3600字符,共3231字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载