C语言博客作业--结构体
一、PTA实验作业
题目1:6-4 结构体数组按总分排序
1. 本题PTA提交列表
2. 设计思路
定义结构体student,带有num,name,score,sum变量
void calc(struct student *p,int n)函数
先定义整型变量i用于循环
for i=0 to i<n i++,p++
对各分数进行相加
end
void sort(struct student *p,int n)函数
先定义整型变量i,j用于循环,temp用于赋得大值的下标
定义结构变量change用于交换
用选择排序法进行交换排序
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
数据有进行调换但是调换一部分正确一部分不正确
自己调试后发现是条件的设定有问题
自己对条件的设定进行修改为if(p[j].sum >p[temp].sum )后才输出正确
题目2:7-2 时间换算
1. 本题PTA提交列表
2. 设计思路
定义结构time,带有小时,分钟,秒变量
主函数:
定义结构变量s
定义整型变量n用于存放整秒数,hour,minute,second用于存放计算后的小时,分钟,秒值
输入hour,minute,second的值
输入n的值
计算小时,分钟,秒的计算数值
若hour=24时,即超过23:59:59就从0点开始计时
把0赋给hour
输出hour,minute,second的值
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
自己的计算式子一开始不正确,自己尝试用数据代入思考就发现问题
后自己就引入变量存放最终数值
题目3:7-6 通讯录的录入与显示
1. 本题PTA提交列表
2. 设计思路
定义结构体信息,带有变量名字,生日,性别,固定电话,手机
主函数:
定义结构体数组
定义循环变量i,j,N、K用于输入数据的数量,num用于赋予后面查找的数
输入N的值
for i=0 to i<N i++
输入一系类值对结构体数组赋值
end
输入K的值
for j=0 to j<K j++
输入num的值
当num>=0且num<N即找到时
按要求输出第N+1组数据
否则
输出Not Found
end
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
自己在一开始打代码输出正确后就提交到pta,但是pta显示部分正确
一开始自己以为是数组长度的问题,但是改大之后还是部分正确,但是自己的数组已经完全足够
自己用错误点Dev-c++调试运行感觉没错误,在阅读别人代码后,发现他们的代码与自己的较大区别就是在出生这里
他们直接以定义字符串的形式存放所有,而自己是分别定义年月日的整型变量
自己用他们的方法重新定义后发现pta才全部正确,但是感觉自己原先的定义方式输出也正确,没觉得有多大不同
随后自己在别人的说明下才知道要用%02d来控制出生日期,是自己在使用年月日多个变量的输出上没有弄好
二、截图本周题目集的PTA最后排名
三、阅读代码
#include
/*
Searches a string for a given character, which may be the null character '\0'.
查找字符串string中首次出现字符ch的位置。如果string中存在字符ch,返回首次出现ch的位置的指针;否则返回NULL。
*/
char * my_strchr(const char *str, int ch)
{
while (*str && *str != (char)ch)
str++;
if (*str == (char)ch)
return((char *)str);
return(NULL);
}
int main()
{
char *str = "ammana_babi";
char * p;
char ch;
ch = '9';
p = (char *)my_strchr(str,ch);
if(p == NULL)
printf("Can't find the character %c !\n",ch);
else
printf("Find the character %c !\n",*p);
ch = 'b';
p = (char *)my_strchr(str,ch);
if(p == NULL)
printf("Can't find the character %c !\n",ch);
else
printf("Find the character %c !\n",*p);
system("pause");
return 0;
}
这是函数strchr函数的实现过程代码,用指针方式的查找比较方便而且灵活
四、本周学习总结
1.总结本周学习内容
结构体、共用体、枚举这种构造数据类型特点
1 结构体
struct 结构名{
类型名 结构成员名1;
类型名 结构成员名2;
…
类型名 结构成员名n;
}变量列表;
- 在定义嵌套的结构类型时,必须先定义成员的结构类型,再定义主结构类型
- struct是定义结构类型的关键字,结构名是一个合法的C标识符,结构的定义以分号结束
- 只有相同结构类型的变量之间才可以直接赋值,不能在结构体内部直接给成员赋值
- 结构运算符优先级高于一般运算符
2共用体
union 联合名{
成员声明
成员声明
…
}变量列表;
- 共用体是一种多变量共享存储空间的构造类型,它允许几种不一样的变量共用同一存储空间
- 共用体变量中起作用的成员是最后一次存放的成员,给一个成员重复赋值时或对多个成员赋值时,只承认最后一次的赋值
- 如果联合变量是一个全局变量,那么初始化表达式必须是一个常量表达式
3枚举
enum 枚举名{枚举值1,枚举值2,…}变量列表;
- 每一个枚举值应该是一个合法的标识符,或是一个标识符后跟上等号,再加上一个常量表达式
- 某个枚举变量的值只能是定义时列出的枚举值之一
- 编译程序将枚举值当作常量
- 结构体和联合体可以含有多种数据类型,枚举只能含有一种基本数据类型,而且为整型
递归函数原理
- 递归方法的两个要点:递归出口和递归调用式子
- 任何递归函数都必须包含条件,来判断是否要递归下去,一旦结束条件成立,递归克隆应该不会继续,以递归出口值做为函数结果,然后返回,结束一个递归克隆函数体
2.罗列本周一些错题