C博客作业02-循环结构
2020-11-21 21:05 米奈希尔。 阅读(151) 评论(0) 编辑 收藏 举报| 这个作业属于哪个班级 | C语言--网络2011/2012 |
| ---- | ---- | ---- |
| 这个作业的地址 | C博客作业02--循环结构 |
| 这个作业的目标 | 学习循环结构内容,包括for循环、while循环、循环嵌套。 |
|姓名 | 罗发槺 |
0.展示PTA总分。
1.本章学习总结。
1.1 for循环语法。
for(语句;限制条件语句;语句)
{
语句;
}
例如:
for (i=1;i<=n;i++)
{ b=i*2-1;
a =(double) c*i/b;
sum = sum + a;
c=-c;
}
1.2 while、do while循环语法。
while(限制条件)
{
语句;
}
例如:
while(t>90)
{
t-=90;
n++;
}
do
{
语句;
}while(限制条件);//分号不能忘。
例如:
do{
scanf("%d",&n);
if(n>0)
{
i++;
}
else if(n<0)
j++;
limit++;
}while(limit>19||n!=0);
1.3 跳出循环相关语句break\continue.
- break用来跳出循环和switch结构。
- continue用来跳出当前循环的后面语句,不结束循环,继续循环。
例子:
while(c!='\n')
{
scanf("%c",&c);
if(c=='\n')
break;//满足条件直接跳出当前循环,如果是continue,只是跳过后面的语句,循环还是继续的,直到满足while语句的条件后跳出循环。
if(c=='0'||c=='1')
sum=sum*2+c-'0';
else
{
printf("error input!");
return 0;
}
}
1.4 循环嵌套。
简单来说就是在循环里面在加循环,例如:
while(count!=n)//外循环
{
scanf("%d",&N);
scanf("%d",&NUM);
count1=1;
while(count1!=N)//内循环
{
scanf("%d",&num);
if(num>NUM)
NUM=num;
count1++;
}
printf("%d\n",NUM);
count++;
}
1.5小知识点。
1. printf("%md")
,m用来控制输出宽度限定,是正的右对齐,如果是负的就左对齐。
- 案例截图:
2.
scanf("%d",&a);
scanf("\n%c",&c);
读入字符的时候可以在%c的前面加个\n或空格,这样可以消掉前面输入的空格或回车,防止读入错误。
2 编程技巧总结.
数列求和。
- 凡是数列求和,必用循环结构,其他就看表达式,没什么好说的。
for (i=1;i<=100;i++)
{
sum = sum + i;//中间表达式看题目要求
}
数字逆序问题。
while(n>0)
{
N=N*10+n%10;//数字逆序核心表达式
n/=10;
}
- 两三行代码就可以实现数字逆序,是不是很简单。
图形打印编辑技巧。
- 先想好图形规律,利用嵌套循环,来得到。
例如下面这个打印菱形的题。
for(i=1;i<=7;i++)//注意控制总体打印层数
{
for(k=0;k<=fabs(4-i);k++)//注意控制空格数量
printf(" ");
for(j=1;j<=7-2*fabs(4-i);j++)//注意控制乘号数量
printf("*");
printf("\n");
}
- 主要是要注意表达式的合理性。
效果图
- 值得一提的是这个图案是对称的,所以控制条件的时候可以用绝对值来实现对称结构,这可以极大的缩小代码的长度。
四则运算
#include <stdio.h>
int main()
{
int n, sum;
char c;
scanf("%d%c", &sum, &c);//读取第一个数字
while (c != '=')//程序结束控制条件
{
scanf("%d", &n);//读取运算符号
if (c == '+')sum += n;//根据相应的运算符号进行运算
else if (c == '-')sum -= n;
else if (c == '*')sum *= n;
else if (c == '/')
{
if(n==0)//避免错误被除数为0
break;
else//遇到非法字符时结束循环
sum /= n;
}
else//等号时跳出循环
break;
scanf("%c", &c);//读入下一个数字
}
if(c=='=')//判断输入数据是否合法
printf("%d", sum);
else
printf("ERROR");
return 0;
}
- 主要是要注意最后一个scanf要放在判断完非法字符后面,这样就不会出现程序错误。其他我注释的这么清楚应该都不是问题。
3.PTA实验作业。
3.1 数列求和问题
3.1.1 流程图或伪代码介绍思路
int 定义需要的变量。
for(初始化;结束循环的条件;控制变量)
{
按数列求和的规律得到表达式;
}
3.1.2 代码截图
3.1.3 PTA提交列表及说明
- 运气挺好的一次就对了,后面主要是把自定义符号给改了。需要注意的就是要用flag来控制每次相乘的符号正负问题,其他应该都不是问题。
3.2 图形打印问题。
3.2.1 数据处理
- i,:用做控制外层循环进行的次数。
- n:打印的层数。
- blank:用来负责控制打印空格数量。
- j:用来控制打印*号数量。
- temp1,temp2:储存运算式。
- c:打印的起始字符。
3.2.2 代码截图
第一次代码截图:
第二次代码截图:
第三次改进截图:
3.2.3 PTA提交列表及说明
- 第一个代码截图搞得比较麻烦,后来看了超星视频才改的简洁很多。
- 第二个代码的截图在我试的网页编译器上可以正确运行,但是vs显示空白,pta通过不了。于是我就改了第三个代码。
- 代码三比起代码二更直观简洁,看起来更加舒服,而且因为需要的运算式在循环外只需要算一次,使代码的效率提高。
3.3 自选一题,介绍printf调试如何检查错误
3.3.1 单步调试截图
- 调试之后知道了1,2这两个数需要单独列出来
- 调试之后知道,不引入N=3的情况会导致后面的else出现错误,于是加上N=3的情况。
3.3.2 代码截图
3.3.3 PTA提交列表及说明
- 第一次提交因为没有考虑n=1和n=2的情况。
- 第二次提交没有考虑n=3对后面数据的影响。
- 经过调试后都得到了解决。