C语言博客作业--结构体,文件

1.本章学习总结(2分)

1.1 学习内容总结

(1)结构体如何定义、成员如何赋值

结构体的一般形式为:
     struct  结构体名
    {
     数据类型   成员名1;
     数据类型   成员名2;
     :
     数据类型   成员名n;
     };

a.结构体的定义及赋值:
先定义结构体类型再定义变量名,这是C语言中定义结构体类型变量最常见的方式。

      struct 结构体名
     {
             成员列表;
     };
     struct 结构体名 变量名;

b.直接定义结构类型变量:

struct      //没有结构体名
 {
       成员列表;
 }变量名;
/*这是第一类结构体的形式,有结构体名,有结构体变量*/
struct str2{
int a;
int b;
};
/* 这是第二类结构体的形式,有结构体名,无结构体变量 */
typedef struct {
int a;
int b;
}STR3;
/* 这是第三类结构体的形式,把结构体重定义为STR3 */
typedef struct str4{
int a;
int b;
}STR4;

(2) 结构体数组排序做法
在对结构体数组排序时,首先确定排序数组的关键字,并且在排序过程中不是交换关键字的顺序,而是交换这个结构的地址,从而使结构体数组有序。举个例子:

#include<stdio.h>
typedef struct {           //结构体 定义时尽量放main()外面---方便 
    int grade;
    int age;
    char name[10];
}Student;

int main()
{
    int i, j;
    Student temp;

    Student student[3] = {
    {550,19,"小红"},
    {700,20,"tom"},
    };

    
    Student* p = student;
    for (i = 1; i <= 2; i++)
    {
        for (j = 0; j <= 3 - i - 1; j++)//大-->小 
        {
            if ((p + j)->grade < (p + j + 1)->grade)
            {
                temp = *(p + j);
                *(p + j) = *(p + j + 1);
                *(p + j + 1) = temp;//注意 temp 的类型为Student 

             /*
             temp=(p+j)->grade;
                (p+j)->grade = (p+j+1)->grade;
                (p+j+1)->grade = temp;
                   错误代码 why? 注意 整体交换 
             */
            }
        }
    }

    /*以表的形式输出*/
    printf("姓名    年龄    分数  \n\n");//表头 
    for (i = 0; i <= 2; i++)
    {
        printf("%-4s   %4d     %4d\n", (p + i)->name, (p + i)->age, (p + i)->grade);
    }

    getchar();
    return 0;

(3)结构体指针怎么用
应该注意,结构体和结构体变量是两个不同的概念:结构体是一种数据类型,是一种创建变量的模板,编译器不会为它分配内存空间,就像 int、float、char 这些关键字本身不占用内存一样;结构体变量才包含实实在在的数据,才需要内存来存储.
定义指向结构体类型变量的指针变量:

struct stu *p1, *p2 ;

定义指针变量p1、p2,分别指向结构体类型变量。引用形式为:指针变量→成员;做一个简单的应用吧。输入一个结构体类型变量的成员,并输出:

#include <stdlib.h> 
#include<stdio.h>
struct data
{
    int day;
    int month;
    int year;
};
struct stu
{
    char name[20];
    long num;
    struct data birthday;
};
int main()
{
    struct stu* student;
    student = (stu*)malloc(sizeof(struct stu));
    printf("Input name,number,year,month,day:\n");
    scanf("%s", student->name);
    scanf("%ld", &student->num);
    scanf("%d%d%d", &student->birthday.year, &student->birthday.month, &student->birthday.day);
    printf("\nOutputname,number,year,month,day\n");
    /*打印输出各成员项的值*/
    printf("%20s%10ld%10d//%d//%d\n", student->name, student->num, student->birthday.year, student->birthday.month, student->birthday.day);
}

程序中使用结构体类型指针引用结构体变量的成员,需要通过C提供的函数malloc()来为指针分配安全的地址。函数sizeof()返回值是计算给定数据类型所占内存的字节数。
指针所指各成员形式为:
student->name
student->num
student->birthday.year
student->birthday.month
student->birthday.day

  • 共用体、枚举类型做法

    共用体是一种多变量共享存储空间的构造类型,它允许几种不同的变量共用同一存储空间。共用体和结构体的区别:1.结构体每一位成员都用来表示一种具体事务的属性,共用体成员可以表示多种属性(同一存储空间可以存储不同类型的数据)。结构体总空间大小,等于各成员总长度,共用体空间等于最大成员占据的空间。共用体不能赋初值。
    枚举类型是指变量的值可以全部列出,定义一个枚举变量后,变量的值确定在定义之中。它和结构体、共用体的区别在于,枚举元素是常量,只能在定义阶段赋值。

  • 文件读写,文件中数据如何读进结构体数组

1.2 本章学习体会

描述学习感受,也可以在这里提出你不理解地方、对教师教学建议等等。
计算这两周代码量,是否达到目标。

2.综合作业--“我爱成语”(8分)

本次作业要编写一个成语游戏。用户登录后,系统随机出若干个成语,如果答对则得分。用户得分写入成绩文件。系统能对用户成绩排名
主要功能:
登陆。需要输入正确用户名和 密码,才能登陆系统。错误提示错误的信息。
成语游戏。从成语文件中随机抽一个成语,随机展示2个汉字,用户猜剩余汉字。如果答对,则得分。错误,给相应信息。
排名。系统跟用户得分排名。
退出
要求:
本次作业必须建工程实现C的多文件。其中结构体定义、函数定义等都要封装在自定义头文件中。一个模块对应一个.h文件和.c文件。数据定义和数据实现分离。
用户登录、排名信息的数据请封装结构体实现。
涉及3个数据文件:user.txt、ranking.txt、idiom.txt
尽量减少全局变量使用,数据传递通过地址、参数等传递。学会利用函数形参、返回值实现独立功能。
菜单界面友好,任何一步都能随时推出,程序也 不会崩溃。程序界面要有清屏。
尽量写一个函数调试一个函数,保证函数能读写文件数据再做下面内容。
数据说明:
user.txt :用户名、密码
ranking.txt:用户名,答题总分数、最后答题时间。注意:答题分数是每次分数的积累,如答对一题5分,下一次同一个用户名再玩,这里数据能累加或更新。
idiom.txt:成语、成语解释。注意:给大家数据还包含数字,建议对数据预处理下,把数据改造成规范格式。成语:成语解释。出现其他如【】、数字等都过滤掉。数据统一格式才好读写。
扩展功能
本题可以做一个成语字典,用户输入成语,可以查询相应成语解释。这个查询可以是模糊查询,就是用户只输入一个汉字也可以查询所有相关的成语内容。
游戏玩法可以多样,比如也可以做成语接龙,你写一个成语,根据最后一个汉字,系统能接龙下一个成语。如果是人机互玩,不是接龙规则,可提示

2.1.文件介绍

头文件介绍
头文件1.h
介绍头文件有哪些结构体及函数声明,他们的功能是什么?可以列表格,更清晰直观
头文件代码截图
头文件2.h
介绍头文件有哪些结构体及函数声明,他们的功能是什么?可以列表格,更清晰直观
头文件代码截图
头文件3.h
介绍头文件有哪些结构体及函数声明,他们的功能是什么?可以列表格,更清晰直观
头文件代码截图
2.函数实现文件介绍。
文件1:main.c
介绍文件功能及设计思路。
主要代码截图
文件2:Login.c
介绍主要函数代码及功能。
主要代码截图
文件3:idiom.c
介绍主要函数代码及功能。
主要代码截图
等等其他文件

2.2.运行结果

1.登录界面
2.游戏界面
3.排名界面

2.3大作业总结

1.碰到问题及解决办法
可以列表展示。
2.小结
大作业代码提交
请把写好的大作业代码,全部复制在一个word文档中。(记住,要复制过去,不能截图,截图则本次作业0分),文档保存好请提交课堂派的作业中。我们会用课堂派对你写的代码进行查重,发现抄袭者,将公布名单,请务必要独立完成。
评分注意事项。
注意用Markdown语法排版,否则倒扣1分。
变量名不规范,没注释,没缩进,括号不对齐,倒扣5分。
大作业必须演示给助教看。

猜你喜欢

转载自www.cnblogs.com/shenchao123/p/12026348.html