C语言I博客作业02
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/zswxy/CST2020-1 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2020-1/homework/11452 |
这个作业的目标 | 更深入了解C语言 |
学号 | 20208933 |
1.PTA实验作业
1.1.冲锋衣选货及折扣 (15分)
已知某会某冲锋衣电商准备在双12推出优惠活动,计划如下:
货号 | 单价 |
---|---|
DG110013 | 812 |
DG110018 | 879 |
DG110004 | 735 |
DG120002 | 649 |
满899减50,满599减30。 现要求,输入完整的货号和数量,输出总价(保留两位小数)。 如果货号输入有误,则输出Error! |
1.1.1实验代码截图
1.1.2数据处理
数据表达:
1.变量a:变量为整型,由输入得来,指商品总数;
2.变量i:变量为整型,由赋值得来,用于限制循环次数;
3.变量b:变量为浮点型,由计算得来,指商品总价;
4.变量s[100]:变量为字符数组,由输入得来,指商品编号。
数据处理:
1.表达式:赋值表达式,算数表达式,关系表达式,逻辑表达式。
2.流程结构:定义变量,赋值变量,while循环,if-else判断,输出结果。
1.1.3PTA提交列表及说明
- Q1:测试点1,测试点2一直答案错误。
- A1:后来发现看题漏了后面的要求,满899减50满599减30,导致一直答案错误。
1.2得分计算器(2005慈溪) (20分)
学校举行校园歌曲演唱赛,共设7个评委,去掉一个最高分,去掉一个最低分,其余评 委的平均分即为选手的最终得分。试编程,输入7个评委的分数后,输出选手的最终得分。 (顶格输出,保留一位小数)
1.2.1实验代码截图
1.2.2数据处理:
数据表达:
1.变量a[7]:变量为浮点型数组,由输入得来,指七个成绩;
2.变量b:变量为浮点型,由计算得来,指去掉最高最低分的平均分;
3.变量sum:变量为浮点型,由计算得来,指去掉最高最低分的总和;
4.变量i j n:变量为整型,由赋值得来,用于限制循环次数。
数据处理:
1.表达式:赋值表达式,算数表达式,关系表达式。
2.流程结构:定义变量,for循环赋值变量,for循环嵌套和if-else判断进行大小排序,计算结果,输出结果。
1.2.3PTA提交列表及说明
- Q1:一开始不知道应该如何找出最大最小值。
- A1:后来知道可以在比较大小后,通过一个中间值将前后两个数换位置。
- Q2:不知道如何将提取出最大最小值的数组求和。
- A2:在第一个问题解决后,这个问题也迎面而解,虽然有点简单粗暴。
1.3最值交换 (20分)
输入8个整数放到数组a中,将其中最小数与a[0]交换。
1.3.1实验代码截图
1.3.2数据处理:
数据表达:
1.变量a[8]:变量为整型,由输入得来,用于存储八个整数;
2.变量b:变量为整型,由赋值得来,用于替换最小数的数组下标;
3.变量min:变量为整型,由赋值得来,用于寻找真正的最小数;
4.变量i:变量为整型,由赋值得来,用于限制循环次数;
5.变量t:变量为整型,由赋值得来,作为中间值暂时存储数据。
数据处理:
1.表达式:赋值表达式,算数表达式,关系表达式。
2.流程结构:定义变量,for循环输入赋值变量,for循环套if-else找出最小值,将第一位与最小数换位置,for循环输出换序数组。
1.3.3PTA提交列表及说明
Q1.不知道如何将第一位与最小位交换数据,因为不知道最小位到底是在八位中的第几位。
A1.后来通过询问学长,知道可以先定义一个最小值,然后一个一个的比较,将最小值存在min中,这个数原本的下标存在t中,这样就可以直接将第一位与最小值换位置了。
Q2.不知道如何输出数组
A2.后来知道可以用for循环一个一个的输出数组中的数。
2.阅读代码(-5——5分)
#include<stdio.h>
int main(void)
{
int a;
int n;
char c;
int sum=1;
scanf("%d %c",&n,&c);
int i=1;
while(sum<=n){
sum+=4*i+2;
if (sum<=n)
i++;
}
a=2*i-1;
for (int x=1;x<=a;x++){
for(int y=1;y<=a;y++){
if((y+x<=a+1&&x<=y)||(y+x>=a+1&&x>=y)){
printf("%c",c);
}
else if(x>y&&x+y<a+1){
printf(" ");
}
}
printf("\n");
}
printf("%d",n-sum+4*i+2);
return 0;
}
我所选的是一位同学的沙漏题代码,这道题运用了线性变换,与我当初所想的两个双for循环相比简单了许多,也运用到了数学知识。以后写题可以多使用数学知识,可以使代码变得更简洁精炼,并且能更快速的解决问题。
3.学习总结(15分)
3.1学习进度条(5分)
周/日期 | 这周所花时间 | 代码行 | 学到的知识点简介 | 目前比较困惑的问题 |
---|---|---|---|---|
第八周 | 30小时 | 600 | 基础知识,输入输出函数if-else语句 | 无 |
第九周 | 30小时 | 700 | for循环,while循环,switch语句,数组 | 怎样用数组打出金字塔和蛇形数组 |
第十周 | 30小时 | 500 | 无 | 二维数组的使用 |
3.2累积代码行和博客字数(5分)
3.3学习感悟(5分)
本周一进行了一个小测试,发现自己学的知识还是不牢固,刷题并没有巩固我的知识,证明刷题的方法错了。不能光靠刷题,还应该多看看书,补充基本知识。