有一个班的5个学生,有3门课程。 1、求第一门课的平均分; 2、找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均分 3、找出平均分在90分以上或全部课程成绩在85分以上的学生。 分别编写三个函数来实现以上三个要求
#include<stdio.h>
struct student
{
char name[32];
int xue;
int yv;
int shu;
int wai;
};
int getfirstpj(struct student *pj, int len)
{
int i = 0;
int sum = 0;
for (i = 0; i <len; i++)
{
printf("%d ",pj[i].yv);
sum += (pj[i].yv);
}
printf("yv平均成绩 = %d\n",sum/len);
return 0;
}
int nopass(struct student *no, int len)
{
int i = 0;
int j = 0;
printf("不及格学生:\n");
for (i =0; i < len; i++)
{
j = 0;
if((no[i].yv) < 60) j++;
if((no[i].shu) < 60) j++;
if((no[i].wai) <60) j++;
if(j > 1) {printf("name:%s xue: %d yv:%d shu:%d wai:%d ",no[i].name,no[i].xue,no[i].yv,no[i].shu,no[i].wai);
printf("pj = %d\n",(no[i].yv+ no[i].shu+no[i].wai)/3);
}
}
}
int youxiu(struct student *y, int len)
{
printf("优秀学生:\n");
int i = 0;
for(i = 0; i <len; i++)
{
if((((y[i].yv+y[i].shu+y[i].wai)/3) >90) || ((y[i].yv > 85)&& (y[i].shu > 85)&& (y[i].wai > 85)))
{
printf("%s ",y[i].name);
}
}
return 0;
}
int main()
1.结构体:
1.结构体类型定义
2.结构体变量的定义
3.结构体元素的访问
4.结构体的存储:
内存对齐:
char 按照1字节对齐
short 按照2字节对齐
int 按照4字节对齐
double 按照4字节对齐
结构体整体的大小必须为最大基本类型长度的整数倍
5.结构体作为函数参数
练习:定义一个学生的类型,封装一个函数GetStuInfo获得学生信息放入结构体中,
再封装一个函数PutStuInfo打印学生信息
struct student
{
char name[32];
char sex;
int age;
int score;
};
6.结构体数组:
struct student s[5];
2.共用体:
union 共用体名
{
数据类型1 成员变量1;
数据类型2 成员变量2;
数据类型3 成员变量3;
...
};
共用体所有成员变量共享同一片空间
内存大小端:
1.内存小端:
内存低地址存放低数据位
内存高地址存放高数据位
2.内存大端:
内存低地址存放高数据位
内存高地址存放低数据位
3.枚举:
enum 枚举类型名
{
枚举常量1,
枚举常量2,
枚举常量3,
..
};
1.枚举类型一般说明将来变量的值在给定的常量中选择其一作为它的值
2.枚举常量的值总是前一个枚举常量的值+1,第一个默认为0值
3.枚举常量默认为int类型,可以直接在程序中使用
4.位运算运算符:
& 按位与
| 按位或
^ 按位异或 相同为0 相异为1
~ 按位取反
>> 右移 右移n位 等价于 让该数 / 2^n
<< 左移 左移n位 等价于 让该数 * 2^n
与0得0
或1置1