C语言博客作业--结构体
一、PTA实验作业
题目1:时间换算
1. 本题PTA提交列表
2. 设计思路
定义变量n;n存放需要加的秒数,定义结构体变量times
输入已知时间和需加秒数scanf("%d:%d:%d",×.h,×.m,×.s);
scanf("%d",&n);
计算加上n后的秒数times.s=times.s+n;
只要times.s大于60,利用每次循环减去60,分钟加上1,知道秒数小于60
while(times.s>=60)
times.m=times.m+1;
times.s=times.s-60;
times.m和times.h也一样
while(times.m>=60)
times.h=times.h+1;
times.m=times.m-60;
while(times.h>=24)
times.h=times.h-24;
输出最终结果printf("%02d:%02d:%02d\n",times.h,times.m,times.s);
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
-
本题其实很简单,但是一直都是部分正确,是因为我步明白%02d的概念,所以无法输出正确答案,然后问了可爱的小牙牙,就输出结果了,又多学到了一个新知识。
-
修改前:
-
修改后:
题目2:结构体数组中查找指定编号人员
1. 本题PTA提交列表
2. 设计思路
定义变量i,flag=0;i作为循环变量,flag作为辅助变量,判断是否存在与n[]相同编号的成员
定义结构变量struct student A;A存放找到的成员,以便返回
for i=0 to N
如果找到if(std[i].num[0]num[0])
把std赋给A A=std[i];
并且改变辅助变量的值 flag=1;
跳出循环 break;
循环结束后,if(flag0),判断是否找到改人员
没有这A赋值0
返回A
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
-
一开始我的思路是想找到对应的编号后直接把找到的对应的stu[i]变量返回但是,提示上写的是返回的变量类型与主函数中的p不同,然后我就自己定义了一个结构体变量。
-
修改前:
题目3:通讯录的录入与显示
1. 本题PTA提交列表
2. 设计思路
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
-
这道题有俩个错误,一个是输入时的错误,一个是输出时的错误。第一:输入时我把电话号码,手机号码,性别同时放在一个scanf语句中输入,这就会导致输入无法达到我们要的效果。第二:在输出是输出性别的时候我使用的是%s,一步一步的调试之后发现到了输出性别的时候系统会崩溃,然后就改换了%c就好了。
-
修改前:
二、截图本周题目集的PTA最后排名。
三、阅读代码
- 我选的代码是一个大家都玩过的游戏贪吃蛇的中间一小部分的代码,因为没有前面的一部分所以很难看的明白,只有从开头看下来,才可以明白。其中void show()的作用主要是用来显示整个游戏的界面,sleep函数是用来刷新界面,if(over)是判断蛇死了后的操作,system("cls");用于清屏,为下次游戏作准备,输入‘q'结束,输入’r'重新开始。选这个代码主要的原因是:代码的缩进十分的好,并且代码量少,因为主要都是使用函数来实现的,这可以大大降低了代模块间的耦合度,并且会使得思路非常的清晰,值得学习。
void show() {
int i, j, x, y;
for (i = 0; i < 17; i++) {
for (j = 0; j < 17; j++) {
printf("%c", map[i][j]);
}
printf("\n");
}
while (1) {
Sleep(speed);
turn();
move();
if (over) {
while (1) {
char ch = _getch();
if (ch == 113) {
return;
}
else if (ch == 114) {
ini();
break;
}
}
}
system("cls");
for (i = 0; i < 17; i++) {
for (j = 0; j < 17; j++) {
printf("%c", map[i][j]);
}
printf("\n");
}
四、本周学习总结
1.学习内容的总结
-
结构体:这是我找的一篇介绍结构体的博客,自己觉得十分详细,很实用。
-
公用体:在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体。注:在某些书籍中可能称之为“联合体”,但是“共用体”更能反映该类型在内存的特点。
共用体类型数据的特点
1.同一个内存段可以用来存放几种不同类型的成员,但是在每一瞬间只能存放其中的一种,而不是同时存放几种。换句话说,每一瞬间只有一个成员起作用,其他的成员不起作用,即不是同时都在存在和起作用。
2.共用体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去作用。
3.共用体变量的地址和它的各成员的地址都是同一地址。
4.不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。
5.共用体类型可以出现在结构体类型的定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体类型的定义中,数组也可以作为共用体的成员。
-
枚举:是和结构体同一人写的博客,他对枚举列每一种情况都列举得非常详细,无论是在我自己做笔记还是复习,都要向他学习。
-
递归函数的深入使用
递归函数的原理:递归的底层实现其实是一个栈.栈的特点是后进先出,也就是最后进入栈的事件是最先被处理的.
比如说你现在这个函数。首先在main函数里面实现f1(4),这时候进入f1这个函数,执行到return n*f1(n-1);这里。
第一次计算的时候是f(n),进入之后会直接return F(n-1)4.也就是把这一项入栈.
然后这一项到底是多少还不知道需要继续计算.
第二次递归就是 f(n-1-1)(n-1).入栈.
直到满足n<=1.计算出最后入栈的f(1)=1;return这句就限定了最终栈的大小.
然后开始出栈.第一个出栈的是f(1);已经计算得出是1;
第二个出栈是f(2).由f(1)可以得知f(2).
这样直到栈空,阶乘也就计算出来了。
2.本周的错题
- 这道题是我们c语言期中考试考过的题,但是我还是错了,希望下次错一遍的题就不要在错第二次。