博客作业——循环结构
| 这个作业属于哪个班级 | C语言--网络2011/2012 |
| ---- | ---- | ---- |
| 这个作业的地址 | C博客作业0--循环结构 |
| 这个作业的目标 | 学习循环结构内容,包括for循环、while循环、循环嵌套 |
| 姓名 | 雷正伟 |
0.展示PTA总分
1.本章学习总结
1.1 for循环语法
for ([表达式1](循环变量赋初值);[表达式2](循环条件);[表达式3](循环变量增值))
{
语句;
}
- 表达式1、表达式2和表达式3之间是用分号;隔开的,千万不要写成逗号。
- 先执行“表达式1”;
- 再执行“表达式2”,如果它的值为真(非0),则执行循环体,否则结束循环;
- 执行完循环体后再执行“表达式3”;
- 重复执行步骤2.和2.,直到“表达式2”的值为假,就结束循环;
- 上面的步骤中,2.和3.是一次循环,会重复执行,for语句的主要作用就是不断执行步骤2.和3.;
1.2 while、do while循环语法
while语句
while (表达式)
{
语句;
}
- 先计算控制表达式。如果为true,就执行循环体,然后再次计算控制表达式。如果控制表达式为false,程序跳过循环体,而去执行循环体后面的语句。
do while语句
do
{
语句;
}
while (表达式);
- 首先无条件地执行一次循环体,然后再根据循环控制表达式的值来判断是否继续执行循环体。若为true,则继续执行;若为false,则停止执行,退出 do-while 循环。也就是说,do-while 循环至少执行一次循环体。
1.3 跳出循环相关语句break\continue
1.31break语句
- 当break关键字用于while、for循环时,会终止循环而执行整个循环语句后面的代码。break关键字通常和if语句一起使用,即满足条件时便跳出循环。
例:计算1加到100的值
#include <stdio.h>
int main()
{
int i=1, sum=0;
while(1) //循环条件为死循环//
{
sum+=i;
i++;
if(i>100)
break;
}
printf("%d\n", sum);
return 0;
}
1.32continue语句
- continue 语句的作用是跳过循环体中剩余的语句而强制进入下一次循环.
例:输出2位数中所有能同时被3和5整除的数
#include<stdio.h>
int main()
{ int n;
for (n = 10; n < 100; n++)
{
if (n % 3 != 0 || n % 5 != 0)
continue; //n不满足要求,结束本次循环//
printf(" %5d\n", n);
}
return 0;
}
- break与continue的对比:break用来结束所有循环,循环语句不再有执行的机会;continue用来结束本次循环,直接跳到下一次循环,如果循环条件成立,还会继续循环。
1.4 循环嵌套
例:打印九九口诀表
#include <stdio.h>
int main()
{
int i, j, n;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
for (j = 1; j <= i; j++)
{
printf("%d*%d=%-4d", j, i, i * j);
}
printf("\n");
}
return 0;
}
- 在一个循环体语句中又包含另一个循环语句,称为循环嵌套。
学习体会
- 目前对循环结构还是非常不熟练,写题目的时候会想很久都没有思路,要借鉴一下才可以开始写代码。
- 还不能灵活使用三种循环语句熟练解决问题。
2.编程技巧总结
求交错序列前N项和
计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和
#include<stdio.h>
int main()
{
int n, i, c;
double a, b, sum;
a = 1;
b = 1;
sum = 0;
c = 1;
scanf("%d", &n);
for (i = 0;i < n;i++)
{
sum += a / b * c;
a++;
b += 2;
c = -c;
}
printf("%.3f", sum);
return 0;
}
特殊a串数列求和
给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和
#include<stdio.h>
int main()
{
int a, n, i, sum;
double b;
sum = 0;
b = 0;
scanf("%d %d", &a, &n);
for (i = 1;i <= n;i++)
{
b = b * 10 + a; //组成n个a//
sum += b; //求a的和//
}
printf("s = %d", sum);
return 0;
}
打印菱形图形
i | k | j |
---|---|---|
1 | 3 | 1 |
2 | 2 | 3 |
3 | 1 | 5 |
4 | 0 | 7 |
5 | 1 | 5 |
6 | 2 | 3 |
7 | 3 | 1 |
解题思路:
1.外循环控制行数:i
2.内循环控制空格数:k
3.内循环控制个数:j*
(k = |4-i|)
(j = 7-2*|4-i|)
#include<stdio.h>
#include<math.h>
int main()
{
int i, j, k;
int n;
scanf("%d", &n);
for (i = 1;i <= 7;i++)
{
for (k = 1;k <= abs(4 - i);k++)
printf(" ");
for (j = 1;j <= 7 - 2 * abs(4 - i);j++)
printf("*");
printf("\n");
}
return 0;
}
整数四则运算
#include<stdio.h>
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("%d + %d = %d\n", a, b, a + b); //输出a+b的值//
printf("%d - %d = %d\n", a, b, a - b); //输出a-b的值//
printf("%d * %d = %d\n", a, b, a * b); //输出a*b的值//
printf("%d / %d = %d\n", a, b, a / b); //输出a/b的值//
return 0;
}
3.PTA实验作业
3.1数列求和问题
特殊a串数列求和
3.1.3 PTA提交列表及说明
- 刚开始以为是字符串的相加,然后多读了几遍以后发现不是,只是一串数列求和。(也就是2+22+222+2222+...)
3.2打印菱形图形
3.2.3 PTA提交列表及说明
- 之前打代码的时候没有可以关注每一行开始的空格,就会导致输出的图形不是一个菱形。
2.每一行的*都在渐增或者渐减,要找到每一行的规律。
printf调试如何检查错误
3.3.1 单步调试截图
3.3.2 代码截图
- 在循环内设计一个printf输出观察变量,就可以观察到每一次循环的变量值。