国家二级C语言机试(操作题)模拟试卷394
程序填空题
1.函数fun的功能是:根据所给的年、月、日,计算出该日是这一年的第几天,并作为函数值返回。其中函数isleap用来判别某一年是否为闰年。
例如,若输入:2008 5 1,则程序输出:2008年5月1日是该年的第122天。
请在程序的下划线处填入正确的内容,并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
1 #include<stdio.h>
2 int isleap(int year)
3 {int leap;
4 leap=(year%4==0 &&year%100 !=0|| year%400==0);
5 /**********found**********/
6 return__(1)__;
7 }
8 int fun(int year,int month,int day) {int {table[13]={0,31,28,31,30,31,
9 30,31,31,30,31,30,31};
10 int days=0,i;
11 for(i=1;i<month;i++)
12 days=days+table[i];
13 /**********found**********/
14 days=days+__(2)__;
15 if(isleap(year)&&month>2)
16 /**********found**********/
17 days=days+__(3)__;
18 return days;
19 }
20 main()
21 { int year,month,day,days;
22 printf(’’请输入年、月、日:’’);
23 scanf(’’%d%d%d’’,&year,&month,& day);
24 days =fun(year,month,day);
25 printf(’’%d年%d月%d日是该年的第%d天\n’’,year,month,day,days);
26 }
(1)leap (2)day (3)1
解析:第一空:“return(1);p”这一空出现在isleap函数中,是为了判断我们给出的年份是否为闰年的函数,这里要填的为此函数的返回值。很明显地,这里的数据为leap,判断是否为闰年后,我们还需要返回leap是否是闰年。所以这一空应该填lea。第二空:“days=days+__(2)__;p”这一空出现在fun函数中,所填的是days的数据结果算式,days即为我们需要统计的天数。这里根据条件和函数的下一步,我们可以看出来这里的days统计是当年份不为闰年时的天数统计,而当年份不为闰年时,只要将给出的月份前面几个月份天数相加,再加上这个月的日期即为这个给出年月日在这一年中的天数,再根据上一步我们知道算式右边的days代表的即为本月前面月份的天数总和,所以这里只需要加上本月的日期就可以得到我们需要的一年中的第几天。所以这一空应该填的是给出的日期day。
第三空:“days=days+__(3)__;p”这一空出现在fun函数中,这里所填也是days的数据,但是我们可以看到这里的days是在判断完为闰年且月份大于2时进行的计算,所以这里的days算法不同于上一步days的算法。根据常识我们都可以知道,闰年大于2的月份是要比普通的年份多一个2月29号的,所以要比普通的日期天数多一天,所以这里应该加上1,所以这一空应该填的是1。
程序修改题
2.给定程序MODI1.C中函数fun的功能是:求整数x的y次方的低3位值。例如,整数5的6次方为15625,此值的低3位值为625。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
1 #include<stdio.h>
2 long fun(int x,int y,long *p)
3 { int i;
4 long t=1;
5 /**********found**********/
6 for(i=1 ; i<y; i++)
7 t=t* x;
8 *p=t;
9 /**********found**********/
10 t=t/1000;
11 return t;
12 }
13 main()
14 { long t,r; int x,y;
15 printf(’’\nTnput x and y: ’’);scanf(’’%1d%1d’’,&x,&y);
16 t=fun(x,y,&r);
17 printf(’’\n\nx=%d,y=%d,r=%1d,1ast=%1d\n\n’’,x,y,r,t);
18 }
(1)for(i=1;i<=y;i++) (2)t=t%1000;
解析:函数的功能是求整数x的y次方的低3位值。(1)第一个标识下的“for (i=1;i<y;i++)”说明进行了y-1次方,而不是y次方,所以将“for(i=1;i<y;i++)”改为“for(i=1;i<=y;i++)”。(2)题目中要求截取前面求得结果的低三位,因此,第二个标识下“t=t/1000;”应该改为“t=t%1000;”。
程序设计题
3.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导的*号之外,将串中其它“*”号全部删除。在编写函数时,不得使用C语言提供的字符串函数。函数fun中给出的语句仅供参考。
例如, 字符串中的内容为:
****A*BC*DEF*G*******,删除后字符串中的内容应当是:****ABCDEFG。
注意:部分源程序在文件PROG1.C文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
1 #include<stdio.h>
2 void fun(char*a)
3 {
4 /*以下代码仅供参考*/
5 int i=0,k;
6 while(a[i]==’*’)i++;
7 k=i;
8 while(a[i]!=’\0’)/*以下程序段实现非*字符前移*/
9 {
10 }
11 a[k]=’\0’;
12 }
13 main()
14 {char s[81];void NONO();
15 printf(’’Enter a string:\n’’);gets(s);
16 fun(s);
17 printf(’’The string after deleted:\n’’);puts(s);
18 NONO();
19 }
本文档预览:3600字符,共4673字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载