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


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

    0.展示PTA总分


    1.本章学习总结

    1.1 for循环语法

    • 从功能上,for循环和while循环是完全等效的!

    • 使用场合
      在循环次数已经确定的情况下,使用for循环更方便!

    格式1:

    for (表达式1; 表达式2;表达式3)
    {
    循环体
    }
    
    
    • 说明:
      表达式1: 为循环做准备
      表达式2: 循环条件
      表达式3: 改变循环计数

    • 表达式1、表达式2、表达式3, 这3个表达式的任意一个或多个,都可以省略!

    • 但是其中的“;”不可以省略!
      举例:求交错序列前N项和
      计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和。

    #include<stdio.h>
    #include<math.h>
    int main()
    {
        double sum;
        double a=0;
        double A;
        double B;
        int N;
        int i;
        scanf("%d",&N);
            int b=1;
        for(i=1;i<N;i++)
        {
        A=i+1;
        B=2*i+1;
            b = - b;
            a += b*A/B;
            
        }
        sum=a+1;
        printf("%.3f",sum);
        return 0;
    }
    

    1.2 while、do while循环语法

    格式1----while语句(当型循环)

    while(表达式)
    {
         循环语句;
    }
    后继语句;
    
    • 使用场合:
      当需要反复执行某些“过程”时,就可以使用while循环。

    格式2----do~while语句(直到型循环)

    do
         循环体语句;
    while(表达式);
    
    • 使用场合:
      先执行一次循环体,然后再判断条件,以判定是否继续下一轮循环!
      即:至少执行一次循环体!
      举例:给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。
    #include<stdio.h>
    #include<math.h>
    int main()
    {
        int a;
        int n;
        int sum=0;
        int last=0;
        scanf("%d %d",&a,&n);
        for(int i=1;i<=n;i++)
        {
            sum+=pow(10,(i-1))*a;//a+10a+100a+1000a
            last+=sum;//a+aa+aaa
        }
        printf("s = %d",last);
        return 0;
    }
    

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

    • 跳出循环
      在循环中使用break语句可跳出循环。
      举例:
    for(i=1;i<=10;i++)
    {
        printf("%d",i);
        if(i==5)
            break;            //当循环变量 i=5 时退出循环,执行 for 语句后面的printf()
        printf("OK");
    }
    

    上面的 for 循环语句正常情况下会打印出 10 个数字,然后再打印出“OK”。不过,其中的 break 语句使得循环在输出 5 个数字以后就打印出了“OK”,for 循环语句实际上只执行了 5 次循环。

    • 进入下一个循环
      在循环中使用continue语句可进入下一个循环
      举例:
    for(i=1;i<=10;i++)
    {
        if(i%2==1)
            continue;        //当 i 为奇数时不执行下面的printf(),而继续下一次循环
        printf("%d是偶数\n",i);
    }
    

    上面的 for 循环语句执行了全部 10 次循环,但其循环体中 printf() 语句只执行了 5 次,因为,当 i 的值为奇数时,continue 语句使得其后的 printf() 语句没有被执行。

    1.4 循环嵌套

    在一个循环语句中包含一个甚至多个循环语句。

    例:输出最大值

     for (i = 1; i <= repeat; i++)
        {
            scanf("%d ", &n);
            scanf("%d ", &num);
            max = num;
            for (j = 1; j < n; j++)
            {
                scanf("%d", &num);
                if (num > max)
                {
                    max = num;
                }
            }
            printf("%d\n", max);
        }
    

    2.编程技巧总结

    • 图形打印问题
      解题思路:
      1.外循环控制行数
      2.内循环控制空格数
      3.内循环控制“*”个数
      一种做法:
    • 大写/小写字母变小写/大写字母
    ch=ch-'a'+'A';//小写变大写
    
    ch=ch+32;//大写变小写
    
    • 四则运算
      可使用switch-case语句
      例:
    switch(x)
    {
          case 1: op='+';break;
          case 2: op='-';break;
          case 3: op='*';break;
          case 4: op='/';break;
    }
    
    • 数列求和
      一般使用循环语句来进行数列求和
    for(int i=1;i<=n;i++)
        {
            scanf("%d",&x);
            sum+=x;
        }
    

    学习体会

    经过这段时间的听课和做题,对单循环和嵌套循环类的问题理解更清楚了,在做题的过程中意识到了调试代码的重要性,很多时候肉眼找不出来的问题调试一下就能发现。
    我认为现在该做的就是提高自己的代码量!
    循环能做的有时递归函数也能做,而且思路更加清晰,代码也容易看懂。
    嵌套循环效率不高,有时会导致运行超时,此时需要改变思路,另辟蹊径。
    在写代码先之前整理一遍思路再动手。

    3.PTA实验作业

    3.1 数列求和问题

    特殊a串数列求和

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

    定义变量last为最终结果
    定义变量sum为每次循环得到的结果
    定于a,n为题目所给
    输入 a和n
    for i = 1 to n
    sum ← sum+pow(10,(i-1))*a
    last← last+sum
    end for
    

    3.1.2代码截图

    3.1.3 PTA提交列表及说明


    Q:途中遇到的问题?怎么解决?
    A:输出结果与预期的不符,通过调试一步步观察错误的地方,再修改。

    3.2 图形打印问题

    7-5 打印菱形图形

    3.2.1 数据处理

    定义i,j,k三个变量用于循环中的表达式
    已知行数就得知循环次数,故使用for循环
    注意每行空格和""的个数
    总共为两部分
    第一部分是打印上方的前四行
    第二部分是打印下方的后三行
    观察图形
    号和空格个数的规律
    在for循环中利用行数与空格号个数的关系,输出一定数量空格和
    在每次循环的最后输出换行符

    3.2.2 代码截图

    3.2.3 PTA提交列表及说明


    Q:如何知道每行所要输出的空格个数和*号个数?
    A:通过观察图像得出规律,在编译器中反复调试
    第一次做使用了两个循环,看了视频以后知道可以只用一个循环提高效率

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

    7-1 单词长度

    3.3.1 单步调试截图



    3.3.2 代码截图



    3.3.3 PTA提交列表及说明

    Q:如何通过测试点?
    A:这题是我花的时间最久的题,卡在最后一个测试点有好几个小时,先是不知道最后一个测试点是什么意思,弄明白了以后修改了代码,仍然无法正确,接着重新编写代码,还是错误,最后用printf调试,发现原来是我只顾及到结尾的空格,没管开头的空格,为什么呢,因为之前调试的时候没出现开头有空格造成的问题,于是加了

    if(count!=0)
    printf("%d ", count);
    

    这样才全部测试点都通过了。

  • 相关阅读:
    HDU
    HDU
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/jingzheng001/p/14021888.html
Copyright © 2020-2023  润新知