首页 > 其他分享 >c语言第九章,结构体

c语言第九章,结构体

时间:2024-11-08 19:51:20浏览次数:6  
标签:struct 第九章 name int score str Student 结构 语言

#define _CRT_SECURE_NO_WARNINGS
自定义数据类型,结构体

输出学生信息


#include<stdio.h>
struct Data {
    int year;
    int month;
    int day;
};
struct Student {//定义学生数据类型
    
    int age;//年龄
    char name[20];//名字
    char sex;//性别
    double score;//分数
    struct Data birth;//年月日
    char addr[20];//地址

    //struct Student* p;//应用很多
};
int main() {
    struct Student stu1 = {18,"张三",'M',90,1968,7,3,"北京"};
    stu1.age = 19;
    printf("%d %s %c %lf %d %d %d %s", stu1.age, stu1.name, stu1.sex, stu1.score, stu1.birth.year, stu1.birth.month, stu1.birth.day, stu1.addr);
    return 0;
}

输出两个学生的学号,姓名和成绩,输出成绩较高的学生的学号姓名成绩


#include<stdio.h>
struct Student {
    int num;//学号
    char name[20];//姓名
    double grate;//成绩
};
int main() {
    struct Student stu1, stu2;
    scanf("%d%s%lf", &stu1.num, &stu1.name, &stu1.grate);
    scanf("%d%s%lf", &stu2.num, &stu2.name, &stu2.grate);
    struct Student max;//保存最大的那个人
    if (stu1.grate > stu2.grate) {
        max = stu1;//所有信息直接给
    }
    else {
        max = stu2;
    }
    printf("%d %s %lf", max.num, max.name, max.grate);
    return 0;
}

结构体数组
有三个候选人,最后输出每个人投票结果


#include<stdio.h>
#include<string.h>
struct Person {
    char name[20];
    int count;
};
int main() {
    char name[20];
    struct Person str[3] = { "li",0,"wang",0,"zhang",0 };//三个候选人初始化,必须初使化,要不然没法比较
    for (int i = 0; i < 5; i++) {//五个选民
        scanf("%s", &name);
        for (int j = 0; j < 3; j++) {
            if (strcmp(name, str[j].name) == 0) {//字符串比较用函数,等于0则相等
                str[j].count++;
            }
        }
    }
    for (int i = 0; i < 3; i++) {
        printf("%s %d\n", str[i].name, str[i].count);
        
    }

    return 0;
}

结构体指针,通过指向符->
结构体变量如何通过参数传递:结构体作为参数总是传指针(节约空间)


修改学生信息和输出结构体数组


#include<stdio.h>
struct Student {
    char name[20];
    int age;
    double score;

};
void Show( struct Student* p) {//一个结构体成员
    printf("%s %d %.1lf\n", p->name, p->age, p->score);
}
void Show_2(struct Student* str, int len) {//传入数组,一组结构体成员
    for (int i = 0; i < len; i++) {
        printf("%s %d %.1lf\n", str[i].name, str[i].age, str[i].score);//数组输出形式,推荐这种写法
        
        //printf("%s %d %.1lf\n", (str+i)->name, (str + i)->age, (str + i)->score);//指针输出形式1
        
        //printf("%s %d %.1lf\n", str->name, str->age, str->score);
        //str++;//指针输出形式2
    }
}
int main() {
    struct Student str[] = { "li",18,90,"wang",20,91.2};
    struct Student* p = str;
    /*p = &str[0];
    p = &str[1];*/
    p->age = 19;//通过指向符更改数据
    Show(str);
    printf("\n");
    Show_2(str, sizeof(str) / sizeof(str[0]));
    return 0;
}

有n个学生信息(学号姓名成绩),按成绩高低输出学生信息,想冒泡排,快速排序有一丢复杂
用函数写


#include<stdio.h>
struct Student {
    int num;
    char name[20];
    double score;
};
//输入学生信息
void Input(struct Student* arr, int len) {
    for (int i = 0; i < len; i++) {
        scanf("%d%s%lf", &arr[i].num, &arr[i].name, &arr[i].score);
    }
}
//按成绩高到低排序
void Qort(struct Student* arr, int len) {
    
    struct Student temp;//中间变量设成结构体格式
    for (int i = 0; i < len - 1; i++) {
        for (int j = 0; j < len - i - 1; j++) {
            if (arr[j].score < arr[j + 1].score) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
    
}
//输出学生信息
void Show(struct Student* arr, int len) {
    for (int i = 0; i < len; i++) {
        printf("%d %s %.1lf\n", arr[i].num, arr[i].name, arr[i].score);
    }
}
int main() {
    struct Student arr[10];
    int len;
    scanf("%d", &len);
    Input(arr, len);
    Qort(arr, len);
    Show(arr, len);
    return 0;
}
 

有n个结构体变量,有学生(学号,姓名,三门课)要求输出平均成绩最高的学生信息


#include<stdio.h>
struct Student {
    int num;
    char name[20];
    double score[3];//定义分数数组
    double ave;//平均成绩
};
void Input(struct Student* str, int n) {
    printf("输入学号,姓名,三门课成绩");
    for (int i = 0; i < n; i++) {
        scanf("%d%s%lf%lf%lf", &str[i].num, &str[i].name, &str[i].score[0], &str[i].score[1], &str[i].score[2]);
        str[i].ave = (str[i].score[0] + str[i].score[1] + str[i].score[2]) / 3;//求平均成绩
    }
}
void Showmax(struct Student* str, int n) {
    int max_index=0;//最大值的下标
    double max_ave = str[0].ave;//将最大的平均数初始化为第一个平均数
    for (int i = 0; i < n; i++) {
        if (str[i].ave > max_ave) {
            max_index = i;
        }
    }

    printf("%d %s %.1lf %.1lf %.1lf %.1lf", str[max_index].num, str[max_index].name, str[max_index].score[0], str[max_index].score[1], str[max_index].score[2], str[max_index].ave);
}

int main() {
    struct Student str[10];
    int n;
    scanf("%d", &n);
    Input(str, n);
    Showmax(str, n);
    return 0;
}

枚举类型:一个变量取值只有几种情况


 考点和注意事项:
1.枚举默认从0开始,后面依次加一
枚举在定义时能修改,但依旧加一(他后面的都加一),以后不能改
#include<stdio.h>
int main() {
    enum Weekend { mon, tue, wes, thr, fri, sat, sun };
    enum Weekend d1 = mon;
    if (d1 == sun) {
        printf("d1==sum\n");
    }
    return 0;
}

有五个球红黄蓝白黑,从中取出三个,颜色不重复,输出一共有多少种结果



#include<stdio.h>
int main() {
    int count = 0;
    const char *str[] = { "red","yellow","blue","white","black" };//必须是const char*str[]类型的
    int n=5;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            for (int k = 0; k < n; k++) {
                if (i != j && i != k && j != k) {//三个颜色不相等则输出
                    count++;
                    printf("%s %s %s\n", str[i], str[j], str[k]);
                }
            }
        }
    }
    printf("%d ", count);
    return 0;
}

typedef:类型定义。把一个旧类型名起一个新名字,给一个复杂类型起一个简单名字(就是起个简单名)
#include<stdio.h>
typedef struct Student Std;//法一,Std就是struct Student
typedef struct Student {//法二,Std就是struct Student

}Std;
typedef unsigned long long int ulli;//unsigned long long int改叫ulli


 

标签:struct,第九章,name,int,score,str,Student,结构,语言
From: https://blog.csdn.net/qq_63279386/article/details/143632931

相关文章

  • 用c语言来判断闰年
    #include<stdio.h>intYear(intn){  if((n%4==0&&n%100!=0)||(n%400==0)){    return1;  }else{    return0;  }} intmain(){  intyear,flag;  scanf("%d",&year);  flag=Year(y......
  • 使用 Mercury 语言编写简单 OCR 程序
    以下代码展示了如何使用Mercury语言实现基本的光学字符识别(OCR)功能。由于Mercury是一种逻辑编程语言,这里展示了它如何通过特定图像模式和字符的特征进行匹配。代码实现mercury:-modulesimple_ocr.:-interface.:-import_moduleio.更多内容访问ttocr.com或联系143642......
  • C语言双向链表
    一、优势 与单链表对比,双向链表的增、删、改无需遍历多次以查找目标节点前一节点与后一节点,效率提高,代码对比*单链表:1.插入:voidinsert(node*head,charName,intphonenumber,inttarget){ node*p=(node*)malloc(sizeof(node));//为新节点分配内存; p->next=sea......
  • 劫持微信聊天记录并分析还原 —— 数据库结构讲解(四)
    本工具设计的初衷是用来获取微信账号的相关信息并解析PC版微信的数据库。程序以Python语言开发,可读取、解密、还原微信数据库并帮助用户查看聊天记录,还可以将其聊天记录导出为csv、html等格式用于AI训练,自动回复或备份等等作用。下面我们将深入探讨这个工具的各个方面及其......
  • 08C++选择结构(2)——教学
    一、逻辑变量教学视频存储类似灯亮或灯灭、是男还是女等结果只有两种可能的数据时,可以使用逻辑型变量。逻辑型变量用关键字bool定义,所以又称为布尔变量,其值只有两个false(假)和true(真),false和true是逻辑常量,又称布尔常量。流程图如下:英汉小词典:bool:布尔false:假true:真二、逻......
  • C语言 循环高级
    时间:2024.11.6一、学习内容1、无限循环无限循环:循环永远停不下来注意点:无限循环因为永远停不下来,所以下面不能再写其他的代码了2、break跳转控制语句:在循环的过程中,跳到其他语句上执行 #include<stdio.h>intmain(){ intcount=0; inti;//利用for循环去......
  • Java流程控制-循环结构
    循环结构while循环while是最基本的循环,它的结构为:while(布尔表达式){ //循环内容}只要布尔表达式为true,循环就会一直执行下去。我们大多数情况是会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环。少部分情况需要循环一直执行,比如服务器的请求响应监听等。......
  • 多语言外贸电商系统 自带翻译中英双语电商平台设计及开发
    随着跨境电商的发展,越来越多的外贸公司需要设计多语言支持的电商平台,以便吸引不同国家的消费者。特别是中英双语系统,它能够兼容全球范围内的不同语言需求,提高市场竞争力。商淘云分享以PHP+MySQL为技术栈,介绍如何开发一个支持中英双语的外贸电商系统,包括核心功能模块的设计......
  • C语言格式化打印
    C语言格式化打印十进制:%d      int、char%i       有符号的整数%hd    short%ld     long int%lld    long long int%zd    size_t%u      unsigned int%lu     unsigned long int%llu    unsigned long long int八进制:%o......
  • 07C++选择结构(1)
    一、基础知识1、关系运算符因为我们要对条件进行判断,必然会用到关系运算符:名称大于大于等于小于小于等于等于不等于符号>>=<<===!=关系表达式的值是一个逻辑值,即“真”(True)或“假”(False)。如果条件成立,其值为“真”;如果条件不成立,其值为“假”。2、逻......