利用结构体和冒泡序列录入学生学号,成绩,调用结构体计算成绩平均分,并进行成绩排位,最后找出成绩低于60分的学号

目录

一、结构体

二、访问操作符

三、冒泡排序

四、例题解说

 1、建立struct stu来存储数据

 2、在int main函数中通过scanf函数输入学生人数

 3、通过for循环连续输入学生信息

 4.通过冒泡序列来交换学号和分数的位置,形成递减序列​编辑

 5.结尾为小于60分的学号打印

五、附加知识点说明


 

一、结构体

 

为什么会有结构体呢?它的作用是什么呢?其实C语⾔已经提供了内置类型,如:char、short、int、long、float、double等,但是只有这些内置类型还是不够的,假设我想描述学⽣,描述⼀本书,这时单⼀的内置类型是不⾏的。描述⼀个学⽣需要 名字、年龄、学号、⾝⾼、体重等;描述⼀本书需要作者、出版社、定价等。为了解决这个问 题,增加了结构体这种⾃定义的数据类型。

       结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量,如: 标量、数组、指针,甚⾄是其他结构体。

结构如下:b1da839dd2c147749ba3f44d2eecf81f.pngtag 为结构体的名字(标签),如stu(student)等等

member-list 为成员列表,如name,age,id,score等等

variable-list 通常为tag[100]等

例子:

f2db6e5ee1114b9dbdfd492c8b0be1fa.png310773d182c04beb8dfeaeb93d0e9707.png

 

注意:进行初始化处理,,如struct Stu s1 = {"zhangsan", 20};

二、访问操作符

结构体成员的直接访问是通过点操作符(.)访问的

如 .name就是访问struct中的数值

762386c1b40a4241a9a9ff3e36139f9b.png

 

其中p.x为x的值,p.y为y的值

三、冒泡排序

冒泡排序的核⼼思想就是:两两相邻的元素进⾏⽐较

                                  由低到高排序

9 1 2 3 4 5               因为9大于1,所以9向右移动   以下同理
1 9 2 3 4 5
1 2 9 3 4 5
1 2 3 9 4 5
1 2 3 4 9 5
1 2 3 4 5 9

最终结果为 1 2 3 4 5 9 乱序同理

a2c579a4410e4e80b84c46f83fdd8439.png

依靠于两个for循环解决,i循环为一个数的排序,当确定了一个数时就少了一次循环

如9 1 2 3 4 5 —>1 2 3 4 5 9  因为9已经确定了,所以就只需判断前5个数了 这是为什么sz-i

int tmp可以理解为暂时存储arr[j]的值,依靠第三变量来实现两个值的交换

四、例题解说

依托于前面的主要知识点的讲解,我们来研究这道题

eae92a2072b4462cb1d64c5a2b7e2e76.png

解题如下

1、建立struct stu来存储数据

afc1959a603f4c8a8f6438bf9147b0db.png

   2、在int main函数中通过scanf函数输入学生人数

         注意:加入开头  #define _CRT_SECURE_NO_WARNINGS 1  防止编译器发生警报

d3fd5d6c24ef4dd5b23c83a27466ac88.png

 

     3、通过for循环连续输入学生信息

注意:1.由于输入时为整数,平均数可能为浮点数,通过n*1.0可使结果带有小数

           2.i=1方便printf中 请输入第%d个学生的学号 的%d的赋值

           3.&stu[i].id的意思是把输入的值放在stu中存储

           4.%.2f的意思是保留两位小数

32fd45f0071a4b9e83b7cb810a55dd09.png

      4.通过冒泡序列来交换学号和分数的位置,形成递减序列

注意:1.同上i=1(便于第%d名 stu[i].id等打印)

           2.由于最终要打印学号和分数,所以有两个值交换

          3.通过for循环打印出新的序列(由高到低)

 422b7a383a1a42b9a76cc4d5055a538f.png

e6c182c88889496390c305663bb04718.png

          5.结尾为小于60分的学号打印

                            通过if函数比较

0c5187c0d2ce46feafd598a1648913d4.png

五、附加知识点说明

1.int main()

{

      return 0;

}

2.printf为库函数,所以要包含头文件#include<stdio.h>

3.赋值为0是初始化,使程序更安全

4.转义操作符:\n 换行

5.&:取地址符号

6.scanf为输入函数,但较为危险,需包含#define _CRT_SECURE_NO_WARNINGS 1

7.F10为调试键 F11可进入函数调试

8.if(为真即不为0就可执行)

{             

括号降低错误的产生

}

                               答案如下:

4e60c548f45b45a99f9cbaf00ecdf1f4.png

运行结果如下:

319882d451a54c2583af8cdc278248a8.png

 

很高兴您的阅读,我殷切地希望成长之路与您同行,未来可期!

初次写作如有不足还请指点,欢迎与您交流 邮箱:2744235537@qq.com

一句话送正在学习的我们:那些看似不起波澜的日复一日,会突然在某一天,让人看到坚持的意义

 

  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值