循环总结
这个作业属于哪个班级 | 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了。。。,关键还是通式