C语言

一、思维导图

 

二、 写出自己对以下语法的认识

1、if-else(选择判断语句):

If(条件){

语句1;

} else {

语句2;

}

该语句用于实现分支结构,根据表达式的值来选择其中的一条来执行。常用于计算二分段函数,。

问题:一开始常常忘记大括号,格式不够标准。

解决方法:参照一定格式的代码,多次练习。

2、switch 语句:

 

switch(整形表达式)
{ 
    case 常量表达式1:  语句1;break;
    case 常量表达式2:  语句2;breakcase 常量表达式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++上面进行断点调试,选用特殊的情况调试,可以大大缩短代码改正时间。

 

posted @ 2019-10-15 23:30  楠木。  阅读(262)  评论(1编辑  收藏  举报