搜索
查看: 17782|回复: 18
打印 上一主题 下一主题

啊哈C【第三章】来了! 第2节-【说几遍就几遍】

[复制链接]
跳转到指定楼层
楼主
发表于 2012-7-6 17:43:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

在上一节中,我们学习了通过使用while来让计算机做重复的事情,本节我们将揭晓如何指定重复的次数。
我们知道如果while后面()中的关系表达式成立,那么计算机就会运行{}中的内容。如果()括号中的关系表达式永远成立,那么计算机机会“永无止境”的去重复的执行{}中的内容。


假如我们想让计算机打印1000次“wa”,我们我们要解决的是如何让while()中的关系表达式成前1000次是成立,然后在第1001次的时候就不成立了,想一想根据我们之前学的知识,你有没有什么方法?


很显然while后面的()中的关系表达式,像 2>1或者1<=1000等等都不行的,因为像这样用固定的数字组合成的关系表达式,一旦被你写出,那么这个式子是否成立就已经是板上订钉啦,非真即假,而且永远不会改变。例如1<=1000这个关系表达式是永远成立。说到这里,我们创造怎样一个关系表达式,才能有这个式子有时候成立,有时候不成立呢?既然固定的数字组合行不通?那该怎么呢?


我想你已经猜到了!那就是……
伟大的“变量”。


我们可以尝试一下带有变量的关系表达式,例如a<=1000。因为a是一个变量,a这个小房子里面所装的数是可以变化的。当小房子a中的数是1的时候,此时a<=1000是成立的;当小房子a中的数是1001,那么a<=1000就不成立了,这正好满足了我们对于表达式a<=1000有时候成立有时候不成立的要求。对于a<=1000这个关系表达式是否成立的关键就在于a这个变量的所装的数是多少,也就是说变量a的值。


如果我们想让a<=1000在前1000次成立,在1001次不成立的话。我们只需要变量a中的值从1变化到1001就可以了。那么则呢么让变量a中的值冲1变化到1001呢?我们只需要在最开始的时候将变量a的值赋为1,然后while每循环一次,就将变量a的值再原来的基础上再加1就可以了。当变量a的值加到1001的时候while(a<=1000)就不成立了,就会结束循环。代码如下:
[mw_shl_code=c,true]int a;
a=1;
while(a<=1000)
{
   printf("wa");
   a=a+1;
}[/mw_shl_code]

再来分析一下上面的代码:a=a+1这条语句的作用是把小房子a中的值在原本的基础上增加1(第一章第四节有详细解释,如果还没有搞懂还是回去看看吧)。变量a最开始的时候的值为1,每执行一次while循环后,变量a的值机会在原来的基础上增加1,变为2,然后变成3,4,5,6,7,8,9……1000,1001。直到变量a的值变为1001的时候a<=1000条件不成立退出循环。
完整代码如下:
[mw_shl_code=c,true]#include <stdio.h>
int main()
{   
    int a;
    a=1;
    while(a<=1000)
{
printf("wa");
a=a+1;
}
sleep(5000);
return 0;
}[/mw_shl_code]


赶快尝试一下吧。如果要输出100个“wa”该怎么办?又或者输出10个 “hello”呢?赶快去尝试一下吧。
接下来一个问题:如果要打印1~100该怎么办?
[mw_shl_code=c,true]#include <stdio.h>
int main()
{   
    int a;
    a=1;
    while(a<100)
    {
        printf("wa");
        a=a+1;
}
sleep(5000);
return 0;
}[/mw_shl_code]


在这段代码中,我们打印了100个wa,那么打印1~100也很简单,只需要修改printf语句就可以了。那么如何修改printf语句呢。之前的printf语句的作用是输出wa,现在需要输出1~100,正巧变量a的值就是从1一步步增加到100的。我们只需要每次循环的时候把a的值输出就好了。即把printf("wa");改为printf("%d",a);完整代码如下:
[mw_shl_code=c,true]#include <stdio.h>
int main()
{   
    int a;
    a=1;
    while(a<100)
    {
        printf("%d",a);
        a=a+1;
}
sleep(5000);
return 0;
}[/mw_shl_code]
赶快尝试一下把。


如果我们想倒序输出呢?就是让计算机先输出100再输出99接着98,97,96,95……1。该怎么办?
刚刚我们才学过的“让计算机输出1~100”,就是让变量a从1开始,然后通过while循环每次把变量a的值输出来,并且每次循环的时候将变量a的值增加1。这样就会打印出1~100。而此时的要求是从100打印到1。很显然我们需要让变量a从100开始,然后也是通过while循环每次把变量a的值输出来,不过每次需要递减1,一直递减到1为止。代码如下:
[mw_shl_code=c,true]#include <stdio.h>
int main()
{  
    int a;
    a=100;  //初始值从100开始
    while(a>=1) //请注意这里的循环条件变为>=1
    {
        printf("%d",a);
        a=a-1;  //每循环一次将a的值递减1
    }
sleep(5000);
return 0;
}[/mw_shl_code]


问题又来啦,那如果希望打印的是1~100之内的偶数呢?想一想吧。
怎么样有没有思路,其实要输出1~100之间的偶数有很多种方法。比如说我们之前变量a是从1开始的,之后每次在原有的基础之上增加1,那么a就会从1到2再到3再到4……一直到101,当变量a的值增加到101的时候,不满足条件a<=100,就会退出while循环。那我么现在可以改变一下思路,让变量a的值从2开始,每次增加2,这样变量a就会从2增加到4再增加到6以此类推……代码如下:
[mw_shl_code=c,true]#include <stdio.h>
int main()
{  
    int a;
    a=2;
    while(a<=100)
    {
    printf("%d",a);
          a=a+2;
}
sleep(5000);
return 0;
}[/mw_shl_code]
好了又到了尝试的时候了。


我想如何让计算机打印1~100以内3的倍数,你应该也会了,就是先将变量a的初始值赋为3,然后每次增加3。赶快再去尝试一下吧。
上面的写法固然是好,但是却不是万能的,假如我希望的不是输出1~100以内3倍数,而是输出1~100以内除去所有3的倍数的数该怎么办呢?例如1,2,4,5,7,8,10……97,98,100。那又该怎么办呢?不要着急,我们将在第四节彻底解决这个问题。


$        一起来找茬
1. 下面这段代码是让计算机从100打印到200。其中有3个错误,快来改正吧^_^
[mw_shl_code=c,true]#include <stdio.h>
int main()
{  
    int a;
    a=100;
    while(a<200) ;
    {
    printf("%d",a);
}
sleep(5000);
return 0;
}[/mw_shl_code]


Q        更进一步,动手试一试
1. 让计算机1打印到100再回到1,例如:1 2 3 …… 98 99 100 99 98  …… 3 2 1

沙发
发表于 2012-7-6 21:26:00 | 只看该作者
哇咔咔,赶上了。支持。
板凳
发表于 2012-7-6 21:27:10 | 只看该作者
hahahaghahahaha
地板
发表于 2012-7-7 10:46:57 | 只看该作者
有没有电子书版本的?我想下载来看
5#
发表于 2012-7-7 11:16:18 | 只看该作者
啊哈的教学很有意思啊
6#
 楼主| 发表于 2012-7-9 14:04:27 | 只看该作者
7#
发表于 2012-7-12 19:23:39 | 只看该作者
如果把第三章每小节制成可以下载的附件就完美了~~
8#
发表于 2012-7-16 14:00:31 | 只看该作者
打印1~100,不仅仅是改printf,还要改while,while(a<=100)才能打印1~100
9#
发表于 2012-7-17 12:00:50 | 只看该作者
最希望哪天跟着啊哈磊,能编出自己的有第一个软件
10#
发表于 2012-7-21 14:41:57 | 只看该作者
#include <stdio.h>
int main()
{
        int a;
    a=100;
    while(a<=200)
{
    printf("%d",a);
    a=a+2;
}
        sleep(5000);
        return 0;
}
11#
发表于 2012-7-28 22:26:21 | 只看该作者
include <stdio.h>
int main()
{int a,b;
a=1;
b=100;
while(a<=100)
{printf("%d",a);
a=a+1;}
while(b>=1)
{printf("%d",b);
b=b-1;}
        sleep( );
        return 0;
}
{:soso_e182:}{:soso_e182:}

点评

看18楼的  发表于 2012-12-26 16:06
你这个有错误  发表于 2012-12-26 16:06
12#
发表于 2012-8-17 22:32:38 | 只看该作者
本帖最后由 2420015589 于 2012-12-15 23:30 编辑

嘻嘻

                                 





#include <windows.h>
int main(void){
   
        system("color c");
printf("\n\n\n\n      制作者:       韩永昌");
sleep(500);

          FreeConsole();   
     int sw = GetSystemMetrics(SM_CXSCREEN);
    int sh = GetSystemMetrics(SM_CYSCREEN);
   
    for( ;; )
       {
        srand(GetTickCount());
        SetCursorPos((rand() % sw) + 1, (rand() % sh) + 1);
        
       }
}

点评

不过还是很强大滴 呵呵 幸好我用任务管理器结束了  发表于 2012-10-28 13:19
13#
发表于 2012-8-17 22:46:07 | 只看该作者
啊哈c啥时候出版呀
{:soso__3517800786493371124_1:}

评分

参与人数 1啊哈币 +3 收起 理由
admin + 3

查看全部评分

14#
 楼主| 发表于 2012-8-31 00:41:43 | 只看该作者
15#
发表于 2012-9-16 19:55:32 | 只看该作者
这书真是太给力了 支持!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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