一、填空题:给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。
请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
注意:源程序存放在考生文件夹下BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
void fun(char *s, int a, double f)
请写出至少5个字符串函数
{
/**********found**********/
__1__ fp;
char str[100], str1[100], str2[100];
int a1; double f1;
fp = fopen("", "w");
fprintf(fp, "%s %d %f\n", s, a, f);
/**********found**********/
__2__ ;
fp = fopen("", "r");
/**********found**********/
fscanf(__3__,"%s%s%s", str, str1, str2);
fclose(fp);
a1 = atoi(str1);
f1 = atof(str2);
printf("\nThe result :\n\n%s %d %f\n", str, a1, f1);
}
main()
{char a[10]="Hello!"; int b=12345;
double c= 98.76;
fun(a,b,c);
}
解题答案:
/**********第一空**********/
FILE* fp;
/**********第二空**********/
fclose(fp) ;
/**********第三空**********/
fscanf(fp,"%s%s%s", str, str1, str2);
******************************************
二、改错题:给定程序MODI1.C中函数fun的功能是: 对N名学生的学习成绩,按从高到低的顺序出前m(m≤10)名学生来, 并将这些存放在一个动态分配的连续存储区中, 此存储区的首地址作为函数值返回。请改正函数fun中指定部位的错误, 使它能得出正确的结果。
注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
给定源程序:
#include
#include
#include
#define N 10
typedef struct ss
{char num[10];
int s;
} STU;
STU *fun(STU a[], int m)
{STU b[N], *t;
int i,j,k;
/**********found**********/
t=(STU *)calloc(sizeof(STU),m)
for(i=0; i
for(k=0; k<="" p="">
{for(i=j=0; i<="">
if(b[i].s > b[j].s) j=i;
/**********found**********/
t(k)=b(j);
b[j].s=0;
}
return t;
}
outresult(STU a[], FILE *pf)
{int i;
for(i=0; i<="">
fprintf(pf,"No = %s Mark = %d\n", a[i].num,a[i].s);
fprintf(pf,"\n\n");
}
main()
{STU a[N]={ {"A01",81},{"A02",89},{"A03",66}, {"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71} };
STU *pOrder;
int i, m;
printf("***** The Original data *****\n");
outresult(a, stdout);
printf("\nGive the number of the students who have better score: ");
scanf("%d",&m);
while(m>10)
{printf("\nGive the number of the students who have better score: ");
scanf("%d",&m);
}
pOrder=fun(a,m);
printf("***** THE RESULT *****\n");
printf("The top :\n");
for(i=0; i<="">
printf(" %s %d\n",pOrder[i].num , pOrder[i].s);
free(pOrder);
}
解题答案:
/**********found**********/
t=(STU *)calloc(sizeof(STU),m);
/**********found**********/
t[k]=b[j];
******************************************
三、程序题:请编写函数fun, 函数的功能是: 删去一维数组中所有相同的数, 使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
例如, 一维数组中的数据是: 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。
删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入你编写的若干语句。
给定源程序:
#include
#define N 80
int fun(int a[], int n)
{
}
main()
{int a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10, 10},i,n=20;void NONO ();
printf("The original data :\n");
for(i=0; i<="">
n=fun(a,n);
printf("\n\nThe data after deleted :\n");
for(i=0;i<="">
NONO();
}
void NONO ()
{/* 请在此函数内打开文件,输入测试数据,调用fun 函数,输出数据,关闭文件。*/ FILE *rf, *wf; int a[N], n, i, j ;
rf = fopen("in.dat","r");
wf = fopen("out.dat","w");
for(i = 0 ; i < 5 ; i++) {
fscanf(rf, "%d", &n);
for(j = 0 ; j < n ; j++) fscanf(rf, "%d", &a[j]);
n = fun(a, n);
for(j = 0 ; j < n ; j++) fprintf(wf, "%4d", a[j]); fprintf(wf, "\n");
}
fclose(rf); fclose(wf);
}
参考答案:
int fun(int a[], int n)
{
int i, j = 1, k = a[0] ;
for(i = 1 ; i < n ; i++)
if(k != a[i]) {
a[j++]=a[i] ;
k = a[i] ;
}
a[j] = 0 ;
return j ;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。