C语言基础学习day05

顺序结构

示例一:

输入三角形的三边长,求三角形面积

已知三角形的三边长a,b,c,则该三角形的面积公式为

#include<math.h>
#include<stdio.h>
void main()
{
    double a,b,c,s,area;
    scanf("%lf,%lf,%lf",&a,&b,&c);
    s=(a+b+c)/2.0;
    area=sqrt(s*(s-a)*(s-b)*(s-c));
    printf("a=%7.2f,b=%7.2f,c=%7.2f\n",a,b,c,s);
    printf("area=%7.2f\n",area);
}

 

 

 

分支程序设计

关系运算符和表达式比较大小

 

 

 关系表达式的值是真和假,用1和0表示

#include<stdio.h>
int main(void)
{
    int true_val, false_val;
    true_val = (10 > 2); // 关系为真的值
    false_val = (10 == 2); // 关系为假的值
    printf("true = %d; false = %d \n", true_val, false_val);
    return 0;
}

逻辑运算符和表达式

与运算:&&        参与运算的两个值都为真,结果才为真,否则为假

或运算:||           参与运算的两个值只要有一个为真,结果就为真,两个都为假,结果为假

非运算:!         参与运算量为真,结果为假,参与运算量为假,结果为真

 

void main()
{    
    int score;
    printf("请输入一个分数:\n");
    scanf("%d",&score);
    if(score < 60)
    {
        printf(" the score is E");
    }
    //else if(60<=score<70)
    else if ((score>60 || score==60)&&score<70)
    {
        printf("the score is D");
    }
    else if((score>70||score==70)&&score<80)
    {
        printf("the score is C");
    }
    else if((score>80||score==80)&&score<90)
    {
        printf("the score is  B");
    }
    else
    {
        printf("the score is A");
    }
    
}
void main()
{
    int a,b,c,temp;
    printf("请输入三个数:\n");
    scanf("%d%d%d",&a,&b,&c);
    if(a>b)
    {
        temp=a;
        a=b;
        b=temp;
    }
    if(a>c)
    {
        temp=a;
        a=b;
        b=temp;
    } 
    if(b>c)
    {
        temp=b;
        b=c;
        c=temp;
    }
    printf("%d %d %d\n",a,b,c);
}

 

if语句的嵌套

在嵌套内的if语句可能又是if-else型的

为了避免二异性,C语言规定,else总是与它前面最近的if配对

 

条件表达式通常用于赋值语句中

例如条件语句

if(a>b)max=a;

else max=b;

可用条件表达式写为 max=(a>b)?a:b;

执行该语句的语义是:如a>b为真,则把a赋予max,否则把b赋予max

 

使用条件表达式时,还应注意以下几点:

1. 条件运算符的运算优先级低于关系运算符和算数运算符,但高于赋值符,因此,max=(a>b)?a:b;可以去括号写为max=a>b?a:b;

2. 条件运算符?和:是一对运算符,不能分开单独使用

3. 条件运算符的结合方向是自右向左

 

switch语句

C语言还提供了另一个用于多分支选择的switch语句,其一般形式为:

switch ( 整型表达式)
{
        case 常量1:语句 <--可选
        case 常量2:语句 <--可选
        default : <--可选
        语句 <--可选
}

其语义是:计算表达式的值,并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断

                  继续执行后面所有case后的语句,如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句

 

void main()
{
    int a;
    printf("请输入一个整数:");
    scanf("%d",&a);
    switch(a)
    {
        case 1:printf("星期一");break;
        case 2:printf("星期二");break;
        case 3:printf("星期三");break;
        case 4:printf("星期四");break;
        case 5:printf("星期五");break;
        case 6:printf("星期六");break;
        case 7:printf("星期日");break;
        default:printf("错误");
    }
 } 

注意以下几点:

1. 在case后的各常量表达式的值不能相同,否则会出现错误

2. 在case后,允许有多个语句,可以不用{}括起来

3. 各case和default子句的先后顺序可以变动,而不会影响程序执行结果

4. default子句可以省略不写

tips:全选然后按alt+F8会排整好代码的顺序

void main()
{
    double a,b;
    char c;
    printf("请输入要计算的公式:");
    scanf("%lf%c%lf",&a,&c,&b);
    switch(c)
    {
        case '+':
            printf("%lf\n",a+b);
            break;
        case '-':
            printf("%lf\n",a-b);
            break;
        case '*':
            printf("%lf\n",a*b);
            break;
        case '/':
            printf("%lf\n",a/b);
            break;
        default:
            printf("您输入的公式有误"); 
    }
    
}
void main()
{
    double p,w,s,d; 
    printf("请输入基本运费:\n");
    scanf("%lf",&p);
    printf("请输入货物重:\n");
    scanf("%lf",&w);
    printf("请输入距离:\n");
    scanf("%lf",&s);
    if (s<250)
    {
        d=0;
    }
    else if(s>250||s==250 &&s<500)
    {
        d=0.02;
    }
    else if(s>500||s==500 &&s<1000)
    {
        d=0.05;
    }
    else if(s>1000||s==1000 &&s<2000)
    {
        d=0.08;
    }
    else if(s>2000||s==2000 &&s<3000)
    {
        d=0.10;
    }
    else if(s>3000||s==3000 )
    {
        d=0.15;
    }
    printf("总运费是:%lf\n",p*w*s*(1-d));
}

 

 

循环程序设计

特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止

给定的条件成为循环条件,反复执行的程序段称为循环体

C语言提供了多种循环语句,可以组成各种不同形式的循环结构

1. 用goto语句和if语句构成循环

2. 用while语句

3. 用do-while语句

4. 用for语句

 

goto语句以及goto语句构成循环

goto语句是一种无条件转义语句,与BASIC中的goto语句相似,goto语句的使用格式:

goto 语句标号;

其中标号是一个有效的标识符,这个标识符加上一个":"一起出现在函数内某处,执行goto语句后,程序将跳转到该标号处并执行其后的语句,另外标号必须在goto语句同处于一个函数中,但可以不在一个循环层中

通常goto语句与if条件语句连用,当满足某一条件时,程序跳到标号处运行

但是注意:goto语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套退出时,用goto语句则比较合理

 

实现从1+2+3+....+100

#include<stdio.h>
void main()
{
    int i,sum=0;
    i=1;
    
    loop:if(i<=100)
    {
        sum=sum+i;
        i++;
        goto loop;
    }
    printf("%d\n",sum);
 } 

loop是语句标号

 

while语句

while语句的一般形式为:

while(表达式)语句

其中表达式是循环条件,语句为循环体

while语句的语义是:计算表达式的值,当值为真(非0)时,执行循环体语句,其执行过程可用下图表示

注意:如果表达式的值一开始就为0,则语句一次也不会执行

 

实现从1+2+3+....+100

#include<stdio.h>
void main()
{
    int n,sum;
    n=1;
    sum=0;
    while(n<=100)
    {
        sum+=n;
        n+=1;
    }
    printf("%d",sum);
 } 

 使用while语句应注意以下几点:

1. while语句中的表达式一般是关系表达式或逻辑表达式,只要表达式的值为真(非0)即可继续循环

2. 循环体如包括有一个以上的语句,则必须用{}括起来,组成复合语句

 

do-while语句

一般形式:

do

    语句

while(表达式);

这个循环与while循环的不同在于:它先执行循环中的语句,然后再判断是否为真,如果为真则继续循环,如果为假,则终止循环,因此,do-while循环至少要执行一次循环语句

 

实现从1+2+3+....+100

ude<stdio.h>
void main()
{
    int n,sum;
    n=1;
    sum=0;
    do
    {
        sum+=n;
        n+=1;
    }while(n<=100);
    printf("%d",sum);
 } 

 

 

for语句

一般形式:

for (表达式1;表达式2;表达式3)语句

 

执行过程如下:

1. 先求解表达式1

2. 求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第3步;若其值为假(0),则循环结束,转到第5步

3. 求解表达式3

4. 转回上面第2步继续执行

5. 循环结束,执行for语句下面的一个语句

 

for(循环变量赋初值;循环条件;循环变量增量)语句

循环变量赋初值总是一个赋值语句,它用来给循环控制变量赋初值,循环条件是一个关系表达式,它决定什么时候退出循环,循环变量增量,定义循环控制变量

每循环一次后按什么方式变化,这三个部分之间用  ;  隔开

for(i=1;i<=100;i++)
{
       sum=sum+i;
}

先给i赋初值1,判断i是否小于100,若是则执行语句,之后值增加1,再重新判断知道条件为假,即i>100时,结束循环

#include<stdio.h>
void main()
{
    int n,sum;
    n=1;
    sum=0;
    for(n=1;i<=100;n++)
    {
        sum+=n;
    }
 } 

 

注意:

         1. for循环中的表达式1,表达2和表达式3都是选择项,即可以缺省,但  ;  不能缺省

         2. 省略了表达式1,表示不对循环控制变量赋初值

         3. 省略了表达式2,则不做其他处理时便成死循环

         4. 如果省略了表达式3,则不对循环控制变量进行操作,这时可在语句中加入修改循环控制变量的语句

#include<stdio.h>
void main()
{
    int n,sum;
    n=1;
    sum=0;
    for(n=1;n<=100;)
    {
        sum+=n;
        n++;
    }
    printf("%d",sum);
 } 

            5.  3个表达式都可以省略

                for(; ;)语句相当于while(1)语句

            6. 表达式1可以是设置循环变量的初值的赋值表达式,也可以是其他表达式

#include<stdio.h>
void main()
{
    int n,sum;
    for(n=1,sum=0;;n<=100;)
    {
        sum+=n;
        n++;
    }
    printf("%d",sum);
 } 

           7. 表达式1和表达式3可以是一个简单表达式也可以是逗号表达式

           8. 表达式2一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值非零,就执行循环体

#include<stdio.h>
void main()
{
    int i,j;
    for(i=1;i<=6;i++)
    {
        printf("\n");
        for(j=1;j<=i;j++)
        {
            putchar('*');
        }
    }
}

 

程序1. 有1,2,3,4数字,能组成多少个互不相同且不重复的三位数,都是多少 

void main()
{
    int i,j,k;
    printf("\n");
    for(i=1;i<5;i++)
    {
        for(j=1;j<5;j++)
        {
            for(k=1;k<5;k++)
            {
                if(i!=k&&i!=j&&j!=k)
                {
                    printf("%d%d%d\n",i,j,k);
                }
            }
        }
    }
    
 } 

 

 

break和continue语句

break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句

一般形式:break;

break语句不能用于循环语句和switch语句之外的任何其他语句中

注意:

        1, break语句对if-else的条件语句不起作用

        2, 在多层循环中,一个break语句只向外跳一层

void main()
{
    int r;
    float area;
    float pi=3.14159;
    for(r=1;r<=10;r++)
    {
        area=pi*r*r;
        if (area>100)
        {
            break;
        }
        printf("r=%d,area=%f\n",r,area);
    }
}

break跳出for循环

 

continue语句

作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定

 

continue语句和break语句的区别

continue语句只结束本次循环,而不是终止整个循环的执行

break语句则是结束整个循环过程,不再判断执行循环的条件是否成立

 

例题把100~200之间的不能被3整除的数输出

void main()
{
    int n;
    for (n=100;n<=200;n++)
    {
        if(n%3==0)
            continue;
        printf("%d\n",n);
    }
}

 

例题2 求π

#include<math.h>
void main()
{
    int s;
    float n,t,pi;
    t=1;
    pi=0;
    n=1.0;
    s=1;
    while(fabs(t)>1e-6)
    {
        pi=pi+t;n=n+2;s=-s;t=s/n;
    }
    pi=pi*4;
    printf("pi=%10.6f\n",pi);
}

 

posted @ 2019-01-16 14:47  洛水卿卿  阅读(361)  评论(0编辑  收藏  举报