这个作业属于哪个班级 | C语言--网络2011/2012 |
---|---|
这个作业的地址 | C博客作业02--循环结构 |
这个作业的目标 | 学习循环结构内容,包括for循环、while循环、循环嵌套 |
姓名 | 黄抒鸿 |
0.展示PTA总分
1.本章学习总结
1.1 for循环语法
for(表达式1;表达式2;表达式3)
{
语句;
}
注意事项:
*表达式1:通常为循环变量赋初值。
*表达式2:循环条件,判断是否继续执行循环。
*表达式3:更新循环变量的值。
*分号,用来分隔三个表达式,不可省略!for(;;)是死循环。
*适用于固定次数的循环。
*循环条件缺少时或循环变量不更新都会造成死循环。
eg.
循环输入6个月的工资数,计算半年内的平均工资。
int i;
double salary;//工资
double TotalSalary = 0;//6个月的总工资
double AvgSalary;//6个月的平均工资
for(i = 0;i < 6; i++)
{
printf("请输入第%d个月的工资:",i + 1);
scanf("%lf",&salary);
TotalSalary += salary;//累加
}
AvgSalary = TotalSalary / 6;//计算平均工资
1.2 while、do while循环语法
1.2.1 while循环
while(表达式)
{
循环体语句;
}
注意事项:
*适用于未知次数的循环
*当循环体语句只是一条语句时,表达式可以是任意合法的语句。
1.2.2 do while循环
do{
循环体语句
}while (表达式);
注意事项:
*特点:先执行,再判断。先执行一遍循环操作,符合条件,循环继续执行,否则循环退出。
int a =1,b = 10;
//进入循环体
do{
b -= a;//b=10-1=9
a++;//a=2
}while(b--<0);//b=9>0,循环条件为假,结束循环;9--
//执行循环语句后b的值为8
1.3 跳出循环相关语句breakcontinue
1.3.1 break语句
作用:跳出循环,执行循环之后的语句。
eg.
//循环输入玩家年龄,如果年龄为负停止输入,提示输入错误
int age;//输入玩家年龄
for(;;)
{
printf("请输入玩家年龄:");
scanf("%d",&age);
//判断
if(age<0)
{
printf("年龄不能为负数!程序强制退出!
");
break;
}
}
1.3.2 continue语句
作用:跳过本次循环,继续下次循环!
eg.
//循环输入5个玩家的年龄,统计年龄为负的录入次数
int age;//年龄
int i;//循环变量
int count = 0;//计数器变量
for(i = 0;i < 5;i++)
{
printf("请输入玩家年龄:");
scanf("%d",&age);
if(age >= 0)//跳过正确的情况
continue;
count++;//输入错误则计数器+1
}
printf("输入年龄为负数的次数是:%d
",count);
continue语句和break语句的区别:
1.break是结束循环,而continue只是跳过后面语句继续循环。
2.break除了可以中止循环外,还用于switch语句,而continue只能用于循环。
1.4 循环嵌套
for(表达式1;表达式2;表达式3)
{
for(表达式1;表达式2;表达式3)
{
循环语句
}
循环语句
}
eg.
// 打印九九口诀表
#include<stdio.h>
int main()
{
int Row, Column, input;// Row是行 Column是列 input是输入的数据
scanf("%d", &input);
for (Row = 1; Row <= input; Row++)
{
for (Column = 1; Column <= Row; Column++)
printf("%d*%d=%-4d", Column, Row, Row * Column);
printf("
");
}
return 0;
}
2 编程技巧总结
2.1 求交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和
#include <stdio.h>
int main()
{
int i,n;//定义循环变量,循环次数
int flag;//利用flag实现符号的交换
double sum;
scanf("%d", &n);
flag = 1;
sum = 0;
for (i = 1; i <= n; i++)
{
sum = sum + flag*i * 1.0 / (2 * i - 1);
flag = -flag;//交换符号
}
printf("%.3f", sum);
return 0;
}
2.2 字符转数字
char ch;
scanf("%c",&ch);
printf("%d",ch - '0');
2.3.1 大写字母转小写
ch = ch - 'a' + 'A';
2.3.2 小写字母转大写
ch = ch - 'A' + 'a';
2.4 图形打印:菱形图案
代码示例:
#include<stdio.h>
#include<math.h>
int main()
{
int i, j, k;
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("
");
}
return 0;
}
总结:
找到外循环控制行数与内循环控制空格数、内循环控制“*”个数的关系,用for循环解决。
2.5 数字逆序问题
while(a>0)
{
b=b*10+a%10;
a=a/10;
}
3.PTA实验作业
3.1 数列求和问题
3.1.1 伪代码思路
int 循环变量为i,循环次数为n;
int 每项的值为x,累加总和为sum,每项分母为m;
for (进入循环)
{
//判断每项的符号
if(分子为偶数,即i为偶数)
{x为负值}
else(分子为奇数,即i为奇数)
{x为正值}
进行累加;
m的值递增+2;
}
输出sum;
3.1.2 代码截图
3.1.3 PTA提交列表及说明
答案正确,未出现调试错误。
3.2 图形打印问题:菱形图案
3.2.1 数据处理
3.2.2 代码截图
3.2.3 PTA提交列表及其说明
格式错误:
第一次提交时,未注意到题目给定的要求“第一行图形符号前面有5个空格”,搞错了i与k之间的关系,重新思考后,得出k=|4-i|+2,重新提交,答案正确。
3.3 学习造printf调试代码——龟兔赛跑
3.3.1 单步调试截图
·循环内自己设计printf语句输出变量,直观了解每一次循环的变量值。
3.3.2 代码截图