C博客第02次作业---循环结构

1. 本章学习总结

1.1 思维导图

1.2 本章学习体会及代码量

1.2.1 学习体会

  • 通过了本章的学习,我学到了C语言中的循环结构,并且通过作业,如PTA,课堂派,能够巩固对循环结构的认识,并且能够较好的运用到题目中。
  • 本章学习学到了while语句,do-while语句,以及break语句和continue语句,而且通过做作业后能够较好的使用这些语句,感到非常开心。
  • 学习C语言并没有想象中的那么恐怖,做什么事都是要慢慢来,没有一时就可以都学会的。每当做出一道题,都会有很大的成就感,这样也就更有动力去学习,也更有动力去深入了解C语言编程
  • 通过本章的学习还学到了伪代码的编写方法,每当做题前最好是先写一遍伪代码整理思路,写完伪代码之后再编程效果会更好。

1.2.2 代码累计

2. PTA总分

2.1 PTA中循环结构2次题目集的排名得分


2.2 我的总分:

  • 循环结构(单层):175分
  • 循环的嵌套:115分
  • 总分:290分

3. 实验作业

3.1 PTA题目1

  • 输入一组二进制字符,输出其对应的十进制数。当输入回车键时,输入结束。若输入非二进制字符,输出error input!

3.1.1 算法分析

  • int sum=0存放十进制数 x=0判断是否输入非法字符
  • char op=‘0’进入循环
  • while(op!='\n')
    scanf ("%c",&op)
    if(op=='\n') break;
    if(op!='0'&&op!='1') x=1 break
    else sum=2*sum+op-'0'
  • end while
  • if(x==1) printf ("error input!")
    else printf ("%d",sum)

3.1.2 代码截图

3.1.3 测试数据


3.1.4 PTA提交列表及说明

  • Q1:一开始没有定义x来判断是否有输入非法字符,跳出的输入非法字符的阶段时会有sum的输出。
  • A1:后来运用老师教的可以用flag来解决此问题,用上之后就解决了问题。
  • Q2:一开始不知道如何解决输入字符如何变成数字。
  • A2:后来运用老师教的op-‘0’可以字符转化成数字解决了问题。

3.2 PTA题目2

  • 在商业和科学研究中,人们经常需要对数据进行分析并将结果以直方图的形式显示出来,这会大大增加这些数据的直观性,也便于数据的分析与对比。下面以顾客对餐饮服务打分为例,输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
    输入一个正整数n(1≤n≤20),表示有n个学生被邀请来给自助餐厅的食品和服务质量打分,分数划分为1~5这5个等级(1表示最低分,5表示最高分),试统计调查结果,并用*打印出如下形式的统计结果直方图。

3.2.1 算法分析

  • int repeat,n,grade定义次数,人数,分值
  • int x1=0,x2=0,x3=0,x4=0,x5=0,x定义储存各个分值的人数
  • char op='*'
  • for(i=1;i<=repeat;i++)
    输入人数n
    for(j=1;j<=n;j++)输入成绩grade
    switch(grade)
    如果输入1 x1++break
    如果输入2 x2++break
    如果输入3 x3++break
    如果输入4 x4++break
    如果输入5 x5++break
    end for
    输出1:令x=0直到x=x1 输出*
    输出2:令x=0直到x=x2 输出*
    输出3:令x=0直到x=x3 输出*
    输出4:令x=0直到x=x4 输出*
    输出5:令x=0直到x=x5 输出*
    x1=x2=x3=x4=x5=0从新定义为下一次的表格做准备
    end for

3.2.2 代码截图


3.2.3 测试数据

3.2.4 PTA提交列表及说明

  • Q1:一开始从x=0开始直到x=x1,结果出现每个表格的每个分值都会有至少一颗星。
  • A1:后来改成x=1开始直到x=x1,结果才正确。
  • Q2:一开始结束的时候没有定义x1=x2=x3=x4=x5=0,结果第二章表格会被第一张表格的数值影响从而出错。
  • A2:后来在结尾定义了x1=x2=x3=x4=x5=0才正确。

3.3 PTA题目3

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

3.3.1 算法分析

  • int x=0定义单词的字母个数,count=0定义有几个单词
  • 输入字符op=‘0’进入循环
  • while(op!='.') scanf ("%c",&op)
    if(op'.') 当输入.时当x!=0且count0是第一个单词时输出x
    如果count!=0不是第一个单词则输出空格加x
    如果一开始输入.时break;
    if(op!=' ') x++
    if(op' ')且x!=0时count++ if(count1) 输出x,x从新归零
    if(count!=1)输出空格加x,x从新归零

3.3.2 代码截图


3.3.3 测试数据

3.3.4 PTA提交列表及说


  • Q1:这段代码写了很长时间,总是有一两个测试点过不去。
  • A1:加上一个count后,解决了只有一个单词时的问题。
  • Q2:还有一个问题就是输出结果后面不可以有空格。一开始是输出一个结果之后加上一个空格,结果老是出错。
  • A2:后面运用了多个嵌套语句终于解决了。

4.代码互评

4.1 代码截图

  • 同学的代码

  • 我的代码

4.2 不同之处

  • 同学是使用flag控制输出,而我是使用count来控制输出。flag表示是否为第一个单词,而我的count是计算单词的个数,当count==1的时候也就是输出一个单词的时候,单词长度x不用加空格。否则需要加空格来控制最后一个单词输出后面不会加空格。
  • 同学的代码与我的都是差不多的思路,都是分为三个情况,一个是输入.时的情况,一个是输入空格时的情况,一个是不输入空格的情况。但是同学的代码看起来思路比较清楚。
  • 同学的代码看起来是有经过写思路之后才开始写的代码,而我的是直接开始写了,缺少了什么再补什么,这样的代码看起来比较不容易理解,以后会学学同学的方法,先列思路,写伪代码,再去做题。

posted on 2018-10-28 09:59  拜伦。  阅读(887)  评论(0编辑  收藏  举报

导航