C语言I博客作业02

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/CST2020-1
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2020-1/homework/11452
这个作业的目标 <学习并掌握循环语句的应用,总结在PTA中出现的问题并说明解决的方式>
学号 <20208958>

1.PTA实验作业(15分/题)

1.1 求分数序列前N项和

题目要求:本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+... 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。

1.1.1实验代码截图

1.1.2数据处理

数据表达:使用了整型变量N,i,浮点型变量sum,x,a,b,输出N表示需计算循环的次数,给a,b赋值进入循环,计算sum
数据处理: 未使用表达式,结构为一个for循环嵌套

1.1.3 PTA提交列表及说明

  • Q1:遇到较大N错误
  • A1:用int定义N太大存不下,改用double
  • Q2:提交后发现少打了;导致编译错误
  • A2:在Dev-C++上发现后改正

1.2 比较大小

题目要求:本题要求将输入的任意3个整数从小到大输出。输入在一行中给出3个整数,其间以空格分隔。在一行中将3个整数从小到大输出,其间以“->”相连。

1.2.1 实验代码截图

1.2.2 数据处理

数据表达:使用了整型变量a,b,c,d,通过d储存数值转换到a,b,c中
数据处理:未使用表达式,使用了三次if语句,通过比较a,b,c大小进行输出

1.2.3 PTA提交列表及说明

  • Q1:在使用if-else时提交后为部分正确
  • A1:去掉了else后达到答案正确
  • Q2:三个变量时无法输出正确答案
  • A2:添加第四个变量进行转化

1.3.1 实验代码截图

1.3.2 数据处理

数据表达:使用了整型变量sum,i,n,通过对i的循环计算sum
数据处理:无表达式,使用了一个for循环

1.3.3 PTA提交列表及说明

  • Q1:在输出时输出值与理想值不一致,输出的定义不明确
  • A1:加入一个%d将定义明确

2.阅读代码(-5——5分)

#include<algorithm>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<queue>
#define ll long long;
#define max(a,b) a>b?a:b
#define min(a,b) a<b?a:b
#define inf 0x3f3f3f3f
#define ins 0xc0
using namespace std;
int M, N, sx, sy, ex, ey;
char a[305][305];
int t[305][305];
int d[4][2] = { 1, 0, 0, 1, 0, -1, -1, 0 };
struct pnt{
    int x, y;
};
int bfs()
{
    pnt p, np;
    p.x = sx;
    p.y = sy;
    memset(t, 0x3f, sizeof t);
    t[sx][sy] = 0;
    queue< pnt > que;
    que.push(p);
    while (!que.empty()){
        p = que.front(); que.pop();
        for (int i = 0; i < 4; i++){
            np.x = p.x + d[i][0];
            np.y = p.y + d[i][1];
            if (np.x >= 0 && np.x < M&&np.y >= 0 && np.y < N&&a[np.x][np.y] != 'R'&&a[np.x][np.y] != 'S'){
                if (a[np.x][np.y] == 'E'||a[np.x][np.y]=='T'){
                    if (t[p.x][p.y] + 1 < t[np.x][np.y]){
                        t[np.x][np.y] = t[p.x][p.y] + 1;
                        que.push(np);
                    }
                }
                else if (a[np.x][np.y] == 'B'){
                    if (t[p.x][p.y] + 2 < t[np.x][np.y]){
                        t[np.x][np.y] = t[p.x][p.y] + 2;
                        que.push(np);
                    }
                }
            }
        }
    }
    return (t[ex][ey] == inf ? -1 : t[ex][ey]);
}
int main()
{
    while (scanf("%d%d", &M, &N) != EOF && (M || N)){
            for (int i = 0; i < M; i++) scanf("%s", &a[i]);
            for (int i = 0; i < M; i++){
                for (int j = 0; j < N; j++){
                    if (a[i][j] == 'Y'){
                        sx = i;
                        sy = j;
                    }
                    else if (a[i][j] == 'T'){
                        ex = i;
                        ey = j;
                    }
 
                }
            }
 
            int tt = bfs();
            printf("%d\n", tt);      
        }
        return 0;
}

我所读的代码是一个英文名叫作battle city,中文名叫90坦克大战的游戏代码,在Dev-c++上进行编译运行并输出,输出结果与所提供的答案一致,头文件过多让我有些看不懂,但加强了我对for语句和if-else语句的理解与熟练程度,

3.学习总结(15分)

3.1学习进度条(5分)

周/日期 这周所花时间 代码行 学到的知识点简介 目前比较困惑的问题
第八周 33小时 182 基础常用代码知识,整型变量,浮点型变量,运算符的相关知识,markdown语法的运用 运算符的优先级的问题
第九周 39小时 251 scanf调用函数,if-else语句,for循环结构 if-else语句中else的使用问题
第十周 30小时 193 数学常用函数与数学函数的调用头文件的运用 流程框图的编写问题

3.2 累积代码行和博客字数(5分)

3.3 学习感悟(5分)

在这周的学习中,我已经能够较为熟练的编写代码,还记得在刚开始写代码时,连打开软件后能干吗都不知道,到现在熟练打开熟练码代码。重视每一次编译时出现的错误,特别是频繁出现的更要注意。出现错误也不要着急,多交流。也许别人会看到你发现不了的漏洞,交流会让人共同进步。最主要的是多去练习,失败是成功之母,一次又一次的尝试代表的是对自己知识一次又一次的检验,错误能够让你牢记。在刚接触c语言时,是直接观看他人的代码才写出,现在能够自己去尝试编写一些简单的代码。

posted @ 2020-11-08 02:42  胡坚  阅读(161)  评论(1编辑  收藏  举报