查看: 580|回复: 2

[原创图文] C语言学习第十一天 初始结构体加稍微练习

[复制链接]

19

主题

28

帖子

3

精华

高级会员

Rank: 12Rank: 12Rank: 12

学币
229
荣耀
0
rank
0
违规
0
发表于 2020-12-29 13:26:41 | 显示全部楼层 |阅读模式
本帖最后由 鸦领主 于 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语言学习第十一天

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语言学习第十一天

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语言学习第十一天

C语言学习第十一天



温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
学逆向论坛-免费的逆向学习论坛

19

主题

28

帖子

3

精华

高级会员

Rank: 12Rank: 12Rank: 12

学币
229
荣耀
0
rank
0
违规
0
 楼主| 发表于 2020-12-29 13:26:42 | 显示全部楼层
本帖最后由 鸦领主 于 2020-12-29 16:14 编辑


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



学逆向论坛-免费的逆向学习论坛

0

主题

5

帖子

0

精华

初级会员

Rank: 4

学币
5
荣耀
0
rank
0
违规
0

    发表于 2021-1-7 03:25:19 来自手机 | 显示全部楼层
    很喜欢这种从0基础到精通教学视频.
    学逆向论坛-免费的逆向学习论坛
    微信扫一扫即可使用手机论坛
    快速回复 返回顶部 返回列表