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;
}
学习体会
- 循环结构相比之前的顺序和分支结构难度上升不少,需要的逻辑思维能力更强,再加上循环嵌套使难度再上升一个档次。
- PTA的题目存在很多问题,也有时会遇到没思路的情况,会借鉴同学的代码进行阅读。
- 要学会灵活利用三种循环结构来使问题更简单的解决。
- 积极阅读别的同学的更简介明了的代码进行学习。
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提交列表及说明
- 之前几次编译错误中 应该为ch=ch-2,忽略了最后一次循环中ch的变化
- 输出值时第二次应该输出ch++,不然无法把ch的正确值输出
- 之后部分错误中发现输出格式错误因为菱形下半部分还想着用m来控制循环而导致输出错误,后面新定义了一个k值,然后用k值可以更方便的表示循环次数,利用新定义来简化编程过程(其实用m来控制也可以,但是会比较复杂且逻辑过多,用新定义可以减少思考)
3.3 自选一题,介绍printf调试如何检查错误
题目
3.3.1 单步调试截图
- 设置断点
- 设置printf调试
- 进行单步调试
3.3.2 代码截图
3.3.3 PTA提交列表及说明
- 最开始那次部分错误是因为在每个循环中都设置了输出,导致如下结果
- 之后的几次部分错误真的搞不懂
在第一个测试点中
题目展示输出样式
我的代码输出样式
我反复检查了空格和格式,是一模一样的但是测试过不去,实在不知道原因。