鸦领主 发表于 2020-12-29 13:26:41

C语言学习第十一天 初始结构体加稍微练习

本帖最后由 鸦领主 于 2020-12-29 16:10 编辑

1.结构体的概念
a)数组可以定义变量集合,所以只能有一个类型的
b)结构体也可以定义变量集合,任何成员都可以是不同类型的
c)通常数组内部变量叫做元素,结构体内部的变量叫做成员
d)用结构体定义的变量也叫做对象,列如:
form w1,w2,w3; //称为结构体对象
form wr; //也可以是一个数组

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;//循环每次把月数相加
    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;
}

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.month, &(*p).dat);//也可以使用(*p).代替或者p.代替
}
//上面为输入,p->或(*p).或p.可随意使用
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;//循环每次把月数相加
    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;//姓名
    char number;//号码
};
//上面为定义的结构体
int main()
{
    sort a;
    int i = 0;
    while (i<_countof(a))
    {
      printf("请输入第%d组数据:", i + 1);
      scanf("%s%s", &a.name, &a.number);
      i++;
    //上面代码为输入,输入5组内容进去
    }
   i = 0;
    while (i< _countof(a) -1)
    {
      int j = 0;
      while (j < _countof(a) - 1-i)
      {
            if (a.name> a.name)
            {
                sort t = a;
                a = a;
                a = t;
            }
            j++;
      }
      i++;
    }
    //上面为冒泡排序,将输入的进行从小到大排序
    printf("排序过后的顺序为:\n");
    i = 0;
    while (i < _countof(a))
    {
      printf("%s %s\n", a.name, a.number);
      i++;
    }
    return 0;
}


6.输入多个学生的数据,包括名字,学号,语文数学英语成绩.求出3门成绩的平均分及最高成绩的同学
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>
struct sort
{
    char name;//姓名
    int numb;//号码
   float chin;
    float math;
    float engl;
};
//上面为定义的结构体
int main()
{
    sort lb = { "张三",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.chin;
      math += lb.math;
      engl += lb.engl;
      if (he < lb.chin + lb.math + lb.engl)//
      {
            he = lb.chin + lb.math + lb.engl;
            p = &lb;
      }
      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;
}


鸦领主 发表于 2020-12-29 13:26:42

本帖最后由 鸦领主 于 2020-12-29 16:14 编辑


没想到if语句里面写一个d.dat+1能影响到if语句



极乐丶厌世界 发表于 2021-1-7 03:25:19

很喜欢这种从0基础到精通教学视频.
页: [1]
查看完整版本: C语言学习第十一天 初始结构体加稍微练习