欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 学校C语言实验——结构2

学校C语言实验——结构2

2025/2/5 12:52:22 来源:https://blog.csdn.net/2303_76843399/article/details/145161273  浏览:    关键词:学校C语言实验——结构2

        本文章均为非计算机学院的实验,为最基础的初学者练手与入门的实验题目,请注意甄别。

        老规矩,先写上头文件:

#include "stdafa.h"   //新版的VS不需要这个,因为是C++环境
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

        正文:

一、 编写程序:有3个学生,每个学生的数据包括学号、姓名和三门课的成绩及平均成绩。要求:

          (1)编写一个函数indata,用来输入3个学生的数据(学号、姓名、三门课的成绩)。

          (2)编写一个函数outdata,用来输出3个学生的记录。

          (3)编写一个函数sort按平均分由小到大行排序。

结构定义如下:

typedef struct student{

   int no; 

   char name[10]; 

   int score[3];     //3门课程成绩

   float average;   //平均分

}STUD;

void indata(STUD *p,int n);

void outdata(STUD *p,int n);

void sort(STUD *p,int n);

int main(){

  STUD a[3];

  indata(a,3);

  outdata(a,3); 

  sort(a,3);

  outdata(a,3);  

}

代码如下:

        1.1indata函数

void indata(STUD* p, int n) {int i;for (i = 0;i < n;i++) {scanf("%d%s%d%d%d", &(p[i].no), p[i].name, &(p[i].score[0]), &(p[i].score[1]), &(p[i].score[2]));p[i].average = (p[i].score[0] + p[i].score[1] + p[i].score[2]) / 3.0;}
}

       1.2outdata函数

void outdata(STUD* p, int n) {for (int i = 0;i < n;i++)printf("%d %s %d %d %d %f\n", p[i].no, p[i].name, p[i].score[0], p[i].score[1], p[i].score[2], p[i].average);
}

        1.3sort函数

void sort(STUD* p, int n) {STUD t;for (int i = 0;i < n - 1;i++)for (int j = i + 1;j < n;j++)if (p[i].average > p[j].average) {t = p[i];p[i] = p[j];p[j] = t; //对记录进行交换 }
}

        1.4完整代码:

typedef struct student {int no;char name[10];int score[3];     //3门课程成绩float average;   //平均分}STUD;
void indata(STUD* p, int n);
void outdata(STUD* p, int n);
void sort(STUD* p, int n);
int main() {STUD a[3];indata(a, 3);outdata(a, 3);sort(a, 3);outdata(a, 3);
}void indata(STUD* p, int n) {int i;for (i = 0;i < n;i++) {scanf("%d%s%d%d%d", &(p[i].no), p[i].name, &(p[i].score[0]), &(p[i].score[1]), &(p[i].score[2]));p[i].average = (p[i].score[0] + p[i].score[1] + p[i].score[2]) / 3.0;}
}void outdata(STUD* p, int n) {for (int i = 0;i < n;i++)printf("%d %s %d %d %d %f\n", p[i].no, p[i].name, p[i].score[0], p[i].score[1], p[i].score[2], p[i].average);
}void sort(STUD* p, int n) {STUD t;for (int i = 0;i < n - 1;i++)for (int j = i + 1;j < n;j++)if (p[i].average > p[j].average) {t = p[i];p[i] = p[j];p[j] = t; //对记录进行交换 }
}

        运行结果如下:

二、假设输入num的值为0时链表结束。

        (1)函数create()创建一个链表,num为0时结束。编程实现之;

        (2)函数display()输出该链表。编程实现之;

        (3)函数freelink()回收链表的空间。编程实现之。

结构如下:

struct stu{

  int num;

  int cj;

  struct stu *next;

};

struct stu *create();

void display(struct stu * head);

void freelink(struct stu * head);

int main(){

    struct stu *head;

    head=create();

    display(head);

    freelink(head);

}

实现代码如下:

        2.1创建链表:

struct stu* create() {struct stu* head, * p1, * p2;head = (struct stu*)calloc(1, sizeof(struct stu));p1 = head;scanf("%d%d", &(p1->num), &(p1->cj));printf("%d  %d\n", p1->num, p1->cj);if ((p1->num) == 0) { free(p1);printf("Error!");return NULL; }p2 = NULL; //初始化p2while (1) {p2 = p1;p1 = (struct stu*)calloc(1, sizeof(struct stu));scanf("%d%d", &(p1->num), &(p1->cj));if (p1->num == 0) {free(p1);break;}p2->next = p1;}p2->next = NULL;return head;
};

        2.2display函数

void display(struct stu* head) {struct stu* p = head->next;while (p != NULL) {printf("%d  %d\n", p->num, p->cj);p = p->next;}
};

        2.3freelink函数

void freelink(struct stu* head) {struct stu* p = head, * q;while (p != NULL) {q = p->next;free(p);p = q;}
};

        2.4完整代码

struct stu {int num;int cj;struct stu* next;
};struct stu* create();
void display(struct stu* head);
void freelink(struct stu* head);int main() {struct stu* head;head = create();display(head);freelink(head);
}struct stu* create() {struct stu* head, * p1, * p2;head = (struct stu*)calloc(1, sizeof(struct stu));p1 = head;scanf("%d%d", &(p1->num), &(p1->cj));printf("%d  %d\n", p1->num, p1->cj);if ((p1->num) == 0) { free(p1);printf("Error!");return NULL; }p2 = NULL; //初始化p2while (1) {p2 = p1;p1 = (struct stu*)calloc(1, sizeof(struct stu));scanf("%d%d", &(p1->num), &(p1->cj));if (p1->num == 0) {free(p1);break;}p2->next = p1;}p2->next = NULL;return head;
};void display(struct stu* head) {struct stu* p = head->next;while (p != NULL) {printf("%d  %d\n", p->num, p->cj);p = p->next;}
};void freelink(struct stu* head) {struct stu* p = head, * q;while (p != NULL) {q = p->next;free(p);p = q;}
};

运行结果如下:

三、总结

        本次的两个实验虽然量少,但却是很重要的重点,第一个时用数组来展示结构,第二个则是指针,利用指针构成了一个链表,以此来展示所有数据,都是非常重要的考点,也是需要理解的,指针终究时C中最重要也是最难的部分

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com