2015年计算机二级C语言上机操作题及答案(86)
发布时间:2011/7/25 8:43:07 来源:城市学习网 编辑:ziteng
第一题:给定程序中,函数fun的功能是:将N*N矩阵中元素的值按列右移1个位置,右边被移出矩阵的元素挠回左边。
例如,N=3,有下列矩阵:
1 2 3
4 5 6
7 8 9
计算结果为:
3 1 2
6 4 5
9 8 7
请勿改动主函数main和其他函数任何内容,仅在横线上填入所编写的若干表达式或语句。
#include
#define N 4
void fun(int (*t)[N])
{
int i, j, x;
for (i=0; i<___1___; i++)
{
x = t[i][___2___];
for (j=N-1; j>0; j--)
t[i][j] = t[i][j-1];
t[i][___3___] = x;
}
}
main()
{
int i, j, t[][N] =
{21, 12, 13, 24, 25, 16, 47, 38, 29, 11, 32, 54, 42, 21, 33, 10};
printf("The original array:\n");
for (i=0; i {
for (j=0; j printf("- ", t[i][j]);
printf("\n");
}
fun(t);
printf("\nThe result is:\n");
for (i=0; i {
for (j=0; j printf("- ", t[i][j]);
printf("\n");
}
}
答案:
第一处 N
第二处 N-1
第三处 0 [NextPage] 第二题:下列给定程序中,函数fun的功能是:把主函数中输入的3个数,最大的放在a中,最小的放在c中。例如,输入的数位:55 12 34,输出结果应当是: a=55.0,b=34.0,c=12.0。
请改正程序中的错误,使它能得出正确的结果。
注意,不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
void fun(float *p, float *q, float *s)
{
/********found********/
float *k;
if (*p < *q)
{
k = *p;
*p = *q;
*q = k;
}
/********found********/
if (*s < *p)
{
k = *s;
*s = *p;
*p = k;
}
if (*q < *s)
{
k = *q;
*q = *s;
*s = k;
}
}
main()
{
float a, b, c;
printf("Input a b c:");
scanf("%f%f%f", &a, &b, &c);
printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n", a, b, c);
fun(&a, &b, &c);
printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n", a, b, c);
}
答案:
第一处 float*k;应改为float k;
第二处 if(*s<*p) 应改为if(*s>*p) [NextPage] 第三题:请编写函数fun,其功能是:计算并输出给定10个数的方差:
例如,给定的10个数为95.0、89.0、72.0、85.0、81.0、90.0、56.0,则输出为S=11.730729。
请勿改动主函数main和其他函数中哦的任何内容,仅在函数fun的花括号填入所编写的若干语句。
#include
#include
double fun(double x[10])
{
}
main()
{
double s, x[10]= {95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0};
int i;
FILE *out;
printf("\nThe original data is :\n");
for(i=0;i<10;i++)
printf("%6.1f",x[i]);
printf("\n\n");
s=fun(x);
printf("s=%f\n\n",s);
out=fopen ("out.dat", "w");
fprintf (out, "%f", s );
fclose (out );
}
答案:
double fun(double x[10])
{
int i,j;
double s=0.0,s1=0.0;
for(i=0;i<10;i++)
s1+=x[i];
s1/=10;
for(j=0;j<10;j++)
s+=(x[j]-s1)*(x[j]-s1);
s/=10;
s=pow(s,0.5);
return s;
}