2018年3月国家二级C语言机试(操作题)真题汇编2
程序填空题
1.使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。函数fun的功能是将一个由字符0和1组成的表示二进制数的字符串,转换成相应的十进制整数值返回。该串长度最大不超过15。
例如,若表示二进制数的字符串为:\\
(1)s[]
(2)s[i]!=’\0’&&i<N
(3)48
解析:填空1:该函数所接受的参数为字符数组,所以形参也为字符数组,根据函数内所用的字符数组s[i],所以该空填s[]。答案为s[]。
填空2:访问一个字符数组的所有元素时,当该元素不为字符串结束符’\0’时,继续访问,当访问到字符串结束符’\0’时,表示该字符串结束了,结束循环返回计算结果,因为串的长度最大不超过15,所以定义了一个常量N为16,在for循环的第二个表达式中i<N用来控制其不超过15,当其超过了15位时后面的不做计算,所以该空填s[i]!=’\0’&&i<N。答案为s[i]!=’\0’&&i<N。
填空3:从字符串取出的字符不能直接用于十进制计算,从s[i]中取出的“1,0”为字符,要先将其转化为十进制数字,s[i]﹣48将s[i]中的字符转化为十进制数。
程序修改题
2.使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。调用fun函数输出字符串,当奇数次调用时要求把字符串中的小写字母转换成大写字母,偶数次调用时按输入字符串的逆序输出字符串。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行。也不得更改程序的结构。
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#pragma warning(disable:4996)
void fun(char*s)
{inti;
/*********found*********/
Statc intn=1;
if(n++%2)
/*********found*********/
for(i=0;i<=strlen(s);i++)
printf(\\
(1)将Static改为static
(2)将for循环中的i<=strlen(s)改为i<strlen(s)
(3)将for循环中的i>0改为i>=0
解析:(1)函数使用static修饰变量n,用来保存调用次数以便判断是奇数次还是偶数次,关键字应为static,第一个字母为小写,所以将Static改为static。
(2)用strlen()计算字符串长度,但因为字符串保存在一个数组中,而数组元素是从0位置开始的,例如一个字符数组s[]有5个字符,利用数组调用它们应为a[0]、a[1]、a[2]、a[3]、a[4],for循环中当i=strlen(s﹣1)时即为最后一个字符,所以将for循环中的i<=strlen(s)改为i<strlen(s)。
(3)利用for循环从该字符数组最后一个字符开始依次向前输出字符,实现该字符串的逆序输出,字符数组的第一个元素应为s[0],因此最后输出的字符为s[0],所以将for循环中的i>0改为i>=0。
程序设计题
3.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。此处有一个很奇怪的车牌号,它是一个4位十进制数,是某一个数的平方数,且这4个数字从右至左一个比一个大。程序的功能是把这个车牌号找出来,部分程序已给出。
请编写函数fun,其功能是:将一个4位数的每一位数分离出来,并依次存放在结构体变量成员中,通过函数值返回给主函数。
例如,一个4位数n为2579,则应把2放在res.m3中,把5放在res.m2中,把7放在res.m1中,把9放在res.m0中。
程序正确运行后的输出结果是:No.is1369
注意:部分源程序存在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include<stdio.h>
{}include<stdlib.h>
#praqma warning(disable:4996)
struct BITS{int m3,m2,m1,m0;};
Struct BITS fun(int n)
{
Struct BITS res;
/*在这里将函数代码补充完整*/
}
main()
{struct BITS a;
void NONO();
int i=0,n=0;
for(i=32;i<100;i++)
{n=i*i;
a=fun(n);
if(a.m3<a.m2&&a.m2<a.m1&&a.m1<a.m0)
printf(\\
res.m0=n%10;
res.m1=n/10%10;
res.m2=n/100%10;
res.m3=n/1000;
return res;
解析:根据题目要求将一个四位数的个、十、百、千位数提取出来,分别放入res.m0、res.m1、res.m2、res.m3中,首先提取个位数,将数对10取余,所得的结果即为个位数字,将其赋值给res.m0;然后取十位,将该数除以10,因为是int型,进行强制转换,小数点后的数字舍去,则该数的个位数舍去,变为一个三位数(例如2563除以10为256.3,经类型强制转换后变为256),再进行对10取余,得到十位数字,将其赋值给res.m1;然后取百位,将该数除以100,因为是int型,进行强制转换,小数点后的数字舍去,则该数的个位、十位数舍去,变为一个两位数(例如2563除以100为25.63,经类型强制转换后变为25),再进行对10取余,得到百位数字,将其赋值给res.m2;最后取千位,将该数直接除以1000,再进行强制转换后(例如2563除以1000为2.563,经类型强制转换后变为2),所得到的数即为千位数字,将其赋值给res.m3,最后返回该结构体即可。
本文档预览:3600字符,共3110字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载