C博客作业02--循环结构
| 这个作业属于哪个班级 | C语言--网络2011/2012 |
| ---- | ---- | ---- |
| 这个作业的地址 | C博客作业00--循环结构 |
| 这个作业的目标 | 学习循环结构内容,包括for循环、while循环、循环嵌套 |
| 姓名 | 章审 |
0.展示PTA总分
1.本章学习总结
1.1 for循环语法
for(表达式1;表达式2;表达式3)
{
语句1
语句2
}
1.2while、do while循环语法
while:
表达式1;
while(表达式2)
{
语句1
语句2
表达式3;
}
do-while:
表达式1;
do{
语句1
语句2
表达式3;
}while(表达式2);
不管在for,while,do-while语句中,都遵循以下条件:
- 表达式1为初始循环条件
- 表达式2为循环控制条件
- 表达式3为循环转化条件
- 复合语句做循环体被当做一条语句看待
- 不要重复在循环体内改变循环变量的值
而while和do-while的区别在于
- while只有满足条件后才能执行后续语句
- do-while不管是否满足条件都会执行一次复合语句,之后才会开始判断
1.3 跳出循环相关语句break\continue
-
break:一旦执行了break语句,循环提前结束,不再执行循环体中位于其后的其他语句。break语句应该和if语句配合使用,即条件满足时,才执行break跳出循环。
-
continue:continue语句的作用是跳过continue后面的语句,继续下一次循环,continue语句一般也需要和if语句配合使用。
-
区别:continue语句和break语句的区别在于,break结束循环,而continue只是跳过后面语句继续循环。break除了可以终止循环外,还用于switch语句,而continue只能用于循环。
1.4 循环嵌套
在设计嵌套循环时,我一般会由内到外去考虑,比如在设计九九乘法表时,我一般会去先处理一行内几个式子是如何变化的,再去考虑一张表内的行与行之间对应的关系
#include <stdio.h>
int main()
{
int num, line, item, time;
scanf("%d", &num);
time = 1;
for (line = 1; line <= num; line++)/*行与行之间的关系*/
{
for (item = 1; item <= time; item++)/*行中每个式子是如何变化的*/
{
printf("%d*%d=%-4d", item, line, item * line);
}
time++;
printf("\n");
}
return 0;
}
在设计嵌套循环时应该注意内层和外层循环控制变量不能同名
且总循环次数=内循环次数*外循环次数
学习体会
本章的学习主要让我学会了如何运用循环语句简化程序并且处理一些特殊的问题。
但是,有时候如果没有一定的思维去思考,可能会弄巧成拙,使问题更加复杂。
所以,在设计程序时一定要注意把逻辑关系想清楚,并且注意边界情况,才能使自己更高效地去处理问题。
2 编程技巧总结
- 数列求和
for (i = 1; i <= n; i++)
{
sum += i;
}
- 字符转数字
将字符数据减'0'
代码如下
char op;
scanf("%c", &op);
printf("%d", op - '0');
-
数字逆序
用交换数将首尾一一对应的数字交换 -
图形打印
注意外循环和内循环的关系,使空格和字符能够在相应的行和列一一对应。
若是空心图形且字符变化,则还要考虑里面的空格和字符与行数的关系。
代码如下
#include <stdio.h>
int main()
{
char op;
int num, line, initialBlank, i, num2;
scanf("%c", &op);
scanf("%d", &num);
initialBlank = num / 2;
if (num == 1)
{
printf("%c", op);
}
else
{
for (line = 1; line <= num / 2 + 1; line++)
{
for (i = 1; i <= initialBlank; i++)
{
printf(" ");
}
printf("%c", op);
if (line == 1)
{
printf("\n");
op += 'b' - 'a';
initialBlank--;
continue;
}
else
{
for (i = 1; i <= (line - 1) * 2 - 1; i++)
{
printf(" ");
}
printf("%c\n", op);
}
op += 'b' - 'a';
initialBlank--;
}
initialBlank = num / 2;
op += 'a' - 'c';
num2 = (num / 2 - 1) * 2 - 1;
for (line = 1; line <= num / 2; line++)
{
for (i = 1; i <= num/2+1 - initialBlank; i++)
{
printf(" ");
}
printf("%c", op);
if (line == num-num/2-1)
{
break;
}
else
{
for (i = 1; i <= num2; i++)
{
printf(" ");
}
printf("%c\n", op);
}
num2 -= 2;
op += 'a' - 'b';
initialBlank--;
}
}
return 0;
}
- 四则运算
用flag,switch,if-else和循环配套使用,使程序实现功能。
代码如下:
#include <stdio.h>
int main()
{
int num, sum = 0, flag;
char op = '\n';
scanf("%d", &sum);
while (op != '=')
{
if (flag == 1)
{
break;
}
flag = 0;
op = getchar();
if (op == '=')
break;
scanf("%d", &num);
if (op == '/' && num == 0)
{
flag = 1;
break;
}
switch (op)
{
case('+'): sum = sum + num;
break;
case('-'): sum = sum - num;
break;
case('*'): sum = sum * num;
break;
case('/'): sum = sum / num;
break;
default:flag = 1;
}
}
if (flag == 0)
{
printf("%d", sum);
}
else
{
printf("ERROR");
}
return 0;
3.PTA实验作业
3.1 数列求和问题
3.1.1 流程图或伪代码介绍思路
3.1.2 代码截图
3.1.3 PTA提交列表及说明
没碰到什么太大的问题。
3.2 图形打印问题
3.2.1 数据处理
3.2.2 代码截图
3.2.3 PTA提交列表及说明
在探索字符和空格和行数的关系吃瘪,关系要一开始就找好,否则就要题目里试好多遍,得不偿失,还需要注意第一行和最后一行的特殊情况。
3.3龟兔赛跑
3.3.1单步调试截图
3.3.2 代码截图
3.3.3 PTA提交列表及说明
printf调试使我们更加直观方便地去了解各个变量的变化,从而相对于单步调试使我们高效的去完成任务。