栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言程序设计CAP——C语言学习笔记(三)下

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言程序设计CAP——C语言学习笔记(三)下

嵌套的if

找三个数中的最⼤

int a,b;

printf("请输入两个整数:");
scanf("%d %d", &a, &b);

int max = 0;
if ( a > b ) {
    max = a;
} else {
    max = b;
}

printf("大的那个是%dn", max);

•    如果要求输入三个整数,输出其中最大的,应该怎么做?

int a,b,c;

scanf("%d %d", &a, &b);

int max = 0;
if ( a > b ) {
    if ( a > c ) { 
        max = a;
    } else {
        max = c;
    }
}else {
    if ( b > c) {
        max = b;        
    }else {
        max = c;
    }
}

printf("The max is %dn", max);

 

 嵌套的判断

•    当if的条件满⾜足或者不满⾜足的时候要执⾏行的语句也可以是⼀一条if或if-else语句,这就是嵌套的if语句

if ( code == READY )
if ( count <20 ) 
      printf(“⼀一切正常n");  
     else 
        printf(“继续等待n");

else的匹配

•    else总是和最近的那个if匹配

if ( code == READY ) {
    if ( count <20 )
        printf("⼀一切正常n");
} else
    printf("继续等待n");

缩进

•    缩进格式不能暗示else的匹配

if ( code == READY )
    if ( count <20 )
        printf(“⼀切正常n");
else
    printf(“继续等待n");

嵌套的if
 

if ( gameover == 0 ) 
if ( player2move == 2 )

printf("Your turnn");
if ( gameover == 0 )
 if ( player2move == 2 ) 
    printf("Your turnn"); 
else 
    printf("My turnn");
if ( gameover == 0 )
 if ( player2move == 2 ) 
   printf("Your turnn"); 
else 
    printf("My turnn"); 
else 
  printf("GAME OVERn");
  if ( gameover == 0 )
if ( player2move == 2 )
    printf("Your turnn"); 
else 
 printf("GAME OVERn");
if ( gameover == 0 ) {
  if ( player2move == 2 )
    printf("Your turnn"); 
} else 
 printf("GAME OVERn");

tips

•    在if或else后面总是用{}
•    即使只有⼀一条语句的时候

级联的if-else if

分段函数

if ( x < 0 ) {  
 f = -1; 
} else if ( x == 0 ) { 
 f = 0; 
} else {
  f = 2 * x;
} 

 级联的if-else if

if ( exp1 ) 
  st1; 
else if ( exp2 ) 
  st2; 
else 
  st3;

 if语句常见错误

•    忘了大括号
•    if后面的分号
•    错误使用==和=
•    使人困惑的else

忘了大括号

•    永远在if和else后⾯面加上大括号,即使当时后面只有一条语句

if后面的分号

if ( age > 60 );
 {
 
salary = salary * 1.2;  
 printf("%f",salay);
}

错误使用==和=

if只要求()里的值是零或非零

 代码风格

•    在if和else之后必须加上大括号形成语句块;
•    大括号内的语句缩进一个tab的位置;

 多路分⽀

switch-case

if ( type==1 ) 
     printf("你好"); 
else if ( type==2) 
     printf("早上好"); 
else if ( type==3 ) 
     printf("晚上好"); 
else if ( type==4 ) 
     printf("再⻅见");
 else  
   printf("啊,什么啊?");



switch ( type ) {
  case 1:
    printf("你好");
    break; 
  case 2: 
    printf("早上好");   
    break; 
  case 3: 
    printf("晚上好"); 
    break; 
  case 4: 
    printf("再见");
    break; default: 
    printf("啊,什么啊?");
}

 •    控制表达式只能是整数型的结果
•    常量可以是常数,也可以是常数计算的表达式
•    根据表达式的结果,寻找匹配的case,并执行case后面的语句,一直到break为止
•    如果所有的case都不匹配,那么就执行default后⾯面的语句;如果没有default,那么就什么都不做

break

switch ( type ) 
{ 
case 1:  
case 2: 
  printf("你好n");   
  break; 
case 3: 
  printf("晚上好n");
case 4: 
   printf("再见n");  
 break; 
default: 
   printf("啊,什么啊?n");   
   break;
} 

•    switch语句可以看作是一种基于计算的跳转,计算控制表达式的值后,程序会跳转到相匹配的case(分支标号)处。分支标号只是说明switch内部位置的路标,在执行完分支中的最后一条语句后,如果后⾯面没有break,就会顺序执行到下面的case里去,直到遇到⼀一个break,或者switch结束为止。

//	max3.c
#include 

int main()
{
	int a,b,c;
	scanf("%d %d %d", &a, &b, &c);

	int max = 0;

	if ( a>b ) {
		if ( a>c ) {
			max = a;
		} else {
			max = c;
		}
	} else {
		if ( b>c ) {
			max = b;
		} else {
			max = c;
		}
	}

	printf("The max is %dn", max);

	return 0;
}
#include 

int main()
{
	int x;
	scanf("%d", &x);
	int f=0;
	if ( x < 0 ) {
		f = -1;
	} else if ( x == 0 ) {
		f = 0;
	} else if ( x >5 ) {
		f = 2 * x;
	} else {
		f = 3*x;
	}

	printf("%dn", f);

	return 0;
}
#include 

int main()
{
	printf("输入成绩(0-100)");
	int grade;
	scanf("%d", &grade);
	grade /=10;
	switch ( grade ) {
	case 10:
	case 9:
		printf("An");
		break;
	case 8:
		printf("Bn");
		break;
	case 7:
		printf("Cn");
		break;
	case 6:
		printf("Dn");
		break;
	default:
		printf("Fn");
		break;
	}

	return 0;
}
#include 

int main()
{

	printf("请输入月份:");
	int month;
	scanf("%d", &month);

	switch ( month )
	{

		case 1: printf("Januaryn"); break;
		case 2: printf("Februaryn"); break;
		case 3: printf("Marchn"); break;
		case 4: printf("Apriln"); break;
		case 5: printf("Mayn"); break;
		case 6: printf("Junen"); break;
		case 7: printf("Julyn"); break;
		case 8: printf("Augustn"); break;
		case 9: printf("Septembern"); break;
		case 10:printf("Octobern"); break;
		case 11:printf("Novembern"); break;
		case 12:printf("Decembern"); break;
	}

	return 0;
}

课后思考题:

1、分段函数可以用switch-case吗?划算吗?
答:分段函数可以用switch-case,但不划算,因为switch需要整数型表达式,且case需要常数。分析如下:

1.x取值全部为特定值,很划算,但很少见;

swtich(x){

     case 0:      

     case 1:

}

2.x取值一般是>0.=0,<0三种情况,可以压缩成两种的情况,如视频中函数

switch(x<0){   

   case 0:    //x=0,f=0;  x>0,f=2*x;  可以合并为 x>=0, f=2*x;   

   case 1:        // 这样就转化为判断其中任意一个条件是否成立的结果0、1

}



3.3个条件的情况可以使用3目运算符,实现也不算麻烦:

int flag= x<0 ? -1 : (x>0)      //x<0,flag=-1;x>0,flag=1;x=0,flag=0;
switch(flag){

    case -1:

    case 0:

    case 1:

}

4.x分段更多的情况就很麻烦,不划算:

if (x<0) flag=0;               //搭配if-else使用,有点多此一举了:

if...

switch(flag){...}



inf flag = x<0 ? -1 : (x==0 ? 0  : (...) )         //多重嵌套三目表达式,麻烦

switch(flag){...}
2、switch-case是如何实现的?

1、case小于三,直接判断,索引表的方式进行直接跳转

2、case大于等于4,且每两个case之间的间隔之和不超过6时,按跳转表进行线性结构查找。

3、最大case值和最小case值之差大于255时,应该是先进行树形结构查找划分,直到小于等于3个数据的时候不再进行划分,然后进行索引表处理(?)。

4、switch变量大于(小于)最大(最小)值,直接走default分支。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/931777.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号