0.展示PTA总分
单循环结构
嵌套循环
1.本章学习总结
1.1 学习内容总结
1. for语句
for语句中的fahr++相当于fahr=fahr+1。
for(表达式1;表达式2;表达式3)
循环体语句
例:
for (i = 1; i <= n; i++)
{
number = number * 10 + a;
sum = sum + number;
}
2. while语句
1. 一般形式:
while (表达式)
循环体语句;
注:表达式为真,循环执行;直到表达式为假,循环中止并继续执行while下一条语句。
例:
while (N != 0)
{
scanf("%d", &N);
if (N > 0)
{
i++;
}
else if (N < 0)
{
j++;
}
}
2. for语句改为while语句
表达式1;
while (表达式2){
for的循环体语句;
表达式3;
}
例:
i=1;
while(i<=n){
number = number * 10 + a;
sum = sum + number;
i++;
}
3. do-while语句
一般形式:
do {
循环体语句
} while (表达式);
例:
do
{
scanf("%d", &yournumber);
count++;
if (yournumber < 0)
{
printf("Game Over
");
flag = 1;
}
else if (yournumber > mynumber)
{
printf("Too big
");
}
else if (yournumber < mynumber)
{
printf("Too small
");
}
else
{
if (count == 1)
{
printf("Bingo!");
}
else if (count <= 3)
{
printf("Lucky You!
");
}
else
{
printf("Good Guess!
");
}
flag = 1;
}
if (count == N)
{
if (!flag)
{
printf("Game Over
");
flag = 1;
}
}
}
while (!flag);
4. for,while,do-while语句的不同
for语句和while语句都是在循环前先判断条件,条件满足才会进入循环。
do-while语句先执行循环体,后判断循环条件。无论循环条件的值如何,至少会执行一次循环体。
5. break语句和continue语句
1. break语句
break语句气质循环结束。一旦执行了break语句,循环提前结束,不在执行循环体中位于其后的其他语句。
例:
while (op != '=')
{
scanf("%c", &op);
if (op == '=')
{
break;
}
}
2. continue语句
continue语句的作用是跳出循环体中continue后面的语句,继续下一次循环。
例:
for(i=0;i<100;i++)
{
if(i>j) continue;
j=i;
}
3. break语句和continue语句的区别
break结束循环,而continue只是跳过后面语句继续循环。
break除了可以中止循环外,还用于switch语句,而continue只能用于循环。
6. 嵌套循环
在一个循环体语句中又包含另一个循环语句,大循环中嵌套了小循环。
例:
for (fen5 = money / 5; fen5 > 0; fen5--)
{
for (fen2 = money / 2; fen2 > 0; fen2--)
{
for (fen1 = money; fen1 > 0; fen1--)
{
if (fen5*5 + fen2*2 + fen1 == money)
{
total = fen5 + fen2 + fen1;
count++;
printf("fen5:%d, fen2:%d, fen1:%d, total:%d
", fen5, fen2, fen1, total);
}
}
}
}
1.2 本章学习体会
上课所讲的知识越来越多,感觉讲的有那么一点快!
作业越来越多,不会做的越来越多,感觉有点跟不上,可能是代码量不够。
代码量:960行
2.PTA实验作业
2.1 水仙花数
2.1.1 伪代码
定义一个变量n放整数位数。变量i放整数。
定义变量x放位。变量y放取位之后的数。变量sum放计算结果。自己造一个pow函数。
while(判断几位数)
{
for(在几位整数范围内输入所有整数)
{
while()
{
取个位: x = y % 10;
计算每位的n次幂之和:sum = sum + pow(x, n);
取位之后的数:y = y / 10;
}
if(满足水仙花数)输出;
}
}
2.1.2 代码截图
2.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
3 | 最小数据 | |
5 | 548834 | 正常数据 |
7 | 最大数据 |
2.1.4 PTA提交列表及说明
提交列表说明:
1.多种错误:当n=7时运行超时和if语句判断时等于条件写错。
2.部分正确:当n=7时运行超时。
3.答案正确:自己造一个pow函数计算。
2.2 梅森数
2.2.1 伪代码
定义变量n存放正整数。定义变量sum存放计算结果。
定义变量flag为判断条件。
for(i=2;i<=n;i++)
{
计算最大值:sum=pow(2,i)-1;
for()
{
判断sum是不是素数,是,则flag==0
}
if(flag==0)输出sum;
}
2.2.2 代码截图
2.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
6 | 正常数据 | |
21 | 无数据输出 | 超出测试范围 |
1 | 最小数据 |
2.2.4 PTA提交列表及说明
提交列表说明:
1.部分正确:没有考虑n1的情况。
2.部分正确:最后一个if判断语句写错,写成了flag1。
3.答案正确:解决了上两个问题。
2.3 满足3025=30+25和的平方的四位数
2.3.1 伪代码
定义变量number存放所有的四位整数。
定义变量front存放前两位数;变量behind存放后两位数。
for(依次判断每个四位数)
{
取前两位:front = number / 100;
取后两位:behind = number - front * 100;
if(判断是否满足)满足则输出;
}
2.3.2 代码截图
2.3.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
无 | 所有满足的四位数 |
2.3.4 PTA提交列表及说明
提交列表说明:
1.格式错误:输出数字前面少了空格。
2.答案正确:%d前面加个空格。
3.代码互评
同学代码截图
自己代码截图
评价:
1.同学代码有注释,而我的没有;
2.同学代码用do-while语句解决了运行超时的问题,比我的自己造一个pow函数感觉更好一点。
同学代码截图
自己代码截图
评价:
1.同学代码调用了一个函数,使整个结构看起来清爽不少;
2.我的代码只利用了循环结构,读起来不是很清晰。