C语言博客作业02--循环结构

1.本章学习总结

1.1 思维导图

1474626-20181028221326584-232777782.png

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

1.2.1 学习体会

1.在本周的学习中我们首选学习了循环结构,对for循环语句以及while循环语句有了一定的初步了解,懂得使用单层循环解决一些简单的问题
2.在而后的学习中,在单层循环的基础上又学会了如何使用多层循环去运用一些算法解决更高难度的一些问题,例如非常经典的枚举法解决换硬币问题
3.在此次的学习中也体会到了要运用数学方法去进行程序编写,例如二进制转化的问题可以利用求和不断乘2获得答案,而不需用到数组。 

1.2.2 代码累计

1474626-20181028194454357-1287540499.png

2.PTA总分

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

1474626-20181028194739318-48515254.png

1474626-20181028194745676-1342865706.png

2.2 我的总分:

我的总分290

3.PTA实验作业

3.1 PTA题目1

乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?

3.1.1 算法分析

 整型定义兔子距离 sRabbit
 整型定义乌龟距离 sTor
 整型定义时间 time = 0
 整型定义终止时间  T
 整型定义状态判断 flag = 0 
 整型定义睡醒时间 record = -1,
 整型定义速度speed = 9;
    输入T
    for  sRabbit = 0  sTor = 0  to  time <= T  判断 flag == 1 ? 结果为真 speed = 0 否则 speed = 9 do s2 += 3  time++, sRabbit += speed
    {
        if time % 10 == 0 && sRabbit > sTor && flag == 0 then do //判断兔子跑的比乌龟快的情况
        {
            record = time + 30                    //记录睡醒的时间
            flag = 1                                     //状态记录
        }end if
        if time == record  then do  flag = 0   //睡醒的状态
        end if
    }end for
    sTor=sTor-3                                     //误差校正
    if  flag == 0 then do sRabbit -= 9;   //误差校正
//结果判断
    if sRabbit > sTor then  do  输出^_^ sRabbit
    else if sTor > sRabbit  then  输出@_@ sTor
    else 输出-_- sTor

3.1.2 代码截图

1474626-20181028201659397-1595753114.png

3.1.3 测试数据

测试点输入输出
1242@_@ 726
230-_- 90
310^_^ 90

3.1.4 PTA提交列表及说明

1474626-20181028202355062-1838953715.png

Q:为什么平局的时候无法判断?

A:误将%d打成&d。。。。。

3.2 PTA题目2

本题目要求读入菱形起始字母和菱形的高度,然后输出空心字符菱形。所谓“空心菱形”是指:每行由两端为字母、中间为空格的字符串构成,每行的字符串中心对齐;上半部分相邻两行字符串长度差2,且字母从给定的起始字母逐一递增;下半部分与上半部分对称。

3.2.1 算法分析

整型定义 i,j,n
字符定义 ch;
    输入ch,n
    if (n == 1) then             //当n=1的特殊情况判断
    {
        输出 ch
        结束程序
    }
//先输出第一行
    for i = 0 to i  n / 2 - 1 do  输出空格   end for
    输出 ch
//输出至中间前一行
    for i = 1 to n / 2 - 1  do
    {
        for  j = n / 2 - i  to  1  输出空格  end for
        输出ch+i     
        for  j = 0  to  2 * i - 2  输出空格  end for
        输出ch+i  回车  
    }end for
//输出中间的一行
    输出 ch + i
    for j = 0 to  n - 3  输出空格 end for
    输出ch+i  输出回车
    i--
//输出至最后一行前一行
    for i to  1  do
    {
        for  j = n / 2 - i  to = 1  输出空格 end for
        输出ch+i
        for  j = 0 to   2 * i - 2    输出空格 end for
        输出ch+i  输出回车
    }end for
//输出最后一行
    for i = 0 to < n / 2 - 1 输出空格  end for
    输出 ch

3.2.2 代码

1474626-20181028203143461-1477635395.png

3.2.3 测试数据

1474626-20181028213548322-480866250.png

1474626-20181028213556635-298920635.png

1474626-20181028213601544-2098158594.png

3.2.4 PTA提交列表及说明

1474626-20181028203327989-1583521532.png

Q:当n=1时,无法对该特殊情况进行判断。

A:在输入数据后,进行一次判断,若n=1,则输出字符,并立即结束程序

3.3 PTA题目3

你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it's算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。

3.3.1 算法分析

字符型变量ch存储字母
整型变量count存储字母个数
while  ch != '.' 时 do 
        //吃掉空格 
        do 
                输入 ch
         while  ch == ' ' 时
        end while
        if (ch == '.')  then  跳出循环
        end if
        //正式扫入单词 
        while  ch != ' '&&ch != '.'  时  do
                输入ch
                count++
                end while
        if  flag == 1  then  输出空格
        else flag = 1;
        end if
        初始化count为0   //重新开始输出单词
        输出count

3.3.2 代码

1474626-20181028203822741-806243794.png

3.3.3 测试数据

测试点输入输出
1It's great to see you here.4 5 2 3 3 4
2asd asd .3 3
3.

3.2.4 PTA提交列表及说明

1474626-20181028203957775-1557220779.png

Q1:当单词间的空格不止一个时会将空格误判为单词

A1:在接受到单词之前,设置一个用于‘吃掉’空格的语句,知道下一个字符为英语字母。

Q2:吃空格的程序在最后判断输入的字母时也会将字母算作空格。

A2:后面的输入单词的循环拥有一样的机制,会将空格或句号当作英文字母,可与前面的误差互相抵消

4.代码互评

4.1 代码截图

范华同学的代码

1474626-20181028211942459-2135315513.png

我的代码

1474626-20181028211955133-1304643045.png

4.2 二者的不同

在范华同学的代码中,他很巧妙地运用了数学来解决这个问题,这种解法使得代码结构清晰,计算简单,反观我的代码,使用的是二进制转十进制的公式,这样的思路需要用到字符一个个输入,在思考的难易程度上大过了范华同学的代码,不得不说,还是要学好其他科目,平衡发展才能做一名优秀的程序员啊

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值