第四章总结

1,2示例:输入三角形的三条边,判断是否能构成三角形

代码:#include<stdio.h>
#include<math.h>
int main()
{
 int a, b, c;
 float area;
 double s;
 printf("请输入三角形的三条边长:");
 scanf_s("%d,%d,%d", &a, &b, &c);
 s = (a + b + c) / 2.0;
 if (a + b <= c || b + c <= a || a + c <= b) {
  printf("不构成三角形/n");
 }
 else
 {
  area = sqrt(s * (s - a) * (s - b) * (s - c));
  printf("三角形的面积是:%f\n", area);
 }
}

流程图:

2,编写程序,输入x的值 ,以下分段输出y的值

代码:#include<stdio.h>
int main()
{
 int x; float y;
 printf("输入x的值:");
 scanf_s("%d", &x);
 if(x!=0)
 {
  y = 1.0 / x;
 }
 else
 {
  y = 0;
 }
 printf("%d,%f", x, y);
 return 0;
}

流程图: 

一:关系运算符,逻辑运算符,条件运算符 

运算符:>,>=,<,<=,=,!=

含义:大于,大于等于,小于,小于等于,等于,不等于

注意:

1:关系运算符都是双目运算符,其结合方向是左结合的

2:关系运算符的优先级低于算数运算符,但是高于赋值运算符

(2)关系表达式

注意:

1:注意区分运算符,=是赋值运算符,==是关系运算符

2:对实数进行相等判断可能得不到正确结果

3:关系运算符中可以出现赋值运算符

示例:关系运算符

代码:#include<stdio.h>
int main()
{
 char c = 'm';
 int i = 10, j = 20, k = 30;
 float x = 13e+5, y = 10.85;
 pritnf("%d,%d,", 'a' + 5 < c, -i - 2 * j >= k + 1);
 printf("%d,%d,", 1 < j < 5, x - 5.25 <= x + y);
 printf("%d,%d\n", i + j + k == -2 * j, k == j == i + 5);
 return 0;
}

流程图: (3)逻辑运算符

常用的:!=:不等于    &&:并且      ||:或者 

逻辑表达式:逻辑表达式的结果也是一个逻辑值”真“或者”假“,即为”1“或者”0“

示例:逻辑运算

代码:#include<stdio.h>
int main()
{
 int a = 3, b = 3, c = 2, d;
 printf("%d,", !a && !b && c);
 printf("%d,", !a || !b || c);
 printf("%d\n", a >= b && b > c);
 d = c-- || (b = 6) && a++;
 printf("a=%d,b=%d,c=%d,d=%d\n", a, b, c, d);
 return 0;
}

流程图:

(4)条件运算符和条件表达式

1:条件运算符:条件运算符由“?”和“:”两个符合组成,用于一个三目运算符,需要三个操作数

条件表达式:由条件运算符将3个表达式连接起来的式子称为条件表达式,一般形式为:

表达式1?表达式2:表达式3       表达式1是否满足,:的意思为“或者”

示例:由条件表达式求两个数中的较大数

代码:#include<stdio.h>
int main()
{
 int x, y;
 printf("请输入两个整数:");
 scanf_s("%d,%d", &x, &y);
 printf("两个整数的最大数为:%d\n", x > y ? x : y);
 return 0;
}

流程图:

 (5):使用if-else语句实现分支结构

形式:if(表达式)

语句1;

else

语句2;

示例:使用双分支if语句求两个数中的最大数

代码:#include<stdio.h>
int main()
{
 int a, b;
 printf("请输入两个整数:");
 scanf_s("%d%d", &a, &b);
 if (a > b)
 {
  printf("两个整数中的最大数为:%d\n", a);
 }
 else
 {
  printf("两个整数中的最大数为:%d\n", b);
 }
}

流程图: 2,编写一个程序,根据键盘输入的x的值,计算y的值

代码:

#include<stdio.h>
#include<math.h>
int main()
{
 double x, y;
 printf("输入x的值:");
 scanf_s("%lf", &x);
 if(x<=1)
 {
  y = exp(x);}
 else
 {
  y = pow(x,2) - 1;

 }
 printf("f(%f)=%.2f\n", x, y);
 return 0;


}

流程图: 双分支if语句可以用条件表达式替换,例如,当if语句中只给同一个变量赋值时,可以使用条件表达式代替if语句

如;if(a>0)

y=a;

else

y=-a;

等价于:  y=(a>0)?a:-a

单分支if语句

一般形式:if(表达式)

                       语句;

示例:1,编写程序任意输入一个实数,输出其绝对值

代码:#include<stdio.h>
int main()
{
 float x;
 scanf_s("%f", &x);
 if(x<0)
 {
  x = -x;
 }
 printf("%f", x);
}

流程图: 

 无论是双分支还是单分支if语句的格式中,“表达式”都是用来描述判断的条件,语法上可以是任意类型的表达式

2,若有以下分段函数,根据x的值,求y的值

代码:#include<stdio.h>
int main()
{
    int x, y;
    printf("x=:");
    scanf_s("%d", &x);
    if (x != 0)
    {
        y = 1;
    }
    else
    {
        y = -1;
    }
    printf("y=%d", y);
}

流程图: 

无论在双分支还是单分支if语句的格式中,被执行的语句均为单个语句,如果想要执行一组(多于一个)语句时,则必须将这一组语句用{}括起来形成复合语句。

3,输入三个实数,要求按从小到大的顺序输出

代码:

#include<stdio.h>
int main()  
{
 float a, b, c, t;
 scanf_s("%f,%f,%f", &a, &b, &c);
 if (a > b)
 {t = a; a = b; b = t;
 }
 if (a > c)
 {
  t = a; a = c; c = t;
 }
 if(b>c)
 {
  t = b; b = c; c = t;
 }
 printf("%5.2f,%5.2f,%5.2f\n", a, b, c);

 
}

 流程图:

说明:程序中的复合语句{t=a;a=b.b=t;},其作用是交换变量a和b的值,变量t为中间变量。

 (6)if语句的嵌套

1:形式:

if(表达式1)

if(表达式2)

语句1;

else

语句2;

else

if(表达式3)

语句3;

else

语句4;

示例:1,输入3个任意整数,找出其中的最大值

代码:#include<stdio.h>
int main()
{
 int a, b, c, max;
 scanf_s("%d%d%d", &a, &b, &c);
 if (a > b)
 {
  if (a > c)
   max = a;
  else
   max = c;
 }
 else
 {
  if (b > c)
   max = b;
  else
   max = c;
 }
 printf("max=%d\n", max);
 return 0;
}

流程图: 

说明:程序分别在if语句基本形式的语句1与语句2部分嵌套了一个完整的if语句

2,编写程序,输入一个x的值,按以下函数计算并输出y的值

代码:#include<stdio.h>
int main()
{
 int x, y;
 scanf_s("%d", &x);
 if (x > 0)
  y = 1;
 else
  if (x == 0)
   y = 0;
  else
   y = -1;
 printf("y=%d\n", y);
}

流程图: 

多分支if语句

1:形式:

if(表达式1)

语句1;

else if(表达式2)

语句2;

.......

else if(表达式n-1)

语句n-1

else

语句n;

示例:1,编写程序,输入x的值,按以下分段函数计算并输出y的值

代码:#include<stdio.h>
#include<math.h>
int main()
{
 float x, y;
 printf("输入x的值:");
 scanf_s("%f", &x);
 if (x < 2)
 {
  y = 2 * x;
 }
 else if(x<=10)
 {
  y = 7 - 3 * x;
 }
 else
 {
  y = 1 - cos(x);
 }
 printf("y=%0.6f\n", y);
 return 0;
}

流程图:说明:程序中需要计算cos(x)的值,所以在程序开始处要包含数学函数的头文件math.h 

2,编写程序由键盘输入一个字符,小写转换为大写,大写转换为小写

代码:#include<stdio.h>
int main()
{
 char c1, c2;
 printf("请输入一个字符:");
 c1 = getchar();
 if(c1>='a'&&c1<='z')
 {
  c2 = c1 - 32;
 }
 else if(c1>='A'&&c1<='z')
 {
  c2 = c1 + 32;
 }
 else
 {
  c2 = c1 + 1;
 }
 putchar(c2);
 return 0;
}

流程图: 

(7)使用switch语句实现分支结构

1:形式:

switch(表达式)

{case常量表达式1:语句1;break;

case常量表达式2:语句2;break;

...

case常量表达式n:语句n;break;

default:语句n+1;break;

2:说明

1,switch后的表达式可以是任意表达式,其值只能为整型,字符型,枚举型之一

2,每个case后面的常量表达式的值互不相同,否则就会出现互相矛盾的现象

3,各个case和default的出现次序不影响执行结果

4,可以让多个case共用一组执行语句

5,switch语句允许嵌套使用

示例:1,编写程序,输入一个月份值,输出该月份的第几季度

代码:#include<stdio.h>
int main()
{
 int month;
 printf("输入月份:");
 scanf_s("%d", &month);
 switch ((month - 1) / 3)
 {
 case 0:
  printf("%d月是第一季度\n", month);
  break;
 case 1:
  printf("%d月是第二季度\n", month);
  break;
 case 2:
  printf("%d月是第三季度\n", month);
  break;
 case 3:
  printf("%d月是第四季度\n", month);
  break;
 default:
  printf("输入错误\n");
  break;}
}

流程图: 

使用switch语句的一个难点是构造switch语句的表达式

2,在switch语句格式中的部分语句后面使用break语句

(本程序的功能是:根据键盘输入的年月,输出该年,该月的天数。

代码:#include<stdio.h>
int main()
{
 int year, month, days;
 printf("请输入年,月:");
 scanf_s("%d,%d", &year, &month);
 switch (month)
 {
 case 1:
 case 3:
 case 5:
 case 7:
 case 8:
 case 10:
 case 12:
  days = 31;
  break;
 case 4:
 case 6:
 case 9:
 case 11:
  days = 30;
  break;
 case 2:
  if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
   days = 29;
  else
   days = 28;
  break;
 }
 printf("%d年%d月的天数是%d天\n", year, month, days);
}
   

 流程图:

3,使用switch语句编写输入x的值,按以下分段函数计算并输出y的值

代码: #include<stdio.h>
#include<math.h>
int main()
{
 int expression;
 float x, y;
 printf("输入x的值:");
 scanf_s("%f", &x);
 expression = (int)(1 * (x < 2) + 2 * (x >= 2 && x <= 10) + 3 * (x > 10));
 switch (expression)
 {
 case 1:
  y = 2 * x;
 case 2:
  y = 7 - 3 * x;
 case 3:
  y = 1 - cos(x);
  break;
 }
 printf("y=%0.5f\n", y);
}

流程图: 

变量expression用于存放构造表达式的值。

(7)分支结构程序设计示例

·编写程序,输入x计算并输出下列分段函数f(x)的值(保留两位小数)调用sqrt()函数求平方根,调用pow()函数求幂。

代码:

#include<stdio.h>
#include<math.h>
int main()
{
    float x, y;
    scanf_s("%f", &x);
    if (x >= 0)
    
        y = sqrt(x);
    
    else
    
        y = pow(x, 5) + 2 * x + 1 / x;
    
    printf("x=%.2f,y=%.2f\n", x, y);

}

流程图:

2,编写程序,判断输入的年份是否为闰年,要求分别使用if语句的标准格式,嵌套格式及多分支格式实现

 

(1)标准格式实现

#include<stdio.h>

int main()
{
    int year, leap;
    printf("输入年份:");
    scanf_s("%d", &year);
    if ((year % 4 == 0 && year && year % 100 != 0) || (year % 400 == 0))
        leap = 1;
    else
        leap = 0;
    if (leap)
        printf("%d是闰年\n", year);
    else
        printf("%d不是闰年\n", year);
}

流程图:

                2,嵌套格式实现

代码: 

#include<stdio.h>
int main()
{
    int year, leap;
    printf("输入年份:");
    scanf_s("%d", &year);
    if (year % 4 == 0)
    
        {    if (year % 100 == 0)
    {    if (year % 400 == 0)
                leap = 1;
            else
                leap = 0;
        }
    else
            leap = 1;
    
    
    }


else
leap = 0;
if (leap)
printf("%d是闰年\n", year);
else
printf("%d不是闰年\n", year);
}

流程图:

 

3,多分支格式实现

代码:

int main()
{
    int year, leap;
    printf("输入年份:");
    scanf_s("%d", &year);
    if (year % 4 != 0)
        leap = 0;
    else if (year % 100 != 0)
        leap = 1;
    else if (year % 400 != 0)
        leap = 0;
    else
        leap = 1;
    if (leap)
        printf("%d是闰年\n", year);
    else
        printf("%d不是闰年\n", year);
}


流程图:

这三个实现方式中用year表示年份,leap作为“标志变量”,用于表示输入的年份是否为闰年。leap=1就是闰年,leap=0不是闰年

3,由键盘输入一个三位的整数,判断该数是否为升序数

代码: 

#include<stdio.h>
int main()
{
    int n, a, b, c;
    printf("请输入一个3位整数:");
    scanf_s("%d", &n);
    if (n < 100 || n>999)
        printf("输入错误!\n");
    else
    {
        a = n / 100;
        b = n / 10 % 10;
        c = n % 10;
        if (a < b && b < c)
            printf("%d是升序数\n", n);
        else
            printf("%d不是升序数\n", n);
        

    }
}

流程图:

说明:变量n小于100或者大于999时其值为真。此时n不是三位数,不符合题意

变量a的值小于变量b的值,并且变量b的值小于变量c的值时其值为真。此时n为升序数 


版权声明:本文为qq_61920354原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。