首页 > 其他分享 >学习C语言的第八天

学习C语言的第八天

时间:2023-04-19 22:57:48浏览次数:30  
标签:char struct 第八天 int xm C语言 学习 include XuanMin

由于个人的拖拉原因,时隔一周继续更新博客,记录学习。

一.结构体

1.1为什么要用结构体

1.2定义一个结构体

  编程习惯要求大写开头

struct Student
    {
        int num;
        char name[32];
        char sex;
        int age;
        double score;
        char addr[32];
    };

1.3成员列表

  也称为域表,每个成员都是结构体中的一个域。

1.4结构体案例

  注意:在声明的同时,定义变量,尽量少用

#include<stdio.h>
#include <string.h> struct Student { int num; char name[32]; char sex; int age; double score; char addr[32]; }; int main() { struct Student stu1; stu1.num = 1; stu1.age = 18; stu1.score = 99.9; strcpy(stu1.name,"zhangchaobo"); strcpy(stu1.addr,"内蒙古"); printf("学号:%d,年龄:%d,分数:%.2f,姓名:%s,地址为:%s",stu1.num,stu1.age,stu1.score,stu1.name,stu1.addr); return 0; }

二.结构体数组

  相当于二维数组,但是数组里的结构类型可以不一样

#include<stdio.h>
#include <string.h>

struct Student
{
    int num;
    char name[32];
    char sex;
    int age;
    double score;
    char addr[32];
};

int main()
{    
    int len;
    int i;
    
    struct Student arr[3] = {
        {2,"张三",'y',18,34,"北京"},
        {3,"李四",'y',15,45,"南京"},
        {4,"王五",'n',17,65,"上海"}
    };
    
    len = sizeof(arr)/sizeof(arr[0]);
    
    for(i=0;i<len;i++){
        printf("学号:%d,年龄:%d,分数:%.2f,姓名:%s,地址为:%s,性别:%c\n",arr[i].num,arr[i].age,arr[i].score,arr[i].name,arr[i].addr,arr[i].sex);    
    }

    return 0;
}

练习题:选票系统

#include<stdio.h>
#include<string.h>

struct XuanMin
{
    char name[32];
    int tickets;
};

int main()
{
    struct XuanMin xm[3];
    int i;
    int len;
    int j;
    
    int total = 5;
    char tmpName[32];
    int mark = 0;
    int qTickets = 0;
    
    len = sizeof(xm)/sizeof(xm[0]);
    for(i=0;i<len;i++){
        xm[i].tickets = 0;
        printf("请输入选民的名字:\n");
        scanf("%s",xm[i].name);
    }
    
    for(i=0;i<total;i++){
        mark = 0;
        printf("请输入你投给谁:\n");
        memset(tmpName,'\0',sizeof(tmpName));
        scanf("%s",tmpName);
        for(j=0;j<len;j++){
            if(strcmp(tmpName,xm[j].name) == 0){
                xm[j].tickets++;
                mark = 1;
            }
        }
        if(mark == 0){
            printf("没有此人,弃票");
            qTickets++;
        }
        
    }
    
    for(i=0;i<len;i++){
        printf("名字:%s,票数:%d \n",xm[i].name,xm[i].tickets);
    }
    
    printf("弃票为:%d",qTickets);
    
    return 0;
}

三.结构体指针

  通过结构体变量地址来访问该结构体需要一个变量来保持这个地址,这和之前说的指针,其实是一样的,只是指针类型的结构体

#include<stdio.h>

struct Test
{
    int idata;
    char cdata;
};

//通过结构体指针访问结构体

int main()
{    
    int a = 5;
    int *pa = &a;
    
    char b = 'b';
    char *pb = &b;
    
    struct Test c = {10,'a'};
    struct Test *pc = &c;
    
    printf("c的idata为:%d\n",c.idata);
    
    printf("pc的idata为:%d\n",pc->idata);

    return 0;
}

引入结构体指针的选票系统

#include<stdio.h>
#include<string.h>

struct XuanMin
{
    char name[32];
    int tickets;
};

int main()
{
    struct XuanMin xm[3];
    struct XuanMin *p = xm;
    int i;
    int len;
    int j;
    
    int total = 5;
    char tmpName[32];
    int mark = 0;
    int qTickets = 0;
    
    len = sizeof(xm)/sizeof(xm[0]);
    for(i=0;i<len;i++){
        p->tickets = 0;
        printf("请输入选民的名字:\n");
        scanf("%s",p->name);
        p++;
    }
    p = xm;
    for(i=0;i<total;i++){
        mark = 0;
        printf("请输入你投给谁:\n");
        memset(tmpName,'\0',sizeof(tmpName));
        scanf("%s",tmpName);
        for(j=0;j<len;j++){
            if(strcmp(tmpName,p->name) == 0){
                p->tickets++;
                mark = 1;
            }
            p++;
        }
        if(mark == 0){
            printf("没有此人,弃票\n");
            qTickets++;
        }
        
        p = xm;
        
    }
    p = xm;
    for(i=0;i<len;i++){
        printf("名字:%s,票数:%d \n",p->name,p->tickets);
        p++;
    }
    
    printf("弃票为:%d",qTickets);
    
    return 0;
}

四.综合函数、结构体、结构体指针的选票系统

#include<stdio.h>
#include<string.h>
#include <stdlib.h>

struct XuanMin
{
    char name[32];
    int tickets;
};

struct XuanMin* initXms(struct XuanMin *p,int *pn)
{
    int i;
    if(p == NULL){
        printf("请输入有几个人参选: \n");
        scanf("%d",pn);
        p = (struct XuanMin*)malloc(*pn*sizeof(struct XuanMin));
    }
    for(i=0;i<*pn;i++){
        p->tickets = 0;
        printf("请输入选民的名字:\n");
        scanf("%s",p->name);
        p++;
    }
    
    return p-*pn;
}

void printXms(struct XuanMin *p,int len)
{
    int i;
    for(i=0;i<len;i++){
        printf("名字:%s,票数:%d \n",p->name,p->tickets);
        p++;
    }
}

int doVot(struct XuanMin *p,int len)
{
    int i;
    int j;
    int mark;
    char tmpName[32];
    struct XuanMin *pbak = p;
    int qTickets = 0;
    
    for(i=0;i<len;i++){
        mark = 0;
        printf("请输入你投给谁:\n");
        memset(tmpName,'\0',sizeof(tmpName));
        scanf("%s",tmpName);
        for(j=0;j<len;j++){
            if(strcmp(tmpName,p->name) == 0){
                p->tickets++;
                mark = 1;
            }
            p++;
        }
        if(mark == 0){
            printf("没有此人,弃票\n");
            qTickets++;
        }
        
        p = pbak;
        
    }
    return qTickets;
}

int main()
{
    struct XuanMin *xm =NULL;
    int total = 0;
    xm = initXms(xm,&total);
    printf("sizeof xms = %d\n",total);
    printXms(xm,total);
    
    int qTickets = doVot(xm,total);
    printf("弃牌数为:%d\n",qTickets);
    printXms(xm,total);
    
    return 0;
}

五.联合体/共用体

5.1定义

  同一个内存空间存放类型不同,不同类型的变量共享一块空间

5.2和结构体的区别  

  结构体元素有各自单独空间,共用体元素共享空间,空间大小由最大类型确定

  结构体元素互不影响 共用体赋值会导致覆盖

#include<stdio.h>
#include<string.h>

struct TestS
{
    int idata;
    char cdata;
    double ddata;
};

union TestU
{
    int idata;
    char cdata;
    double ddata;
};

int main()
{
    struct TestS s1;
    union TestU u1;
    printf("结构体s1的大小是:%d\n",sizeof(s1));
    printf("联合体u1的大小是:%d\n",sizeof(u1));
    return 0;
}

六.枚举类型

6.1什么是枚举类型

  如果一个变量只有集中可能的值
6.2怎么定义枚举类型

  列表中的名字,可以自己定义,无需像变量一样去申请 c编译器把它当成常量处理,也称枚举常量

七.typedef

标签:char,struct,第八天,int,xm,C语言,学习,include,XuanMin
From: https://www.cnblogs.com/Lynchteacher/p/17334961.html

相关文章

  • 深度学习--- 深度学习基础1
    本文对接触到的深度学习相关内容做一个梳理。一、深度学习1.深度学习是什么深度学习(DeepLearning)是机器学习(MachineLearning)的一个研究方向,而机器学习属于人工智能(AI,ArtificialIntelligence)的范畴,人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应......
  • python+playwright 学习-35.获取页面的完整 HTML 内容
    前言selenium里面有个driver.page_source可以获取整个html页面的内容,playwright里面也有类似的方法使用page.content()page.content()获取html内容使用示例withsync_playwright()asp:browser=p.chromium.launch(headless=False)context=browser.new_context(......
  • 有关C语言的一些必备知识
    对编程而言,可移植性意味着在一种系统中编写的C语言程序稍作修改或不可修改就能在其他系统运行。如需修改,也只需简单更改主程序头文件中的少许项即可。源代码文件、目标代码文件和可执行文件的区别:                          ......
  • java学习日记20230415-LinkedHashSet源码
    LinkedHashSet全面说明:LinkedHashSet是HashSet子类;底层是一个LinkedHashMap,底层维护了一个数组和双向链表根据元素的hashCode值来决定元素的位置,同时使用链表维护元素的次序,使得元素看起来是以插入的顺序保存的不允许添加重复元素维护了一个hash表和双向链表,每个节点有pre和......
  • c语言常用语法笔记
    ----代码太长要换行voidmain(){printf("%s","1231232423145123523542353145134\51342512352352135")//实际输出效果123123242314512352354235314513451342512352352135printf("%s","1231232423145123523542353145134\51342512352......
  • vue3学习之tabler组件Layout布局
    上一篇使用的bootstrap-vue-next项目迭代很快,考虑还未发文档和正式版本(自己菜)改用原生bootstrap模板tabler项目。tabler安装运行不想安装可直接打开tabler\demo目录下html文件浏览查看效果#获取后目录下运行npminstall#需要先安装https://github.com/oneclick/rubyinst......
  • 【MIT 6.824】学习记录
    好像2023年这个课改名成了MIT6.5840了,nevermind学习资料Schedule知乎找到一篇笔记......
  • 日常学习
    2023/4/19POPEN&PCLOSE函数原型FILE*popen(constchar*command,constchar*type);intpclose(FILE*stream);函数行为popen函数(常用)建立管道,fork子进程,调用sehll执行命令。pclose函数关闭由popen函数返回的I/O文件流。参数解释type:r表示command的标准输出是管......
  • python+playwright 学习-49 pytest-xdist 多进程执行用例
    前言在实际工作中项目下的web自动化用例非常多,单进程执行会消耗很长的运行时间,可能运行一次用例得几个小时。为了加快用例的运行速度,可以使用pytest-xdist多进程执行用例。但并不是说你写的用例,直接安装插件就能使用,实际使用的过程中还会遇到很多的问题。pytest-xdist多进程执行......
  • 傅里叶变换学习资源与笔记
    傅里叶变换推荐视频傅里叶变换这样学,何愁不会呢?直观理解傅里叶变换傅里叶变换这样学,何愁不会呢?直观理解傅里叶变换推荐文章二维傅里叶变换是怎么进行的?-阿姆斯特朗的回答-知乎为什么要变换?如果学过线性代数,那么你一定知道空间变换与基变换,简单来说,一个问题在原来的......