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);

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

posted @ 2020-11-22 22:17  黄帅2011  阅读(323)  评论(0编辑  收藏  举报