国家二级C语言机试(操作题)模拟试卷664
程序填空题
1.使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的作用是:统计整型变量m中各数字出现的次数,并存放到数组a中,其中:a[0]存放0出现的次数,a[1]存放1出现的次数,……a[9]存放9出现的次数。
例如,若m为14579233,则输出结果应为:0,1,1,2,1,1,0,1,0,1,
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
void fun(int m,int a[10])
{int i;
for(i=0;i<10;i++)
/*********found*********/
【1】=0;
while(m>0)
{
/*********found*********/
i=【2】;
a[i]++;
/*********found*********/
m=【3】;
}
}
main()
{int m,a[10],i;
printf(\\
(1)a[i]
(2)m%10
(3)m/10
解析:数组a各元素初始化为0,用求余和整除相结合的方法得到数字的每一位数字,并用它做为数组a的下标,相应元素加1。
填空1:数组a的10个元素赋值为O。
填空2:m%10可得到数m的最后一位数字。
填空3:m/10可使数字截短,即去掉最后一位。
程序修改题
2.使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:将tt所指字符串中的小写字母全部改为对的大写字母,其他字符不变。
例如,若输入“Ab,cD”,则输出“AB,CD”。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<conio.h>
#include<stdio.h>
#include<string.h>
char*fun(char tt[])
{
int i;
for(i=0;tt[i];i++)
/*********found*********/
if((tt[i]>=’a’)||(tt[i]<=’z’))
/*********found*********/
tt[i]+=32;
return(tt);
}
main()
{
char tt[81];
printf(\\
(1)if((tt[i]>=’a’)&&(tt[i]<=’z’))
(2)tt[i]-=32;
解析:(1)分析本题可知,要判断字符是否为小写字母,即判断其是否在‘a’~‘z’之间,所以这里需要进行连续的比较,用&&。
(2)从ASCII码表中可以看出,小写字母的ASCII码值比对应大写字母的ASCII值大32。将字符串中的小写字母改为大写字母的方法是:从字符串第一个字符开始,根据ASCII码值判断该字母是不是小写字母,若是,则ASCH码值减32。
程序设计题
3.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。此程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N],int n),该函数的功能是:使数组左下半三角元素中的值乘以n。例如,若n的值为3,a数组中的值为:
则返回主程序后a数组中的值应为:
void fun(int a[][N],int n)
{
int i,j;
for(i=0;i<N;i++)
for(j=0;j<=i;j++)
/*矩形的下三角时,积相乘*/
a[i][j]=a[i][j]*n;
}
解析:首先从数组中找出要被乘以n的那部分元素,这一过程其实就是找出将被挑出的元素在原数组中的分布规律的过程。通过观察得出,要被处理的元素下标值的范围是每行中从第一个元素开始,直到列数等于该行行数时为止。找到这个规律后,依次从数组中取得符合要求的元素,然后乘以n。
本文档预览:3600字符,共2563字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载