2015年计算机二级C语言上机操作题及答案(85)
发布时间:2011/7/25 8:42:15 来源:城市学习网 编辑:ziteng
一填空题
给定程序中,函数fun的功能是: 有N*N矩阵.以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0.
例如,若N=3,有下列矩阵:
1 2 3
4 5 6
7 8 9
计算结果为:
1 0 0
6 5 0
10 14 9
请勿改动主函数main和其它函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句.
#include
#define N 4
void fun(int (*t)___1___)
{
int i, j;
for (i=1; i {
for (j=0; j {
___2___ = t[i][j]+t[j][i];
___3___ = 0;
}
}
}
main()
{
int i, j, t[][N] =
{21, 12, 13, 24, 25, 16, 47, 38, 29, 11, 32, 54, 42, 21, 33, 10};
printf("\nThe 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]
第一处:t[i][j]
第三处:t[j][i] [NextPage] 二.改错题
下列给定程序中,函数fun的功能是: 从字符串s中删除所有小写字母’c’.
请改正程序中的错误,使它能计算出正确的结果.
注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
void fun(char *s)
{
int i, j;
for (i=j=0; s[i]!='\0'; i++)
/********found********/
if (s[i] != 'c')
s[j] = s[i];
/********found********/
s[i] = '\0';
}
main()
{
char s[80];
printf("Enter a string: ");
gets(s);
printf("The original string :");
puts(s);
fun(s);
printf("The string after deleted:");
puts(s);
printf("\n\n");
}
答案:
1:s[j]=s[i];改为 s[j++]=s[i];
2:s[i]=’\0’;改为 s[j]=’/0’; [NextPage] 三.编程题
N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点.请编写函数fun,它的功能是:求出平均分,由函数值返回.
例如,若学生的成绩是85,69,85,91,64,87;则平均分应当是78.625.
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句.
#include
#include
#define N 8
struct slist
{
double s;
struct slist *next;
};
typedef struct slist STREC;
double fun ( STREC *h )
{
}
STREC * creat ( double *s )
{
STREC *h, *p, *q;
int i=0;
h=p=( STREC* ) malloc (sizeof (STREC ) );
p->s=0;
while ( i {
q=( STREC* ) malloc (sizeof ( STREC ) );
q->s=s[i];
i++;
p->next=q;
p=q;
}
p->next=0;
return h;
}
outlist ( STREC *h )
{
STREC *p;
p=h->next;
printf ( " head " );
do
{
printf ( "->%4.1f", p->s );
p=p->next;
}
while ( p!=0 );
printf ( "\n\n" );
}
main ()
{
double s[N]={85, 76, 69, 85, 91, 72, 64, 87}, ave;
STREC *h;
FILE *out;
h=creat ( s );
outlist (h);
ave=fun ( h );
printf ( "ave= %6.3f\n", ave );
out=fopen ("out.dat", "w");
fprintf (out, "%6.3f", ave );
fclose (out );
}
答案:
double fun(STREC *h)
{
double aver=0.0;
while (h!=null)
{
aver+=h->s;
h=h->next;
}
aver/=N;
return aver;
}