Chinaunix首页 | 论坛 | 博客
  • 博客访问: 66575
  • 博文数量: 20
  • 博客积分: 290
  • 博客等级: 二等列兵
  • 技术积分: 197
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-05 21:32
文章分类

全部博文(20)

文章存档

2012年(20)

分类: C/C++

2012-03-13 11:08:37

/* added on 2003-05-16 
* by hofman 
*/ 
#define INF "%d %s %f %f %f" 
#define OUTF "%d %s %f %f %f %f %f" 

main() 

struct score { 
int sn; 
char name[10]; 
float maths; 
float c; 
float en; 
float total; 
float avg; 
}; 
int len = sizeof(struct score); 
int len2 = len*50; 
int i; 
struct score *p; 

/* allocate mem */ 
p = (struct score *)malloc(len2); 
/* input */ 
for(i=0;i<2;i++) 

printf("Input sn name maths c en \n"); 
scanf(INF,&p->sn,p->name,&p->maths,&p->c,&p->en); 
p->total=(p->maths)+(p->c)+(p->en); 
p->avg=(p->total)/3; 
p++; 

/* rewind p */ 
p=p-2; 
/* output */ 
for(i=0;i<2;i++) 

printf(OUTF,p->sn,p->name,p->maths,p->c,p->en,p->total,p->avg); 
printf("\n"); 
p++; 


/* 
说明:该程序在linux gcc 以及NT TURBO C下均编译通过 
i<2;当然是为了实际验证的方便,使用时改为i<50即可。 
*/ 
------
军都山下, 
有一个美丽的苹果园。 
苹果园里有什么呢? 
好多好多的JavaBeans!!! 
回复此文章 | 
回复主题:Re:C语言结构体数组与指针(成绩统计问题)示例 | 作者:hofman | 军衔:上尉 | 发表时间:05-17 18:05:06 
/* added on 2003-05-16 
* by hofman 
*/ 
#define INF "%d %s %f %f %f" 
#define OUTF "%d %s %f %f %f %f %f" 

main() 

struct score { 
int sn; 
char name[10]; 
float maths; 
float c; 
float en; 
float total; 
float avg; 
}; 
int i; 
struct score *p; 
struct score scores306[50]; 
p = scores306; 
/* input */ 
for(i=0;i<2;i++) 

printf("Input sn name maths c en \n"); 
scanf(INF,&p->sn,p->name,&p->maths,&p->c,&p->en); 
p->total=(p->maths)+(p->c)+(p->en); 
p->avg=(p->total)/3; 
p++; 


p = scores306; 
/* p=p-2; also works */ 
/* output */ 
for(i=0;i<2;i++) 

printf(OUTF,p->sn,p->name,p->maths,p->c,p->en,p->total,p->avg); 
printf("\n"); 
p++; 



/* 这个版本与你们的程序基本一致,其实这样更简单,更直观 

2个例子无非说明分配内存有几种方法, 

前例由程序申请内存(使用了malloc函数), 

本例则由编译系统自动分配内存。 

注意:申明数据类型 如本例中的struct score 是不 
分配内存的。 
声明变量 如本例的 scores306[50] 才分配内存。 
*/
------
军都山下, 
有一个美丽的苹果园。 
苹果园里有什么呢? 
好多好多的JavaBeans!!! 
回复此文章 | 
回复主题:C语言结构体数组与指针(成绩统计问题)示例之三:使用指针数组 | 作者:hofman | 军衔:上尉 | 发表时间:05-18 11:43:04 
/* added on 2003-05-18 
* by hofman 
*/ 
#define INF "%d %s %f %f %f" 
#define OUTF "%d %s %f %f %f %f %f" 

main() 

struct score { 
int sn; 
char name[10]; 
float maths; 
float c; 
float en; 
float total; 
float avg; 
}; 
int i; 
struct score scores306[50]; 
/* 定义指针数组 */ 
struct score *k[50]; 
struct score *p; 
p = scores306; 
/* input */ 
for(i=0;i<50;i++) 

printf("Input sn name maths c en \n"); 
scanf(INF,&p->sn,p->name,&p->maths,&p->c,&p->en); 
p->total=(p->maths)+(p->c)+(p->en); 
p->avg=(p->total)/3; 
/* 将指针放入指针数组 */ 
k = p; 
p++; 

/* output */ 
for(i=0;i<2;i++) 

/* 从指针数组中取出指针 */ 
p = k
printf(OUTF,p->sn,p->name,p->maths,p->c,p->en,p->total,p->avg); 
printf("\n"); 


/* 
为什么要用指针数组呢?不用不是更简单吗? 
看看下面的例子就会明白了 
*/
------
军都山下, 
有一个美丽的苹果园。 
苹果园里有什么呢? 
好多好多的JavaBeans!!! 
回复此文章 | 
回复主题:Re:C语言结构体数组与指针(成绩统计问题)示例之四:使用指针数组排序 | 作者:hofman | 军衔:上尉 | 发表时间:05-18 11:56:50 
/* added on 2003-05-18 
* by hofman 
*/ 
#define INF "%d %s %f %f %f" 
#define OUTF "%d %s %f %f %f %f %f" 

main() 

struct score { 
int sn; 
char name[10]; 
float maths; 
float c; 
float en; 
float total; 
float avg; 
}; 
int i,j,h,n; 
float t; 
struct score scores306[50]; 
struct score *k[50]; 
struct score *p; 
p = scores306; 
n = 50; 
/* for sort 就是排序*/ 
/* input */ 
for(i=0;i<50;i++) 

printf("Input sn name maths c en \n"); 
scanf(INF,&p->sn,p->name,&p->maths,&p->c,&p->en); 
p->total=(p->maths)+(p->c)+(p->en); 
p->avg=(p->total)/3; 
k = p; 
p++; 

/* sort */ 

for(i=0;i
h = i; 
for(j=i+1;jif((k[h]->total)>(k[j]->total)) 

p = k[h]; 
k[h] = k[j]; 
k[j] = p; 


/* output */ 
for(i=0;i<50;i++) 

p = k
printf(OUTF,p->sn,p->name,p->maths,p->c,p->en,p->total,p->avg); 

/* printf(OUTF,k->sn,k->name,k->maths,k->c,k->en,k->total,k->avg); 
这样也可以,更直观,当然前面的写法更简洁 */ 

printf("\n"); 



/* 
本程序在排序时,移动的只是结构体的指针,而非庞大的结构体数据本身, 

因而其效率要高得多,这就是为什么要用结构体指针数组的原因。 
*/
------
军都山下, 
有一个美丽的苹果园。 
苹果园里有什么呢? 
好多好多的JavaBeans!!! 
回复此文章 | 
回复主题:Re:Re:C盈褦陆峁固ナ阶┯?刚?B?成悸ㄍ陈计幨屸)示=之藙拢潞使觾指斋式砖艆胁 | 作者:haohao | 军衔:六级军士 | 发表时间:05-18 16:30:58 
#include 
struct shenghh{ 
int no; 
char name[20]; 
float maths; 
float eng; 
float chin; 
float sum; 
float sumn; 
}leader[2]; 
main(){ 
struct shenghh*i; 
struct shenghh*p; 
for(i=leader;i
scanf("%d",&i->no); 
scanf("%s",&i->name); 
scanf("%f",&i->maths); 
scanf("%f",&i->eng); 
scanf("%f",&i->chin); 
i->sum=i->maths+i->eng+i->chin; 
i->sumn=i->sum/3; 

for(p=leader;p
printf("%d\n",p->no); 
printf("%s\n",p->name); 
printf("%f\n",p->maths); 
printf("%f\n",p->eng); 
printf("%f\n",p->chin); 
printf("%f\n",p->sum); 
printf("%f\n",p->sumn); 


杩欐槸鎴戝啓鐨勯?氳繃浜嗗ソ鍍忓皯浜嗙偣浠?涔?br>------

回复此文章 | 
回复主题:Re:Re:Re:C盈褦陆峁固ナ阶┯?刚?B?成悸ㄍ陈计幨屸)示=之藙拢潞使觾指斋式砖艆胁 | 作者:haohao | 军衔:六级军士 | 发表时间:05-18 16:37:29
#include 
struct shenghh{ 
int no; 
char name[20]; 
float maths; 
float eng; 
float chin; 
float sum; 
float sumn; 
}*leader[2]; 
main() 

int i; 
int j; 
for(i=0;i<2;i++) 

scanf("%d",&leader->no); 
scanf("%s",&leader->name); 
scanf("%f",&leader->maths); 
scanf("%f",&leader->eng); 
scanf("%f",&leader->chin); 
leader->sum=leader->maths+leader->eng+leader->chin; 
leader->sumn=leader->sum/3; 

for(j=0;j<2;j++) 

printf("%d\n",leader[j]->no); 
printf("%s\n",leader[j]->name); 
printf("%f\n",leader[j]->maths); 
printf("%f\n",leader[j]->eng); 
printf("%f\n",leader[j]->chin); 
printf("%f\n",leader[j]->sum); 
printf("%f\n",leader[j]->sumn); 


这也通过了
------

回复此文章 | 
回复主题:Re:C镅越峁固迨?橛胫刚耄ǔ杉ㄍ臣莆侍猓┦纠??模菏褂弥刚胧?榕判?nbsp;| 作者:hofman | 军衔:上尉 | 发表时间:05-23 10:31:57 
排序方法有多种,如插入排序,选择排序,冒泡排序,快速排序, 
堆排序等等,上例使用的是最简单的选择排序。
------
军都山下, 
有一个美丽的苹果园。 
苹果园里有什么呢? 
好多好多的JavaBeans!!! 
回复此文章 | 
回复主题:Re:C语言结构体数组与指针(成绩统计问题)示例之五:将结果保存到文件 | 作者:hofman | 军衔:上尉 | 发表时间:05-26 23:51:58 
/* added on 2003-05-26 
* by hofman 
*/ 
#include  
#define INF "%d %s %f %f %f" 
#define OUTF "%d %s %f %f %f %f %f" 

main() 

struct score { 
int sn; 
char name[10]; 
float maths; 
float c; 
float en; 
float total; 
float avg; 
}; 
int len = sizeof(struct score); 
int len2 = len*50; 
int i; 
int j; 
int h; 
struct score *p; 
struct score *k[50]; 
struct score *buf; 
FILE *fp; 
/* allocate mem */ 
buf = (struct score *)malloc(len2); 
p = buf; 
/* input */ 
for(i=0;i<5;i++) 

printf("Input sn name maths c en \n"); 
scanf(INF,&p->sn,p->name,&p->maths,&p->c,&p->en); 
p->total=(p->maths)+(p->c)+(p->en); 
p->avg=(p->total)/3; 
k = p; 
p++; 

/* sort */ 
for(i=0;i<5;i++) 

h=i; 
for(j=i+1;j<5;j++) 

if((k[h]->total)<(k[j]->total)) 

p = k[h]; 
k[h] = k[j]; 
k[j] = p; 



/* output */ 
for(i=0;i<5;i++) 

p = k
printf(OUTF,p->sn,p->name,p->maths,p->c,p->en,p->total,p->avg); 
printf("\n"); 

/* save * 这就是新增的部分啦。将结果保存到文件score.dat中*/ 
fp = fopen("score.dat","wb"); 
fwrite(buf,sizeof(struct score),5,fp); 
fclose(fp); 





------
军都山下, 
有一个美丽的苹果园。 
苹果园里有什么呢? 
好多好多的JavaBeans!!! 
回复此文章 | 
回复主题:C语言(成绩统计问题)示例之六:将排序结果从文件中读出并显示出来 | 作者:hofman | 军衔:上尉 | 发表时间:05-27 00:01:23 
/* added on 2003-05-26 
* by hofman 
*/ 
#include  
#define INF "%d %s %f %f %f" 
#define OUTF "%d %s %f %f %f %f %f" 

main() 

struct score { 
int sn; 
char name[10]; 
float maths; 
float c; 
float en; 
float total; 
float avg; 
}; 
int len = sizeof(struct score); 
int len2 = len*50; 
int i; 
struct score *p; 
FILE *fp; 
/* allocate mem */ 
p = (struct score *)malloc(len2); 

/* read 读入文件score.dat,注意"rw"写,“rb"读, 
就是用二进制方式写入,再用二进制方式读出 
老谭说得这样,否则会出错。这样作,编译通过了。 
不这样是否会出错,我倒没有试过 */ 

fp = fopen("score.dat","rb"); 
fread(p,sizeof(struct score),5,fp); 
fclose(fp); 

/* output */ 
for(i=0;i<5;i++) 

printf(OUTF,p->sn,p->name,p->maths,p->c,p->en,p->total,p->avg); 
printf("\n"); 
p++; 






------
军都山下, 
有一个美丽的苹果园。 
苹果园里有什么呢? 
好多好多的JavaBeans!!! 
回复此文章 | 
回复主题:Re:C语言(成绩统计问题)示例之六:将排序结果从文件中读出并显示出来 | 作者:haohao | 军衔:六级军士 | 发表时间:05-30 19:25:21 
在文件中进行读出或写入时有一些非常难看的错误。 
者可能是何原因呢?
------
我要用我的一生来做一件事, 
那就是属于我自己一份的事业; 
我要用我的一生来爱一个人, 
那就是属于我自己一生的伴侣; 
回复主题:Re:文件读写错误 | 作者:hofman | 军衔:上尉 | 发表时间:06-01 12:44:50 
首先,你应该把错误写的尽可能的详细。 

因为你写得不清楚,所以我只能推测你的错误: 
应该rw写,rb读,否则会出现乱码,而这是我的帖子已经说明了的。 
我的示例程序都运行通过了,你可以先copy,再修改。
------
军都山下, 
有一个美丽的苹果园。 
苹果园里有什么呢? 
好多好多的JavaBeans!!! 
回复此文章 | 
回复主题:Re:Re:C语言结构体数组与指针(成绩统计问题)示例之五:将结果保存到文件 | 作者:haohao | 军衔:六级军士 | 发表时间:06-07 21:35:40 
这个程序有问题: 
在文件中有乱码(指整型,浮点);
------
我要用我的一生来做一件事, 
那就是属于我自己一份的事业; 
我要用我的一生来爱一个人, 
那就是属于我自己一生的伴侣; 
回复此文章 | 
回复主题:Re:Re:C语言文件读写 | 作者:hofman | 军衔:上尉 | 发表时间:06-21 03:19:10 
#include  

main(int argc,char *argv[]) 

FILE *in; 
FILE *out; 
char buf[1024]; 
int i,j; 

if(argc<3) 

printf("usage : %s ",argv[0]); 
exit(); 


in = fopen(argv[1],"r"); 
if(in == NULL) 
puts("File open error"); 
out = fopen(argv[2],"w"); 
if(out == NULL) 
puts("File write error"); 

while(fgets(buf,65,in) != NULL) 

for(i=0;i<=50;i++) 

if(buf == w) 
if(buf[i+1] == u) 
fputs(buf,out); 






------
军都山下, 
有一个美丽的苹果园。 
苹果园里有什么呢? 
好多好多的JavaBeans!!! 
回复此文章 | 
回复主题:Re:Re:C语言(成绩统计问题)示例之六:将排序结果从文件中读出并显示出来 | 作者:huaner | 军衔:列兵 | 发表时间:09-09 15:24:13 
什么错误 
写出来看看呀。
------
阅读(3207) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~