国家二级(C语言)机试模拟试卷1029
程序填空题
1.以下程序的功能是统计字符串(长度不超过1000个字符)中每个字母的个数(不区分大小写),若字符不是字母,则统一归为其他字符。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的blankl.C中。不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#include <string.h>
void countstr(char*st,int cutor[]);
main()
{
char s[1000];
/*********found*********/
int counters[27]=【1】;
printf(\\
(1){0}
(2)25
(3)’A’或65
解析:(1)初始化时需要将作为计数器的数组counters的所有元素初始化为0,该空填写{0}。
(2)字母表只有26个字母,for循环用于统计这26个字母对应的个数,所以数组下标最大为25。
(3)C语言中,字母的ASCII码值是按照字母表顺序依次递增的,所以需要将ASCII码值减去’A’或65来得到字母A到Z在计数器数组中的下标。
程序修改题
2.给定程序modil.c中的函数intstrtoval(char pst[],double *p)的功能是,将pst中带符号的数字字符串转换成双精度数值,直到遇到非数字字符为止。函数返回值为0表示转换成功,为1表示转换失败,函数成功转换后的数值存储在指针P所指的存储单元中。
如:+123.65a转换数值后输出+123.650000,函数返回值为0。
-32-3转换数值后输出-32.000000,函数返回值为0。
56.76a转换数值后输出+56.760000,函数返回值为0。
+283.125转换数值后输出+283.125000,函数返回值为0。
对+a8.6转换失败,函数返回值为1,输出出错信息。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h>
int strtoval(char pst[],double *p)
{
int SUCS;
int plus:
int i=0;
double frac=0.1;
*p=0.0;
while(pst[i]==’’)i++;
/*********found*********/
if(pst[i]==’+’&&pst[i]>=’0’&&pst[i]<=’9’)
{
plus=1;
SUCS=1;
}
else if(pst[i]==’-’)
{
plus=0;
SUCS=1;
}
else
{
sucs=0;
return SUCS;
}
/*********found*********/
if(psi[i]==’+’&&psi[i]==’-’)
i++;
if(pst[i]==’-’)
i++;
if(!(pst[i]>=’0’&&psi[i]<=’9’))
{
SUCS=0;
return SUCS;
}
while(pst[i]!=’\0’)
{
if(pst[i]>=’0’&&pst[i]<=’9’)
{
*p=*p*10+pst[i]-’0’;
i++;
}
else if(pst[i]==’-’)
break;
else
{
if(plus==0)
*p=-1.0**p;
return SUCS;
}
}
/*********found*********/
if(pst[i]!=’-’)
{
i++;
while(pst[i]!=’\0’)
{
if(pst[i]>=’0’&&pst[i]<=’9’)
{
*p=*p+(pst[i]-’0’)*frac;
frac/=10;
i++;
}
else
{
if(plus==0)
*p=-1.0**p;
return SUCS;
}
}
return SUCS;
}
return SUCS;
}
main()
{
char str[][100]={\\
(1)if(pst[i]==’+’∣∣ pst[i]>=’0’&&pst[i]<=’9’)
(2)if(pst[i]==’+’∣∣pst[i]==’-’)
(3)if(pst[i]==’-’)
解析:(1)遍历pst中的数字字符串,如果遍历到的第一个非空格字符是’+’或数字字符,表示当前这个数字字符串是正数,此时将用于标记数值正负的plus置为1。函数返回值sucs置为1。所以第一处修改为if(pst[i]==’+’∣∣pst[i]>=’0’&&pst[i]<=’9’)。
(2)如果数字字符串pst中第一个非空字符是’+’或’-’,为了确定当前字符串是否可以转换成数值,则需要执行i++继续遍历下一个字符。所以第二处修改为if(pst[i]==’+’∣∣pst[i]==’-’)。
(3)当遍历的字符为’.’时,表示后面数字字符是小数部分,小数部分和前面的整数部分处理方式是不同的,这里if语句是用来处理接下来的小数部分。所以第三处修改为if(pst[i]==’.’)。
程序设计题
3.编写一个函数void change(int P[][N],int n),其功能是将一个int型二维数组的上下三角区域的数据对调,数组大小限制在100×100。
例如,N=7时,有二维数组:
int a[N][N]={
{11,12,13,14,15,16,17},
{21,22,23,24,25,26,27},
{31,32,33,34,35,36,37},
{41,42,43,4
本文档预览:3600字符,共5189字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载