赞
踩
假设如果 A = 60,且 B = 13,现在以二进制格式表示,它们如下所示:
A = 0011 1100
B = 0000 1101
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
if (boolean_expression)
{
/*如果布尔表达式为真将执行的语句*/
}
if (boolean_expression)
{
/*如果布尔表达式为真将执行的语句*/
}
else
{
/*如果布尔表达式为假将执行的语句*/
}
if (boolean_expression 1) { /*当布尔表达式1为真时执行*/ } else if( boolean_expression 2) { /*当布尔表达式2为真时执行*/ } else if( boolean_expression 3) { /*当布尔表达式3为真时执行*/ } else { /*当上面条件都不为真时执行*/ }
if( boolean_expression 1)
{
/*当布尔表达式1为真时执行*/
if(boolean_expression 2)
{
/*当布尔表达式2为真时执行*/
}
}
switch(expression) {
case constant-expression :
statement(s);
break;
/*可选的*/
case constant-expression :
statement(s);
break;
/*可选的*/
/*您可以有任意数量的case语句*/
default:
/*可选的*/
statement(s);
}
/* 关系及逻辑表达式运算规则 */
#include "stdio.h"
void main( ) {
int a=3,b=5,c=8;
if(a++<3 && c--!=0) b=b+1;
printf("a=%d\tb=%d\tc=%d\n",a,b,c);
}
程序运行截图:
注意该程序中的条件判断表达式a++<3 && c- -!=0是一个逻辑表达式,关系表达式a++<3的值为假,因此后一部分c- -!=0就不再计算。首先a=3,并不是比3小,为假,a先增值1变成4后,后面是&&,直接结束if语句,此时,a=4,b仍然是5,c仍然是8。
比较下列各部分运行结果
#include "stdio.h"
void main( ) {
int a=3,b=5,c=8;
if(a++<3 && c--!=0) b=b+1;
printf("a=%d\tb=%d\tc=%d\n",a,b,c);
a=3,b=5,c=8;
if(c--!=0 && a++<3) b=b+1;
printf("a=%d\tb=%d\tc=%d\n",a,b,c);
a=3,b=5,c=8;
if(a++<3 || c--!=0) b=b+1;
printf("a=%d\tb=%d\tc=%d\n",a,b,c);
a=3,b=5,c=8;
if(c--!=0 || a++<3) b=b+1;
printf("a=%d\tb=%d\tc=%d\n",a,b,c);
}
运行截图:
第一个输出结果首先a=3,并不是比3小,为假,a先增值1变成4后,后面是&&,直接结束if语句,此时,a=4,b仍然是5,c仍然是8
第二个输出结果,一开始,c=8非0为真,此时c变成7,然后判断&&后面,a=3,并不比3小为假,a立即变成4,整个if判断语句为假,直接结束,此时a=4,b=5,c=7
第三个输出结果,一开始,a=3,并不比3小,为假,a马上变成4,后面是‖,继续判断,c=8非0为真,c马上变成7,整个if判断语句为真,执行后面的命令,b=b+1,即b=6,最终结果,a=4,b=6,c=7
第四个输出结果,一开始c=8,非0为真,c马上变成7,后面是‖,不要继续判断了,整个if判断语句为真,执行后面的命令,即b=b+1,b变成6,最终结果a=3,b=6,c=7
这是一个用于奇偶判断的包含if-else语句:
#include<stdio.h>
int main() {
int a=10;
if(a%2==0)
printf("偶数!");
else
printf("奇数!");
}
10能够被2整除,结果为0,所以运行一下,可以看见输出“偶数!”
这是直接用主函数编写程序,实现找到三个数中最大的一个数,并输出。
#include <stdio.h>
int main() {
int a,b,c,max;
scanf("a=%d,b=%d,c=%d",&a,&b,&c);
if(a>=b)
max=a;
else
max=b;
if(c>max)
max=c;
/*这里先对a和b进行比较,找到最大值,先赋值给max,再将max和c比较*/
printf("max=%d",max);
return 0;
}
这里要注意,输入的时候需要输入“a=4,b=5,c=6,”不能直接输入abc的值
结果为“max=6”
这里是通过对abc三个变量值的判断实现不同操作对swt赋值,一定要仔细看if-else的逻辑
#include <stdio.h> int main() { int a,b,c; int s,w,t; s=w=t=0; a=-1; b=3; c=3; if(c>0) s=a+b; /*这里是单独的一个if语句,和下面的没关系*/ if(a<=0) { if(b>0) if(c<=0) w=a-b; /*当a<=0且b>0且c<=0时的操作*/ } else /*对a<=0的否定情况*/ if(c>0) w=a+b; else t=c; printf("%d %d %d",s,w,t); return 0; }
结果输出是2 0 0
因为c>0,所以s=a+b=2;由a=-1,但是c>0,所以不进入w=a-b中,也不进入对“a<=0”的else语句中,直接结束程序,输出2 0 0
/* 不含break的switch */
#include "stdio.h"
void main( ) {
int a,m=0,n=0,k=0;
scanf("%d",&a);
switch(a) {
case 1: m++;
case 2:
case 3: n++;
case 4:
case 5: k++;
}
printf("%d,%d,%d\n",m,n,k);
}
运行截图:
一开始,输入a=3,switch进行case3,即n+1变成1,没有break,继续后面的命令,k增值1变成1,m自始至终没变,最终输出结果就是0 1 1
/* 含break的switch */ #include "stdio.h" void main( ) { int a,m=0,n=0,k=0; scanf("%d",&a); switch(a) { case 1: m++; break; case 2: case 3: n++; break; case 4: case 5: k++; } printf("%d,%d,%d\n",m,n,k); }
运行截图:
一开始,a输入成3,进行case3,n增值1,变成1,break直接结束switch,其他值都没有发生变化,最终结果就是0 1 0
输入某学生的成绩,经处理后给出学生的等级,等级分类如下:
90分以上(包括90): A
80至90分(包括80):B
70至80分(包括70):C
60至70分(包括60):D
60分以下: E
#include<stdio.h>
void main() {
float score;
scanf("%f",&score);
if(score>=90) printf("A");
else if(score>=80) printf("B");
else if(score>=70) printf("C");
else if(score>=60) printf("D");
else printf("E");
}
运行截图:
#include <stdio.h> int main() { int s; char ch; printf("input a student grade:"); scanf("%d",&s); s=s/10; /*结果返回整数,获取成绩的十位的数字,用于判断成绩区间*/ if(s<0||s>10) printf("\ninput error!"); /*增加了一个错误输入的提示*/ else { switch(s) { case 10: case 9: ch='A';break; case 8: ch='B';break; case 7: ch='C';break; case 6: ch='D';break; default: ch='E'; /*对于60分以下的所有成绩选择E等级*/ } printf("\n分数折算成等级:%c",ch); } return 0; }
所有的成绩都可以正确换算
回顾一下没有break;把所有的break语句去掉,再分别输入100、92、80、70、60、50观察输出的结果。
switch(s)
{
case 10:
case 9: ch='A';
case 8: ch='B';
case 7: ch='C';
case 6: ch='D';
default: ch='E';
/*对于60分以下的所有成绩选择E等级*/
}
对于所有的输入,结果都是’E’;因为case语句只是决定switch语句的进入位置,比如s=8,虽然可以正确地将ch赋值为B,但是没有break语句作为程序出口,跳出switch选择语句,所以程序就从case:8处进入,执行完所有的语句至结束,最后ch被赋值为‘E’
编程序,输入一个数,判断它能否被3或者被5整除。如至少能被这两个数中的一个整除,则将此数打印出来,否则不打印。
这个程序设计很简单,主要就是一个if判断条件的书写
#include <stdio.h>
int main() {
int a;
printf("请输入待判断的值:");
scanf("%d",&a);
if(a%3==0||a%5==0)
/*判断它能否被3或者被5整除*/
printf("%d能被3或5整除",a);
/*否则不打印,没有else语句操作*/
return 0;
}
运行结果:
#include<stdio.h> #include<math.h> /*导入一个用于使用pow(),sqrt()函数的库,提高开发效率*/ int main() { float x; /*浮点型提高计算结果精度*/ scanf("%f",&x); if(x<2) printf("y=%f",x); /*情况一*/ else if(x<6) printf("y=%f",pow(x,2)+1); /*情况二*/ else if(x<10) printf("y=%f",sqrt(x+1)); /*情况三*/ else printf("y=%f",1/(x+1)); /*情况四*/ return 0; }
这个程序用if语句实现很容易,如果使用switch语句则会出现对于输入的x值需要加工处理才能放在switch()的括号里面。
但是这道题因为所给问题的特殊性可以有下面的解决办法:
#include<stdio.h> #include<math.h> int main() { float x; scanf("%f",&x); if(x<0) printf("y=%f",x); /*先用一个if语句对x<0的情况单独处理,筛选出x>=0的其他情况*/ else switch ((int)x) /*将浮点型数据转化为int整数型,如果是0-10之间的x值,则int(x)的值是0-10之间的某一个整数数字,则可以直接用case:int(x)分不同情况,对于x>10的情况放在default处理*/ { case 0:printf("y=%f",x);break; case 1:printf("y=%f",x);break; /*0 <= x < 2 */ case 2:printf("y=%f",pow(x,2)+1);break; case 3:printf("y=%f",pow(x,2)+1);break; case 4:printf("y=%f",pow(x,2)+1);break; case 5:printf("y=%f",pow(x,2)+1);break; /*2 <= x < 6 */ case 6:printf("y=%f",sqrt(x+1));break; case 7:printf("y=%f",sqrt(x+1));break; case 8:printf("y=%f",sqrt(x+1));break; case 9:printf("y=%f",sqrt(x+1));break; /*6 <= x < 10 */ default:printf("y=%f",1/(x+1)); /*x >= 10 */ } return 0; }
可以运行实现一下,这里就不演示了,虽然也可以达到和if语句一样的效果,但是工作量无疑增加了不少,所以对于问题选择有效的解决办法可以降低很多工作量,代码可读性也可以提高很多!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。