标题:C语言中如何使用calloc函数。如何把数据储存到文本文件中
只看楼主
nike197800
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-12-27
结帖率:66.67%
已结贴  问题点数:20 回复次数:10 
C语言中如何使用calloc函数。如何把数据储存到文本文件中
大家好。
学习了一个学期的C语言。书本的知识点是看懂了。但一到综合实验。我头都大了。
这两天一直在做综合实验。但是怎么做也做不好。编好了又不对。唉。。所以想来请教
一下高手们,指点指点
这是实验的内容:
某班期末考试科目为数学(MT)、英语(EN)和物理(PH),每个班级4人。学生的信息用结构体描述,包括学号(NO)、姓名、数学(MT)、英语(EN)、物理(PH)、总分(grade).

(1)编写分配一块内存的程序init。
(2)编写完成读进4个学生的信息的函数readin,函数能将这些值存进由函数init申请的存储块中。
(3)编写计算这些学生的总分的函数product。
(4)编写一个sort函数,用来将存储块中的4个学生记录组成的数据读入一数组a中,然后将a中的数据按从总分从小到大的顺序排列。
(5)再用init分配一块内存,将数组a的内容存到这块内存中去,然后把数组a的数据存储到一个名为myData.txt的文本文件中去。
(6)在主程序中调用他们,输出第一次申请的内存块中的内容和数组排序后的内容,按反序输出第2次申请的内存块中的内容。

这是实验的要求:
ex.h
 包含程序需要的头文件,声明各个函数
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
const int SIZE=4;
struct student {
 int NO;  char name[20];
 float course[3];
 float grade;
}
struct student *init(int);
void reading(struct student *);
void product(struct student *);
void sort(struct student *, struct student a[],int);
2.init.c
申请4个存储struct student数据的空间,然后返回存储块的地址,因此返回类型是指针。
3.readin.c
 将从键盘输入的数据存储到内存块中,无需返回值。
4.product.c
总分的计算是首先取出存储块的最后一个元素,然后依次用它前面的元素和它相加。
5.sort.c
使用选择法进行排序。
6.ex.c
7.建立一个“项目文件”,只包括组成程序的文件,文件名为
ex.prj。
程序编译成功后,输入4个学生的数据进行测试

第一小题。他要返回一个值。我是这样写的:
#include<stdio.h>
#define NULL 0
struct student
{int NO;
 char name[20];
 float course[4];
 float grade;
 struct student *next;
};
struct student *init(int n)
{struct student *stu;
 stu=(struct student *)calloc(unsigned n,unsigned size);
 return(stu);
}
但是伴以不能通过。不明白calloc(unsigned n,unsigned size)这个函数如何使用。以及第五小题的。用什么语句。可以讲数据储存到文本文件当中。
请高手们指点一下了。谢谢
搜索更多相关主题的帖子: 数据 函数 calloc 文本文件 C语言 
2009-12-27 17:12
风之上位
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:55
专家分:156
注 册:2009-12-20
得分:20 
stu=(struct student *)calloc(1,sizeof(struct student))
2009-12-27 17:25
风之上位
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:55
专家分:156
注 册:2009-12-20
得分:0 
#include "stdio.h"
main()
{
 int i,j,n,t;
 int a[100];
 printf("input number n<=100");
 scanf("%d",&n);
 printf("input number");
 for(i=0;i<=n-1;i++)
 scanf("%d",&a[i]);
 for(i=0;i<=n-1;i++)
 {
 for(j=1;j<=n-i-1;j++)
 if(a[i]>=a[i+j])
 {
  t=a[i];
  a[i]=a[i+j];
  a[i+j]=t;
 }
 }
 for(i=0;i<=n-1;i++)
 printf("%d",a[i]);
 getch();
 }
2009-12-27 17:27
风之上位
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:55
专家分:156
注 册:2009-12-20
得分:0 
文件操作你学了吗
用fread和fwrite

[ 本帖最后由 风之上位 于 2009-12-27 17:31 编辑 ]
2009-12-27 17:28
nike197800
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-12-27
得分:0 
回复 4楼 风之上位
哦。这个老师没有讲到。书本后面有。。呵呵。。我再看看。
2009-12-27 17:32
nike197800
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-12-27
得分:0 
如果要申请4个储存空间。用stu=(struct student *)calloc(4,sizeof(struct student)) ,,那返回的应该是一个什么样的地址。
2009-12-27 17:37
风之上位
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:55
专家分:156
注 册:2009-12-20
得分:0 
返回的是连续的4块sizeof(struct student)大的空间
2009-12-27 17:51
nike197800
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-12-27
得分:0 
回复 7楼 风之上位
那如果我要写第一小题的程序。。最后要不要写return()来返回一个指针。这个指针指向这四个空间
2009-12-27 17:58
风之上位
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:55
专家分:156
注 册:2009-12-20
得分:0 
要写return()返回一个指针
2009-12-27 18:02
风之上位
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:55
专家分:156
注 册:2009-12-20
得分:0 
除非你就在main()中直接开辟
如果是调用init要在init函数定义后返回
如果你用全局变量的话就不用返回
2009-12-27 18:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-294432-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.151735 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved