C语言博客作业--结构体

一、PTA实验作业

题目一.结构体数组按总分排序

1.本题PTA提交列表

2. 设计思路

第一个函数的编写
首先要遍历结构体数组使sum得初始值为0,
遍历数组中的score与sum相加。
第二个函数编写
先定义一个结构体中间量temp
用选择排序法进行排序,进行第二个函数的操作。

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明。

本题没有问题认为可以将第一个函数中的*s用p去操作可以节约空间,还有就是可以用typedef对结构体取别名这样会直观简单一点。

题目二.时间换算

1.本题PTA提交列表

2.设计思路

定义结构体包括起始时间的小时,分钟,秒钟还有过了多少秒。
输入这些数据
定义函数实现时间改变
如果秒钟加上过去的秒钟分钟加1,当分钟超过60小时加1,当小时超过24则减去24
否则则直接返回秒钟加过去的秒钟

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明。

本题比较容易没问题,就是补0这个操作会比较灵活。

题目三. 有理数比较

1.本题PTA提交列表

2.设计思路

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明。

本题比较容易,就是整数类型转小数一开始没注意。

二、截图本周题目集的PTA最后排名。

PTA排名

三、阅读代码

1atoi函数源代码

#include<stdio.h>  
#include<assert.h>  
#include<stdlib.h>  
#include<ctype.h>  
#include<limits.h>  
enum Ret                                              //状态,用来输入是否合理 ,分装成函数增加可读性,枚举法增加可读性
{  
    VALID,  
    INVALID,  
};  
enum Ret state = INVALID;  
int My_atoi(const char *str) //指针类型传参,操作性强加上const完美严谨。 
{  
    int flag = 1;                                 //用来记录是正数还是负数  
    long long ret = 0;      
    assert(str);                                    
    if (str == NULL)  
    {  
        return 0;  
    }  
    if (*str == '\0')  
    {  
        return (int)ret;  //强制转换类型。
    }  
    while (isspace(*str))                        //若是空字符串就继续往后  ,调用库函数
    {  
        str++;  
    }  
    if (*str == '-')  
    {  
        flag = -1;  
    }  
    if (*str == '+' || *str == '-')  
    {  
        str++;  
    }  
    while (*str)  
    {  
        if (*str >= '0' && *str <= '9')  
        {  
            ret = ret * 10 + flag * (*str - '0');                  
            if (ret>INT_MAX||ret<INT_MIN)                 //判定是否溢出了  
            {  
                ret = 0;  
                break;  
            }  
        }  
        else  
        {  
            break;  
        }  
        str++;  
    }  
    if (*str == '\0')                  //这里while循环结束后,此时只有*str == '\0'才是合法的输入  
    {  
        state = VALID;  
    }  
    return ret;  
}  
int main()  
{  
    char arr[20];  
    int ret = 0;  
    printf("请输入您要转化的字符串:\n");  
    scanf("%s", arr);  
    ret = My_atoi(arr);  
    if (VALID == state)  
    {  
        printf("%d\n", ret);  
    }  
    else  
    {  
        printf("输入非法\n");  
        printf("%d\n", ret);  
    }  
    return 0;  
}  

2.isdigit源代码

int my_isdigit( int ch )

{

    return (unsigned int)(ch - '0') < 10u;

}//判断字符c是否为数字

int main()

{

   int ch = 'A';


 
   if(my_isdigit(ch))
      printf("%c is Digital Number!/n",ch);
   else
      printf("%c is not a Digital Number!/n",ch);
   ch = '1';

   if(my_isdigit(ch))

      printf("%c is Digital Number!/n",ch);

   else

      printf("%c is not a Digital Number!/n",ch);


 
   system("pause");

   return 0;

}
  

上面的判断代码运用到了一个ACSII码对应一个字符的原理很巧妙。
源代码的思路很强,用指针操作省空间,而且分装的每一个函数都很值得学习。
2.

四、本周学习总结

1.总结本周学习内容

结构体和数组有明显的相似性就是可以同时存放多个数据,但是结构体和数组也有明显的差异就是数组只能是同一种类型的数据而结构体可以是不同类型的数据,像成绩,学生信息这一类有不同数据类型的系统如果能够运用到结构体可以大大增加可读性和操作的简易性。
共用体是指某一些结构体里面一部分成员需要而另一部分不需要的类型,这种类型最大的优点就是大大节约了空间。
枚举是针对一些数据只有几种类型比如星期只有1到5,BOOL类型只有对和错,颜色只有那几种这时候用枚举就很简便,在我的理解枚举可以看做是一些特殊情况下宏定义的简便写法。

2.罗列本周一些错题。


这一题没看到Shangxian对应的是2002.

这题是我从别人那里拿来的代码,在函数里面输出的结果可以返回去结果就不对而且两个地址一样,更奇怪的是函数里面输出str结果返回去的输出也会改变。 错误原因 没有将函数中的数组定义成静态变量,若定义成普通变量它的生存周期不一样,因此要定义成静态变量,返回指针类型的函数一般有两种操作 1是返回一个传入的指针,二是定义成全局变量或者局部变量。

posted @ 2017-12-24 17:16  这个人有毒啊  阅读(304)  评论(1编辑  收藏  举报