本帖最后由 鸦领主 于 2020-12-29 16:10 编辑
1.结构体的概念
a)数组可以定义变量集合,所以只能有一个类型的
b)结构体也可以定义变量集合,任何成员都可以是不同类型的
c)通常数组内部变量叫做元素,结构体内部的变量叫做成员
d)用结构体定义的变量也叫做对象,列如:
form w1,w2,w3; //称为结构体对象
form wr[100]; //也可以是一个数组
2.定义结构体
struct form //form结构体名字,可以随意定义名字
{
类型标识符 成员名//都是普通变量
类型标识符 成员名
.........
}; //不要忘了加分号
a)一般定义在函数外,可以对所有函数使用
b)也可以定义在.h头文件中,可以被多个cpp文件包含(并使用)
c)一个结构体可以包含另一个结构体对象作为成员变量
d)一个结构体不能自己包含自己,但是可以包含这个结构体的指针
3.定义一个结构体包含年月日,输入一个年月日后,输出该日是这一年的第几天
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
struct date
{
int year; //普通变量表示年
int month; //普通变量表示月
int dat; //普通变量表示天
};
//上面为定义的结构体
int main()
{
date d;
printf("请输入日期:");
scanf("%d%d%d", &d.year, &d.month, &d.dat);
int n[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };//定义一个数组为每个月的天数
int i = 0;
while (i<d.month-1)
d.dat += n[i++];//循环每次把月数相加
if (d.year % 4 == 0 && d.year % 100 || d.year % 400 == 0)//判断是不是闰年
{
if (i > 2)
d.dat ++; //是闰年多加一天
}
printf("这是%d年的第%d天",d.year,d.dat);
return 0;
}
C语言学习第十一天
4.定义一个结构体包含年月日,将输入做一个函数输入一个年月日后,将输出做一个函数输出该日是这一年的第几天
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
struct date
{
int year; //普通变量表示年
int month; //普通变量表示月
int dat; //普通变量表示天
};
//上面为定义的结构体
void input(date*p)
{
printf("请输入日期:");
scanf("%d%d%d", &p->year, &p[0].month, &(*p).dat); //也可以使用(*p).代替或者p[0].代替
}
//上面为输入,p->或(*p).或p[0].可随意使用
int core(date* p)
{
int n[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };//定义一个数组为每个月的天数
int i = 0;
while (i < p->month - 1)
p->dat += n[i++];//循环每次把月数相加
if (p->year % 4 == 0 && p->year % 100 || p->year % 400 == 0)//判断是不是闰年
{
if (i > 2)
p->dat ++; //是闰年多加一天
}
return p->dat;
}
//上面为核心代码
int main()
{
date d;
input(&d);
printf("这是%d年的第%d天",d.year, core(&d));
return 0;
}
5.输入5个人的姓名电话,在按名字进行排序,进行输出
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>
struct sort
{
char name[10];//姓名
char number[15];//号码
};
//上面为定义的结构体
int main()
{
sort a[5];
int i = 0;
while (i<_countof(a))
{
printf("请输入第%d组数据:", i + 1);
scanf("%s%s", &a[i].name, &a[i].number);
i++;
//上面代码为输入,输入5组内容进去
}
i = 0;
while (i< _countof(a) -1)
{
int j = 0;
while (j < _countof(a) - 1-i)
{
if (a[j].name> a[j + 1].name)
{
sort t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
j++;
}
i++;
}
//上面为冒泡排序,将输入的进行从小到大排序
printf("排序过后的顺序为:\n");
i = 0;
while (i < _countof(a))
{
printf("%s %s\n", a[i].name, a[i].number);
i++;
}
return 0;
}
C语言学习第十一天
6.输入多个学生的数据,包括名字,学号,语文数学英语成绩.求出3门成绩的平均分及最高成绩的同学
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>
struct sort
{
char name[10];//姓名
int numb;//号码
float chin;
float math;
float engl;
};
//上面为定义的结构体
int main()
{
sort lb[3] = { "张三",1001,60.5,63,99,"李四",1002,74.5,58.2,78.3, "王五",1003,86,78.5,69.3, };
float chin = 0, math = 0, engl = 0,he=0;
sort* p=0;
int i = 0;
while (i<_countof(lb))
{
chin += lb[i].chin;
math += lb[i].math;
engl += lb[i].engl;
if (he < lb[i].chin + lb[i].math + lb[i].engl)//
{
he = lb[i].chin + lb[i].math + lb[i].engl;
p = &lb[i];
}
i++;
}
printf("语文平局分为%0.2f", chin / _countof(lb));
printf("数学平局分为%0.2f", math / _countof(lb));
printf("英语平局分为%0.2f\n", engl / _countof(lb));
printf("最高分的同学叫做%s\n语文成绩是%0.1f\n数学成绩是%0.1f\n英语成绩是%0.1f\n总分是%0.2f\n",
p->name, p->chin, p->math, p->engl, he);
return 0;
}
C语言学习第十一天
|