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

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

0.展示PTA总分

单循环

嵌套循环

(7.3和7.8只能做到部分正确,实在是调试不出来

1.本章学习总结

1.1 for循环语法

一般格式

for(表达式)
{
      循环语句;
}

适用条件:循环次数明朗的简单循环。

1.2 while、do while循环语法

一般格式

while(表达式)
{
      循环语句;
}

基本意义:当表达式为真,则执行下面的语句;语句执行完之后再判断表达式是否为真,如果为真,再次执行下面的语句;然后再判断表达式是否为真……一直循环下去,直到表达式为假,跳出循环。

do
{
      循环语句;
}while(表达式);//注意不要忘记此处的“;”号

基本意义:先执行一次循环体,然后再判别表达式。当表达式为真时,返回重新执行循环体,如此反复,直到表达式为假为止,此时循环结束。

适用条件:两者相似,用于循环次数不明确,需要通过其他条件控制循环。

注意:while 循环体内部不一定会执行,当表达式一开始就为假的时候它就不会执行。但 do…while 不管表达式开始为真还是为假,循环体内部都会先执行一次。

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

  • break:当 break 关键字用于 while、for 循环时,会终止循环而执行整个循环语句后面的代码。break 关键字通常和 if 语句一起使用,即满足条件时便跳出循环。
    :使用 while 循环计算1加到100的值:
#include <stdio.h>
int main()
{
    int i = 1, sum = 0;
    while (1)//循环条件为死循环
    {  
        sum += i;
        i++;
        if (i > 100) break;//用break跳出死循环
    }
    printf("%d\n", sum);
    return 0;
}
  • continue:跳过循环体中剩余的语句而强制进入下一次循环。continue语句只用在 while、for 循环中,常与 if 条件语句一起使用,判断条件是否成立。
    :输入一串数字,不输出其中的4和5。
#include <stdio.h>
int main() 
{
    char c = 0;
    while (c != '\n') //回车键结束循环
    {  
        c = getchar();
        if (c == '4' || c == '5') //输入的是数字键4或5
        {  
            continue;  //跳过当次循环,进入下次循环
        }
        putchar(c);
    }
    return 0;
}

1.4 循环嵌套

含义:顾名思义,在循环语句中在加入循环语句,即使用两种及以上循环结构,故如如for循环中再使用for循环。
:求出 1!+2!+3!+…+n!的和。

# include <stdio.h>
int main(void)
{
    int n = 0;  //存储1!+2!+3!+…+n!中n的值
    int i = 0, j = 0;  //循环变量
    int m = 1;  //用于计算每个数的阶乘
    unsigned long sum = 0;  /*阶乘的值往往很大, 定义成long型。虽然如此, 下面输入的n的值也不能太大, 不然long也放不下*/
    printf("请输入n的值:");
    scanf("%d", &n);
    for (i = 1; i <= n; ++i)
    {
        for (j = 1; j <= i; ++j)  //求一个数的阶乘
        {
            m = m * j;
        }
        sum = sum + m;  //求完之后就立即把它加到sum中
        m = 1;
    }
    printf("sum = %ld\n", sum);
    return 0;
}

学习体会

  1. 循环结构相比之前的顺序和分支结构难度上升不少,需要的逻辑思维能力更强,再加上循环嵌套使难度再上升一个档次。
  2. PTA的题目存在很多问题,也有时会遇到没思路的情况,会借鉴同学的代码进行阅读。
  3. 要学会灵活利用三种循环结构来使问题更简单的解决。
  4. 积极阅读别的同学的更简介明了的代码进行学习。

2.编程技巧总结

3.PTA实验作业

3.1 数列求和问题

题目

3.1.1 流程图或伪代码介绍思路

思路:题目中比较明显的表面了循环次数n,所以使用for循环,第二位数正好是第一位数的十倍后加上第一位数,所以用此作为循环语句。

3.1.2 代码截图

3.1.3 PTA提交列表及说明

  • 第一次多种错误是因为理解错了题意,以为第二位数是a的平方,第三位数是a的立方
  • 第二次部分错误是同第一次时的错误,只因为修改碰巧过了一个测试点

3.2 图形打印问题

题目

3.2.1 数据处理

n:为输入数字
ch:为输入字母
m:判断外循环次数 //因为输入数字为奇数,所以 m=(n+1)/2,即可得到外循环次数
i:用于外for循环中,定义i=0;
j:用于输出菱形上半部分内for循环中,定义j=0;
k:用于输出菱形下半部分的内for循环中,定义k=1;

3.2.2 代码截图


3.2.3 PTA提交列表及说明

  1. 之前几次编译错误中 应该为ch=ch-2,忽略了最后一次循环中ch的变化
  2. 输出值时第二次应该输出ch++,不然无法把ch的正确值输出
  3. 之后部分错误中发现输出格式错误因为菱形下半部分还想着用m来控制循环而导致输出错误,后面新定义了一个k值,然后用k值可以更方便的表示循环次数,利用新定义来简化编程过程(其实用m来控制也可以,但是会比较复杂且逻辑过多,用新定义可以减少思考)

3.3 自选一题,介绍printf调试如何检查错误

题目

3.3.1 单步调试截图

  • 设置断点
  • 设置printf调试
  • 进行单步调试

3.3.2 代码截图


3.3.3 PTA提交列表及说明

  1. 最开始那次部分错误是因为在每个循环中都设置了输出,导致如下结果
  2. 之后的几次部分错误真的搞不懂
    在第一个测试点中
    题目展示输出样式
    我的代码输出样式
    我反复检查了空格和格式,是一模一样的但是测试过不去,实在不知道原因。
posted @ 2020-11-21 16:52  山无垢山城  阅读(226)  评论(0编辑  收藏  举报