1.本章学习总结

1.1 学习内容总结

  • 结构体定义及成员赋值:
struct student {int x, int y};
struct student s1={3,5};
s1.x=4;
s1.y=8;
  • 结构体数组排序做法:
void sort(struct student* p, int n)
{
    int i, j;
    struct student temp;
    for(i=0;i<n-1;i++)
    {
        for (j = 0; j < n - 1 - i; j++)
        {
        if (p[j].sum < p[j + 1].sum)
        {
        temp = p[j];
        p[j] = p[j + 1];
        p[j + 1] = temp;
        }
        }
    }
}
  • 结构体指针用法:
用*p访问结构成员
(*p).num=101;
用指向运算符->访问指针指向的结构成员
p->num=100;
结构体指针作为函数参数
int score (struct student *p,int n);
pos=score (students ,n);
  • 共用体、枚举类型做法:
共用体
union Data{
int i;
char ch;
float f;
}a={1, 'a', 1.5};//错误
union Data a = {16};//正确
union Data a = {.ch = ‘j’};//正确

枚举类型
enum Weekday{sun, mon, tue, wed, thu, fri, sat} workday, weak_end;
  • 文件读写,文件中数据读进结构体数组:
文件读写
fp=fopen("abc.txt"."r");
fp=fopen("abc.txt"."w");

文件中数据读进结构体数组
while(!feof(fp))
{
    fscanf(fp, "%[^,],%[^,],%[^,],%d, %s", &student[i].no, &student[i].name, &student[i]. sex, &student[i].age, &student[i].major);
}

1.2 本章学习体会

  • 这两章的内容比较综合,基本上用到了前几章的所有知识,对前几章内容有一定的复习作用。综合也意味着难度更大,对之前学习过的内容的掌握,在一定程度上影响这两章的学习,然而这部分内容确实比较抽象,理解起来不那么容易,运用起来也不容易掌握。
  • 这两周代码量:870行

2.综合作业--“我爱成语”

2.1.文件介绍

1.头文件介绍

idiom.h

  • 结构体IDI用来存成语及意思。
  • 函数menu()展示菜单。
  • 函数getIdiom()查看成语和意思。
  • 函数findIdiom()查找成语及意思。
  • 函数addIdiom()添加成语及意思。

login.h

  • LOGIN结构体存用户名和密码。
  • 函数checkUserValid()验证登录。
  • 函数Login()输入用户名和密码并给出提示。

game.h

  • idiomGame()出题函数。

2.函数实现文件介绍。

文件1:main.c

  • 打开和关闭文件,以及各函数之间的调用。

文件2:Login.c

  • 输入用户名和密码,验证两者是否正确。

文件3:idiom.c

  • 进行成语的查看、查找和增加。

文件4:menu.c

  • 菜单展示,返回选择数。

文件5:game.c

  • 实现成语随机挖空出题。

2.2.运行结果

1.登录界面

2.游戏界面

2.3大作业总结

1.碰到问题及解决办法

Q:如何实现成语随机挖空?
A:用随机偶数代表随机某个字。

Q:成语随机挖空可能两次会随机到同一个字。
A:记录上次随机的数,对比解决。

Q:如何比对答案是否正确?
A:成语挖空前先记录下成语,记录下两个字的先后顺序。

Q:增加成语后,立即查看成语会出现乱码。
A:未找到原因。

Q:主菜单输入字符会死循环,未解决。
A:scanf("%d",&a)只能接收数字,输入字符则被放置在缓冲区,未解决。

12-24 08:14