博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言第十次博客作业--结构体
阅读量:5907 次
发布时间:2019-06-19

本文共 2449 字,大约阅读时间需要 8 分钟。

一、PTA实验作业

题目1: 结构体数组按总分排序

1. 本题PTA提交列表

1233559-20171223123332865-1623441178.png

2. 设计思路

求出每名学生的总分定义i,j循环变量for i=0 to n   for j=0 to 3      p[i].sum+=p[i].score[j]将三个成绩累加即为总分end总分从高到低排序定义i,j循环变量定义结构体中间变量tfor i=0 to 5   for j=0 to 5-i      冒泡排序从高到低end

3.代码截图

1233559-20171223123341600-1180779093.png

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

  • 答案错误:交换数值时只交换了总分,前面的都没被交换,导致答案输出错误。

  • 调试过程:

1233559-20171223130648475-605704873.png

解决办法:将中间变量定义成结构体变量,交换时将结构体的内容整体交换

1233559-20171223193331553-474103172.png

题目2:有理数比较

1. 本题PTA提交列表

1233559-20171223123658365-1628785675.png

2. 设计思路

struct y{    int mol;    int den;}n,m;    //定义表示分子分母的结构体         //并同时定义两个结构体变量m,n定义a,b,c,d存放原始值输入两个有理数两个有理数进行通分比较两分子大小 并利用a,b,c,d输出结果

3.代码截图

1233559-20171223123708959-490693407.png

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

  • 答案错误:本题并不难,只用将两个数通分,再比较分子大小就好了。错误在于最后输出时的值已经被改变,输出错误

  • 调试过程:

1233559-20171223123900287-79217196.png

解决办法:定义四个变量放原本的值,最后利用他们输出。

1233559-20171223124551428-584831639.png

题目3:时间换算

1. 本题PTA提交列表

1233559-20171223124056396-1962336908.png

2. 设计思路

struct time{    int hh;    int mm;    int ss;} now,result;   //定义表示时间分钟秒钟的结构体                //并同时定义一个现在时间的和一个结果时间结构体变量定义n为要加的秒数输入结构体变量now和n利用时间60进制来换算出结果时间(此处运算不太好表述)    result.ss=(now.ss+n)%60;//根据各自与60的进制关系计算    result.mm=(now.mm+(now.ss+n)/60)%60;    result.hh=now.hh+(now.mm+(now.ss+n)/60)/60;if result.hh等于24   令它等于0

3.代码截图

1233559-20171223124035037-1273166726.png

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

  • 部分正确 :最后一秒到0点时输出的是24点

1233559-20171223124113943-1801557803.png

  • 调试过程:

1233559-20171223124124146-1155544706.png

解决办法:加入一个条件判断

1233559-20171223124132021-2014455129.png

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

1233559-20171223130244928-1005487446.png

三、阅读代码

整数分解为若干项之和

1233559-20171224113502850-208345449.png

这道题是周三上机的一道题目,当时看了题目有思路,但是一直做不出来。回来以后上网一查,发现原来可以用递归的思路来解决这道题,确实简单很多。

从上面的代码不难看出他的递归出口是累加的总和等于了输入的 N。但是我觉得递归的特点是形式简单,但是实际上细节繁多。需要注意非常多细节。

#include
int N;int s[31]; // 存放划分结果 int top = -1; // 数组指针 int count = 0; // 统计输出的次数 int sum = 0; // 拆分项累加和 void division (int i);int main (){ scanf ("%d", &N); division (1); return 0; }void division (int i) { if (sum == N) { count ++; printf("%d=", N); int k; for (k=0; k
N) { return; } for (int j=i; j<=N; j++) { s[++top] = j; sum += j; division (j); sum -= j; top --; } // 算法主体 }

时间换算

这是戴洁的代码,她的方法简单明了,将所有时间都换成秒数,最后在换算回去。理解上面比我的60进制好很多,而且她最后输出也利用的时%02d来解决0点的问题,不用像我一样再加一个if判断。

1233559-20171224171216006-469521043.png

四、本周学习总结

1.总结本周学习内容

结构体、共用体、枚举这种构造数据类型特点

  • 结构体:

结构体是把不同类型的数据组合成一个整体的自定义数据类型,它更像是数组的进化版,数组中的元素必须类型相同。

struct student{   int num;   char name;   int grade;};

结构体类型声明描述结构的组织形式,不分配内存。

  • 共用体:

共用体是使几个不同类型的变量共占一段内存(相互覆盖)

union 共用体名{    类型标识符   成员名;    类型标识符   成员名;    .........};
  • 结构体与共用体

    区别:储存方式不同
    联系:两者可相互嵌套

  • 枚举:

枚举元素按常量处理,在定义时由程序员指定,之后不能对他们赋值。

递归函数原理

  • 递归函数就是直接或者间接的调用自己本身的函数。

    缺点:递归快速耗内存,不方便阅读和维护,效率低
    优点:简洁,适合解决阶乘、涉及相反顺序的编程问题

  • 尾递归:最简单的调用函数,无需返回调用,相当于循环。

宏定义:用宏来定义一些符号变量,方便程序的编制。

  • 用途:
    符号常量,如PI,数组定义大小,以增加程序的灵活性
    简单的函数功能实现
    为程序书写带来一些方便

2.罗列本周一些错题。

  • 这一题的循环条件错了导致最后一个数没加上

1233559-20171223195152678-529379143.png

1233559-20171223195224193-402362158.png

  • 这道题的第二个空确实不会,听老师讲完后才明白为什么要这样定义。

1233559-20171223195335334-1937780292.png

1233559-20171223195401756-1821220102.png

转载于:https://www.cnblogs.com/lmb171004/p/8093156.html

你可能感兴趣的文章
关于create database语句在10g,11g中的不同
查看>>
MySQL分布式集群之MyCAT(一)简介(修正)
查看>>
[20160711]索引键值在B tree索引块中的顺序
查看>>
nginx启动、开机自启动、重启、关闭
查看>>
error: src refspec XXX matches more than one
查看>>
云监控最佳实践之-容器所有实例的热力图
查看>>
用十条命令在一分钟内检查 Linux 服务器性能
查看>>
Lua Development Tools (LDT)
查看>>
Kafka源码分析之MemoryRecords
查看>>
document.referrer
查看>>
Coredump介绍及如何在Android中开启和使用来分析Crash等问题
查看>>
go语法之一
查看>>
微信应用号开发教程
查看>>
HTAP数据库 PostgreSQL 场景与性能测试之 6 - (OLTP) 空间应用 - KNN查询(搜索附近对象,由近到远排序输出)...
查看>>
安装drbd
查看>>
送上最新鲜的互联网行业新闻-【2015-05-15】
查看>>
一个架构师谈什么是架构以及怎么成为一个架构师
查看>>
JQuery实战--可以编辑的表格
查看>>
公有云行业:用价格撕开市场,用质量取胜行业
查看>>
千兆宽带,谁买账
查看>>