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.罗列本周一些错题



指针的赋初值方法

A才是正确

自己以为在执行一次后会直接输出,但是递归是传递再归,最后的输出语句其实是在执行好convert函数后才逐渐返回原样输出

posted @ 2017-12-24 22:32  hahaha233  阅读(1144)  评论(1编辑  收藏  举报