fread(s, sizeof(STU), N, fp);
fclose(fp);
for (i=0; i<N-1; i++)
for (j=i+1; j<N; j++)
if (s[i].sno __2__ s[j].sno)
{ t = s[i]; s[i] = s[j]; s[j] = t; }
fp = fopen(filename, "wb");
__3__(s, sizeof(STU), N, fp); /* 二进制输出 */
fclose(fp);
}
main()
{ STU t[N]={ {10005,"ZhangSan", 95, 80, 88},
{10003,"LiSi", 85, 70, 78},
{10002,"CaoKai", 75, 60, 88}, {10004,"FangFang", 90,
82, 87},
{10001,"MaChao", 91, 92, 77}}, ss[N];
int i,j; FILE *fp;
fp = fopen("student.dat", "wb");
fwrite(t, sizeof(STU), 5, fp);
fclose(fp);
printf("\n\nThe original data :\n\n");
for (j=0; j<N; j++)
{ printf("\nNo: %ld Name: %-8s Scores: ",t[j].sno,
t[j].name);
for (i=0; i<3; i++) printf("%6.2f ", t[j].score[i]);
printf("\n");
}
fun("student.dat");
printf("\n\nThe data after sorting :\n\n");
fp = fopen("student.dat", "rb");
fread(ss, sizeof(STU), 5, fp);
fclose(fp);
for (j=0; j<N; j++)
{ printf("\nNo: %ld Name: %-8s Scores: ",ss[j].sno,
ss[j].name);
for (i=0; i<3; i++) printf("%6.2f ", ss[j].score[i]);
printf("\n");
}
}
解题思路:
本题是考察把结构中的数据写入文件。
第一处:建立文件的类型,考虑到是把结构中的数
据(结构中的数据包含不打印的字符)
从文件中读出,所以应填:"rb"。
第二处:判断当前学号是否大于刚读出的学号进行
相比,如果大于,则进行交换,所以应填:>。
第三处:把已排序的结构数据,重新写入文件,所
以应填:fwrite。
*********************************************
******
给定程序MODI1.C中函数fun的功能是: 在字符串的
最前端加入n个*号, 形成新串, 并且覆盖原串。
注意: 字符串的长度最长允许为79。
请改正函数fun中指定部位的错误, 使它能得出正确
的结果。
注意: 不要改动main函数, 不得增行或删行, 也不得更
改程序的结构!
给定源程序:
#include <stdio.h>
#include <string.h>
void fun ( char s[], int n )
{
char a[80] , *p;
int i;
s=p;
for(i=0; i<n; i++) a[i]='*';
do
{ a[i]=*p;
i++;
}
while(*p++)
a[i]=0;
strcpy(s,a);
}
main()
{ int n; char s[80];
printf("\nEnter a string : "); gets(s);
printf("\nThe string \"%s\"\n",s);
printf("\nEnter n ( number of * ) : "); scanf("%d",&n);
fun(s,n);
printf("\nThe string after insert : \"%s\" \n" ,s);
}
解题思路:
第一处: 指针p应指向s,所以应改为:p=s;。
第二处: 死循环,当do while循环执行一次,临时变
量p 应 该 指向 字符串的 下一 位 置 ,所 以应改为 :
while(*p++);。
*********************************************
******
请编写函数fun,函数的功能是:统计各年龄段的人数。
N个年龄通过调用随机
函数获得,并放在主函数的age数组中;要求函数把0
至9岁年龄段的人数放在d[0]
中,把10至19岁年龄段的人数放在d[1]中,把20至29岁
年龄段的人数放在d[2]中,
其余依此类推, 把100岁 (含100)以上年龄的人数都放
在d[10]中。结果在主函数中输出。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在
函数fun的花括号中填入你编写的若干语句。
给定源程序:
#include <stdio.h>
#define N 50
#define M 11
void fun( int *a, int *b)
{
}
double rnd()
{ static t=29,c=217,m=1024,r=0;
r=(r*t+c)%m; return((double)r/m);
}
main()
{ int age[N], i, d[M];
for(i=0; i<N;i++)age[i]=(int)(115*rnd());
printf("The original data :\n");
for(i=0;i<N;i++) printf((i+1)%10==0?"%4d\
n":"%4d",age[i]);
printf("\n\n");