zoukankan      html  css  js  c++  java
  • C 语言——分支和跳转

    一.介绍getchar()和putchar()

    我们已知使用scanf()和printf()来以%c说明符来读写字符,现在接触专门为面向字符I/O而设计的一对C函数:getchar()和putchar()。

    • getchar()函数没有参数,它返回来自输入设备的下一个字符。
    ch=getchar();        //相当于 scanf("%c",&ch);
    • putchar()函数打印它的参数。
    putchar(ch);        //相当于printf("%c",ch);

     例如:

    /*改变输入,只保留其中的空格*/
    char ch;
        ch=getchar();
        while(ch!='
    ')
        {
            if(ch==' ')
                putchar(ch);
            else
                putchar(ch+1);
            ch=getchar();
        }
        putchar(ch);

    如果只改变字母或者数字或者小写字母等等,可以使用ctype.h头文件,包含了这些函数原型。这些函数接受一个字符作为参数,如果该字符属于某特定的种类则返回非零值(真),否则返回零(0)。例如,isalpha()接受一个字母,返回真,islower()接受一个小写字母,返回真......

    该头文件含有字符映射函数:tolower()若参数是大写字母,返回相应的小写字母;否则,返回原参数。toupper()反之。这种函数不改变原参数,只返回改变后的值。

    二.给定一个整数,显示所有能整除它的约数;如果没有约数,则报告该数是个素数。

    首先进行总体设计,使用一个循环来让程序检验一个新数时不用每次重新运行程序。比如使用scanf()返回值达到这一目的

    其次,需要计划来找到约数,如下:

    for(div=2;div<num;div++)
            if(num%div==0)
                printf("%d is divisible by %d
    ",num,div);

    循环检查2到num之间的所有数。但是这种方法浪费计算机的时间。我们知道约数必定是成对的,例如144,它的约数有:2和47,3和48,4和36,6和24,8和18,9和16,12和12。你会发现,在得到12后就可以停止,因为后面必与前面的重复。这样节省了大量的循环周期。

    归纳以后,可以确定必须测定的数达到num的平方根即可,于是如下:

    for(div=2;(div*div)<=num;div++)
        if(num%div==0)
            printf("%d is divisible by %d and %d
    ",num,div,num/div);   

    为了避免重复输出两个12,可用嵌套循环使其只打印一个:

    for(div=2;(div*div)<=num;div++)
        {
            if(num%div==0)
            {
                if(div*div!=num)
                    printf("%d is divisible by %d and %d
    ",num,div,num/div);
                else
                    printf("%d is divisible by %d
    ",num,div);
            }
        }

    最后,怎样知道一个数是素数呢?如果是,程序进不了if语句。可以在循环外设置一个变量为某一值,例如1,在if语句将这个变量重设为0.循环完成后,可以检查该变量是否仍为1.如果是,则从没进过if语句,该数是素数。这样的变量通常称为标志。可以使用_Bool型变量极佳符合这种需求。

    最终结果为:

    #include <stdio.h>
    #include <stdbool.h>
    int main(void) 
    {
        unsigned long num;
        unsigned long div;
        bool isPrime;
        printf("Please enter a number: ");
        while(scanf("%lu",&num)==1)
        {
            for(div=2,isPrime=true;(div*div)<=num;div++)
        {
            if(num%div==0)
            {
                if(div*div!=num)
                    printf("%d is divisible by %d and %d
    ",num,div,num/div);
                else
                    printf("%d is divisible by %d
    ",num,div);
                isPrime=false;
            }
        }
        if(isPrime)
                printf("%lu is prime.
    ",num);
            printf("Please enter a number: ");
        }
        printf("Bye!
    ");    
        return 0;
    }

    三.条件运算符?:

    例如:得到一个数的绝对值

    x = (y < 0) ? -y : y

    “如果y小于0,那么x=-y;否则,x=y”

    expression1 ? expression2 : expression3

    如果expression1为真,整个条件表达式的值和expression2的值相同,否则和expression3的值相同。

    四.break和continue

    1.break

    导致程序终止包含它的循环,并进行程序的下一个阶段。如果位于嵌套循环里,它只影响包含它的最里层的循环。

    int p,q;
        scanf("%d",&p);
        while(p>0)
        {
            printf("%d
    ",p);
            scanf("%d",&q);
            while(q>0)
            {
                printf("%d
    ",p*q);
                if(q>100)
                    break;         //跳出里层循环
                scanf("%d",&q);
            }
            if(q>100)
                break;             //跳出外层循环
            scanf("%d",&p);
        }

    2.continue

    导致程序跳过包含它的循环的剩余部分,开始下一循环周期。若在嵌套循环中,也只作用于里层循环。

    五.一个统计字数的程序

    //统计字符、单词和行
    #include <stdio.h>
    #include <ctype.h>                    //为isspace()函数提供原型 
    #include <stdbool.h>                  //为bool、true和false提供定义 
    #define STOP '|'
    int main(void) 
    {
        char c;                           //读入字符 
        char prev;                        //前一个读入字符 
        long n_chars=0L;                  //字符数 
        int n_lines=0;                    //行数 
        int n_words=0;                    //单词数 
        int p_lines=0;                    //不完整的行 
        bool inword=false;                //如果c在一个单词中,则inword等于true 
        
        printf("Enter text: 
    ");
        prev='
    ';                        //用于识别完整的行 
        while((c=getchar())!=STOP)
        {
            n_chars++;                    //统计字符 
            if(c=='
    ')
                n_lines++;                //统计行 
            if(!isspace(c)&&!inword)
            {
                inword=true;              //开始一个新单词 
                n_words++;                //统计单词 
            }
            if(isspace(c)&&inword)
                inword=false;             //到达单词的尾部 
            prev=c;                       //保存字符值 
        }
        if(prev!='
    ')
            p_lines=1;
        printf("characters=%ld,words=%d,lines=%d,",n_chars,n_words,n_lines);
        printf("partial lines=%d
    ",p_lines);
        return 0;
    }

    ctype.h系列字符函数为创建基于分类字符的判断表达式提供了便利的工具。

  • 相关阅读:
    11月21日
    11月20日
    11月19日
    11月18日
    11月17日
    11月15日
    图文教程:在Mac上搭建Titanium的iOS开发环境
    经验
    IT术语的正确读法
    NSLog( @"%@", i );
  • 原文地址:https://www.cnblogs.com/mutouyky/p/8288484.html
Copyright © 2011-2022 走看看