一、PTA实验作业

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

1. 本题PTA提交列表

2. 设计思路


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

3.代码截图

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

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

  • 调试过程:

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

题目2:有理数比较

1. 本题PTA提交列表

2. 设计思路

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

3.代码截图

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

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

  • 调试过程:

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

题目3:时间换算

1. 本题PTA提交列表

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.代码截图

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

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

  • 调试过程:

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

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

三、阅读代码

整数分解为若干项之和

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

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

#include<stdio.h>

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<top; k++) {
printf("%d+", s[k]);
}
if (count%4 == 0 || s[top] == N) {
printf("%d\n", s[top]);
} else {
printf("%d;", s[top]);
}
return;
} // 输出部分
if (sum > N) {
return;
}
for (int j=i; j<=N; j++) {
s[++top] = j;
sum += j;
division (j);
sum -= j;
top --;
} // 算法主体
}

时间换算

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

四、本周学习总结

1.总结本周学习内容

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

  • 结构体:

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

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

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

  • 共用体:

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

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

    区别:储存方式不同

    联系:两者可相互嵌套

  • 枚举:

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

递归函数原理

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

    缺点:递归快速耗内存,不方便阅读和维护,效率低

    优点:简洁,适合解决阶乘、涉及相反顺序的编程问题

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

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

  • 用途:

    符号常量,如PI,数组定义大小,以增加程序的灵活性

    简单的函数功能实现

    为程序书写带来一些方便

2.罗列本周一些错题。

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

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

C语言第十次博客作业--结构体的更多相关文章

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

    一.PTA实验作业 6-2 按等级统计学生成绩 1. 本题PTA提交列表 2. 设计思路 定义i,count存放不及格人数 for i=0 to n-1{ 判断 score的值的范围 if 100&g ...

  2. C语言博客作业--结构体,文件

    1.本章学习总结(2分) 1.1 学习内容总结 (1)结构体如何定义.成员如何赋值 结构体的一般形式为:      struct  结构体名     {      数据类型 成员名1:      数据 ...

  3. C语言博客作业—结构体

    一.PTA实验作业 题目1:结构体数组按总分排序 1. 本题PTA提交列表 2. 设计思路 void calc //函数calc求出p指针所指的结构体数组中 n 名学生各自的总分 { 定义循环变量i: ...

  4. c语言博客作业--结构体&文件

    1.本章学习总结 1.1思维导图 1.2.本章学习体会 本章学到了结构体如何构建,用typedef进行重定义结构体,结构指针,访问结构体的方式等. 文件:文件的读取,文件读写的几个函数,基本了解了文本 ...

  5. Java语言课程设计——博客作业教学数据分析系统(201521123107 张翔)

    #Java语言课程设计--博客作业教学数据分析系统(个人博客) 1.团队课程设计博客链接 [博客作业教学数据分析系统(From:网络五条狗)](http://www.cnblogs.com/fanta ...

  6. C语言第二次博客作业——分支结构

    一.PTA实验作业 题目1:计算分段函数 1.实验代码 #include<stdio.h> #include<math.h> int main(void) { double x ...

  7. C语言第二次博客作业---分支结构

    一,PTA实验作业 题目1.计算分段函数 本题目要求计算下列分段函数f(x)的值: 1.实验代码 double x,result; scanf("%lf",&x); if( ...

  8. C语言第九次博客作业--指针

    一.PTA实验作业 题目1:两个4位正整数的后两位互换 1. 本题PTA提交列表 2. 设计思路 定义循环变量i,两个数组a[4],b[4] for i=0 to 3 a[i]*p取各个位 *p/=1 ...

  9. C语言第二次博客作业—分支结构

    一.PTA实验作业 题目1:计算分段函数 1.实验代码 double x,y; scanf("%lf",&x); if(x>=0){ y=sqrt(x); print ...

随机推荐

  1. CBitmap的使用

    MFC提供了位图处理的基础类CBitmap,可以完成位图(bmp图像)的创建.图像数据的获取等功能.虽然功能比较少,但是在对位图进行一些简单的处理时,CBitmap类还是可以胜任的.很多人可能会采用一 ...

  2. 工作中常用的linux命令(1)

    1.cd :进入一个目录,例如进入/home/admin目录:cd /home/admin 2.pwd :查看当前所在目录:如图: 3.ls :列出当前目录下的所有文件: 4.ll :列出当前目录下的 ...

  3. JAVA代码发送邮件示例和解释(二)

    之前有使用过一次在程序中发邮件的功能,也写了一篇相关的笔记,当时使用的是163邮箱,经过测试多个163账号都是可行的.但是最近把账号换成中国移动@chinamobilesz.com这种结尾的时候,却一 ...

  4. UBOOT添加命令的执行流程

    BootLoader(引导装载程序)是嵌入式系统软件开发的第一个环节,它把操作系统和硬件平台衔接在一起,对于嵌入式系统的后续软件开发十分重要,在整个开发中也占有相当大的比例.U-BOOT是当前比较流行 ...

  5. Java中字符串的一些常见方法

    1.Java中字符串的一些常见方法 /** * */ package com.you.model; /** * @author Administrator * @date 2014-02-24 */ ...

  6. Srtuts2实现登录界面(不连接数据库)报错(二)

    二月 28, 2014 11:37:29 下午 org.apache.catalina.core.AprLifecycleListener init 严重: An incompatible versi ...

  7. 程序bug致损失400亿,判程序员坐牢? 搞笑我们是认真的

    号外!号外!走过,路过,不要错过!日本 IT 业的狗血八卦继续独家放送啦!! 2015 年 9 月 3 日,随着东京最高法院驳回瑞穗证券的上诉,维持二审的原判结果,一个长达 10 年的诉讼终于画下了句 ...

  8. freemarker入门实例

    freemarker入门实例 1.设计思路 (1)新建Maven Project (2)生成freemarker模板 (3)写freemarker页面ftl文件 (4)写测试文件 2.新建Maven ...

  9. freemarker.core.ParseException:Unexpected end of file reached

    1.错误原因 freemarker.core.ParseException:Unexpected end of file reached 2.错误原因 由于在宏定义中,运用组件时没有关闭标签,导致出错 ...

  10. 常用javascript表单验证方法

    //座机电话验证(支持分机) function chekeTel(tel) { var Tel = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/; if (Tel.test(tel)) ...