| 这个作业属于哪个班级 | C语言--网络2011/2012 |
| ---- | ---- | ---- |
| 这个作业的地址 | C博客作业02--循环结构 |
| 这个作业的目标 | 学习循环结构内容,包括for循环、while循环、循环嵌套。 |
| 名字 | 李洋 |
0.PTA展示
1.本章学习总结
1.1for循环语法
1. for循环一般形式
for(初值表达式;条件表达式;步长表达式)
{
循环体;
}
-
for循环反映了循环的规则,从哪儿开始,到哪儿结束,每次的跨度,重复做的内容。
-
for循环小括号里第一个“;”号前为一个为不参与循环的单次表达式,其可作为某一变量的初始化赋值语句, 用来给循环控制变量赋初值; 也可用来计算其它与for循环无关但先于循环部分处理的一个表达式
特点:
- 它的使用更加灵活,完全可以取代 while 循环。
for循环注意事项:
-
for 循环中的“表达式1(初始化条件)”、“表达式2(循环条件)”和“表达式3(自增或自减)”都是可选项,都可以省略(但分号;必须保留)。
-
写表达式时应注意避免设置成为死循环,死循环危害极大!
1.2while、do-while循环语法
1. while语法
while循环的一般形式为:
while(表达式){
语句块
}
意思是,先计算“表达式”的值,当值为真(非0)时, 执行“语句块”;执行完“语句块”,再次计算表达式的值,如果为真,继续执行“语句块”……这个过程会一直重复,直到表达式的值为假(0),就退出循环,执行 while 后面的代码。
while 循环的整体思路是这样的:设置一个带有变量的循环条件,也即一个带有变量的表达式;在循环体中额外添加一条语句,让它能够改变循环条件中变量的值。这样,随着循环的不断执行,循环条件中变量的值也会不断变化,终有一个时刻,循环条件不再成立,整个循环就结束了。
2. do-while语法
do
{
循环体;
}
while(表达式); //这个小括号的后面必须接分号“;”
- do-while循环与while循环的不同在于:它会先执行“语句块”,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while 循环至少要执行一次“语句块”。
1.3跳出循环相关语句break、continue
1. break语法
-
break可以在if-else中使用直接跳出当前循环。
-
在多层循环中, 一个break语句只向外跳一层。
break是用于永久终止循环。即不执行本次循环中break后面的语句,直接跳出循环。
2. continue语法
-
continue语句的作用是跳过循环体中剩余的语句并到循环末尾而直接执行下一次循环。
-
continue语句只用在for、while、do-while等循环体中, 常与if条件语句一起使用, 用来加速循环。
循环continue是用于终止本次循环。即本次循环中continue后面的代码不执行,进行下一次循环的入口判断。
1.4循环嵌套
循环嵌套中循环的总次数等于内循环次数和外循环次数的乘积。
1. for循环内嵌套for循环
for(表达式1;表达式2;表达式3)
{
for(表达式4;表达式5;表达式6) //这里的for循环就是嵌套的
{
语句块;
}
}
2. while循环和for循环互嵌
while(条件表达式)
{
for(初值表达式;条件表达式;步长表达式)
{
循环体;
}
}
3.while嵌套
while(条件表达式1)
{
while(条件表达式2)
{
语句;
}
}
4. do-while嵌套
do
{
do
{
语句;
} while(条件表达式1)
}while(条件表达式2)
学习体会
通过本章节的系统的学习,我对循环结构这一知识点又有了更深刻的了解,对各种循环的应用有了更深的体会。在学习知识点并经过多次刷题实践后,我已能够凭借自己的力量去分析题目,并最终完成解题。
自身的不足或遗留问题:解题速度太慢,个人还需练习更多的题目去真正熟练这一操作过程。
编程技巧总结
1. 在循环中需要每次输出一个值,除了最后一个值其他的都由空格隔开时,可以用到标志符sign或者flag对第一个数做标记(最后一个相对第一个较难控制)。如下:
int sign=1;
int a=6;
for(int i=1;i<=3;i++)
{
if(sign==1)
{
printf("%d",a);//输出不带空格的
sign=0;//改变标志符的值
}
else
{
printf(" %d",a);//输出前面带空格的
}
}
2. 数列求和
-
每一项:item
-
前一项和后一项的关系:
item=item*10+i;
-
和循环变量的关系:
item=1.0/(2*i-1);
-
-
累加还是累乘,放入循环变量
-
result=result+item;
-
result=result*item;
-
-
累加sum初值为0,累乘sum初值为1
3. 字符转数字、数字逆序
- 字符转数字
m='1'-'0';//将字符'1'变数字1
- 数字逆序
while(num>0)
{
item=num%10;
sum=sum*10+item;
num=num/10;
}
- 字母小写大写互换
ch=ch-'a'+'A';//小写变大写
ch=ch+32;//大写变小写
4. 图形打印
for(i=1;i<=行数;i++)
{
for(k=1;k<=空格数;k++)
{
printf(" ");
}
for(j=1;j<=星星数;j++)
{
printf("*");
}
}
-
解题思路
-
外循环控制行数: i=1,2,3,4...n
-
内循环控制空格: k=n,n-1,n-2...1
-
内循环控制“*”: j=1,3,5... 2n-1
-
-
思考并找出k,j 与i的关系是解题关键!
5. 四则运算
-
对于随机生成的一个运算式,随机生成的运算符这一过程可以分成两步来完成
-
先生成一个随机数,
-
再用switch-case语句 ,选择不同的运算符
-
a=1+rand()%9;
switch(a)
{
case 1: op='+';
case 2: op='-';
......
}
3.PTA实验作业
3.1数列求和问题
3.1.1流程图或伪代码介绍思路
-
求数列前N项和,考虑到要有储存每一项的变量(item),要有存放前N项和的变量(sum),又有正负,用标志符(sign)来控制符号。
-
数据控制:
- 设置循环,保证循环N次,item根据循环次数变化,
item=2i-1
; - 每一项累加到sum,
sum+=1.0*sign*i/sum
- 改变sign的符号
- 设置循环,保证循环N次,item根据循环次数变化,
-
伪代码:
int main()
{
int i,item,sign=1;
double sum=0;
for i=1 to n do
item=2*i-1得到数列每一项的分母;
sum+=1.0*sign*i/item;累加到sum
sign*=-1;改变下一项的符号
end for
输出数列和
}
3.1.2代码截图
3.1.3PTA提交列表及说明
Q1:忽略了数列的每一项时double类型
A1:在计算数列第N项的表达式前乘1.0改变成浮点数类型
3.2图形打印问题
3.2.1数据处理
打印行数为7,可直接用常量7来控制,在外循环实现,
设int 类型的i,j分别在内外循环中用于循环
- 伪代码:
for i=1 to 7 do
if i<=3 then
for j=1 to 6-i do
打印 空格
end for
for j=1 to 2*i-1 do
打印 星星
end for
end if
else if i>3 then
for j=1 to j-2 do
打印 空格
end for
for j=1 to 2*(7-i)+1 do
打印 星星
end for
end else
打印 换行
end for
3.2.2代码截图
3.2.3PTA提交列表及说明
3.3自选一题,介绍printf调试检查错误
3.3.1单步调试代码截图
3.3.2代码截图
3.3.3PTA提交列表及说明
Q1:数列累加和每一项的改变的这两步的先后顺序乱了
A1:更改后先进行累加,再改变项的值,为下一次累加做准备