計算機二級C語言上機題庫(六)
187、在形參ss所指字符串?dāng)?shù)組中查找與形參t所指字符串相同的串,找到后返回該串在字符串?dāng)?shù)組中的位置(下標(biāo)值),未找到則返回-1。 ss所指字符串?dāng)?shù)組中共有N個內(nèi)容不同的字符串,且串長小于M。
Int fun(char (*ss)[M],char *t)
{int i;for(i=0;i<N;i++)if(strcmp(ss[i],t) = =0)return i;return -1;}
main()
{char ch[N][M]={---};t[M];int n,i;printf(--);for(i=0;i<N;i++)puts(ch[i]); printf(--);printf(--);gets(t);n=fun(ch,t);if(n= =-1) printf(--);
else printf(--);}
188、在形參ss所指字符串?dāng)?shù)組中查找含有形參substr所指字符串并輸出,若沒找到則輸出相應(yīng)信息,ss所指字符串?dāng)?shù)組中共有N個字符串,且串長小于M。程序中庫函數(shù)strstr(s1,s2)的功能是在s1串中查找s2子串,若沒有,函數(shù)值為0,若有為非0.
Void fun(char (*ss)[M],char *substr)
{int i,find=0;for(i=0;i<N;i++)if(strsrr(ss[i],substr)l=NULL){ find=1; puts(ss[i]); printf(--);if(find= =0) printf(--);}}
189、求ss所指字符串?dāng)?shù)組中長度最長的字符串所在的行小標(biāo),作為函數(shù)值返回,并把其串長放在形參n所指變量中。ss所指字符串?dāng)?shù)組中共有M個字符串,且串長小于N。
int fun(char (*ss)[N],int *n)
{int i,k=0,len=0; for(i=0;i<M;i++){len=strlen(ss[i]);if(i= =0)*n=len;if(len >*n){ *n=len?;k=i;}}return (k);}
190、求ss所指字符串?dāng)?shù)組中長度最短的字符串所在的行小標(biāo),作為函數(shù)值返回,并把其串長放在形參n所指變量中。ss所指字符串?dāng)?shù)組中共有M個字符串,且串長小于N。
int fun(char (*ss)[N],int *n)
{int i,k=0,len=N; for(i=0;i<M;i++){len=strlen(ss[i]);if(i= =0)*n=len;if(len <*n){ *n=len ;k=i;}}return (k);}
191、在形參ss所指字符串?dāng)?shù)組中,刪除所有串長超過K的字符串,函數(shù)返回所剩字符串的個數(shù),ss所指字符串?dāng)?shù)組中共有N個字符串,且串長小于M。
int fun(char (*ss)[M],int k)
{int i,j=0,len; for(i=0;i<N;i++){len=strlen(ss[i]);if(len<=k)strcpy(ss[j++],ss[i]);}return j;}
192、在形參ss所指字符串?dāng)?shù)組中,將所有串長超過K的字符串右邊的字符刪除,只保留左邊的K個字符串,數(shù)組中共有N個字符串,且串長小于M。
int fun(char (*ss)[M],int k)
{int i;while(i<N){ss[i][k]
}=0;i++;}}
193、計算出形參s所指字符串中包含的單詞個數(shù)作為函數(shù)值返回。為便于統(tǒng)計,規(guī)定各單詞之間用空格隔開。例如:形參s所指字符串為:This is a C language program,函數(shù)的返回值為6。
int fun(char *s)
{int n=0,flag=0;while(*s!=’\0’){if(*s!=’??’&&flag= =0){n++;flag=1;} if(*s!=’??’) flag=0;s++;}return n;}
四、結(jié)構(gòu)體
194、將形參s所指字符串所有ASCII碼值小于97的字符存入形參t所指字符數(shù)組中,形成新串,并統(tǒng)計出符合條件的字符個數(shù)作為函數(shù)值返回,例如,形參s所指字符串為:Abc@1X56*,程序執(zhí)行后t所指字符數(shù)組中的字符串應(yīng)為:A@156*。
int fun(char *s, char *t)
{ int n=0; while(*s){*(t+n)=*s;n++;}s++;}*(t+n)=0; return?n;}
四、結(jié)構(gòu)體
195、建立一個帶頭結(jié)點的單向鏈表并輸出到文件“out98.dat”和屏幕上,各結(jié)點的值為對應(yīng)下標(biāo),鏈表的結(jié)點數(shù)及輸出的文件名作為參數(shù)傳入。
Void fun(int n,char *filename)
{NODE *h,*p,*s;FILE *pf;int i;h=p=(NODE *)malloc(sizeof(NODE));h->data=0;for(i=1;i<n;i++){ s=(NODE *)malloc
sizeof(NODE)); s->data=i; p->next=s; p=p->next; p->next=NULL;if((pf=fopen(filename,”w”))= =NULL)printf(---);exit(0);}
fprintf(pf,”--”); printf(---);while(p)(fprintf(pf,”%3d”,p->data);if(p->next!=NULL){fprintf(pf,”>”);printf(“->”);}p=p->next);}
fprintf(pf,”\n”);printf(“\n”);fclose(pf);p=h;while(p){s=p;p=p->next;free(s);}
196、給定程序中已建立一個帶有頭結(jié)點的單向鏈表,鏈表中的各結(jié)點按結(jié)點數(shù)據(jù)域中的數(shù)據(jù)從小到大順序鏈接。函數(shù)的功能是:把形參x的值放入一個新結(jié)點并插入到鏈表中,插入后各結(jié)點仍保持從小到大順序排列。
Void fun(SLIST *h,int x)
{ SLIST *p,*q,*s;s=( SLIST *)malloc(sizeof(SLIST ));s->data=x;q=h;p=h->next;while(p!=NULL&&x>p->data){q=p;p=p->next;}
s->next=p;q->next=s;}}
197、對N名學(xué)生的學(xué)習(xí)成績,按從高到底的順序找出前m(m≤10)名學(xué)生來,并將這些學(xué)生數(shù)據(jù)存放在一個動態(tài)分配的連續(xù)存儲區(qū)中,此存儲區(qū)的首地址作為函數(shù)值返回。
STU *fun(STU a[],int m)
{ STU b[N],*tt;int I,j,k;tt=( STU *)malloc(sizeof(STU)*m);for(i=0;i<N;i++)b[i]=a[i];for(k=0;k<m;k++)
{for(i=j=0;i<N;i++)if(b[i].order> b[j].order)j=i;tt[k]=b[j]; b[j].order =0;}return tt;}
198、函數(shù)的功能是將存學(xué)生數(shù)據(jù)的結(jié)構(gòu)體數(shù)組,按照姓名的字典序(從小到大排序)。
Void fun(struct student a[],int n)
{ struct student?t;int i,j;for(i=0; i<n-1;i++) for(j=i+1; j<n;j++)if(strcmp(a[i].name, a[j].name))>0
t= a[i]; a[i]= a[j]; a[j]=t;}
199、給定程序中已建立一個帶有頭結(jié)點的單向鏈表,在main函數(shù)中將多次調(diào)用,每調(diào)用一次fun函數(shù),輸出鏈表尾部結(jié)點中的數(shù)據(jù),并釋放該結(jié)點,使鏈表縮短。
Void fun(SLIST *p)
{ SLIST *t, *s; t=p->next;s=p;while(t->next!=NULL){s=t;t=t->next;}printf(“%d”,?t->data); t->next =NULL;free(t);}
200、已知學(xué)生的記錄由學(xué)號和學(xué)習(xí)成績構(gòu)成,N名學(xué)生的數(shù)據(jù)已存入a結(jié)構(gòu)體中,給定程序的功能是找出成績最低的學(xué)生記錄,并通過形參返回主函數(shù)。
fun(STU a[],STU s)
{ STU??h;int I;h=a[0];for(i=1;i<N;i++)if(a[i].s<h.s)h=a[i];*s=h;}
201、給定程序中已建立一個帶有頭結(jié)點的單向鏈表,鏈表中的各結(jié)點按數(shù)據(jù)域遞增有序鏈接。刪除鏈表中的數(shù)據(jù)域相同的結(jié)點,使之只保留一個。
Void fun(SLIST *h)
{ SLIST *p,*q; p=h->next;if(p!=NULL){q=p->next;while(q!=NULL) if(p->data= = q->data){ p->next =q->next; free(q); q=p->next;}
Else{p=q; q=q->next;}}}
202、建立一個帶有頭結(jié)點的單向鏈表,并用隨機函數(shù)為各結(jié)點賦值。函數(shù)fun的功能是將單向鏈表結(jié)點(不包括頭結(jié)點)數(shù)據(jù)域為偶數(shù)的值累加起來,并且作為函數(shù)值返回。
Int fun(NODE *h)
{int sum=0;?NODE?*p;p=h->next;while(p){if(p->data%2= =0)sum+=p->data ;p= p->next?;}return sum; }
203、在帶有頭結(jié)點的單向鏈表中,查找數(shù)據(jù)域值為ch的結(jié)點。找到后通過函數(shù)值返回該結(jié)點在鏈表中所處的順序號;若不存在值為ch的結(jié)點,函數(shù)返回0值。
Void outlist(SLIST *)
Int fun(SLIST *h,char ch )
{ SLIST *p;int n=0;p=h->next;while(p!=0){n++;if(p->data= =ch)return n;else p= p->next?;}return 0;}
main()
{ SLIST *head;int k;char ch;char a[N]={---};head=creatlist(a);outlist(head);printf(---);scanf(“%c”,&ch);k=fun(head,ch);if(k= =0)
printf(---);else printf(---);}
204、統(tǒng)計出帶有頭結(jié)點的單向鏈表中的結(jié)點個數(shù),存放在形參n所指的存儲單元中。
void fun(SLIST *h,int *n )
{ SLIST *p;(*n)=0; p=h->next; while(p){ (*n)++; p=p->next;}}
main()
{ SLIST *head;int a[N]={---},num;head= creatlist(a); outlist(head); fun(head,&num); printf(---);}
205、計算出帶有頭結(jié)點的單向鏈表中各結(jié)點數(shù)據(jù)域之和作為函數(shù)值返回。
int fun(SLIST *h)
{ SLIST *p;int s=0; p=h->next; while(p){ s+=p->data; p=p->next;}return s;}
main()
{ SLIST *head;int a[N]={---},num;head= creatlist(a); outlist(head); printf“\nsum=%d\n”, fun(head); }
206、人員的記錄由編號和出生年、月、日組成,N名人員的數(shù)據(jù)已在主函數(shù)中存入結(jié)構(gòu)體數(shù)組str中,且編號唯一函數(shù)fun的功能是;找出指定編號人員的數(shù)據(jù),作為函數(shù)值返回,由主函數(shù)輸出,若指定編號不存在,返回數(shù)據(jù)中的編號為空串。
STU?fun(STU *std,char *num)
{int I;STU a={"",9999,99,99};for(i=0;i<N;i++)if(strcmp(std[i].num,num)=0}return (std[i]);return a;}
207、人員的記錄由編號和出生年、月、日組成,N名人員的數(shù)據(jù)已在主函數(shù)中存入結(jié)構(gòu)體數(shù)組std中。函數(shù)fun的功能是:找出指定出生年份的人員,將其數(shù)據(jù)放在形參k所指的數(shù)組中。
int fun(STU*std,STU*k,int year)
{int i,n=0;
for(i=0;j<N;i++)if(std[i].year==year)k[n++]=std[i];return (n);}
208、通過定義并賦初值的方式,利用結(jié)構(gòu)體變量存儲了一名學(xué)生的學(xué)號、姓名和3門課的成績。函數(shù)fun的功能是將該學(xué)生的各科成績都乘以一個系數(shù)a。
void modify(STU*ss,float a)
{int i;for(i=0;i<3;i++)
ss->score[i]*=a;}
main()
{STU std={…}float a;printf("…");show(std);printf("\nInput a number:");scanf("%f",&a);modify(&std,a);
printf("\nA result of modifying:\n");show(std);}
209、將形參指針?biāo)附Y(jié)構(gòu)體數(shù)組中的二個元素按num成員進(jìn)行升序排列。Void fun(PERSON std[3])
void fun(PERSON std[3])
{PERSON?temp;if(std[0];num>std[1].num){temp=std[0];std[0]=std[1];std[1]=temp;}if(std[0].num>std[2].num){temp=std[0];std[0]=std[2];
std[2]=temp;}if(std[1].num>std[2].num){temp=std[1];std[1]=std[2];std[2]=temp;}}
main()
{PERSON std[]={…};int i;fun(std);printf("\nThe result is :\n");for(i=0;i<3;i++)printf("%d,%s\n",std[i].num,std[i].name);}
210、將形參std所指結(jié)構(gòu)體數(shù)組中年齡最大者的數(shù)據(jù)作為函數(shù)值返回。
STD fun(STD std[],int n){STD max;int i;max= *std;for(i=1;i<n;i++)if(max.age<std[i].age)max=std[i];return max;}
main()
{STD std[5]={…};STD max;max=fun(std,5);printf("\nThe result :\n");printf("…",max.name,max.age);}
211、程序通過定義學(xué)生結(jié)構(gòu)體變量,存儲了學(xué)生的學(xué)員、姓名和3門課的成績。函數(shù)fun的功能是將形參a所指結(jié)構(gòu)體變量中的數(shù)據(jù)賦給函數(shù)中的結(jié)構(gòu)體變量中的數(shù)據(jù)賦給函數(shù)中的結(jié)構(gòu)體變量b,并修改b中的學(xué)號和姓名,最后輸出修改后的數(shù)據(jù)。例如:a所指變量中的學(xué)號、姓名、和三門課的成績依次是:10002、”LiSi”、95、80、88。
void fun(struct student a)
{struct student b;int i;b=a;b.sno=10002;strcpy(b.name,"Lisi");printf(…);printf(…);for (i=0;i<3;i++)
printf("%6.0f",b.score[i]);}
212、程序通過定義學(xué)生結(jié)構(gòu)體變量,存儲了學(xué)生的學(xué)號、姓名和3門課的成績。函數(shù)fun的功能是將形參a所指結(jié)構(gòu)體變量S中的數(shù)據(jù)進(jìn)行修改,并把a中地址和為函數(shù)值返回主函數(shù),在主函中輸出修改后的數(shù)據(jù)。例如:a所指變量S的學(xué)號、姓名和三門課的成績依次是:10001、“ZhangSan”、95、80、88,修改后輸出t中的數(shù)據(jù)應(yīng)為:10002、“LiSi”、96、81、89。
struct student *fun(struct student*a)
{int i;a->sno=10002;
strcpy(a->name,"LiSi");for(i=0;i<3;i++)a->score[i]+=1;return a;}
213、程序通過定義學(xué)生結(jié)構(gòu)體變量,存儲了學(xué)生的學(xué)號、姓名和3門課的成績。函數(shù)fun的功能是將形參b所指結(jié)構(gòu)體變量中的數(shù)據(jù)進(jìn)行修改,最后在主函數(shù)中輸出修改后的數(shù)據(jù)。例如:b所指變量t的學(xué)號、姓名和三門課的成績依次是:10002、“ZhangQi”、95、85、87,修改后輸出t中的數(shù)據(jù)應(yīng)為:10004、“Lijie”、93、85、87。
void fun(struct student b)
{b->sno=10004;strcpy(b->name,“Lijie”);}
main()
{struct student t={1002…87};int i;
printf(…);printf(…);for(i=0;i<3;i++)printf(…);fun(&t);……
214、將不帶頭節(jié)點的單向鏈表結(jié)點數(shù)據(jù)域中的數(shù)據(jù)從小到大排序,即若原鏈表結(jié)點數(shù)據(jù)為:10,4,2,8,6,排序后鏈表結(jié)點數(shù)據(jù)域從頭數(shù)據(jù)域從頭尾的數(shù)值為2,4,6,8,10。
void fun(NODE *h)
{NODE *p,*q;int t;p=h->next;
while(p)
{q=p->next;while(q){if(p->data>=q->data){t=p->data;p->data=q->data;q->data=t;}q=q->next;}p=p->next;}}
215、將不帶并沒有節(jié)點的單向鏈表結(jié)點數(shù)據(jù)域中的數(shù)據(jù)從小到大排序,即若朱鏈表結(jié)點數(shù)據(jù)為:10,4,2,8,6,排序后鏈表結(jié)點數(shù)據(jù)域從頭尾的數(shù)值為:2,4,6,8,10。
void fun(NODE *h)
{NODE *p,*q;int t;while(p){q=p->next;while(q){if(p->data>q->data){t=p->data;p->data=q->data;
q->data=t;}q=q->next;}p=p->next;}}
216、將不帶頭節(jié)點的單向鏈表逆置,即若原鏈表中從頭至尾結(jié)點數(shù)據(jù)域依次為2,4,6,8,10;逆置后,從頭至尾結(jié)點數(shù)據(jù)域依次為:10,8,6,4,2。
void fun(NODE *h)
{Node *p,*q,*r;p=h->next;if(p= =0)return 0;q=p->next;p->next=NULL;while(q){r=q->next;q->next=p;p=q;q=r;}h->next=p;})
五、文件題
217、把文本文件B中的內(nèi)容追加到文本文件A的內(nèi)容之后。例如,文件B的內(nèi)容為“I’mten.”,文件A的內(nèi)容為“I’mastudent!”,追加之后文件A的內(nèi)容為“I’mastudent!”,追加之后文件A的內(nèi)容為“I’m a student!I’m ten.”
main()
{FILE *fp,*fp1,*fp2;int i;char c[N],t,ch;if((fp=fopen("A.dat","r"))==NULL){printf("fileA cannot be opened\n");exit(0);}printf("\n A contents are:\n\n");for(i=0;(ch=fgetc(fp))!=EOF;i++){c[i]=ch;putchar(c[i]);}
fclose(fp);if((fp=fopen("B.dat","r"))==NULL){printf("file B cannot be opened\n");
exit(0);}printf("\n\n\nB contents are:\n\n");for(i=0;(ch=fgetc(fp))!=EOF;i++)
{c[i]=ch;putchar(c[i]);}fclose(fp);if((fp=fopen("B.dat","r"))==NULL){printf("file B cannot be opened\n");
exit(0);}printf("\n\n\nB contents are:\n\n");for(i=0;(ch=fgetc(fp))!=EOF;i++)
{c[i]=ch;putchar(c[i];}fclose(fp);if((fp1=fopen("A.dat","a"))&&(fp2=fopen("B.dat","r")))
{while((ch=fgetc(fp2))!=EOF)fputc(ch,fp1);}else
{printf("Can not open A B !\n");}fclose(fp2);fclose(fp1);printf("\n***new A contents***\n\n");
if((fp=fopen("A.dat","r"))==NULL){printf("file A cannot be opened\n");exit(0);}
for(i=0;(ch=fgetc(fp))!=EOF;i++){c[i]=ch;put char(c[i]);}fclose(fp);}
218、先以只寫方式打開文件“out99.dat”,再把字符串str中的字符保存到這個磁盤文件中。
main()
{FILE *fp;int i=0;char ch;char str[N]="I'm a student!";
if((fp=fopen("out99.dat","w"))= =NULL){printf(cannot open out99.dat\n");exit(0);}while(str[i]){ch=str[i];
fputc(ch,fp);puthcar(ch);i++;}fclose(fp);}
219、從鍵盤輸入若干行文件(每行不超過80個字符),寫到文件myfile4.txt中,用-1作為字符串輸入結(jié)束的標(biāo)志。然后將文件的內(nèi)容讀顯示在屏幕上。
void WriteText(FILE *fw)
{char str[81];printf("\nEnter string with -1")!=0){fputs(str,fw);fputs("\n",fw);gets(str);}}
void ReadText(FILE *fr){char str[81];printf("\nEnter string with -1 to end :\n");
gets(str);while(strcmp(str,"-1")!=0){fputs(str,fw);fputs("\n",fw);gets(str);}}
void ReadText(FILE *fr)
{char str,81,fr);
while(!feof(fr)){printf("%s",str);
fgets(str,81,fr);}}
220、將自然數(shù)1~10以及它們的平方根寫到名為myfile3.txt的文本文件中,然后再順序讀出顯示在屏幕上。
int fun(char *fname)
{FILE *fp;int i,n;float x;if((fp=fopen(fname,"r"))==NULL)return 0;
for(i=1;i<=10;i++)fprintf(fp,"%d%f\n",i,sqrt((double)i));printf("\nSucceed!\n");fclose(fp);
printf("\nThe data in file:\n");if((fp=fopen(fname,"r"))==NULL)return0;fscanf(fp,"%d%f",&n,&x);
while(!feof(fp)){printf("%d %f\n",n,x);fscanf(fp,"%d%f",&n,&x);}fclose(fp);return 1;}
221、將指定源文件中的內(nèi)容復(fù)制到指定的目標(biāo)文件中,復(fù)制成功時函數(shù)返回值是1,失敗時返回值為0。在復(fù)制的過程中,把復(fù)制的內(nèi)容輸出到終端屏幕。主函數(shù)中源文件名放在變量sfname中,目標(biāo)文件名放在變量tfname中。
int fun(char *source,char*target)
{FILE *fs,*ft;char ch;if((fs=fopen(source,"r"))==NULL)return 0;if((fs=fopen(target,"w"))==NULL)
return 0;printf("\nThe data in file:\n");ch=fgetc(fs);while(!feof(fs)){putchar(ch);fputc(ch,ft);ch=fgetc(fs);}
fclose(fs);fclose(ft);printf("\n\n");return 1;}
222、建立班級通訊錄、通訊錄中記錄每位學(xué)生的編號、姓名和電話號碼。班級的人數(shù)和學(xué)生的信息從鍵盤讀入,每個人的信息作為一個數(shù)據(jù)塊寫到名為myfile5.dat的二進(jìn)制文件中。
int fun(STYPE?*std)
{FILE *fp;int i;if((fp=fopen("myfile5.dat","wb"))==NULL)return(0);printf("\noutput data to file!\n");
for(i=0;i<N;i++)fwrite(&std[i].sizeof(STYPE),1,fp);fclose(fp);return (1);}
223、將形參給定的字符串、整數(shù)、浮點數(shù)寫到文本文件中,再用字符方式從此文本文件中逐個讀入并顯示在終端屏幕上。
void fun(char *s,int a,double f)
{FILE *fp;char ch;fp=fopen("file1.txt","w");fprintf(fp,"%s %d %f\n",s,a,f);
fclose(fp);fp=fopen("file1.txt","r");printf("\nThe result :\n\n");ch=fgetc(fp);while(!feof(fp))
{putchar(ch);ch=fgetc(fp);}putchar(‘\n’);fclose(fp);}
224、將形參給定的字符串、整數(shù)、浮點數(shù)寫到文本文件中,再用字符串方式從此文本文件中逐個讀入,并調(diào)用庫函數(shù)atoi和atof將字符串轉(zhuǎn)換成相應(yīng)的整數(shù)、浮點數(shù),然后將顯示在屏幕上。
void fun(char *s,int a,double f)
{FILE?*fp;int a1;double f1;charstr[100],str1[100],str2[100];fp=fopen("file1.txt","w");
fprintf(fp,"%s%d%f\n",s,a,f);fclose(fp);fp=fopen("file1.txt","r");fscanf(fp,"%s%s%s",str,str1,str2);
fclose(fp);a1=stoi(str1);f1=atof(str2);printf("%s%d%f",str,a1,f1);}
225、程序通過定義學(xué)生結(jié)構(gòu)體變量,存儲了學(xué)生的學(xué)號、姓名和3門課的成績。所有學(xué)生數(shù)據(jù)均以二進(jìn)制方式輸出到文件中。函數(shù)fun的功能是從形參filename所指的文件中讀入學(xué)生數(shù)據(jù),并按照學(xué)號從小到大排序后,再用二進(jìn)制方式把排序后的學(xué)生數(shù)據(jù)輸出到filename所指的文件中讀入學(xué)生數(shù)據(jù),并按照學(xué)號從小到大排序后,再用二進(jìn)制方式把排序后的學(xué)生數(shù)據(jù)輸出到filename所指的文件中,覆蓋原來的文件內(nèi)容。
void fun(char *filename)
{FILE *fp;int i,j;STU s[N],t;fp=fopen(filename,"rb");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>s[j]);s[j]=t;}
fp=fopen(filename,"wb");fwrite(s,sizeof(STU),N,fp);fclose(fp);}
226、程序通過定義學(xué)生結(jié)構(gòu)體變量,存儲了學(xué)生的學(xué)號、姓名和3門課的成績。所有學(xué)生數(shù)據(jù)均以二進(jìn)制方式輸出到student.dat文件中。函數(shù)fun的功能是從指定文件中找出指定學(xué)號的學(xué)生數(shù)據(jù),讀入此學(xué)生數(shù)據(jù),對該生的分?jǐn)?shù)進(jìn)行修改,使每門課的分?jǐn)?shù)加3分,修改后重寫文件中該學(xué)生的數(shù)據(jù),即用該學(xué)生的新數(shù)據(jù)覆蓋原數(shù)據(jù),其它學(xué)生數(shù)據(jù)不變,若找不到,則什么都做。
Void fun(char *filename,long sno)
{FILE *fp;STU n;int i;fp=fopen(filename,"rb+");while(!feof(fp)}{fread(&n,sizeof(STU),1,fp);if(n.sno=?=sno)break;}
if(!fcof(fp)){for(i=0;i<3;i++)n.score[i]+=3;fseek(fp,-(long)sizeof(STU),SEEK CUR);fwrite(&n,sizeof(STU),1,fp);}fclose(fp);數(shù)字題