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

| 这个作业属于哪个班级 | C语言--网络2011/2012 |
| :----: | :----: | :----: |
| 这个作业的地址 | C博客作业02--循环结构 |
| 这个作业的目标 | 学习循环结构内容,包括for循环、while循环、循环嵌套. |
| 姓名 | 陈宇杭 |

0.展示PTA总分

1.本章学习总结

1.1 for循环语法

C语法

for(表达式1;表达式2;表达式3)                //表达式1:在for循环开始时执行,多用于初始化某一(计数)变量;
{                                        //表达式2:循环判断条件,若为0跳出循环,非0则继续循环;
           循环体语句;                     //表达式3:执行完循环体后执行表达式3,随后开始新一轮循环;
}                                        //        表达式3多用于调整计数变量来控制循环次数;

总结:for循环语句多用于循环次数已知或可判断的情况,经常与数组进行配合使用;

1.2 while、do while循环语法

  • while语句语法
while(表达式)               //表达式为**循环判断条件**,若为0跳出循环,非0则继续循环;
{                           //亦可以以英文形式来进行记忆,即**当(while)表达式满足时,进入并执行循环体**;
      循环体语句;
}
  • do while语句语法
do                          //在do while语法下,C语言会**先进入循环体执行一轮循环,再进行条件判断**;
{
      循环体语句;
}while(表达式);             //表达式作用同上; !注意不要忘记结尾分号!

**总结**:`while`与`do while`语句适合在**不清楚具体循环次数**时使用;同时两者使用时也有轻微区别,总之具体问题具体分析;

1.3 跳出循环相关语句break\continue

  • break语句语法
do
{
      语句1;            //进入循环并执行语句1;
      break;            //遇break语句,提前结束循环并跳出循环体;
      语句2;            //语句2和语句3因循环提前结束而未执行;
      语句3;
}while(表达式);         //再次提醒不要忘记分号;
  • continue语句语法
do
{
      语句1;            //进入循环并执行语句1;
      break;            //遇continue语句,跳过接下来所有循环体语句,进入`while`条件判断;
      语句2;            //语句2和语句3因本轮循环跳过而未执行;
      语句3;
}while(表达式);

总结:

  • break:适用于循环有多个出口时,在一个出口提前跳出循环;同时break也可用于switch语句中跳出case分支;
  • continue:适用于在循环中有多个条件判断,满足某个条件后,使用continue进行下一轮循环;

1.4 循环嵌套

循环嵌套基本应用语法

/*按顺序输出个位数乘积数值矩阵*/
int i, j;
for(i = 1; i < 10; i++)                //外层循环;
{
      for(j = 1; j < 10; j++)          //内层循环;
      {
            printf("\t%d",i * j);      //每轮外层循环,都会执行一轮内层循环;
      }
      printf("\n");                    //不仅仅`for`语句,`while`与`do while`语句同样也能进行循环嵌套;在使用上具体问题具体分析;
}

总结:循环嵌套需要注意循环逻辑,尽量在编写代码前用伪代码来进行逻辑梳理,以及内层循环结束后是否有变量需要初始化;(嵌套循环非常适合进行printf调试)

学习体会

  • 循环语句常用于实际中有许多具有规律性的重复操作的问题,程序中就需要重复执行某些语句;循环结构的编写需要厘清逻辑,尽量在编写代码前用伪代码来进行逻辑梳理;

2.编程技巧总结

  1. 各种数列求和问题
  • 对于储存求和值的Sum变量,需要初始化为0
  • 对与数列的每一项,若是可变量,可以通过函数来计算每一项的值,方便进行条件判断;
  • 活用数列项数取余控制数列每一项为正为负;
  1. 数字型字符如何转数字及字母型字符大小写变换
  • 数字型字符在ASCII码中是顺序排列的,通过这点可以巧妙转换;
    ch = '1'; number = ch - '0'; 可得number == 1;
  • 字母型字符同理;
    ch = 'z'; ch = ch + 'A' - 'a'; 可得ch == 'Z';
  1. 关于清除缓冲区的非法字符
  • 在平时连续读入字符时,容易产生误读,将回车(换行\n)作为字符读入,这时可以通过使用getchar()来吞掉回车,使后续字符能被正常读入;
  • 大作业中我们接触到fflush(stdin)语句,它能清空输入缓冲区,通常是为了确保不影响后面的数据读取,例如在读完一个字符串后紧接着又要读取一个字符,此时应该先执行fflush(stdin);
  1. 图形打印
  • 关于图形打印,特别是较为复杂的规律图形,需要对循环嵌套有足够的理解与运用;
  • 可以把控制每一行的空格数量,字符输出数量,以及对称图形的"对称轴"行数单独定义,能更加直观的提升可读性;
  • 如果图形由多个规律图形拼接而成,可以通过函数来封装代码,便于调试;

3.PTA实验作业

3.1 数列求和问题

3.1.1 伪代码介绍思路

3.1.2 代码截图

3.1.3 PTA提交列表及说明

  • 挑选了一题简单题来进行说明,关于所遇到的问题都归纳在上方编程技巧总结中;

3.2 图形打印问题

3.2.1 数据处理

3.2.2 代码截图

3.2.3 PTA提交列表及说明

  • 在最大N中,空格数据处理错误,输出并非菱形;
  • 重新分析后进行修正,可以通过数据列表(printf)进行更加直观的寻找错误;

3.3 求幂级数展开的部分和

3.3.1 单步调试截图


3.3.2 代码截图

3.3.3 PTA提交列表及说明

  • 对于连续变化的数据,不容易推敲出错误的点,需要借助printf()函数输出值来辅助分析;
  • 注意数据类型,不同数据类型所储存数值上限不同;
posted @ 2020-11-22 22:58  DuckSword  阅读(157)  评论(0编辑  收藏  举报