一、思维导图

二、 写出自己对以下语法的认识
1、if-else(选择判断语句):
If(条件){
语句1;
} else {
语句2;
}
该语句用于实现分支结构,根据表达式的值来选择其中的一条来执行。常用于计算二分段函数,。
问题:一开始常常忘记大括号,格式不够标准。
解决方法:参照一定格式的代码,多次练习。
2、switch 语句:
switch(整形表达式)
{
case 常量表达式1: 语句1;break;
case 常量表达式2: 语句2;break;
case 常量表达式n: 语句n;break;
default: 语句n+1;
}
该语句先计算表达式的值,然后与其后面的常量表达式相比较,当所计算的值与某个常量表达式的值相等时,即执行其后的语;,若均不相等,则执行default后的语句。
问题:有时把用于判断讲条件的‘··· ···’加上括号,case后有时使用大括号,过于依赖switch语句写出的代码比较繁琐,不易于他人理解。
解决方法:多用编译器调试检查错误,只在switch语句有明显优势时使用switch语句。
注意事项:1,在case后的各常量表达式的值不能相同,否则会出现错误。
2,switch语句中的break语句并不是每个case语句后都必须有。
3、for 语句:
for(表达式1; 表达式2; 表达式3)
{
循环体语句
}
问题:控制不好for语句的循环次数,导致运算结果错位。
思考代码时思路不够清晰,常常出现答案错误的问题。
解决方法:先取小一点的数字手动运行一次,再写程序。
注意事项:for语句中:表达式1只是负责在开始时提供一个起点,只运算一次。
表达式2是是否再一次执行循环的判断条件。
表达式3为循环提供变量,避免程序陷入死循环。
4、while 语句:
while(循环条件)
{
循环体语句
}
注意事项:while语句中的表达式可以是任意的合法表达式。
while语句是循环语句的一员,其他循环语句写出的代码几乎都能化为while语句,自己读不懂某个循环代码时,可以将其化为while语句。
5、do while 语句:
do
{
循环体语句
}while(循环条件)
注意事项:do while语句和while语句的区别在于do while语句是先执行一次,在判断条件;而while语句是先判断条件在执行程序,这就导致两种语句在某些情况下第一次的输值不一样,在选择时两种语句时要稍加注意。
6、break 语句:
switch(整形表达式)
{
case 常量表达式1: 语句1;break;
…
case 常量表达式n: 语句n;break;
default: 语句n+1;
}
for(表达式1; 表达式2; 表达式3)
{
语句1;
continue;
语句2;
}
注意事项:break语句可以出现在选择结构和循环结构里,但continue语句只能用在循环语句中,continue语句使用后,本次循环直接结束,不再执行continue之后的语句,直接进行下一轮循环。break语句是跳出当前执行行的语句,二者各有特色,各有各的作用。
如果执行语句段1,在执行完语句段1后,有break,则会跳出switch结构,而如果没有break,则顺序向下。
三:pta分数截图
2.3 2.4

第三章作业

4.1作业

四:PTA分析
求阶乘序列前N项和

#include <stdio.h>
int main(){
int n,sum=0,a=1;
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int b=1;b<=i;b++){
a *= b;
}sum += a;
a=1;
}
printf("%d",sum);
return 0;
}
思路分析:用*=来计算n的阶乘,用++使每次所乘的数加一。
用“+=”使每次乘法得出的值加在sum上去。
查询水果价格

#include <stdio.h>
int main(){
int a;
printf("[1] apple\n[2] pear\n[3] orange\n[4] grape\n[0] exit\n");
for(int i=1;i<=5;i++){
scanf("%d",&a);
if(a==0){
break;
}
switch (a){
case 1:printf("price = 3.00\n");break;
case 2:printf("price = 2.50\n");break;
case 3:printf("price = 4.10\n");break;
case 4:printf("price = 10.20\n");break;
default:printf("price = 0.00\n");break;
}
}
return 0;
}
分析思路:当连续查询次数超过5次时,程序应自动退出查询,所以调用for循环完成;
用户输入0即退出,所以用if结构判断输入值是否为0;
由于choice情况多,所以选择使用switch多分支结构,应对各种case;
我学会了:对于switch case语句,可以考虑改变格式,使代码更美观。
高空坠球

#include <stdio.h>
int main(){
long a,n;
int i;
double h,s=0.0,b;
scanf("%ld %ld",&a,&n);
h=1.0*a;
if(n==0){
printf("%.1f %.1f",0.0,0.0);
}else{
for(i=1;i<=n;i++){
if(i==1){
s += h;
h=1.0/2*h;
}else{
s += 2*h;
h=1.0/2*h;
}
}
printf("%.1f %.1f",s,h);
}
return 0;
}
思路分析:由于0比较特殊可以先用if语句将n=0的情况排除掉,再用for循环进行计算。
因为最后一次没有弹起,所以应该减去最后第n次的高度。
错误:对球动态过程分析不到位,导致公式错误,对细节把握的不太好。
收获;在Devc++上面进行断点调试,选用特殊的情况调试,可以大大缩短代码改正时间。