C语言结构体、共用体、文件的应用
实验四 结构体、共用体的应用
实验目的:
1:掌握结构体类型的定义及结构体变量的定义
2:掌握指向结构体变量的指针的应用,特别是链表的应用;
实验内容:
给定一个有序整型数组,对数组中元素分段情况(每一段的起至值及该段元素个数)进行统计,并将统计结果放入链表中,并输出统计结果。如数组中元素为:
1,2,4,7,8,9,10,12,13,14
则分段统计结果为:
实验五 文件的应用
实验目的:
1:掌握文件和文件指针的概念的文件指针的定义;
2:了解文件打开和关闭的概念及方法;
3:掌握有关文件的操作函数;
实验内容:
在实验四的基础上,实现分组统计数组内容从指定文件读入功能(load函数),并将统计结果存入磁盘文件(save函数);
请给出具体程序!
补充:这个是实验四的分段统计结果
追问:麻烦实验5 也写上 我给你加分
答案:这个程序比较长, 就写一下你的实验四吧, 有了实验四来做试验易做图难, 只是打开文件, 读取数据而已实验四:
结果是: |1|2|2|-->|4||4|1|-->|7|10|4|-->|12|14|3|
附上运行截图:
#include<stdio.h>
#include<malloc.h>
struct nodes{
int head,tail,num;
struct nodes *next;
};
typedef struct nodes node;
typedef struct nodes* link;
int main()
{
int buff[] = {1,2,4,7,8,9,10,12,13,14};
int len, i;
link hp,p,newp;
len = sizeof(buff)/sizeof(int);
//申请一个头节点,并将第一个数字填入头节点的head和tail,并将num设为1,next归为NULL
hp = (link)malloc(sizeof(node));
p = hp;
p->head = buff[0];
p->tail = buff[0];
p->num = 1;
p->next = NULL;
for(i = 1; i < len; i++)
{
if(buff[i] == p->tail + 1)
{
//如果当前数字与当前节点的tail连续,则用该数字覆盖tail并将num++
p->tail = buff[i];
p->num ++;
}
else
{
//如果当前节点与当前节点tail不连续,则新建一个节点接在链表尾部并将数字填入head和tail,num设为1,next归为NULL
newp = (link)malloc(sizeof(node));
p->next = newp;
p = p->next;
p->head = buff[i];
p->tail = buff[i];
p->num = 1;
p->next = NULL;
}
}
//遍历并输出每个节点的元素
p = hp;
while(len && p)
{
printf("|%d|%d|%d|",p->head,p->tail,p->num);
if(p->next)
{
printf("-->");
p = p->next;
}
else
{
printf("");
break;
}
}
//释放之前所申请的空间
p = hp;
while(p)
{
newp = p->next;
free(p);
p = newp;
}
hp = NULL;
newp = NULL;
p = NULL;
}
对入门级的学生来说,一些常见的问题的确解释得挺清楚地。C++和C完全是两种思维方式,不要交叉起来学。当你入门比较熟练后,就可以看看《Pointers on C》,当你知道声明char c[ ] 和char * c 两者有什么区别的时候,相信你就可以写出比较精彩的C语言程序了。
学习一门语言,重要的不是它叫什么名字,而是我们为什么要使用它。C++的确很出色,但是应用起来容易让你忘记软件的构架细节,如果要学OO的话,java会是一个好的考虑
上一个:6进制转化成10进制的c语言程序
下一个:c语言课程设计---学生成绩管理