从零开始学编程---第一步-C语言(八)

时间:2014-03-04 12:19    点击:

下面介绍新的运算符,逻辑运算符&& || !
如果
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


现在的问题就是两个值该怎么交换?

来源:幻想编程//所属分类:站长原创/更新时间:2014-03-04 12:19
顶一下
(30)
96.8%
踩一下
(1)
3.2%
上一篇:从零开始学编程---第一步-C语言(七)
下一篇:从零开始学编程---第一步-C语言(九)
相关内容