C语言博客作业04--数组

大城市里の小女人 提交于 2019-12-04 19:01:53

0.展示PTA总分

一维数组

二维数组

1.本章学习总结

1.1 学习内容总结

1.数组中如何查找数据:可以用循环语句将数组中所有的数检查一遍,若找到便退出循环语句;还有二分法:定义left(数据集的开头),right(数据集结尾)两个变量,然后在这组数据中找到mid=(left+right)/2,然后将待查找元素与mid所指元素进行比较,如果相等将索引返回,如果查找元素大于mid所指元素,则将left向右移动即left=mid+1;如果查找元素小于mid所指元素,则将left向左移动即right=mid-1。重复以上过程直到left>right(因为此时表明并不存在待查找元素)

2.数组中如何插入数据:把数据放在需要的位置之后,该位置原本的数往下移一位

3.数组中如何删除数据:将该位数用下一位的数来代替,然后接下来的数也依次往前移动一位,也可以重新定义一个数组,重新存放除要删除的数据之外的所有数据。

4.数组中目前学到排序方法:冒泡排序法:用循环语句来对比每两个相邻的数据,大的数下沉,小的数上浮。选择排序法:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。
5:哈希数组:不懂

1.2 本章学习体会

代码量:421

2.PTA实验作业

2.1 题目名:17-9 调查电视节目受欢迎程度

2.1.1 伪代码

输入数据
for(i = 0; i < n; i++)
    如果 a[i]等于1~8中的某个数
    数组b 对应的位置加一
end for
输出结果

2.1.2 代码截图

2.1.3 造测试数据

2.1.4 PTA提交列表及说明

提交列表说明:
答案错误:输出的格式错误
多种错误:输出的格式错误,并且循环体的语句有问题,后面干脆改成if语句的堆砌
部分正确:某一行写成for (i = 0; i < n; i++);删去分号答案正确

2.2 题目名2:7-4 数组循环左移
2.2.1 数据处理

输入数据
for(k = 1; k 小于等于 m; k++)
    储存a[0]的值
     for(i = 1; i小于等于n - 1; i++)
     令数组移动,即a[i - 1] = a[i]
     end for
    令a[n - 1]读取a[0]的值
end for
输出结果

2.2.2 代码截图

2.2.3 造测试数据

输入数据 输出数据 说明
1 2 3 4 5 6 7 8 4 5 6 7 8 1 2 3 正常数据
5 4 2 6 8 7 3 1 9 8 7 3 1 9 5 4 2 6 正常数据

2.2.4 PTA提交列表及说明

提交列表说明:
答案错误:循环的条件没理清楚,导致答案错误,通过重新计算解决
编译错误: 语法有问题 好像少了个括号还是分号
格式错误:输出格式没注意题目要求,修改后答案正确

2.3 题目名3:7-7 冒泡法排序
2.3.1 数据处理

输入数据
while循环k次
   for循环n次
     如果a[i]大于a[i + 1]
        交换两个数的值
   end for
end while
输出结果

2.3.2 代码截图

2.3.3 造测试数据

2.3.4 PTA提交列表及说明

提交列表说明:
答案错误:没弄明白题目要干什么,然后懂了
3.阅读代码

#include<iostream>
#include<vector>
#include<string.h>
#include<stdio.h>
#include<algorithm>
#include<cmath>
using namespace std;
enum {
    SIZ = 40,
};
 
char rep[10] = {0, 1, 5, 3, 4, 2, 9, 7, 8, 6};
char dig[SIZ];
int len;
 
int fun(){
    int i, t = dig[len], hi;
    if(rep[t] > t){
        dig[len] = rep[t];
        return 1;
    }
    hi = t;
    for(i=len-1; i>=0; i--){
        t = dig[i];
        if(t < hi || rep[t] > t){
            int k=i;
            for(int j=i+1;j<=len;j++){
                t = dig[j];
                if(t > dig[i] && t <= hi){
                    hi = t;
                    k = j;
                }
                if(rep[t] > dig[i] && rep[t] <= hi){
                    hi = rep[t];
                    dig[j] = rep[t];
                    k = j;
                }
            }
            t = dig[i];
            if(rep[t] > t && (hi < t || hi > rep[t])){
                dig[i] = rep[t];
            } else {
                swap(dig[i], dig[k]);
            }
            for(k= i+1; k<=len; k++){
                dig[k] = min(dig[k], rep[dig[k]]);
            }
            sort(dig+i+1, dig+len+1);
            return 1;
        }
        hi = max(hi, t);
    }
    return 0;
}
 
void trim(){
    len = 0;
    for(int i=0; dig[i]; i++){
        if(dig[i]!='.'){
            dig[len++] = dig[i] - '0';
        }
    }
    dig[len--] = 0;
}
void output(int s){
    if(s <=0){
        printf("The price cannot be raised.\n");
        return ;
    }
    for(s=0; s<len; s++){
        printf("%d", dig[s]);
    }
    printf(".%d\n", dig[len]);
}
int main(){
 
    scanf("%s", dig);
    while(dig[0]!='.'){
        trim();
        output(fun());
        scanf("%s", dig);
    }
    return 0;
}

理解:代码的功能是给定当前的油价,计算下一个最高价格,它可以使用相同的数字和相同的格式规则显示。仅包含小数点的输入行终止输入。如果价格不能提高,输出"The price cannot be raised."这个代码使用了函数的嵌套,而主函数只有短短的几行,作者熟悉运用各种函数接口,各种函数让人眼花缭乱,不由得让我想起了上次的大作业就可以借鉴这种模式。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!