第二次作业---循环语句

C语言--第02次作业

1.本章学习总结

1.1思维导图

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

1.2.1 学习体会

    本章为循环语句的学习,给我的直观感觉就是难,不是知识点难,而是算法上的确是因为没有积累导致常常无从下手或只能解决一半。总而言之就是见过的题太少,又后者说是还在积累的路上。也正是因为这样,看别人的代码,理解他们的思路,明白题目的要求成了小白所需要具备的基础要求。从他人的代码中学习,取其精华,去其糟粕是在学习道路上必须要具备的基本素养。自然,学习借鉴与照搬照抄有很大的不同。因为很多题目都有让我学到新知识,所以,代码备注有的时候被我搞得不太像提示要做什么的备注,更像是一块知识笔记,我希望可以将其用作我复习又或者是提醒自己的手段。
    本章学习之前的那场考试,让我觉得我有必要去多做一些题,只有多打代码,才能熟练。但是,本章,我并没有做到,我也就只是艰难的完成了老师布置的任务。现实的确有些令人挫败,我想,这还是面对困难时,我的惰性占了上风,使得效率极低。希望我的下次博客,能看到战胜自己惰性的自己吧。

1.2.2 代码累计

2.PTA总分

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


2.2 我的总分:

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

3.PTA实验作业

3.1 PTA题目1

7-8 单词长度

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

3.1.1 算法分析

- 定义i,num,x,flag
- 输入num
- flag=num
- if(num<0)     num=-1*num;  flag=num;  printf("fu ");     //先解决负数
- while(flag>9)    flag=flag/10;    x=x*10;                         //通过循环首先数字是几位数
- while(x>=1) 	i=num/x;
    -  switch(i)
        {
           case 0:
           printf("ling");
           break;
           case 1:
           printf("yi");
           break;
           case 2:
           printf("er");
           break;
           case 3:
           printf("san");
           break;
           case 4:
           printf("si");
           break;
           case 5:
           printf("wu");
           break;
           case 6:
           printf("liu");
           break;
           case 7:
           printf("qi");
           break;
           case 8:
           printf("ba");
           break;
           case 9:
           printf("jiu");
           break;
  
       }
-  if(x>9)    printf(" ");       num=num%x;        x=x/10;             //依次算出后面的位数

3.1.2 代码截图


3.1.3 测试数据

3.1.4 PTA提交列表及说明

  • 提交列表中多次出现多种错误,在dev运行后看到,空格或多位数数字出现问题
  • 经过多种尝试,然后就部分正确,其中借鉴了同学的一些想法,逻辑,再通过自己编写
  • 所以,最后的提交两次是在自己写完以后,又整理了一遍思路,将自己没怎么想到,或有些差错的地方通过备注的方式再整理了一遍

3.2 PTA题目2

7-3 编程打印空心字符菱形

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

3.2.1 算法分析

  • 定义i,j,mid,n,ch
  • mid=(n+1)/2;
  • for i =1 to n do
    • for(j=1;j<=fabs(mid-i);j++)
    • if(i<=mid) num=i;
    • else num=n+1-i;
  • for(j=1;j<=2*num-1;j++)
    • if(j1||j2*num-1) printf("%c",ch+num-1);
    • else printf(" ");

3.2.2 代码

3.2.3 测试数据

  • 首先,这道题是在老师课上讲过后,在课堂上直接写的。
  • 从提交列表上直观感觉先写个伪代码,调整整体思路,将每个步骤罗列好对写题百利无害。

3.2.4 PTA提交列表及说明


3.3 PTA题目3

7-10 jmu-c-二进制转10进制

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

3.3.1 算法分析

- 定义num,ch,n
- n=3,num=0
- while(ch=getchar())  do
- if(ch=='1'||ch=='0')   num=num*2+(ch-'0')
- else  printf("error input!")    n=4
  • if(n=3) printf("%d",num);

3.3.2 代码

3.3.3 测试数据

3.3.4 PTA提交列表及说明

  • 起先,代码为部分正确,通过dev测试了一下数据,发现有些情况会同时输出数量和input error!
  • 通过直接看代码,发现了在运行的时候有些情况在遇到break,跳出循环后,会进入循环外的输出,再输出数字
  • 后增加if,来判断是否需要进入循环外语句

4.代码互评

4.1 代码截图

自己的


代码截图来源于不愿意透露姓名的范同学

4.2 二者的不同

- 直观感受就是同学的代码比我的简单,比我的短
- 同学的备注非常直观,给看的人一种清晰的感觉
- 直接通过flag,sign,记录是否为单词,是否存在单词,给后面加不加空格这类的格式问题一种清晰的逻辑顺序

posted on 2018-10-28 20:18  白居过隙巍澜可期  阅读(349)  评论(4编辑  收藏  举报

导航