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

1.本章学习总结

1.1思维导图

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

1.2.1 学习体会

在学习了数组之后,发现需要做的题目数量变多了,一个程序的代码量也增加了。随着c语言的学习越来越深入,题目的难度也越来越大,发现编程真的是个熟能生巧的东西,有时候几天没有编程,

可能对之前学习的技巧都有些生疏。在C语言中,我觉得数组的应用还是挺广泛的,大多数题目都可以用上数组。同时在这几周学习数组的过程中,也收获颇多,例如在对数组初始化时,并没有必

要使用循环来对数组一一初始化,而是可以定义数组时用static来对数组整体直接初始化,还有数组的几种输入方式,一是在定义的时候直接复制,二是用getchar、gets、fgets、scanf对数组进

行赋值,在学习字符数组的过程中也学会了一些函数的运用,例如strlen比较常用,但在用之前需加上头文件string.h。

1.2.2 代码累计

2.PTA总分

2.1截图PTA三次题目集:一维数组、二维数组和字符数组共3次题目集的排名得分



2.2 我的总分:

PTA总分:430

3.PTA实验作业

3.1 PTA题目1

本题要求实现一个对数组进行循环左移的简单函数:一个数组a中存有n(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移m(≥0)个位置

3.1.1 算法分析

输入数组个数和移动次数
输入数组
m=m%n          //缩小移动的次数
for(i=m to n-1) then
依次输出数组第m+1到n的数
end for
for(i=0 to m-2) then
再依次输出数组第1到m个数
end for

3.1.2 代码截图

3.1.3 PTA提交列表及说明


Q1:当m大于n时m为n的倍数时错误
A1:所以添加了一个m=m%n来缩小m的范围,移动后的效果却是一样
Q2:输出时两个数之间每空格或句尾多空格
A2:定义了flag变量用来控制第一个不输出空格,后面的数输出空格

3.2PTA题目2

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小

3.2.1算法分析

int flag,flag1        //判断是否为鞍点和矩阵是否存在鞍点
输出二维数组
for(i=0 to n-1) then
     for(j=0 to n-1) then
          for(k=0 to n-1) then           //遍历所在的行和列
          判断是否为鞍点
          end for
     若是鞍点)  输出所在行和列
     end for
end for
若不存在鞍点 输出NONE

3.2.2 代码截图


3.2.3 PTA提交列表及说明


Q1:不存在鞍点时却会输出存在鞍点的结果
A1:没有将在行上最小和列上最大的结果结合起来,结果导致只要是行上最小或列上最大就会判断这个点时鞍点

3.3 PTA题目3

本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出

3.3.1 算法分析

输入字符数组 ch[]
int x=strlen(ch)      //计算数组长度
for(i=0 to x-1) then
    flag=0;
    for(j=i+1 to x-1) then
    若有重复字符
    flag=1;break;
    end for
    if(flag==0) then
    把不重复的字符存入一个新数组内
end for
for(i=1 to k-1) then
    for(j=0 to k-i-1) then
    冒泡法对新数组进行排序
    end for
end for
输出删除重复数据的数组

3.3.2 代码截图


3.3.3 PTA提交列表及说明


Q1:输入带有空格时删除字符出现错误
A1:输入字符数组是用的是scanf语句,scanf输入的字符数组不能带空格,后来改成了getchar

4.代码互评

4.1 代码截图

我的代码


同学的代码


4.2 二者的不同

1、在我的代码中自定义了一个函数用来判断是否字符为数字或字母,在这种需要多次判断代码中,我觉得可以让写代码的人更轻松,而他是直接判断

2、他的代码分两个循环,先判断@之前的是否符合规范,再判断@之后是否是.com,我的代码中就是从头到尾判断是否符合规范,若不符合从中间break

原文地址:https://www.cnblogs.com/porphyra/p/10086620.html