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

1.本章学习总结

1.1 思维导图

C语言博客作业04--数组_第1张图片

1.2 本章学习体会及代码量学习体会

1.2.1 学习体会

在这几周的学中,我的体会如下

1.在学习数组的初始化时,学习了可以使用static进行初始化,而不必用到for循环
2.在学习二维数组的过程中,第一次知道了二维数组赋值时行数可不做规定,编译器会自动依照输入的数据以及列数而定
3.二分法可以更快地在有序数组中查找所需要的值
4.flag也可以转化为数组的形式,做到判断数组是否重复

1.2.2 代码累计

1474626-20181124230935643-1823201870.png

2.PTA总分

2.1截图PTA中顺序结构、分支结构的排名得分

1474626-20181124232042926-917313555.png

1474626-20181124232048604-1070946588.png

1474626-20181124232053644-1551891231.png

2.2 我的总分:

PTA总分:455分

3.PTA实验作业

3.1 PTA题目1

所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。

3.1.1 算法分析

制造一个方阵 a[12][12];
方阵的边长n
每次走的步数size,其初值为n
循环次数time,初值为 n / 2 + 1;
如果是偶数方阵,循环次数time - 1
如果是奇数方阵,先把中间值填上 n*n
while (time--) do
//向右打印
    for  m = 1 to  size-1  do 
        a[i][j++] = number++; m++;
    end for
//向下打印
    for  m = 1 to  size-1  do
        a[i++][j] = number++; m++;
    end for
//向左打印
    for  m = 1 to  size-1; do
        a[i][j--] = number++; m++;
    end for
//向上打印
    for  m = 1 to  size-1  do
        a[i--][j] = number++; m++;
    end for
//数组自增 or 自减
    i++; j++;
    size -= 2;

end while

//打印矩阵
for  i = 0 to  n-1  do

    for j = 0 to j < n  do
        printf("%3d", a[i][j]);
        j++;
    end for
    printf("\n");
    i++;
end for

3.1.2 代码截图

C语言博客作业04--数组_第2张图片

3.1.3 PTA提交列表及说明

1474626-20181125005052724-930715813.png

Q:奇数方阵中间值填不上?

A:if判断是否奇数,特殊照顾一下

3.2 PTA题目2

输入2个大数,每个数的最高位数可达1000位,求2数的和。

3.2.1 算法分析


初始化数组 number1
初始化数组 number2
初始化数组 result为 0
scanf("%s", number1);
scanf("%s", number2);
利用自己写的函数将两个数组中的元素倒置
整型定义len,并让他等于两个数中最长的长度
for i = 0   to len - 1  do

    result[i] = result[i] + number1/*转化为整型*/ + number2/*转化为整型*/
        if (result[i] > 9)
    
                result[i] -10 
                result[i + 1] 进一
    
        end if

    i++;

end for

if 最后一位进位了 len++
输出result

3.2.2 代码

C语言博客作业04--数组_第3张图片

3.2.3 PTA提交列表及说明

C语言博客作业04--数组_第4张图片

Q:当最后一位要进位时,加不上去

A:对result初始化为0,要进位的话下一位加一,并且每次计算加上result原来的值

3.3 PTA题目3

本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。

3.3.1 算法分析

char target[100000];
char del[100000];
int (targrt数组的长度) lenTar;
int (del数组的长度) lenDel;
//scanf并获的长度
//-----------------------------------------------------//
for lenTar = 0  do

    不断读数据到target[],直到 \n 停止
    lenTar++;//获得长度

end for

for lenDel = 0  do

不断读数据到del[],直到 \n 停止
lenDel++;//获得长度

end for
//-----------------------------------------------------//
for (int i = 0; i < lenTar; i++)

    for (int j = 0; j < lenDel; j++)

        if (发现共有字符)

            删除target[lenTar];
            后面的字符往前补;

        end if

    end for

end for

//输出字符串

3.3.2 代码

C语言博客作业04--数组_第5张图片

3.2.3 PTA提交列表及说明

C语言博客作业04--数组_第6张图片

Q1:为什么相邻的删除字符只删了一个

A1:没次删除完都要再回到原来的位置重新判断

4.代码互评

4.1 代码截图

范华同学的代码

C语言博客作业04--数组_第7张图片

我的代码

C语言博客作业04--数组_第8张图片

4.2 二者的不同

1.范华同学使用的是二维数组,在定义以及循环的过程当中会更加简洁。
2.对时间的输入,范华同学使用的是字符型转整形,其实大可不必,02在用整型输入的过程中会自动转化2.
3.范同学使用的是while单层循环外加repeat判断天数是否到规定天数。我使用的双层while循环,在编写或阅读过程中都简单易懂,而循环节走的次数是一样的。
4.对于时间的计算,范华同学直接转换时间并存储,而我则写了个函数去计算,直接写的话,运行速度会更快一点

转载于:https://www.cnblogs.com/Rasang/p/10014217.html

你可能感兴趣的:(c/c++)