分支和跳转
if 语句
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a = 75; //放在第一行
int cj;
printf("请输入成绩:");
scanf("%d",&cj);
if(cj>=60 && cj>0 && cj<100) //如果条件成立则输出代码块 //注意=是赋值表达式,==是关系表达式
{ //if(b==60) //把常量放左边,变量放右边就不容易丢=号//注意花括号
printf("成绩合格\n");
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//int a = 75; //放在第一行
if (60 <= a <=70 ) // if(60<=a<=70)//先判断60<=a为真就是1,1<=70条件成立则输出代码
{ // if(60<=a && a<=70)//分成了两条语句,结果是1和0不输出代码块
printf("你的成绩及格\n");
}
system("pause");
return 0;
}
if 循环嵌套 执行顺序
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
if (1) //如果条件为假,则里面嵌套的if全都不会执行
{ //一行一行向下执行的,程序是从上向下执行的
if (1)
{
if (1)
{
printf("垃圾\n");
}
printf("卧槽 "); //跳出里面的if走这行代码
}
//再走最外层代码
}
if (1) //再走下面的if代码
{
printf("好好学习\n");
}
system("pause");
return 0;
}
if else
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a =60;
int b =50;
//if (a >= 60 )
//{
// printf("成绩及格\n");
//}
//if (a < 60) //如果
//{
// printf("成绩不合格\n"); //二中选一或者选二,因为两个if都会去判断
//}
////////////////////////////////////////////////////
if (b >= 60)
{
printf("成绩合格\n"); //区别,二选一,要么输出if 要么else;运行比较块一点比上面少判断一个语句
}
else //否则
{
printf("成绩不合格\n");
}
system("pause");
return 0;
}
if else注意点
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a =60;
if (b >= 60) //注意加括号,不能加分号,应为分号结尾就是一条语句
{
printf("成绩合格\n");
}
else //else后面是没有条件的,else和if必须是紧挨着的,不能加任何的执行语句,
{ //else跟同层的最上面的if进行匹配
printf("成绩不合格\n");
}
system("pause");
return 0;
}
else if 级联的的if
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
const int dw = 0 ;
printf("请输入分数: \n");
scanf_s ("%d", &dw);
if (dw < 60) //不能加分号
{ //记得加分号
printf("您的段位是:黄金\n");
}
else if (dw > 60 && dw <80) //注意这里也有条件
{
printf("您的段位是:铂金\n"); //中间必须是相连的,不能分开,中间不能加任何语句
}
else if (dw >=80 && dw < 90) //也可以全用if去执行,只是效率没有那么高
{ //if会多选1,else if则会紧连着向下执行
printf("您的段位是:钻石\n");
}
else if (dw >= 90 && dw < 100 )
{
printf("您的段位是:大师\n");
}
else //以一个else结尾
{
printf("您的段位是王者\n");
}
system("pause");
return 0;
}
switch case
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int cj = 0;
printf("请输入: ");
scanf("%d",&cj);
// if(1 == cj)
// {
// printf("添加一个学生\n");
// }
// else if(2 == cj)
// {
// printf("删除一个学生\n");
// }
// else if(3 == cj)
// {
// printf("浏览学生信息\n");
// }
// else if(4 == cj)
// {
// printf("退出系统,感谢您的使用\n");
// }
// else
// {
// printf("系统无该指令\n");
// }
switch (cj)//switch (计算匹配标签的) //叫开关语句,根据条件判断,选择某些语句执行
{
case 1: //case 情况 //case id1: 语句1;break;
//case id2: 语句2;break;
printf("添加一个学生\n"); //相比if else更简洁,更直观,更好看一点
break;
case 2:
printf("删除一个学生\n"); //结构执行顺序1.计算switch中标签的值
break; //2.按顺序扫描标签,发现有匹配的值,就进入标签中执行 /执行break,跳出switch结构
//没有发现一样的,最后进入default/执行完到最后的花括号
case 3:
printf("浏览学生信息\n");
break;
case 4:
printf("系统关闭,感谢您的使用\n");
break;
default : //dafault 英文翻译:违约,不执行
//default的作用就是switch语句里所有的case都不成立时所要执行的语句
printf("系统无该指令\n");
}
system("pause");
return 0;
}
switch case注意点
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int cj = 3;
switch (cj) //不能加分号,非法,必须是整型表达式
{
case 1: //后面有空格;后面是冒号不能写成分号,如果case里面很很多代码的时候可以加个花括号
printf("放啥都行");
//break; //如果没有break,他会向下执行到遇到break
case 2: //必须是整型常量表达式,标签不能重复
printf("耗子尾汁");
break; //也可以不写,因为执行到最后已经到最后到switch了
default : //default的作用就是switch语句里所有的case都不成立时所要执行的语句
printf("default也可以不写,那就当没有默认处理");
//区别 else if 适合条件比较复杂的时候,比如范围比较广的时候,浮点型比较,符合表达式(与或非),switch就不方便
//完成同样的功能,switch效率要比较高一点,但这点效率不值得一提。
//所以使用的时候没有使用的标准,根据实际的情况,哪个方便用哪个
}
system("pause");
return 0;
}
分支跳转小结
分支和跳转 小结
小结:用if语句进行选择
关键字: if、 else
-般注解:
下面各形式中,statement可以是一条简单语句或复合语句。表达式为真说明其值是非零值。
形式1:
if (expression)
s ta tement
如果expression为真,则执行statement部分。
形式2:
if (expression)
sta tement 1
else
sta tement2
如果expression为真,执行statementI部分;否则,执行statement2部分。
形式3:
if (expression1)
sta tement1
else if (expression2)
s ta tement2
else
sta tement3
如果expression1为真,执行statement1部分;如果expression2为真,执行statement2部
分;否则,执行statement3
部分。
示例:
if (legs == 4)
printf (“It might be a horse. \n”) ;
else if (legs > 4)
printf (“It is not a horse. \n”) ;
else
/如果legs<4/
{
legs++;
printf (“Now it has one more leg. \n”) ;
}
逻辑运算符
&& 逻辑与 一假即假,两假也是假,两个都为真才为真。
|| 逻辑或 一假一真,两真,为真,只有两假才为假。
! 逻辑非 非假即真,非真即假。
7.5
条件运算符: ?:
C提供条件表达式(conditional expression)作为表达if else 语句的一种便捷方式,该表达式使用2:条件运算符。该运算符分为两部分,需要3个运算对象。回忆一下,带一个运对象的运算符称为一元运算符,带两个运算对象的运算符称为二元运算符。以此类推,带3个运算对象的运算符称为三元运算符。条件运算符是C语言中唯- -的三元运算符。下面的代码得到一个数的绝对值:
x =(y<0)?-y:y;
在=和;之间的内容就是条件表达式,该语句的意思是“如果y小于0,那么x = -y;否则,x = y”。
用if else可以这样表达:
if(y<0)
X=-Y;
else
X=y;
条件表达式的通用形式如下:
expressionl ? expression2 : expression3
如果expression1为真(非0),那么整个条件表达式的值与expression2 的值相同;如果
expression1为假(0), 那么整个条件表达式的值与expression3的值相同。
需要把两个值中的一个赋给变量时,就可以用条件表达式。典型的例子是,把两个值中的最大值赋给
变量:
max=(a>b)?a:b;
如果a大于b,那么将max设置为a;否则,设置为b。
通常,条件运算符完成的任务用if else 语句也可以完成。但是,使用条件运算符的代码更简洁,而且编译器可以生成更紧凑的程序代码。
小结:条件运算符
条件运算符: ?:
- - 般注解:
条件运算符需要3个运算对象,每个运算对象都是一个表达式。其通用形式如下:
expressionl ? expression2 : expression3
如果expression1为真,整个条件表达式的值是expression2的值;否则,是expression3
的值。
示例:
(5>3)?1:2值为1
(3>5)?1:2值为2
(a>b)?a:b如果a>b,则取较大的值
循环辅助:continue 和break
continue :只在循环中使用; 执行下一次循环。
break :碰到break直接跳出循环,循环之外不能写break,多层循环嵌套只能跳出一层所在的循环。
小结:带多重选择的switch语句
关键字: switch
一般注解:
程序根据expression的值跳转至相应的case标签处。然后,执行剩下的所有语句,除非执行到break语句进行重定向。expression 和case标签都必须是整数值(包括char类型),标签必须是常量或完全由常量组成的表达式。如果没有case标签与expression的值匹配,控制则转至标有default的语句( 如果有的话);否则,将转至执行紧跟在switch语句后面的语句。
形式:
switch ( expression )
{
case label1 : statement1/ /使用break跳出switch
case label2 : sta tement2
default : sta tement3
}
可以有多个标签语句,default 语句可选。
示例:
switch (choice)
{
case 1 :
case 2 : printf (“Darn tootin’ ! \n”) ; break;
case 3 : printf (“Quite right!\n”) ;
case 4 : printf (“Good show! \n”) ; break;
default: printf (“Have a nice day. \n”) ;
}
如果choice的值是1或2,打印第1条消息;如果choice的值是3,打印第2条和第3条消
息(程序继续执行后续的语句,因为case 3后面没有break语句):如果choice的值是4,则打印第3条消息;如果choice的值是其他值只打印最后一条消息。
getchar 和 putchar
7.2.1 另- -个示例:介绍getchar ()和putchar ()
到目前为止,学过的大多数程序示例都要求输入数值。接下来,我们看看输入字符的示例。相信读者
已经熟悉了如何用scanf()和printf()根据8c转换说明读写字符,我们马上要讲解的示例中要用到一
对字符输入/输出函数: getchar ()和putchar ()。
getchar ()函数不带任何参数,它从输入队列中返回下一一个字符。例如,下 面的语句读取下一个字符
输入,并把该字符的值赋给变量ch:
ch = getchar() ;
该语句与下面的语句效果相同:
scanf (“&C”,&ch) ;
putchar ()函数打印它的参数。例如,下面的语句把之前赋给ch的值作为字符打印出来:
putchar (ch) ;
该语句与下面的语句效果相同:
printf(“&C”, ch) ;
由于这些函数只处理字符,所以它们比更通用的scanf()和printf()函数更快、更简洁。而且,注
意getchar ()和putchar ()不需要转换说明,因为它们只处理字符。这两个函数通常定义在stdio.h
懒得看有时间再看 180页