C语言学习笔记--C判断类型

C判断

判断结构要求程序员制定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。
C语言把任何非零非空的值假定为true,把null假定为false
下面是大多数编程语言中典型的判断结构的一般形式:
C语言学习笔记--C判断类型_第1张图片

判断语句

C语言提供了一下类型的判断语句。

语句 描述
if语句 一个if语句由一个布尔表达式后跟一个或多个语句组成。
if…else语句 一个if语句后可跟一个可选的else语句,else语句在布尔表达式为假时执行。
嵌套if语句 可以再一个ifelse if语句内使用另一个ifelse if语句。
switch语句 一个switch语句允许测试一个变量等于多个值时的情况。
嵌套switch语句 可以再一个switch语句内使用另一个switch语句。

if语句

语法
C语言中if语句的语法:

if(boolean_expression)
{
	//如果布尔表达式为真将执行此语句
}

如果布尔表达式为true,则if语句内的代码块将会被执行。如果布尔表达式为false,则if语句结束后的第一组代码(闭括号内)将被执行。
C语言把任何非零非空的值假定为true,把null假定为false
C语言学习笔记--C判断类型_第2张图片
实例

#include
int main()
{
	 /* 局部变量定义 */
  	 int a = 10;
	 /* 使用 if 语句检查布尔条件 */
   	if( a < 20 )
   	{
    	   /* 如果条件为真,则输出下面的语句 */
       		printf("a 小于 20\n" );
   	}
   	printf("a 的值是 %d\n", a);
 
   	return 0;
}

当上面的代码被编译和执行时,将会产生下列结果:

a 小于 20
a 的值是 10

if…else语句

语法
C语言中if…else语句的语法:

if(boolean_expression)
{
   /* 如果布尔表达式为真将执行的语句 */
}
else
{
   /* 如果布尔表达式为假将执行的语句 */
}

如果布尔表达式为true,则执行if块内的代码。如果布尔表达式的为false,则执行else块内的代码。C语言把任何非零非空的值假定为true,把null假定为false
C语言学习笔记--C判断类型_第3张图片
实例

#include
int main()
{
	//局部变量定义
	int a=100;
	//检查布尔条件
	if(a<20)
	{
		//如果条件为真,则输出下面的语句
		printf("a小于20\n");
	}
	else
	{
		//如果条件为假,则输出下面的语句
		printf("a大于20\n");
	}
	printf("a的值是%d\n",a);
	return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

a大于20
a的值是100

if…else if…else语句

一个if语句后跟一个可选的else if…else语句时,以下几点需要注意:

  • 一个if后可跟零个或一个else,else必须在所有else if后面
  • 一个if后可跟零个或多个else if,else if必须在else之前。
  • 一旦某个else if匹配成功,其他的else if或else将不会被测试。
    语法
    C语言中的if…else if…else语句的语法:
if(boolean_expression 1)
{
   /* 当布尔表达式 1 为真时执行 */
}
else if( boolean_expression 2)
{
   /* 当布尔表达式 2 为真时执行 */
}
else if( boolean_expression 3)
{
   /* 当布尔表达式 3 为真时执行 */
}
else 
{
   /* 当上面条件都不为真时执行 */
}

实例

#include 
 
int main ()
{
   /* 局部变量定义 */
   int a = 100;
 
   /* 检查布尔条件 */
   if( a == 10 )
   {
       /* 如果 if 条件为真,则输出下面的语句 */
       printf("a 的值是 10\n" );
   }
   else if( a == 20 )
   {
       /* 如果 else if 条件为真,则输出下面的语句 */
       printf("a 的值是 20\n" );
   }
   else if( a == 30 )
   {
       /* 如果 else if 条件为真,则输出下面的语句 */
       printf("a 的值是 30\n" );
   }
   else
   {
       /* 如果上面条件都不为真,则输出下面的语句 */
       printf("没有匹配的值\n" );
   }
   printf("a 的准确值是 %d\n", a );
 
   return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

没有匹配的值
a的准确值是100

嵌套if语句

C语言中嵌套if语句语法

if(boolean_expression 1)
{
	/* 当布尔表达式 1 为真时执行 */
   if(boolean_expression 2)
   {
      /* 当布尔表达式 2 为真时执行 */
   }
}

可以嵌套else if…else,方式与嵌套if语句相似。
实例

#include
int main()
{
	//局部变量定义
	int a=100;
	int b=200;
	//检查布尔条件
	if(a==100)
	{
		//如果条件为真,则检查下面的条件
		if(b==200)
		{
			//如果条件为真,则输出下面的语句
			printf("a的值是100,且b的值是200\n");
		}
	}
	printf("a的准确值是%d\n",a);
	printf("b的准确值是%d\n",b);
	return 0;
}

当上面的代码被编译和执行时,会产生下列结果:

a 的值是 100,且 b 的值是 200
a 的准确值是 100
b 的准确值是 200

switch语句

一个switch语句允许测试一个变量等于多个值时的情况。每一个值被称为一个case,且被测试的变量会对每个switch case进行检查。
语法
C语言中switch语句的语法:

switch(expression){
	case constant-expression:
		statement(s);
		break;//可选的
	case constant-expression  :
       statement(s);
       break; /* 可选的 */
  
    /* 您可以有任意数量的 case 语句 */
    default : /* 可选的 */
       statement(s);
}

switch语句必须遵循下面的规则:

  • switch语句中的expression是一个常量表达式,必须是一个整数或枚举类型。
  • 在一个switch中可以有任意数量的case语句。每个case后跟一个要比较的值和一个冒号。
  • case的constant-expression必须与switch中的变量具有相同的数据类型,且必须是一个常量或字面量。
  • 当被测试的变量等于case中的常量时,case后跟的语句将被执行,直到遇到break语句为止。
  • 当遇到break语句时,switch终止,控制流将跳转到switch语句的下一行。
  • 不是每一个case都需要包含break。如果case语句不包含break,控制流将会继续后续的case,,知道遇到break为止。
  • 一个switch语句可以有一个可选的default case,出现在switch的结尾。default case可用于在上面所有case都不为真时执行一个任务。default case中的break语句不是必需的。
    C语言学习笔记--C判断类型_第4张图片
    实例
#include 
 
int main ()
{
   /* 局部变量定义 */
   char grade = 'B';
 
   switch(grade)
   {
   case 'A' :
      printf("很棒!\n" );
      break;
   case 'B' :
   case 'C' :
      printf("做得好\n" );
      break;
   case 'D' :
      printf("您通过了\n" );
      break;
   case 'F' :
      printf("最好再试一下\n" );
      break;
   default :
      printf("无效的成绩\n" );
   }
   printf("您的成绩是 %c\n", grade );
 
   return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

做得好
你的成绩是B

例如
使用switch语句编程,根据输入的年份判断是否为闰年,根据输入的月份判断这月有多少天。
闰年的定义:

  • 普通年(不能被100整除的年份)能被4整除的是闰年。(例如2004年就是闰年、1999年不是闰年);
  • 世纪年(能被100整除的年份)能被400整除的是闰年。(如2000年是闰年,1900年不是闰年);
//方法一
#include
int main()
{
	int year,month,flag=0;
	printf("请输入年份和月份,以空格间隔:!\n");
	scanf("%d %d",&year,&month);
	if((year%4==0&&year%100!=0)||year%400==0)
	{
		flag=1;
		printf("你输入的年份为闰年\n");
		 }
    else
    {
        flag = 0; 
        printf("您所输入的年龄是平年!!\n");
    }
    switch(month)
    {
        case 1:
            printf("您所输入的是一月共31天\n");
            break;
        case 2:
            if(flag == 1) 
                printf("您所输入的是二月共29天\n");
            else
                printf("您所输入的是二月共28天\n"); 
            break;
        case 3:
            printf("您所输入的是三月共31天\n");
            break;
        case 4:
            printf("您所输入的是四月共30天\n");
            break;
        case 5:
            printf("您所输入的是五月共31天\n");
            break;
        case 6:
            printf("您所输入的是六月共30天\n");
            break;
        case 7:
            printf("您所输入的是七月共31天\n");
            break;
        case 8:
            printf("您所输入的是八月共31天\n");
            break;
        case 9:
            printf("您所输入的是九月共30天\n");
            break;
        case 10:
            printf("您所输入的是十月共31天\n");
            break;
        case 11:
            printf("您所输入的是十一月共30天\n");
            break;
        case 12:
            printf("您所输入的是十二月共31天\n");
            break;
    }
    return 0;
}
//方法二
#include

int main() {
    int year, month, ex;
    printf("请输入年份及月份(空格分隔):");
    scanf("%d %d", &year, &month);
    if(month < 1 || month > 12) {
        printf("输入有误!!");
    } else {
        if((year%4 == 0 && year%100 != 0) || year%400 == 0) {
            ex = 1;
            printf("%d年为闰年。\n", year);

        } else {
            ex = 0;
            printf("%d年不为闰年。\n", year);
        }

        switch(month) {
            case 4: case 6: case 9: case 11: printf("%d月有%d天。", month, 30); break;
            case 2: printf("%d月有%d天。", month, 27+ex); break;
            default: printf("%d月有%d天。", month, 31);
        }
    }
}

嵌套switch语句

可以把一个switch作为一个外部switch的语句序列的一部分,即可以在一个switch语句内使用另一个switch语句。即使内部和外部switch的case常量包含共同的值,也没有矛盾。
语法
C语言中嵌套switch语句的语法:

switch(ch1) {
   case 'A': 
      printf("这个 A 是外部 switch 的一部分" );
      switch(ch2) {
         case 'A':
            printf("这个 A 是内部 switch 的一部分" );
            break;
         case 'B': /* 内部 B case 代码 */
      }
      break;
   case 'B': /* 外部 B case 代码 */
}

实例

#include 
 
int main ()
{
   /* 局部变量定义 */
   int a = 100;
   int b = 200;
 
   switch(a) {
      case 100: 
         printf("这是外部 switch 的一部分\n");
         switch(b) {
            case 200:
               printf("这是内部 switch 的一部分\n");
         }
   }
   printf("a 的准确值是 %d\n", a );
   printf("b 的准确值是 %d\n", b );
 
   return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

这是外部 switch 的一部分
这是内部 switch 的一部分
a 的准确值是 100
b 的准确值是 200

?:运算符(三元运算符)

前面已经讲解了条件运算符?:,可以用来替代if…else语句。它的一般形式如下:

Exp1 ? Exp2 :Exp3;

其中,Exp1、Exp2和Exp3是表达式。注意,冒号的使用和位置。
表达式的值是由Exp1决定的。如果Exp1为真,则计算Exp2的值,结果即为整个 表达式的值。如果Exp1为假,则计算Exp3的值,结果即为整个 表达式的值。

示意图

C语言学习笔记--C判断类型_第5张图片
实例:
通过输入一个数字来判断它是否为奇数或偶数

#include
 
int main()
{
    int num;
 
    printf("输入一个数字 : ");
    scanf("%d",&num);
 
    (num%2==0)?printf("偶数"):printf("奇数");
}

例如

#include 

int A=10;
int B=20;
char buy;
int sum,number;

int main(){
    printf("以下是本店的商品及价格:\n A 商品每个十元;\n B 商品每个二十元;\n\n");
    printf("请输入你所需的产品(A 或 B):");
    scanf("%c",&buy);
    printf("请输入所需的数量:");
    scanf("%d",&number);
    sum=buy=='A'?A*number:B*number;
    printf("\n你所需要的%d个%c商品总共%d元。\n",number,buy,sum);
    return 0;
}

你可能感兴趣的:(个人笔记,学习笔记,C语言,C语言,学习笔记,C判断)