");scanf("%ld",&n);}
fun(&n);
printf("\nTheresultis:
%ld\n",n);
}
2.给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文
件中逐个读入并显示在终端屏幕上。
#include
voidfun(char*s,inta,doublef)
{
/**********found**********/
FILE*fp;
charch;
fp=fopen("file1.txt","w");
fprintf(fp,"%s%d%f\n",s,a,f);
fclose(fp);
fp=fopen("file1.txt","r");
printf("\nTheresult:
\n\n");
ch=fgetc(fp);
/**********found**********/
while(!
feof(fp)){
/**********found**********/
putchar(ch);ch=fgetc(fp);}
putchar('\n');
fclose(fp);
}
main()
{chara[10]="Hello!
";intb=12345;
doublec=98.76;
fun(a,b,c);
}
3.程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。
所有学生数据均以二进制方式输出
到文件中。
函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生
原来的数据,其它学生的数据不变。
#include
#defineN5
typedefstructstudent{
longsno;
charname[10];
floatscore[3];
}STU;
voidfun(char*filename,STUn)
{FILE*fp;
/**********found**********/
fp=fopen(filename,"rb+");
/**********found**********/
fseek(fp,-1L*sizeof(STU),SEEK_END);
/**********found**********/
fwrite(&n,sizeof(STU),1,fp);
fclose(fp);
}
main()
{STUt[N]={{10001,"MaChao",91,92,77},{10002,"CaoKai",75,60,88},
{10003,"LiSi",85,70,78},{10004,"FangFang",90,82,87},
{10005,"ZhangSan",95,80,88}};
STUn={10006,"ZhaoSi",55,70,68},ss[N];
inti,j;FILE*fp;
fp=fopen("student.dat","wb");
fwrite(t,sizeof(STU),N,fp);
fclose(fp);
fp=fopen("student.dat","rb");
fread(ss,sizeof(STU),N,fp);
fclose(fp);
printf("\nTheoriginaldata:
\n\n");
for(j=0;j{printf("\nNo:
%ldName:
%-8sScores:
",ss[j].sno,ss[j].name);
for(i=0;i<3;i++)printf("%6.2f",ss[j].score[i]);
printf("\n");
}
fun("student.dat",n);
printf("\nThedataaftermodifing:
\n\n");
fp=fopen("student.dat","rb");
fread(ss,sizeof(STU),N,fp);
fclose(fp);
for(j=0;j{printf("\nNo:
%ldName:
%-8sScores:
",ss[j].sno,ss[j].name);
for(i=0;i<3;i++)printf("%6.2f",ss[j].score[i]);
printf("\n");
}
}
4.程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。
所有学生数据均以二进制方式输出
到文件中。
函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二
进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。
#include
#defineN5
typedefstructstudent{
longsno;
charname[10];
floatscore[3];
}STU;
voidfun(char*filename)
{FILE*fp;inti,j;
STUs[N],t;
/**********found**********/
fp=fopen(filename,"rb");
fread(s,sizeof(STU),N,fp);
fclose(fp);
for(i=0;ifor(j=i+1;j/**********found**********/
if(s[i].sno>s[j].sno)
{t=s[i];s[i]=s[j];s[j]=t;}
fp=fopen(filename,"wb");
/**********found**********/
fwrite(s,sizeof(STU),N,fp);
fclose(fp);
}
main()
{STUt[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];
inti,j;FILE*fp;
fp=fopen("student.dat","wb");
fwrite(t,sizeof(STU),5,fp);
fclose(fp);
printf("\n\nTheoriginaldata:
\n\n");
for(j=0;j{printf("\nNo:
%ldName:
%-8sScores:
",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\nThedataaftersorting:
\n\n");
fp=fopen("student.dat","rb");
fread(ss,sizeof(STU),5,fp);
fclose(fp);
for(j=0;j{printf("\nNo:
%ldName:
%-8sScores:
",ss[j].sno,ss[j].name);
for(i=0;i<3;i++)printf("%6.2f",ss[j].score[i]);
printf("\n");
}
}
5.给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文
本文件中逐个读入,并调用库函数atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。
#include
#include
voidfun(char*s,inta,doublef)
{
/**********found**********/
FILE*fp;
charstr[100],str1[100],str2[100];
inta1;doublef1;
fp=fopen("file1.txt","w");
fprintf(fp,"%s%d%f\n",s,a,f);
/**********found**********/
fclose(fp);
fp=fopen("file1.txt","r");
/**********found**********/
fscanf(fp,"%s%s%s",str,str1,str2);
fclose(fp);
a1=atoi(str1);
f1=atof(str2);
printf("\nTheresult:
\n\n%s%d%f\n",str,a1,f1);
}
main()
{chara[10]="Hello!
";intb=12345;
doublec=98.76;
fun(a,b,c);
}
6.给定程序中,函数fun的功能是根据形参i的值返回某个函数的值,当调用正确时,程序输出:
x1=5.000000,x2=3.000000x1*x1+x1*x2=40.000000
#include
doublef1(doublex)
{returnx*x;}
doublef2(doublex,doubley)
{returnx*y;}
/**********found**********/
doublefun(inti,doublex,doubley)
{if(i==1)
/**********found**********/
returnf1(x);
else
/**********found**********/
returnf2(x,y);
}
main()
{doublex1=5,x2=3,r;
r=fun(1,x1,x2);
r+=fun(2,x1,x2);
printf("\nx1=%f,x2=%f,x1*x1+x1*x2=%f\n\n",x1,x2,r);
}
7.程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息。
函数fun的功能是输出这位学生的信
息。
#include
typedefstruct
{intnum;
charname[9];
charsex;
struct{intyear,month,day;}birthday;
floatscore[3];
}STU;
/**********found**********/
voidshow(STUtt)
{inti;
printf("\n%d%s%c%d-%d-%d",tt.num,tt.name,tt.sex,
tt.birthday.year,tt.birthday.month,tt.birthday.day);
for(i=0;i<3;i++)
/**********found**********/
printf("%5.1f",tt.score[i]);
printf("\n");
}
main()
{STUstd={1,"Zhanghua",'M',1961,10,8,76.5,78.0,82.0};
printf("\nAstudentdata:
\n");
/**********found**********/
show(std);
}
8.给定程序通过赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和3门课的成绩。
函数fun的功能是
将该学生的各科成绩者乘以一个系数a。
#include
typedefstruct
{intnum;
charname[9];
floatscore[3];
}STU;
voidshow(STUtt)
{inti;
printf("%d%s:
",tt.num,tt.name);
for(i=0;i<3;i++)
printf("%5.1f",tt.score[i]);
printf("\n");
}
/**********found**********/
voidmodify(STU*ss,floata)
{inti;
for(i=0;i<3;i++)
/**********found**********/
ss->score[i]*=a;
}
main()
{STUstd={1,"Zhanghua",76.5,78.0,82.0};
floata;
printf("\nTheoriginalnumberandnameandscores:
\n");
show(std);
printf("\nInputanumber:
");scanf("%f",&a);
/**********found**********/
modify(&std,a);
printf("\nAresultofmodifying:
\n");
show(std);
}
9.给定程序中,涵数fun的功能是将不带头结点的单向链表结点数据域中的数据从小到大排序。
即若原链表结点数
据域从头至尾的数据为:
10、4、2、8、6,排序后链表结点数据域从头至尾为:
2、4、6、8、10。
#include
#include
#defineN6
typedefstructnode{
intdata;
structnode*next;
}NODE;
voidfun(NODE*h)
{NODE*p,*q;intt;
p=h;
while(p){
/**********found**********/
q=p->next;
/**********found**********/
while(q)
{if(p->data>q->data)
{t=p->data;p->data=q->data;q->data=t;}
q=q->next;
}
/**********found**********/
p=p->next;
}
}
NODE*creatlist(inta[])
{NODE*h,*p,*q;inti;
h=NULL;
for(i=0;i{q=(NODE*)malloc(sizeof(NODE));
q->data=a[i];
q->next=NULL;
if(h==NULL)h=p=q;
else{p->next=q;p=q;}
}
returnh;
}
voidoutlist(NODE*h)
{NODE*p;
p=h;
if(p==NULL)printf("ThelistisNULL!
\n");
else
{printf("\nHead");
do
{printf("->%d",p->data);p=p->next;}
while(p!
=NULL);
printf("->End\n");
}
}
10.给定程序中,函数fun的功能是:
叛定形参a所指的N×N(规定N为奇数)的矩阵是否是“幻方”,若是,函数
返回值为1;不是,函数返回值为0。
“幻方”的叛定条件是:
矩阵每行、每列、主对角线及反对角线上元素之和
都相等。
例如:
以下3×3的矩阵就是一个“幻方”:
492
357
816
#include
#defineN3
intfun(int(*a)[N])
{inti,j,m1,m2,row,colum;
m1=m2=0;
for(i=0;i{j=N-i-1;m1+=a[i][i];m2+=a[i][j];}
if(m1!
=m2)return0;
for(i=0;i/**********found**********/
row=colum=0;
for(j=0;j{row+=a[i][j];colum+=a[j][i];}
/**********found**********/
if((row!
=colum)||(row!
=m1))return0;
}
/**********found**********/
return1;
}
main()
{intx[N][N],i,j;
printf("Enternumberforarray:
\n");
for(i=0;ifor(j=0;jprintf("Array:
\n");
for(i=0;i{for(j=0;jprintf("\n");
}
if(fun(x))printf("TheArrayisamagicsquare.\n");
elseprintf("TheArrayisn'tamagicsquare.\n");
}
11.给定程序中,函数fun的功能是将带头结点的单向链表逆置。
即若原链表中从头至尾结点数据域依次为:
2、
4、6、8、10,逆置后,从头至尾结点数据域依次为:
10、8、6、4、2。
#include
#include
#defineN5
typedefstructnode{
intdata;
structnode*next;
}NODE;
voidfun(NODE*h)
{NODE*p,*q,*r;
/**********found**********/
p=h->next;
/**********found**********/
if(p==0)return;
q=p->next;
p->next=NULL;
while(q)
{r=q->next;q->next=p;
/**********found**********/
p=q;q=r;
}
h->next=p;
}
NODE*creatlist(inta[])
{NODE*h,*p,*q;inti;
h=(NODE*)malloc(sizeof(NODE));
h->next=NULL;
for(i=0;i{q=(NODE*)malloc(sizeof(NODE));
q->data=a[i];
q->next=NULL;
if(h->next==NULL)h->next=p=q;
else{p->next=q;p=q;}
}
returnh;
}
voidoutlist(NODE*h)
{NODE*p;
p=h->next;
if(p==NULL)printf("ThelistisNULL!
\n");
else
{printf("\nHead");
do
{printf("->%d",p->data);p=p->next;}
while(p!
=NULL);
printf("->End\n");
}
}
12.给定程序中,函数fun的功能是将不带头结点的单向链表逆置。
即若原链表中从头至尾结点数据域依次为:
2
、4、6、8、10,逆置后,从头至尾结点数据域依次为:
10、8、6、4、2
#include
#include
#defineN5
typedefstructnode{
intdata;
structnode*next;
}NODE;
/**********found**********/
NODE*fun(NODE*h)
{NODE*p,*q,*r;
p=h;
if(p==NULL)
returnNULL;
q=p->next;
p->next=NULL;
while(q)
{
/*