从零开始学编程---第一步-C语言(八)
下面介绍新的运算符,逻辑运算符&& || !
如果
if(age>18)
{
if(age<30)
{
printf("你已成年且未奔三");
}
}
这个语句是说只要年龄在大于18小于30 就打印语句
但是这样写不太直观,并且逻辑变的有点复杂
但我们用&&逻辑运算符就会使程序更清晰
如if(age>18&&age<30)
意思是如果age大于18且小于30
&& 是与的意思,意味着它两边的条件必须同时为真,一边为假,它就不起作用
如果age=31 age>18的条件他满足,但age<30的条件他不满足,所以语句不会运行
还有一个|| 这是或的意思
if(age>18||age<30)
意思是如果age大于18或者小于30
|| 只要两边一个为真(两个一起为真也可),它就会运行
如果age=17 age>18他不满足但age<30他满足,所以这条语句会运行
最后一个! 这是非的意思
if(age!=18) 这样也可以if(!(age==18))
意思是如果age不等于18,它就会运行,反之如果等于18,就不运行
if(!(age<18))
与下面语句完全相同
if(age>=18)
if(a==0)
只有当a为0才为真
你也可以像这样写
if(!a)
这种方法值限制于0或者1
!会使程序变的有点混乱,即使用了!可能会减少一点输入,但是清楚的代码比需要技巧的代码好,所以用if(a==0)可能会更好,尽管用!或许会节省几微秒的时间
优先级问题
if(age=18|| age>18&&age<30)
||的优先级比&&的低
你可以这样理解
if(age=18|| (age>18&&age<30))
与或非 的真假关系其实高中数学就学过了,在C语言中我想并不难理解
下面这个程序应该很容易理解吧
#include <stdio.h>
main()
{
int age;
printf("请输入你的年龄:\n");
scanf("%d",&age);
if(age!=18)
{
if(age<18&&age>0)
{
printf("你未成年\n");
}
else if(age>18||age<100)
{
printf("你成年了\n");
}
}else
{
printf("你正好18\n");
}
}
下面来个题目
输入3个数,比较3个数的大小(从大到小)
这题该怎么入手?首先你先想一想,这题比前面的题目有一定的难度
首先肯定是定义3个变量 a,b,c
关键是怎么用逻辑来表示出来
if(a>b>c) 这是不行的,这个语句有两个条件,相当于if(a>b,b>c) 就是if(a>b||b>c)
我们肯定不需要用||或的逻辑运算符,而且我们在输入数字的时候不可能正好满足a>b>c的条件
那么我们输入数字有几种可能?
一种是a>b a>c b>c(这个就是a>b>c) 或a>b a>c c>b
二种是b>a,b>c,a>c或b>a,b>c,c>a
三种是c>a,c>b,a>b或c>a,c>b,b>a
这个可能有点让你晕,我们不妨先找出3个数的最大和最小数
定义两变量 最大数max 最小数min
a>b a>c b>c max=a min=c
a>b a>c c>b max=a min=b
b>a,b>c,a>c max=b min=c
b>a,b>c,c>a max=b min=a
c>a,c>b,a>b max=c min=b
c>a,c>b,b>a max=c min=a
一共六种情况
下面程序为
#include <stdio.h>
main()
{
int a,b,c,max,min;
printf("请输入三个数字\n");
scanf("%d%d%d",&a,&b,&c);
if(a>b&&a>c&&b>c)
{
max=a;
min=c;
}
else if(a>b&&a>c&&c>b)
{
max=a;
min=b;
}
else if(b>a&&b>c&&a>c)
{
max=b;
min=c;
}
else if(b>a&&b>c&&c>a)
{
max=b;
min=a;
}
else if(c>a&&c>b&&b>a)
{
max=c;
min=a;
}
else if(c>a&&c>b&&a>b)
{
max=c;
min=b;
}
printf("max=%d min=%d\n",max,min);
}
这下知道该怎么入手了吧,知道最大最小数,剩下那个就是中间数
我们只要加上这个中间数就好了
所以最终程序这样
#include <stdio.h>
main()
{
int a,b,c,max,min,between;
printf("请输入三个数字\n");
scanf("%d%d%d",&a,&b,&c);
printf("比较3个数的大小\n");
if(a>b&&a>c&&b>c)
{
max=a;
min=c;
between=b;
}
else if(a>b&&a>c&&c>b)
{
max=a;
min=b;
between=c;
}
else if(b>a&&b>c&&a>c)
{
max=b;
min=c;
between=a;
}
else if(b>a&&b>c&&c>a)
{
max=b;
min=a;
between=c;
}
else if(c>a&&c>b&&b>a)
{
max=c;
min=a;
between=b;
}
else if(c>a&&c>b&&a>b)
{
max=c;
min=b;
between=a;
}
printf("%d>%d>%d\n",max,between,min);
}
上面程序还可以简化
#include <stdio.h>
main()
{
int a,b,c;
printf("请输入三个数字\n");
scanf("%d%d%d",&a,&b,&c);
printf("比较3个数的大小\n");
if(a>b&&a>c)
{
if(b>c) printf("%d>%d>%d\n",a,b,c);
else printf("%d>%d>%d\n",a,c,b);
}
if(b>c&&b>a)
{
if(a>c) printf("%d>%d>%d\n",b,a,c);
else printf("%d>%d>%d\n",b,c,a);
}
if(c>a&&c>b)
{
if(a>b) printf("%d>%d>%d\n",c,a,b);
else printf("%d>%d>%d\n",c,b,a);
}
}
注意:if语句后只跟一条printf语句我没打括号
说明一下,上面的程序对两个相同的数没作用
还有一种比较3个数大小的程序算法,就是排序,这个有难度,你暂时可以不看也没关系
a b c 哪个数大就往前移动
a比b 如果a比b小,a和b两个值就交换,反之,不交换
a比c 如果a比c小,a和c两个值就交换,反之,不交换
b比c 如果b比c小,b和c两个值就交换,反之,不交换
怎么比的?首先第一个数a一个个比a后面的所有数,遇到比自己大的数就发生交换,比完之后,第2个数b一个个比b后面的所有数,遇到比自己大的就交换,c后面没数了,所以不用比了
a比b再a比c 这是第一步 a已经比完了,接下来是b
b比c 这是第二步 b已经比完了,只剩c,不用比了
比如输入 1,2,3
a比b 1比2 可以发生交换 此时a=2 b=1
a比c 2比3 可以发生交换 此时a=3 c=2
此时 a,b,c为 3,1, 2
b比c 1比2 可以发生交换 此时b=2 c=1
完毕
a,b,c为3,2,1
现在的问题就是两个值该怎么交换?
最新内容
热点内容
- QQ群
- 返回首页
- 返回顶部