C++ If讲解与一本通平台讲解
If 是 C++ 中的保留字,其作用十分普遍,而且简单好理解。
If 的英文意义是 "如果"。说明这个语句就是用来判断的。
下面是 If 的结构:
if(条件表达式){
语句1;
语句2;
...
}//判断 if 里面的条件是否成立,成立则执行括号内语句
说了 If,那肯定少不了 else 啦。
else 的英文意义是 "否则"。说明这个语句是用来...额...跟在 If 后面的。
下面是 else 的结构:
//必须跟着 If 所以...
if(条件表达式){
语句1;
语句2;
...
}
else{
语句1;
语句2;
...
}
//这里的意思是当 If 内的条件表达式成立时执行 If 括号内的语句,不执行 else 括号内的语句
//如果 If 内的语句不成立,则执行 else 括号内的语句,不执行 If 括号内的语句
//这样的话,两个括号内的语句必有一个会执行,不可能不执行或两个都执行
执行完其中一个括号的语句后,就会跳出 If-else 结构的较后一个括号,并执行其后方的其它语句。
在 C++ 中,If 可谓是极其常见,大部分程序的执行都要用到 If 。
三目运算符
If-else 这么简单?
对的,就是这么简单。
还有些 dalao 会使用三目运算符。那它跟 If-else 有什么区别吗?一个字,较难读懂。
下面是三目运算符的结构:(初学者可以不看)
//三目运算符
条件表达式 ? 语句1:语句2;
//语句1,2只能有一句,语句可以嵌套
额...可能有点难理解
其实它可以变成这样:
//三目运算符的 If 形式
if(条件表达式) 语句1;else 语句2;
这样相信大家就可以理解了。
其实 ? 就是如同 If, : 就如同 else。
还有一种做法:
bool f;
int n;
scanf("%d",&n);
f=(n==0?false:true);//判断 n 是否为 0 ,是则返回 false 到 f,不是则返回 true 到 f
printf("%s\n",f?"true":"false");//判断 f 是否为真,为真时会执行"true",为假时执行"false"
return 0;//好习惯
但是不是说三目运算符一定好。其实它比较容易出错。(说白了就是不建议初学者使用)
信息学奥赛一本通的题目
2051-2056,1039-1048
2051:【例3.1】偶数
首先,理解题目意义。a为偶数时输出"yes",否则什么也不输出。
下面是代码:
#include<iostream>
using namespace std;
int **in(){
int a;
cin>>a;
if(a%2==0)//判断 a 是否是偶数的方法:能整除2的数就是偶数
cout<<"yes"<<endl;
return 0;
}
学会了 If 这题就可以很简单的过去了。
当然还有一种更快的方法:
#include<iostream>
using namespace std;
int **in(){
int a;
cin>>a;
if(!(a&1)) cout<<"yes"<<endl;
return 0;
}
这个判断的意思是: a 的二进制数位与上1。
举个栗例子,假设 a 为十进制的 5,那么 a 的二进制是 101,与 1 进行位与运算,则
101
001
---
001
较后 001 就是 1
也就是说,当 a 为奇数时,较后得到的数就是 1,也就是 true。
当 a 为偶数时,较后得到的数就是 0,也就是 false。
这样,可以很快得出 a 的奇偶性。
不难++;
2052:【例3.2】范围判断
这道题在于判断 a 是否在1~100内,则使用一个简单的判断就可以通过。
下面是代码:
#include<iostream>
using namespace std;
int **in(){
int a;
cin>>a;
if(a>1&&a<100)//判断 a 是否大于 1 且小于 100
cout<<"yes"<<endl;//是则输出 yes
return 0;
}
十分简单的一道题目。
不难++;
2053:【例3.3】三个数
这题是一道排序题。(脑中想起各种排序算法...)
这题只有三个数,假设较大的是 a,其次是 b,较后是 c。
首先,a 可能不是较大的,就要先看看 b 是不是大于 a 如果大于 a 就把 a 和 b 交换(代码中 swap的作用就是交换),然后继续比较 a 和 c,a 大不换,c 大交换。
这样一来,a 就铁定是较大了的,较后再比较一次 c 和 b,那个大那个给 b。
完成后,a 较大,b 其次,c **小,简单的排序就做好了。
下面是代码:
#include<iostream>
using namespace std;
int **in(){
int a,b,c;
cin>>a>>b>>c;
if(b>a) swap(a,b);
if(c>a) swap(a,c);
if(c>b) swap(b,c);
cout<<a<<' '<<b<<' '<<c<<endl;
return 0;
}
简单的还不实用排序。
不难++;
2054:【例3.4】适合晨练
这道题跟 2052 没多大区别,改亿下细节就可以直接过。
下面是代码:
#include<iostream>
using namespace std;
int **in(){
int a;
cin>>a;
if(a>=25&&a<=30)//判断
cout<<"ok!"<<endl;//适合则输出"ok!"
else
cout<<"no!"<<endl;//不适合则输出"no!"
return 0;
}
不难++;
2055:【例3.5】收费
简单的判断,要注意使用浮点数。
下面是代码:
#include<cstdio>
int **in(){
float x;
scanf("%f",&x);
if(x<=20)
printf("%.2f\n",x*1.68);//直接算
else
printf("%.2lf\n",x*1.98);
return 0;
}
不难++;
2056:【例3.7】较大的数
这道题跟之前的 2053 差不多,但是找较大**小的数一般是使用打擂台的方式去做。
打擂台(生动形象):指一个一个找所有的数用之前找的最X*的数与之相比,获得更加X的数。
*:指大或小
下面是代码:
#include<iostream>
using namespace std;
int **in(){
float x,y,z,**xn=-1;//假设较大的数是 -1 找**小设个较大值,找较大设个**小值
cin>>x>>y>>z;
if(x>**xn) **xn=x;//x 是不是比 **xn 大,是则把更大的 x 赋值给 **xn
if(y>**xn) **xn=y;//y 是不是比 **xn 大,是则把更大的 y 赋值给 **xn
if(z>**xn) **xn=z;//z 是不是比 **xn 大,是则把更大的 z 赋值给 **xn
cout<<**xn<<endl;
return 0;
}
一点要用浮点!一定要用浮点!一点要用浮点!重要的事情说三遍!(不要问我为什么...)
1039:判断数正负
这道题直接把条件表达式告诉我们了....
如果N>0,输出"positive"
如果N=0,输出"zero"
如果N<0,输出"negative"
照着打就行了
下面是代码:
#include<iostream>
using namespace std;
int **in(){
int x;
cin>>x;
if(x==0)//如果x==0
cout<<"zero"<<endl;
else//否则
if(x<0)//如果x<0
cout<<"negative"<<endl;
else//否则就一定是正数
cout<<"positive"<<endl;
return 0;
}
不难++;
1040:输出绝对值
绝对值,可能有些人不知道,这里解释一下,绝对值就是这个数在数轴所表示的点到原点的距离就叫做这个数的绝对值。(套娃) 数轴,可能有些不知道,这里我说,自己去搜!
绝对值怎么求呢?
正数和0的绝对值就是它自己。|x|=x(x>=0)
负数的绝对值就是它的相反数。|x|=-x(x<0)
这里可以自己弄,也可以用 c**th 头文件的 abs 函数。
下面是代码:(abs函数)
#include<cstdio>
#include<c**th>
using namespace std;
int **in(){
float x;
scanf("%f",&x);
printf("%.2f\n",abs(x));//abs() 求绝对值
return 0;
}
下面是代码:(自己弄)
#include<cstdio>
int **in(){
float x;
scanf("%f",&x);
if(x>=0) printf("%.2f\n",x);//正数和0直接输出
else printf("%.2f\n",-x);//负数输出绝对值
return 0;
}
不难++;
1041:奇偶数判断
改一下2051就可以了。
下面是代码:
#include<iostream>
using namespace std;
int **in(){
int x;
cin>>x;
if(x&1) cout<<"odd"<<endl;//是奇数就输出"odd"
else cout<<"even"<<endl;//是偶数就输出"even"
return 0;
}
简单++;
1042:奇偶ASCII值判断
首先什么是ASCII?其实就是美国标准信息交换代码(American Standard Code for Infor**tion Interchange),很多字符都可以在ASCII上找到,直接进行强制转换就可以得出。
下面是代码:
#include<iostream>
using namespace std;
int **in(){
char x;
cin>>x;
if(int(x)&1)//奇数
cout<<"YES"<<endl;
else//偶数
cout<<"NO"<<endl;
return 0;
}
不难++;
1043:整数大小比较
十分简单,按照题意做就不会错。
下面是代码:
#include<iostream>
using namespace std;
int **in(){
int x,y;
cin>>x>>y;
if(x>y) cout<<">"<<endl;//大于
else if(x<y) cout<<"<"<<endl;//小于
else if(x==y) cout<<"="<<endl;//等于
return 0;
}
不难++;
1044:判断是否为两位数
题目直接告诉我们大于等于10且小于等于99了...
下面是代码:
#include<iostream>
using namespace std;
int **in(){
int x;
cin>>x;
if(x>=10&&x<=99)//是两位数
cout<<1<<endl;
else//不是两位数
cout<<0<<endl;
return 0;
}
简单++;
1045:收集瓶盖赢大奖
如果你拥有10个印有“幸运”、或20个印有“鼓励”的瓶盖,就可以兑换一个神秘大奖。
题目已经告诉了我们有10个幸运或20个鼓励,直接判断就行了。
下面是代码:
#include<iostream>
using namespace std;
int **in(){
int x,y;
cin>>x>>y;
if(x>10||y>20)//满足条件
cout<<1<<endl;
else//不满足
cout<<0<<endl;
return 0;
}
简单++;
1046:判断一个数能否同时被3和5整除
看题目就直接知道要干啥了。
啥不多说,就说一下怎么判断。
用 % 可以,C++中 a % b 表示 a ÷ b 的余数。看看有没有余数就知道能不能整除了。
下面是代码:
#include<iostream>
using namespace std;
int **in(){
long long n;
cin>>n;
if(n%3==0&&n%5==0)//如果可以同时被3,5整除
cout<<"YES"<<endl;
else//如果不能
cout<<"NO"<<endl;
return 0;
}
不难++;
1047:判断能否被3,5,7整除
这不就上一题的 plus 版本吗?(plus 可能不止一个...)
#include<iostream>
using namespace std;
int **in()
{
int n,s=0;
cin>>n;
if(n%3==0){//可以被3整除
cout<<"3 ";
s++;
}
if(n%5==0){//可以被5整除
cout<<"5 ";
s++;
}
if(n%7==0){//可以被7整除
cout<<"7 ";
s++;
}
if(s==0) cout<<"n"<<endl;//啥都不是
return 0;
}
不难++;
1048:有一门课不及格的学生
这个看似比较难,其实不难,认真理解就知道了。
#include<iostream>
using namespace std;
int **in(){
int a,b;
cin>>a>>b;
cout<<(((a>=60)&&(b<60))||((a<60)&&(b>=60)))<<endl;//满足条件
return 0;
}
代码中的 (((a>=60)&&(b<60))||((a<60)&&(b>=60))) 是直接输出的,可能有人不理解,其实当这个条件表达式成立时,C++非0即真,成立的话将会把它设为1,输出是就是1了。
好了,题目都讲完了。
文档下载
转载:感谢您阅览,转载请注明文章出处“来源从小爱孤峰知识网:一个分享知识和生活随笔记录的知识小站”。
链接:C++ If讲解与一本通平台讲解http://www.gufeng7.com/niaolang/1844.html
联系:如果侵犯了你的权益请来信告知我们删除。邮箱:119882116@qq.com
上一篇: C++ Switch讲解与一本通平台讲解
下一篇: C++ For讲解与一本通平台讲解