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

1.本章学习总结

1.1 思维导图

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

1.2.1 学习体会

    这两周学习了循环结构,现如今已经学了三种循环语句,for语句,while语句,do while语句;for语句适用于已知循环次数;
    while语句适用于未知循环次数,先判断再循环,然而for可以表达的while语句也可以;do while也使用于未知循环次数,先循环再判断。
    上周还了解了伪代码,运用代码中夹杂着一些文字来解释,可以让不懂代码的人读懂代码。
    还学习到break和continue,break在循环中的作用是直接结束循环,而continue是跳过语句继续循环。

1.2.2 代码累计

2.PTA总分

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


2.2 我的总分:

总分:290分

3.PTA实验作业

3.1 PTA题目1

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

3.1.1 算法分析

    定义  时间:time   兔子:rabbit   乌龟:tortoise   标志flag=0,i,j=0,k=0;
    	输入时间
    for i=1 to time do
      if flag==1 then //设置兔子睡觉30分钟,乌龟继续行走
         k++;tortoise+=3;
         if k==30 then//时间累加到30结束
            flag=0
         end if
       end if  
       else  do
         j++;rabbit+=9;tortoise+=3;
         if j==10 then//设置判断时间
            if rabbit>tortoise then
    	   flag=1;k=0;//令k归零,避免使if语句成立时出错
            end if
            j=0;
          end if
    if tortoise==rabbit  then  printf("-_- %d\n",rabbit); end if
    else if tortoise>rabbit then printf("@_@ %d\n",tortoise); end if
    else then printf("^_^ %d\n",rabbit);end else//进行三种比较

3.1.2 代码截图

3.1.3 测试数据

3.1.4 PTA提交列表及说明

    Q1:一开始没有考虑兔子睡觉中获胜和兔子不足10分钟获胜
    A1:后来设置了一个判断来存放兔子睡觉时乌龟走多少,这样既能运用循环来叠加时间,而且不用在循环中自己加30分钟

3.2 PTA题目2

    将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?

3.2.1 算法分析

    定义 零钱数:money,5分的个数:fen5=1,
    2分的个数:fen2=1,1分的个数:fen1=1,
    1分最大个数:max1,2分最大个数max2,总个数:total,种数:count=0;
     输入零钱数
      max1=money/5;//计算在这个money的情况下至多可以有多少个5
      for fen5=money to 1 do
        max2=(money-5*fen5)/2;//在money减去fen5个5后,至多可以有多少个2
        fen2=max2;
        while fen2 to 1
          fen1=money-5*fen5-2*fen2;//得到fen1的个数
          if fen1 >= 1 then
            total=fen5+fen2+fen1;
            printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n",fen5,fen2,fen1,total);
            count++;//计算有多少种情况
          end if
          fen2--;
        end while
       end for
       printf("count = %d",count);

3.2.2 代码

3.2.3 测试数据

3.2.4 PTA提交列表及说明

    Q1:出现格式错误
    A1:检查发现输出的格式与题目不懂
    A2:选这题原因是作为两个循环和三个循环的区别,能用两个,就不用三个

3.3 PTA题目3

    在商业和科学研究中,人们经常需要对数据进行分析并将结果以直方图的形式显示出来,这会大大增加这些数据的直观性,也便于数据的分析与对比。
    下面以顾客对餐饮服务打分为例,输入一个正整数repeat (0<repeat<10),做repeat次下列运算:

    输入一个正整数n(1≤n≤20),表示有n个学生被邀请来给自助餐厅的食品和服务质量打分,分数划分为1~5这5个等级(1表示最低分,5表示最高分),
    试统计调查结果,并用*打印出如下形式的统计结果直方图。

3.3.1 算法分析

    定义 次数:repeat=0,个数:num=0,循环控制变量:i=1,j=1;
    定义 grade,g1=0,g2=0,g3=0,g4=0,g5=0,g;
    	输入repeat的值
    	while(i<=repeat) do
    	//设置大循环来规定有几个直方图
    		输入num
    		for j=1 to num do
    		//用内循环来计算每个数的次数
      			输入grade
      			if grade==1 then g1++; end if
      			else if(grade==2)	g2++;
      			else if(grade==3) g3++;
      			else if(grade==4) g4++;
      			else if(grade==5) g5++;	
           printf("1:");
      	 for g=1to g1 do
      	 printf("*");
      	 printf("\n");
          接着与上面相同

3.2.2 代码


3.3.3 测试数据


3.3.4 PTA提交列表及说明

    Q1:一开始不知到num要输入多次
    A1:问了同学后,就把输入num放在循环内
    Q2:助教的要求简化代码
    A2:通过简化输出来简化了代码

4.代码互评

4.1 代码截图

    同学:

    自己:


    1,二者均为该题的解法,该同学的解法更为简便。
    2,虽然解法都是找规律,我的解法是以中间行为标志来解题,而该同学则是以上半部分对称到下半部分的想法解题。
posted @ 2018-10-27 18:46  白白以桃花入笺  阅读(444)  评论(0编辑  收藏  举报