算数 逻辑 关系 赋值
7、1 if语句
1、while(scanf(“%f”,&temperature) == 1)
{
all_days++;
if(temperature < a) cold_days++;
}利用scanf()的返回值在scanf()遇到非数字输入的时候终止循环。float既可以输入8也可以-2.5。
2、if语句被称为分支语句或选择语句。
if(关系表达式判定条件) 执行语句;
7、2 在if语句中添加else关键字
1、形式:if(expression) statement1;
else statement2; 利用花括号创建代码快。
if 语句使您能够选择是否执行某个动作。if else 语句使您可以在两个动作之间进行选择。
2、介绍getchar()和putchar()
getchar()函数没有参数,它返回来自输入设备的下一个字符。
ch = getchar(); scanf(“%c”,&ch);
putchar()函数打印它的参数。
putchar(ch); printf(“%c”,ch);
ch = getchar(); //读入一个字符
while(ch != '\n') //当一行未结束时
{
if(ch == SPACE) putchar(ch);
else putchar(ch + 1);
ch = getchar(); //获取下一个字符
}运行示例:CALL ME HAL
DBMM NF IBM while((ch = getchar()) != ‘\n’);
//为ch赋值 ch 与\n比较
该动作将一个值赋给ch并将这个值与换行符进行比较。 字符实际上是作为整数被存储的。
3、多重选择else if
a、提供两个以上的选择,情况很多,分情况讨论。嵌套使用。
b、else与if的配对,规则是如果没有花括号指明,else与和它最接近的一个if相匹配。
c、素数例子进行编程(详细编程)很典型的例子。。。P163页码。
4、if语句的形式
a、if(。。。。) 执行;
b、if( ) 执行; else 执行;
c、if ( ) 执行; else if( ) 执行; else 执行;
5、逻辑运算符号
&&运算符用于测试范围。 if(range >= 90 && range <= 100)
不要写成if(90 <= range <=100) //语义错误 <=运算符的求值顺序是由左到右,所以会把表达式理解为:(90 <= range) <=100 关系表达式90 <= range 的值为1或者0。任何一个都小于100,因此不管range是什么,整个表达式总为真。 if(ch >= ‘a’&& ch <= ‘z’)
7、3 条件运算符 ?:
简写方式来表示if else 语句,条件表达式,条件运算符?:。三元运算符
一个数绝对值的例子:x = (y < 0)? -y : y; 在=和分号之间为条件表达式。
if(y < 0) x = -y; else x = y;
形式:表达式1 ? 表达式2 :表达式3
如果表达式1为真(非零),整个条件表达式的值和表达式2的值相同。表达式1假的话,整个条件表达式的值等于表达式3的值。
典型例子: max = (a > b) ? a : b;将两个值中最大值赋给变量。
7、4 循环辅助手段:continue和break
continue和break语句使你可以根据循环体内进行的判断结果来忽略部分循环甚至终止它。
continue:a、当运行到该语句时,他将导致剩余的迭代部分被忽略,开始下一次迭代。如果continue语句处于嵌套结构中,那么它仅仅影响包含他的最里层的结构。
while(scanf(“%f”,&score) = = 1)
{
if() 执行语句; continue;
}
b、continue另一作用是作为占位符。例如:下面的循环读取并丢弃输入,直到一行的末尾。while(getchar() != ‘\n’) continue;
当程序已经从一行中读取了一些输入并需要跳到下一行的开始时,使用上面的语句很方便。
如果不是为了简化代码,而是使代码更加复杂,就不要使用continue。例如:
while(getchar() != ‘\n’)
{
if(ch == ‘\t’) continue;
putchar(ch);
}
while(getchar() != ‘\n’)
{
if(ch != ‘\t’)
putchar(ch); 通过if的判断取逆以消除对continue的需求。
}
c、continue语句导致循环体的剩余部分被跳过。那么continue在什么地方继续循环?
int count = 0; //对于while循环,continue语句之后发生的动作是求
while(count < 10) //循环判断表达式的值。
{
ch = getchar(); if(ch == '\n') continue;
putchar(ch); count++; }
他输入10个字符(换行符除外,因为ch为换行符时跳过++语句)并回显他们,不包括换行符。
d、对于for循环,下一个动作是先求更新表达式的值,然后再求循环判断表达式的值。
for(count = 0; count < 10; count++)
{ //本例中,当continue执行时,首先递增count,然后把count与10比较
ch = getchar(); if(ch == '\n') continue;
putchar(ch); //换行符号也被包含在计数中,因此读取包含换行符在内的10个字符
}
break:循环中的break语句导致程序终止包含他的循环,并进行程序的下一阶段。不是跳到下一循环周期,而是直接循环退出。break语句使程序直接转到紧接着该循环后的第一条语句去执行。嵌套循环中的break语句只是使程序跳出里层的循环,要跳出外层的循环还需要另外一个break语句。
7、5 多重选择:switch和break
1、使用switch语句
switch后面的圆括号里的表达式被求值,就是刚刚输入给ch的值。然后程序扫描标签列表,直到搜索到一个与该值匹配的标签。然后程序跳转到那一行。要是没有匹配的标签,程序跳到default的标签行。
形式:switch(number)
{
case 1: 语句1;break;case 2: 语句2;break;
case 3: 语句3;break;case 4: 语句4;break;
default:语句5;
}break语句导致程序脱离switch语句,跳到switch之后的下一条语句。如果没有break语句,从相匹配的标签到switch末尾的每一条语句都将被处理。
break语句用于循环和switch中,而continue仅用于循环。
不能在C的case中使用一个范围。圆括号中的switch 判断表达式应该具有整数值(包括char类型)。 case标签必须是整形(char)常量或者整数常量表达式。不能用变量作为case标签。
2、只读取一行的首字符
while((ch = getchar()) != ‘\n’) continue;//跳过输入行的剩余部分
if(ch == ‘\n’) continue;
3、switch和if else
什么时候用哪个?没有选择的。 如果选择是基于求一个浮点型变量或表达式的值,就不能使用switch。 如果变量必须落入某个范围,也不能很方便的使用switch。