【C语言】第4章 选择结构程序设计

第4章 选择结构程序设计

C语言有两种选择语句:
if 语句,实现两个分支的选择结构
switch 语句,实现多分支的选择结构

输入3个数a,b,c,要求按由小到大的顺序输出。
可以先用伪代码写出算法:
if a>b,a和b对换    (a是a、b中的小者)
if a>c,a和c对换     (a是三者中最小者)
if b>c,b和c对换     (b是三者中次小者)
顺序输出a,b,c

#include <stdio.h>
int main()
{ float a,b,c,t;
   scanf("%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;
}

最常用的3种 if 语句形式:
①if (表达式) 语句1
②if (表达式) 语句1
else 语句
③if(表达式1) 语句1
else if(表达式2) 语句2
else if(表达式3) 语句3

else if(表达式m) 语句m
else 语句m+1

关系运算符及其优先次序

C语言提供6种关系运算符:

   ① <  (小于)   ② <=     (小于或等于)   
   ③ >  (大于)   ④ >=     (大于或等于) 
   ⑤ ==   (等于)  ⑥ !=   (不等于) 
【C语言】第4章 选择结构程序设计
c>a+b       等效于  c>(a+b)
a>b==c     等效于  (a>b)==c
a==b<c     等效于   a==(b<c)
a=b>c       等效于   a=(b>c)

关系表达式
用关系运算符将两个数值或数值表达式连接起来的式子
关系表达式的值是一个逻辑值,即“真”或“假”
在C的逻辑运算中,以“1”代表“真”,以“0”代表“假”

逻辑运算符及其优先次序

3种逻辑运算符:
&&(逻辑与) ||(逻辑或) !(逻辑非)

&&和||是双目(元)运算符

!是一目(元)运算符

逻辑表达式:用逻辑运算符将关系表达式或其他逻辑量连接起来的式子

判断年龄在13至17岁之内?
  age>=13 && age<=17
判断年龄小于12或大于65?
  age<12 || age>65
【C语言】第4章 选择结构程序设计
判别某一年是否闰年,用逻辑表达式表示
闰年的条件是符合下面二者之一:
能被4整除,但不能被100整除,如2008
能被400整除,如2000
     (year%4 == 0 && year%100 !=0) || year%400 == 0
     如果表达式值为1,则闰年;否则为非闰年
条件表达式的一般形式为
表达式1?表达式2: 表达式3

条件运算符的执行顺序:
求解表达式1
若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值
若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值
用switch语句实现多分支选择结构
例4.6 要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为60~69分 ,D等为 60分以下 。成绩的等级由键盘输入。

#include <stdio.h>
int main()
{ char grade;
   scanf("%c",&grade);
   printf("Your score:");
   switch(grade)
  { case ‘A‘: printf("85~100\n");break;
     case ‘B‘: printf("70~84\n");break;
     case ‘C‘: printf("60~69\n");break;
     case ‘D‘: printf("<60\n");break;    
     default:  printf("enter data error!\n");
   }
   return 0;
 }

switch语句的作用是根据表达式的值,使流程跳转到不同的语句
switch语句的一般形式:

switch(表达式)
{   case  常量1:语句1
    case  常量2:语句2
       ┇        ┇          ┇
    case  常量n:语句n
    default  :  语句n+1
}
编写程序,用switch语句处理菜单命令。

#include <stdio.h>
int main()
{ void action1(int,int),action2(int,int);
   char ch;  int a=15,b=23;
   ch=getchar();
   switch(ch)
   { case ‘a‘:
      case ‘A’: action1(a,b); break;  
      case ‘b‘:
      case ‘B’: action2(a,b); break; 
      default:  putchar(‘\a’); 
   }
   return 0;
}
void action1(int x,int y) 
{
    printf("x+y=%d\n",x+y);
}
void action2(int x,int y) 
{
    printf("x*y=%d\n",x*y);
}
写一程序,判断某一年是否闰年。
用变量leap代表是否闰年的信息。若闰年,令leap=1;非闰年,leap=0。最后判断leap是否为1(真),若是,则输出“闰年”信息

#include <stdio.h>
int main()	
{int year, leap;
  printf("enter year:"); scanf("%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 is ",year);
  else  printf("%d is not ",year);
  printf("a leap year.\n");
  return 0;
}
求a*x^2+b*x+c = 0方程的根

#include <stdio.h>
#include <math.h>
int main()
{ double a, b, c, disc, x1, x2, realpart, imagpart;
  scanf("%lf,%lf,%lf",&a,&b,&c);
  printf("The equation ");
  if(fabs(a)<=1e-6)   printf("is not a quadratic\n");
  else
     {disc=b*b-4*a*c;
      if(fabs(disc)<=1e-6)   printf("has two equal roots:%8.4f\n", -b/(2*a));
      else
         if(disc>1e-6)
            { x1=(-b+sqrt(disc))/(2*a);
              x2=(-b-sqrt(disc))/(2*a);
              printf("has distinct real roots:%8.4f and %8.4f\n",x1,x2);
            }
if(fabs(a)<=1e-6)   printf("is not a quadratic\n");
  else
     {disc=b*b-4*a*c;
      if(fabs(disc)<=1e-6)   printf("has two equal roots:%8.4f\n", -b/(2*a));
      else
         if(disc>1e-6)
            { x1=(-b+sqrt(disc))/(2*a);
              x2=(-b-sqrt(disc))/(2*a);
              printf("has distinct real roots:%8.4f and %8.4f\n",x1,x2);
            }
         else
            { realpart=-b/(2*a);              
              imagpart=sqrt(-disc)/(2*a);       
              printf(" has complex roots:\n");         
              printf("%8.4f+%8.4fi\n“, realpart, imagpart); 
              printf("%8.4f-%8.4fi\n",  realpart, imagpart);   
	}
      }
    return 0;
}  
运输公司对用户计算运输费用。路程(s km)越远,每吨·千米运费越低。
标准如下: 
        s < 250 		没有折扣
        250≤s < 500   	2%折扣
        500≤s < 1000   	5%折扣
      1000≤s < 2000 	8%折扣
      2000≤s < 3000 	10%折扣
      3000≤s  		15%折扣

#include <stdio.h>
int main()
{ 
   int c,s;
   float p,w,d,f;
   printf("please enter price,weight,discount:");   
   scanf("%f,%f,%d",&p,&w,&s); 
   if(s>=3000)  c=12;                               
   else   c=s/250; 
   switch(c)
     { case 0:   d=0; break; 
       case 1:   d=2; break;                          
       case 2: 
       case 3:   d=5; break;                           
       case 4: 
      case 5:      
      case 6:      
      case 7:   d=8; break;                           
      case 8:  case 9:  case 10:   
      case 11:  d=10; break;                        
      case 12:  d=15; break;  
    }
   f = p * w * s * (1 - d / 100);                   
   printf(“freight=%10.2f\n”,f); 
   return 0;
}

【C语言】第4章 选择结构程序设计

上一篇:Hive_分区排序(Distribute By)


下一篇:微信切忌跑马圈地:即时通讯2B市场硝烟四起