循环总结

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

0.展示PTA总分


1.本章学习总结

1.1for循环语句

c语言的基本形式为:
for(表达式1;表达式2;表达式3)
{
循环语句;
}

for(int i=1;i<=n;i++)
{
sum+=i;//1~n求和;
}

for循环的表达式1初始条件,表达式2是循环条件,表达式3是运行指令,中间用分号隔开。
先进行表达式1,再判断是否满足条件,满足就进入循环,循环结束后再进表达式3,再次循环。
表达式1和表达式3可省略。

  • 一般用于已知循环次数的循环,不要忘记大括号

1.2while,do-while循环语句

c语言的基本形式为:
while(表达式)
{
循环语句;
}

int i=1;
while(i<=n)//循环条件
{
sum+=i;
i++;
}

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


#include <stdio.h>
#include <math.h>

int main (){
    double emp=0.0,afterSum=0.0,beforeSum=0.0;
    int flag=1,den=1;
    scanf("%lf",&emp);

    do{ //如果用while,afterSum的值会多算一次
        beforeSum = f*(1.0/x);  //beforeSum为当前分数值
        afterSum+=beforeSum;   //最后值
        den+=3;   //分母
        flag*=-1;  //符号
    }while( fabs(beforeSum) > emp); //绝对值

    printf("sum = %.6f",afterSum);
    return 0;
}

while训话的表达式是循环条件,先判断是否满足条件,若满足条件就进入循环。

  • do-while先做一次,再判断,注意最后的分号

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

break:跳出所在循环,只能跳出一个循环。
continue:跳出此次循环,即后面的语句不执行,进行下次循环。
两者均可以用在循环语句中。break在switch语句中用处也很大。

1.4循环嵌套

外循环一次,内循环一圈

#include<stdio.h>//打印倒三角字符
int main()
{
    int n;
    scanf("%d",& n);
    char ch = 'A';
    if (n < 7) {//判断合理性
        while (n != 0)
        {
            for (int i = 0; i < n; i++) {
                printf("%c ", ch);
                ch++;
            }//循环结束,进行下面语句
            printf("\n");
            n--;//外循环控制
        }
    }
    else
        printf("输入不正确");
        return 0;
}

学习体会

把握好循环控制条件,因为之前有过很多次死循环,,,
对于嵌套循环来说,注意用printf调试,找到错误,或者break调试一下。


2.编程技巧

2.1判断素数

循环只需要到sqrt(x)即可,因为任意一个数可以分解成两个数相乘的形式,所以只需要到那个数的平方根即可。

int prime( int p )
{
    int k=sqrt(p);//避免多次调用
    if(p<=1){
        return 0;
    }else if(p==2){
        return 1;
    }else{
        for(int i=2;i<k;i++){//循环次数减少,效率提高
            if(p%i==0){
                return 0;
            }
        }
        return 1;
    }
}

2.2调用库函数

调用库函数时,如果改值将会重复使用,则应将库函数所得的值保存,避免多次调用影响效率。例如2.1的例题代码

2.3解决问题的类型有

1.求一组数的和,最大值,最小值,平均值。eg.7-3 求最大值
2.画各种图形,如矩形,菱形,三角形。eg.7-5 打印菱形图形
3.求两个数的最小公倍数
4,求一个数的位数,逆序输出等


3.PTA实验作业

3.1数列求和问题

3.1.1伪代码及代码实现

for i=1 to n       
     sum=sum+1.0*t*i/(2*i-1);//找到通式※
end for    

3.1.2提交列表

sum忘记初始化。。。。。。。。

3.1.3提交列表及说明

  • 主要注意寻找到各项规律,即中学中的数列问题,转化为代码,for循环控制次数依次累加或累乘。
  • 与此题类似的数列求和问题,都是先找到通式

3.2图形打印问题

3.2.1数据处理

打印图形要注意行和字符及空格的关系
char ch;//打印的字符
int n;//总行数
观察空格与字符得到

行数 空格数 字符 空格 字符
第一行 2:5/2-1+1 ch 0
第二行 1:5/2-2+1 ch+1 1:2*2-3 ch+1
第三行 0:5/2-3+1 ch+2 3:2*3-3 ch+2
第四行 1:5/2-2+1 ch+1 1:2*2-3 ch+1
第五行 2:5/2-1+1 ch 0

3.2.2代码截图

第一次写的时候以为要强制转换,在输出的时候,后来发现不需要

3.2.3提交列表及说明

  • 当时写的时候,没有注意下三角,再怎样转换的时候卡住了,后来发现其实一样,重复一下,改变ch的值即可。
  • 空格与字符位置把握好,可以通过列表格找到循环条件,思路更清晰

3.3 printf调试如何检查错误

3.3.1单步调试截图 7-2 特殊a串数列求和

在恰当的循环里面写一个printf,观察每次sum的变化,可以看出具体哪一步出错

3.3.2代码截图

3.3.3提交及说明

一下就AK了。。。,关键还是通式

posted @ 2020-11-22 22:13  w4  阅读(132)  评论(0编辑  收藏  举报