搜索
查看: 13973|回复: 15
打印 上一主题 下一主题

啊哈C【第三章】来了! 第3节-【if对while说我对你很重要】

[复制链接]
跳转到指定楼层
楼主
发表于 2012-7-7 22:23:59 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
在上一节,我们学习了while循环的基本使用方法,但是我们遗留了一个问题:如何让计算机输出1~100以内除去所有3的倍数的数。

通过第二节的内容我们可以很容易的写出让计算机一次打印1,2,3……一直到100,只需要让变量a从1开始每次增加1就可以了。如果想每次遇到3的倍数就不打印的话,我们只需要每次打印之前对变量a进行一个判断就OK了,当变量a的值是3的倍数时就不打印,否则就打印。那么怎么来判断变量a的值是否是为3的倍数呢?这就需要我们在第二章学习的if语句。我们只需要通过if语句来判断变量a的值除以3的余数是否为0就可以了。如果余数为不为0,说明变量a中的值不是3的倍数,就将变量a中的值打印出来;否则就说明变量a中的值是3的倍数,不能打印。

那么怎么解决变量a的值除以3的余数是否为0呢,我需要使用“%”这个运算符,在第二章中我们介绍过,读作mod,也可以叫做取模,作用就是获取余数。这里另外说一下%这个运算法的左右两边必须为整数。而/这个符号表示除号,作用是获取商,/这个运算符的左右两边既可以是整数也可以是小数。好了废话少说,代码如下
[mw_shl_code=c,true]#include <stdio.h>
int main()
{
    int a;
    a=1;
    while(a<=100)
    {
          if(a%3!=0)
                printf("%d",a);
  a=a+1;
}
sleep(5000);
return 0;
}
[/mw_shl_code]
赶快去尝试一下吧。

如果要输出1~100之间是能被3整除但是不能被5整除的所有数,又该怎么办?

那说明这个数是3的倍数但不是5的倍数,也就是需要变量a除以3的余数为0但除以5的余数不为0。这里逻辑关系“并且”在C语言中的表示方法我们在第二章已经学习过,用“&&”表示,代码如下
[mw_shl_code=c,true]#include <stdio.h>
int main()
{
    int a;
    a=1;
    while(a<=100)
    {
          if(a%3==0 && a%5!=0)
                printf("%d",a);
  a=a+1;
}
sleep(5000);
return 0;
}

[/mw_shl_code]
更复杂的来啦!

你有没有和同学玩过一个游戏:大家围成一圈从1开始报数,但是每逢遇到7的倍数或者末尾含7的数例如7,14,17,21,27,28等等,就要拍手并不能报出,谁出错了,谁就要受到惩罚,哈哈。
现在我想知道1~100以内有多少想这样的数,请你写这样一个程序,输出1~100之间所有是7的倍数或者末尾含7的数。

同样很简单,我们同样参照以往的程序,利用while循环,让变量a从1到100,不过我们每次在输出变量a的值的之前需要对变量a进行判断。根据题目的要求,如果变量a的值是7的倍数或者变量a的值末尾含有7就打印出来。判断一个变量是否为7的倍数我们已经很熟悉了,只需要判断变量a除以7的余数是否为0就可以,即如果a%7==0这个关系表达式成立就输出。那怎么解决变量a的值末尾是否含7呢?我们仔细想一想就会发现末尾含7的数其实就是这个数的个位为7,也就是这个数除以10的余数为7。哈哈,有了这个性质就好办了,即a%10==7这个关系表达式成立的时候也输出就OK啦。

好了现在有两个关系表达式a%7==0和a%10==7,分别表示这个数是否为7的倍数和末尾是否含7。这两个式子是或者的关系,只有一个成立,就将这个数输出。这里逻辑关系“或者”在C语言中的表示方法我们在第二章也学习过,用“||”表示,代码如下
[mw_shl_code=c,true]#include <stdio.h>
int main()
{
int a;
int a;
a=1;
while(a<=100)
{
if(a%7==0 || a%10==7)
                printf("%d",a);
   a=a+1;
}
sleep(5000);
return 0;
}

[/mw_shl_code]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表