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分)

本周一进行了一个小测试,发现自己学的知识还是不牢固,刷题并没有巩固我的知识,证明刷题的方法错了。不能光靠刷题,还应该多看看书,补充基本知识。

原文地址:https://www.cnblogs.com/czy020719/p/13933495.html