一、程序阅读选择题(每选择3分,共8个选择,共24分)
1.阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。某企业有12个部门,现在需要统计各个部门的人数,部门人数存放在数据库PeopleNum中(在本题中用数组PeopleNum进行模拟),程序中通过调用函数获SumNum取各个部门人数总和。
#include<stdio.h>
static int PeopleNum[20]={10,8,4,2,15,23,8,5,12,20,4,18};
int SumNum( )
{
int i, (1) ;
i=1;
while( (2) )
{
sum+= PeopleNum[i];
(3) ;
}
rerurn sum;
}
int main()
{
printf(" (4) n", SumNum( ));
return 0;
}
【供选择的答案】
(1) A、 sum=1 B、sum=2
C、 sum=0 D、sum=10
(2) A、 i<=11 B、i<11
C、 i==12 D、i<=12
(3) A、 i+1 B、i+ +
C、 i++ D、i
(4) A、 sum=%f B、sum=%-6d
C、 sum=%c D、sum=%ld
2.阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。注意:各小题之间相互独立。
#include<stdio.h>
int fun_char(char s[],char ch)
{
int i=0,k=0;
for(;s[i]!='?';i++){
if (s[i]==ch) //6
//7
k++;
}
return k;
}
int main( )
{
char s[80],ch;
int n=100;
printf("enter a string:");
gets(s);
printf("enter a char:");
ch=getchar( );
n=fun_char(s,ch);
printf("The n value is :%dn",n);
return 0;
}
【供选择的答案】
(1)程序运行时从键盘输入的字符串为:”bdahgfabdfa”,输入的字符为’a’,则输出为
A、11 B、3
C、8 D、2
(2)程序第6行改为:if (s[i]!=ch)后,程序运行时从键盘输入的字符串为:”bdahgfabdfa”,输入的字符为’a’,则输出为
A、11 B、3
C、8 D、2
(3) 程序第7行改为:break;后,程序运行时从键盘输入的字符串为:”bdahgfabdfa”,输入的字符为’a’,则输出为
A、1 B、3
C、8 D、2
(4) 程序第7行改为:continue;后,程序运行时从键盘输入的字符串为:”bdahgfabdfa”,输入的字符为’a’,则输出为
A、11 B、3
C、8 D、2
二、程序改错题(每个错误4分,写出第2题的编译命令4分,共20分)
1. 程序中有两个错误,请改正。程序的功能是模拟打印某职工的图像,从数据库中读出两张图像,并测定图像的大小,根据界面的选定决定是高清晰打印还是一般的图像打印,高清晰打印是指打印图像像素大的图像。设图像的像素大小为x、y ; 如界面选定用flag表示,flag为1,表示高清晰打印,flag为0,表示一般的图像打印。x、y、flag的值用键盘输入进行模拟,打印的时间长短用函数sleep进行模拟,如sleep(5)打印需时间为5s,sleep函数在stdio.h库中,它的参数用像素值表示。
#include<stdio.h>
int main()
{
int x,y,time,flag;
scanf("%d %d,x,y");
scanf("%d",&flag);
if(x>y,flag)
time=x;
else
time=y;
printf(" 正在打印中…请等待 time=%d Sn",time);
sleep(time);
return 0;
}
2. 程序kk.c中有两个错误,请改正。程序的功能统计本部门职工工资低于平均工资的人数,及需要增加发放消费券的职工人数,可发放消费券的职工条件是比平均工资低800元的职工。职工的工资来自职工数据库,本程序中用键盘输入来模拟,当读到职工工资小于等于0时程序结束。
#include<stdio.h>
int main()
{
int i=0,num1=0,num2=0;
double sum=0,average,a[100];
for( ; ;i++)
{
scanf("%lf",&a[i]);
if(a[i]<0)
break;
sum=sum + a[i];
}
average=sum/i;
printf("i=%d av=%lfn",i,average);
while(i>=0)
{i--;
if(a[i]+800<average)
num2++;
else if (a[i]<average)
num1++;
}
printf("你部门低于本部门平均工资的人数%dn",num1);
printf("你部门需要发放消费券的职工人数%dn",num2);
return 0;
}
三、函数设计(10分)
程序功能:C程序文件exec.c中有main函数与fun函数,main函数中读入一字符串,调用函数fun判断此字符串是否能构成回文,所谓的回文是指左读与右读都相同的文字,例如”abcdcba”、”abcddcba”,如果是回文,返回给main函数1,否则返回给main函数0,在main函数中输出结果。完成函数的设计,请不要改变main函数与fun函数的参数。
#include<stdio.h>
//fun函数代码
int main( )
{
char str[81];
gets(str);
if(fun(str)==1)
printf("字符串%s是回文n",str);
else
printf("字符串%s不是回文n",str);
}
答案:
四、程序设计与调试(本题共16分)
文本文件my.h中的内容有若于行预处理命令,文件名为proc.c中有一函数double fun(double x , int n)定义,函数的功能是计算并返回x的n(n<=50)次幂 。此两个文件都存放在/home/aa目录下。已知main函数定义在mainp.c文件中,mainp.c文件存放在/root目录下。请建立文件proc.c完成fun函数的定义,写出文件my.h中的预处理命令,写出编译命令编译程序。注意:文件proc.c中没有任何预处理命令,不能改变mainp.c的文件内容,考生可自行建立目录aa。
//mainp.c
#include "my.h"
int main()
{
double x , s;
int n;
scanf("%d %lf",&n,&x);
s=fun(x , n);
printf("s=%ldn",s);
}
(1)
//my.h
请写出相应的代码:
(2)
//proc.c
请写出相应的代码:
(3)
请写出相应的命令:
五、程序设计(本大题,共2小题,共30分)
1.设计程序:设计一个计算器程序,键盘输入一个10进制整数及一个字符,如输入大写字符X、D、O,此数字分别以十六进制数、十进制数、八进制数输出。
2.设计程序:有一游戏程序,有一小丑爬台阶,台阶由N×N方阵的辅对角线构成,其规则为:小丑的生命特征值大小等于方阵辅对角线的当前元素,能顺利上一台阶,否则回到原地,小丑的生命特征值减1,同时方阵辅对角线的当前元素值减2。然后又继续攀登,最终如小丑的生命特征值减为0或攀登的次数大于2N,游戏失败,如果小丑的生命特征值大于0或攀登的次数小于2N,输出恭喜你字样。方阵及小丑的生命特征值由键盘输入。