第四章分支结构程序设计总结

4.1引例

【例4.1】输入三角形的三边,判断是否能构成三角形,若能则计算并输出三角形的面积,否则给出出错提示。

#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);
	}
	return 0;
}

 

 

 【例4.2】

#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;
}

 

4.2关系运算符、逻辑运算符、条件运算符

4.2.1关系运算符和关系表达式

1.关系运算符:关系运算符用于判断两个操作数的大小关系。

注意:

(1)关系运算符都是双目运算符,其结合方向是左结合。

(2)关系运算符的优先级低于算术运算符,但是高于赋值运算符。

(3)关系运算符中,>、<、>=、<=的优先级相同,==、!=的优先级相同,前者的优先级高于后者,即“>=”的优先级高于“==”。

2.关系表达式:用关系运算符将两个表达式的大小,返回一个逻辑值。

功能:比较两个表达式的大小,返回一个逻辑值。

注意:

(1)注意区分运算符“=”和“==”。“=”是赋值运算符,“==”是关系运算符。

(2)对实数进行相等判断可能得不到正确的结果。

(3)关系表达式中可以出现赋值运算符。“1”表示“真”,“0”表示“假”。

【例4.3】关系运算示例。

#include<stdio.h>
int main()
{
	char c = 'm';
	int i = 10, j = 20, k = 30;
	float x = 13e+5, y = 10.85;
	printf("%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;
}

 4.2.2逻辑运算符和逻辑表达式

1.逻辑运算符:关系表达式只能描述单一的条件。

注意:与运算符&&和或运算符||都是双目运算符,非运算符!为单目运算符。

2.逻辑表达式

 【例4.5】逻辑运算示例。

#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.2.3条件运算符和条件表达式

1.条件运算符:条件运算符由“?”和“:”两个符号组成,用于条件求值,它是一个三目运算符,需要三个操作数。条件运算符的优先级低于逻辑运算符、高于赋值运算符,它是右结合的。

2.条件表达式:由条件运算符将3个表达式连接起来的式子称为条件表达式。

 【例4.6】用条件表达式求两个数中的较大数。

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

 4.3使用if-else实现分支结构

1.if-else语句

【例4.7】使用双分支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);
return 0;
}

 【例4.8】

#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语句可以用条件表达式替代。

2.单分支语句

【例4.9】编写程序任意输入一个实数,输出其绝对值。

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

 【例4.10】

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

 

 

  【例4.11】输入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);
	return 0;
}

  4.3.2if语句的嵌套

【例4.12】输入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;
}

 【例4.13】

#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);
	return 0;
}

  4.3.3多分支if语句

【例4.14】

#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;
}

 【例4.15】

#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;
}

 4.4使用switch语句实现分支结构

关于switch语句的几点说明:

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

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

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

(4)可以让多个case共用一组执行语句。

(4)switch语句允许嵌套使用。

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

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

【例4.7】本程序的功能是:根据键盘输入的年、月,输出该年、该月的天数。

#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);
 return 0;
}

 

  【例4.18】使用switch语句编写例4.14的程序。

#include<stdio.h>
#include<stdio.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; break;
 case 2:
  y = 7 - 3 * x; break;
 case 3:
  y = 1 - cos(x); break;
 }
 printf("y=%0.5f\n", y);
 return 0;
}

 3.在switch语句格式中不使用break语句:switch语句中不使用break语句时,程序在执行相应语句后,不会跳出正在执行的switch语句,而会继续执行其后的所有语句。

 4.5分支结构程序设计示例

【例4.19】

#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);
    return 0;
}

 

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

1.标准格式实现

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

  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);
    return 0;
}

 

3.多分支格式实现

#include<stdio.h>
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);
    return 0;
}

 

 【例4.21】由键盘输入一个3位的整数,判断该数是否为升序。若输入的不是3位数,输出“Enter error”。升序是指高位数依次小于其低位数的数。如359为升序数。

#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);
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值