这个作业属于哪个班级 | C语言--网络2011/2012 |
---|---|
这个作业的地址 | C博客作业02--循环结构 |
这个作业的目标 | 学习循环结构内容,包括for循环、while循环、循环嵌套 |
姓名 | 李雷默 |
0.展示PTA总分
1.本章学习总结
1.1 for循环语法
for (表达式1; 表达式2; 表达式3)
{
语句;
}
or
for (循环变量赋初值; 循环条件; 循环变量增值)
{
语句;
}
-
在表达式1、表达式2和表达式3之间是用分号;隔开的。
-
for(表达式1;表达式2;表达式3)的后面不能加分号。
-
从第二个语句中可以看出,“表达式1”只执行一次,循环是在“表达式2:循环条件”“表达式3:循环变量增值”和“内嵌语句”之间进行的。
1.2 while、do while循环语法
while:
while (表达式)
{
语句;
}
-
当表达式为真,则执行下面的语句;语句执行完之后再判断表达式是否为真,如果为真,再次执行下面的语句,直到表达式为假,跳出循环。
-
循环条件成立时的话,while 循环会一直执行下去,成为死循环。
-
循环条件不成立的话,while 循环就一次也不会执行。
do while:
do
{
语句;
}
while (表达式);
- do-while循环与while循环的不同在于:它会先执行“语句”,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while 循环至少要执行一次“语句”。
1.3 跳出循环相关语句breakcontinue
break:
-
break语句不仅可以跳出“循环体”,还可以跳出switch。但是break语句不能用于循环语句和switch语句之外的任何其他语句中。
-
break语句只能跳出一层循环。当有多层循环嵌套的时候,break只能跳出最里面的那一层循环,无法一次跳出所有循环(但是return可以)。
continue:
- continue的作用为结束本次循环,即跳过循环体中下面尚未执行的语句,然后进行下一次是否执行循环的判定。
区别:
- continue语句和break语句的区别是:continue 语句只结束本次循环,而不是终止整个循环。break 语句则是结束整个循环过程,不再判断执行循环的条件是否成立。而且,continue 只能在循环语句中使用,即只能在 for、while 和 do…while 中使用,除此之外continue不能在任何语句中使用(包括switch语句)。
1.4 循环嵌套
while和for循环实例:
while(条件表达式)
{
for(循环变量赋初值; 循环条件; 循环变量增值)
{
循环体;
}
}
要点:
-
if-else、while、do-while、for可以相互嵌套,就是一条语句里面还有另一条语句,例如 for 里面还有 for,while 里面还有 while,或者 for 里面有 while,while 里面有 if-else。
-
外层for每次循环时,都必须等待内层for循环完毕才能进行下次循环。虽然i为变量,但是对于内层for来说,每次循环时它的值都是固定的。
学习体会:
这一周通过学习循环结构的知识,我对c语言的了解进一步加深,能读懂更多的的代码,也能够运用循环的知识。
但是对于本次的大作业,出现了许多平时没用过的代码,加上函数的学习还一知半解,我一时无从下手。
幸运的是,我在这几周的学习中,逐渐培养了计算机思维,解题的思路也更加清晰,我相信只要我巩固好基础知识点,完成这次的挑战不是问题。
2.编程技巧总结
数列求和问题
7-2 特殊a串数列求和
#include <stdio.h>
int main()
{
int a, n;
double item = 0;
double sum = 0;
scanf("%d %d", &a, &n);
for (int i = 1; i <= n; i++) {
item = item * 10 + a;
sum += item;
}
printf("sum = %.lf
", sum);
return 0;
}
-
数列求和时要注意变量的类型,否则再运算时会出现字节溢出的现象,好几次调试失败都是因为没有注意变量类型。
-
运算时输出变量要记得定义初值,累加sum初值为0,累乘sum初值为1。
-
注意sum += item 等价为 sum = sum + item。(题目要求s,这里方便阅读用sum)
字符如何转数字、数字逆序问题
- 字符如何转数字
m='1'-'0';//将字符'1'变数字1
- 数字逆序问题
while(num>0)
{
item=num%10;
sum=sum*10+item;
num=num/10;
}
图形打印问题
7-5 打印菱形图形 :
#include<stdio.h>
#include<math.h>
int main()
{
int i,j;
for(i=0;i<7;i++)
{
if(i<=3)
{
for(j=0;j<5-i;j++)
printf(" ");
for(j=0;j<1+2*i;j++)
printf("*");
}
if(i>3)
{
for(j=0;j<5-(6-i);j++)
printf(" ");
for(j=0;j<1+2*(6-i);j++)
printf("*");
}
printf("
");
}
return 0;
}
根据行数判断输出“ ”或者“*”并用for循环一行一行输出,打印出菱形。
四则运算问题
int a = rand() %100 +1
产生1`100的一个随机整数
switch(a)
{
case 1: op='+';
case 2: op='-';
case 2: op='*';
case 2: op='/';
}
选择不同的运算符,如果要随机产生运算符可以用rand产生1`4的随机整数来选择运算符(我用这样的思路去做大作业,但是没有成功)。
3.PTA实验作业
3.1 数列求和问题
3.1.1 流程图或伪代码介绍思路
通过for循环得到a、aa、aaa的值用item表示,最后用s += item;累加这些数据得到数列求和的结果
3.1.2 代码截图
3.1.3 PTA提交列表及说明
3.2 图形打印问题
3.2.1 数据处理
根据行数判断输出“ ”或者“*”并用for循环一行一行输出,打印出菱形。
3.2.2 代码截图
3.2.3 PTA提交列表及说明
3.3 自选一题,介绍printf调试如何检查错误
3.3.1 单步调试截图
我在单步调试时输入N为5,然后F11发现进行了5次循环最后输出,证明代码没有问题。
3.3.2 代码截图
3.3.3 PTA提交列表及说明