C语言日常练习 Day11

8 篇文章 0 订阅

目录

 

一、有n个同学的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出学生信息

二、通过指向结构体变量的指针变量,输出结构体变量中的信息

三、建立一个简单的链表,他由3个学生的数据的结点组成,要求输出各节点中的数据


一、有n个同学的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出学生信息

#include <stdio.h>
#include <string.h>

// 定义学生结构体
typedef struct {
    int id;
    char name[20];
    float score;
} Student;

// 冒泡排序函数,按成绩降序排列
void bubbleSort(Student students[], int n) {
	int i,j;
    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < n - 1 - i; j++) {
            if (students[j].score < students[j + 1].score) {
                Student temp = students[j];
                students[j] = students[j + 1];
                students[j + 1] = temp;
            }
        }
    }
}

int main() {
    int n,i;
    printf("请输入学生人数:");
    scanf("%d", &n);

    Student students[n];
    for (i = 0; i < n; i++) {
        printf("请输入第%d个学生的学号、姓名和成绩(用空格隔开):", i + 1);
        scanf("%d %s %f", &students[i].id, students[i].name, &students[i].score);
    }

    // 对学生成绩进行排序
    bubbleSort(students, n);

    // 输出排序后的学生信息
    printf("按成绩降序排列的学生信息如下:\n");
    for (i = 0; i < n; i++) {
        printf("学号:%d, 姓名:%s, 成绩:%.2f\n", students[i].id, students[i].name, students[i].score);
    }

    return 0;
}

运行结果如下:

二、通过指向结构体变量的指针变量,输出结构体变量中的信息

#include<stdio.h>
struct Student					
{
	int num;
	char name[20];
	char sex;
	int age;
};
struct Student stu[3] = { {1001,"tom" , 'm',18},{1002,"tony" ,'m',19},{1003,"tia",'f',20} }; //定义结构体数组并初始化
int main()
{
	struct Student* p;			//定义指向struct Student结构体变量的指针变量
	printf(" No.Name                    sex age\n");
	for (p = stu; p < stu + 3; p++)
		printf("%5d %-20s %2c %4d\n", p->num, p->name, p->sex, p->age);//输出结果
	return 0;
}

三、建立一个简单的链表,他由3个学生的数据的结点组成,要求输出各节点中的数据

代码如下:

#include <stdio.h>
#include <stdlib.h>
//定义链表节点 
typedef struct node{
	int data;
	//指向下一个链表节点 
	struct node *next;
}stu;

//初始化链表
stu *init_list(int data){
	//分配链表节点
	stu *node=(stu*)malloc(sizeof(stu)) ;
	//初始化链表数值
	node->data=data;
	node->next=NULL;
	//返回初始化完成的结点
	return node; 
} 


//删除链表
void delete_list(stu *node)
{
	stu *next=NULL;
	//判断当前链表节点是否为空
	if(node!=NULL)
	{
		//如果为空,暂存下一个节点
		next=node->next;
		//删除当前节点
		free(node);
		//递归删除下一个节点
		delete_list(next); 
	 } 
 } 
 
 void print_list(stu *node)
 {
 	//判断当前节点是否为空
	 while(node!=NULL)
	 {
	 	printf("%d\n",node->data);
	 	
	 	node=node->next;
	  } 
 }

int main() {
    stu *s1=init_list(80);
	stu *s2=init_list(90);
	stu *s3=init_list(88);
	 
	s1->next=s2;
	s2->next=s3;
    print_list(s1);
    delete_list(s1);
    return 0;
}

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值