2015年计算机二级C语言上机操作题及答案(90)
发布时间:2011/7/28 15:40:52 来源:城市学习网 编辑:ziteng
一、填空题
人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一。函数fun的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
#include
#include
#define N 8
typedef struct
{
char num[10];
int year, month, day;
} STU;
___1___ fun(STU *std, char *num)
{
int i;
STU a = {"", 9999, 99, 99};
for (i=0; i if (strcmp(___2___, num) == 0)
return (___3___);
return a;
}
main()
{
STU std[N] =
{
{"111111", 1984, 2, 15}, {"222222", 1983, 9, 21},
{"333333", 1984, 9, 1}, {"444444", 1983, 7, 15},
{"555555", 1984, 9, 28}, {"666666", 1983, 11, 15},
{"777777", 1983, 6, 22}, {"888888", 1984, 8, 19}
};
STU p;
char n[10] = "666666";
p = fun(std, n);
if (p.num[0] == 0)
{
printf("\nNot found !\n");
}
else
{
printf("\nSucceed !\n ");
printf("%s %d-%d-%d\n", p.num, p.year, p.month, p.day);
}
}
答案:
1、STU
2、std[i].num
3、std[i] [NextPage] 二、改错题
下列给定程序中,函数fun的功能是:计算n的5次方的值(规定n的值大于2、小8),通过形参指针传回主函数;并计算该值的个位、十位、百位上数字之和作为函数值返回。例如,7的5次方是16807,其低3位数的和值是15。
请改正函数fun中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
int fun(int n, int *value)
{
int d, s, i;
/********found********/
d = 0;
/********found********/
s = 1;
for (i=1; i<=5; i++)
d = d*n;
*value = d;
for (i=1; i<=3; i++)
{
s = s + d;
/********found********/
s = s/10;
}
return s;
}
main()
{
int n, sum, v;
do
{
printf("\nEnter n(2 } while (n<=2 || n>=8);
sum = fun(n, &v);
printf("\n\nThe result:\n value=%d sum=%d\n\n", v, sum);
}
答案:
1、d=0;应改为 d=1;
2、s=1;应改为 s=0;
3、s=s/10;应改为 d=d/10; [NextPage] 三、编程题
请编写函数fun,其功能是:计算并输出下列多项式的值:
例如,若主函数从键盘给n输入8后,则输出为s=0.662872。
注意:n的值要求大于1但不大于100。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include
double fun(int n)
{
}
main()
{
int n;
double s;
FILE *out ;
printf("\nInput n: ");
scanf("%d",&n);
s=fun(n);
printf("\ns=%f\n",s);
out=fopen("out.dat","w");
for (n = 5; n < 10; n++)
fprintf(out, "%f\n", fun(n));
fclose(out);
}
答案:
double fun (int n)
{
int i;
double sn=0.0;
for( i=1;i<=n;i++)
sn+=(1.0/(2*i-1)-1.0/(2*i));
return sn;
}