zoukankan      html  css  js  c++  java
  • 第四章 选择结构程序设计

    typedef 允许你为各种数据类型定义新的名字。

    typedef char *pchar 这个声明把标识符pchar作为指向字符的指针类型的新名字。

    pchar a;声明a是一个指向字符的指针。

    注意:应该使用typedef而不是#define来创建新的类型名。因为后者无法处理指针类型。

    例如:# define ptr_to_char char *

        ptr_to_char a,b;正确声明a为一个指向字符的指针,但b被声明为一个字符。

     

    int *pi  pi是一个普通的指向整型的指针

    int const *pci  则是一个指向整型常量的指针。你可以修改指针的值,但不能修改指针所指向的值。

    int * const cpi  cpi是一个指向整型的常量指针。此时指针是常量(必须在定义时初始化),它的值无法修改,但可以修改它所指向的整型的值。

    int const * const cpci  无论指针本身还是它所指向的值都是常量,不能被修改。

     

     

    4.1.1关系运算符与关系表达式

      比较两个量的运算符称为关系运算符。在C语言中有以下关系运算符:

        < 小于   <= 小于或等于   > 大于   >= 大于或等于   == 等于   != 不等于

      说明:

        1)关系运算符都是双目运算符,其结合性均为左结合性

        2)关系运算符的优先级低于算术运算符,高于赋值运算符。

        3)在关系运算符中 <  <=  >  >=优先级相同,高于==  !=,==和!=优先级相同。

    4.1.2 关系表达式

        用关系运算符将表达式链接起来的式子称为关系表达式。

          表达式的结果只有两种:真(1)和假(0)。在进行比较时,非0的值代表为真,0的值代表为假。

     

     

    4.2.1逻辑运算符

         C语言中提供的逻辑运算符有3种: && 逻辑与运算符    || 逻辑或运算符    !逻辑非运算符

      说明:

        1)!为单目运算符,&&和||为双目运算符。

        2)&&和||具有左结合性,!具有右结合性。

        3)逻辑运算符的优先级关系:!--->&&--->||    &&和||低于关系运算符  !高于算术运算符

    4.2.2逻辑表达式

      用逻辑运算符将表达式链接起来的式子称为逻辑表达式。

        表达式的结果也只有两种:真(1)和假(0)。在进行比较时,非0的值代表为真,0的值代表为假。

    && 逻辑与运算符参与运算的两个量都为真时,&&结果才为真,否则为假。  多个&&运算时,第一个为假就可以确定此表达式最后结果肯定为假,所以可以忽略后面的&&运算。

    ||逻辑或运算符参与运算的两个量有一个为真时,||结果才为真 否则为假。 多个||运算时,第一个为真就可以确定此表达式最后的结果肯定为真,所以可以忽略后面的||运算

     

      1)判断某一年year是否是闰年的表达式为:(闰年的条件:year能被4整除的同时不能被100整除;或者year能被4整除,又能被400整除)  闰年366天 2月29天

        (year % 4 == 0 && year % 100 != 0)||year % 400 == 0    结果为真时,year为闰年,否则为非闰年

      2)判断某个字符C是不是字母的表达式:

        (c >= 'A' && c <= 'Z')||(c >= 'a' && c <= 'z')  按字符比较

        或 (c >= 65 && c <= 90)||(c >= 97 && c <= 122)  按字符的ASCII码值比较

     

     

    4.3.1 if语句的三种形式

      1.单分支if语句

        格式:if(表达式) 语句

        功能:如果表达式的值为真,则执行其后的语句,否则不执行该语句。

      说明:1)圆括号内的表达式一般为逻辑表达式或关系表达式,但也可以是其它表达式。

         2)语句可以是任意一条有效的执行语句或复合语句,也可以是另一个if语句

     

       2.双分支if语句

        格式:if(表达式)

             语句1;

           else

             语句2;

          功能:如果表达式结果为真,则执行语句1,否则执行语句2。

        说明:1)如果语句1或语句2的语句多于一条时,必须用{ }将其括起来。

           2)else不能单独出现,必须与if配对使用。

           3)书写时一般将else及后面的语句另起一行,并且让else与它所对应的if对齐。

     

    例题1:任意输入一年份判断此年是否为闰年。

     1 #define _CRT_SECURE_NO_WARNINGS
     2 #include<stdio.h>
     3 #include<stdlib.h>
     4 
     5 void main()
     6 {
     7     int year;
     8     scanf("%d", &year);
     9     if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
    10         printf("%d 是闰年
    ", year);
    11     else
    12         printf("%d 不是闰年
    ", year);
    13     system("pause");
    14 }

     

    例题2.任意输入一个字符,判断它是否为大写字母,如果是,将它转换成小写字母;如不不是,不转换。

     1 #define _CRT_SECURE_NO_WARNINGS
     2 #include<stdio.h>
     3 #include<stdlib.h>
     4 
     5 void main()
     6 {
     7     char ch = getchar();
     8 
     9     if (ch >= 'A' && ch <= 'Z')
    10     {
    11         putchar(ch + 32);
    12         putchar('
    ');
    13     }
    14     else
    15     {
    16         putchar(ch);
    17         putchar('
    ');
    18     }
    19 
    20     //(ch >= 'A' && ch <= 'Z') ? ch = ch + 32 : (ch >= 'a'&&ch <= 'z') ? ch = ch - 32 : ch;
    21     //printf("%c", ch);     如果是大写字母转小写字母;如果是小写字母转大写字母
    22 
    23     system("pause");
    24 }

     

      3.多分枝if语句

        格式:if(表达式1)

              语句1;

            else if(表达式2)

                 语句2;

            else if(表达式3)

                  语句3;

              ……

            else if(表达式m)

                  语句m;

               else

                   语句n;

        功能:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句,然后跳到整个if语句之外继续执行。如果所有表达式均为假,则执行语句n。然后继续执行后续程序。

     

    4.3.2 if语句的嵌套

        C语言规定,else总是与它前面最近的if配对。

     

     

    例题1.从键盘输入3个数作为三角形的一条边,判断是否能够成一个三角形,若能,请判断是等边、等腰、直角三角形还是一般的三角形。

     1 #define _CRT_SECURE_NO_WARNINGS
     2 #include<stdio.h>
     3 #include<stdlib.h>
     4 
     5 void main()
     6 {
     7     int a, b, c;
     8     printf("请输入三个数据:");
     9     scanf("%d%d%d", &a, &b, &c);
    10 
    11     if (a + b > c&&a + c > b&&b + c > a)
    12     {
    13         printf("能构成一个三角形
    ");
    14         if (a == b&&b == c) printf("能构成一个等边三角形
    ");
    15         else if
    16             (a == b || b == c || a == c) printf("能构成一个等腰三角形
    ");
    17         else if
    18             (a*a + c*c == b*b || a*a + b*b == c*c || b*b + c*c == a*a) printf("能构成一个直角三角形
    ");
    19         else
    20             printf("能构成一个普通的三角形
    ");
    21     }
    22     else
    23         printf("不能构成一个三角形
    ");
    24 
    25     system("pause");
    26 }

     

    4.4 switch语句

        switch语句是一条多分枝选择语句。

      1.语法形式:

         switch(表达式)

          {

          case 常量表达式1: 语句1;break;

          case 常量表达式2: 语句2;break;

          ……

          case 常量表达式n: 语句n;break;

          default:语句 n + 1;

          }

        功能:计算表达式的值,并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句。如果语句后没有break,就不再进行判断,继续执行后面所有case后的语句;如果有break,则执行当前语句后跳出所在的switch语句。如表达式的值与所有case后的常量表达式均不相同,则执行default后的语句。

       说明:

        1)在case后的各常量表达式的值不能相同,否则会出错。

        2)在case后允许有多个语句,可以不用{ }括起来。

        3)各case和default子句的先后顺序可以变动,而不会影响其执行结果。

        4)default字句可以省略不写。

      C语言中三目运算符返回是值  C++中三目运算符返回是变量

      malloc在C中必须强转 C++中可以不强转  C中struct不可以有函数 C++可以有

      C中struct声明变量必须加strcut  关键字 C++中可以不加struct关键字

      C中const修饰的变量是伪常量,编译器会分配内存。  C++中const不会分配内存,会临时开辟一块内存。

    例题1.输入一个字符,判断它如果是小写字母输出其对应大写字母;如果是大写字母输出其对应小写字母;如果是数字输出数字本身;如果是空格,输出“space”;如果不是上述情况,输出“other”。

     1 #define _CRT_SECURE_NO_WARNINGS
     2 #include<stdio.h>
     3 #include<stdlib.h>
     4 
     5 void fun(char ch)
     6 {
     7     if (ch >= 'A'&&ch <= 'Z')
     8         putchar(ch + 32);
     9     else if (ch >= 'a'&&ch <= 'z')
    10         putchar(ch - 32);
    11     else if (ch == ' ')
    12         printf("space");
    13     else if (ch >= 48 && ch <= 57)
    14         putchar(ch);
    15     else
    16         printf("other");
    17 }
    18 
    19 void main()
    20 {
    21     char a;
    22     printf("请输入一个字符:");
    23     scanf("%c", &a);
    24     fun(a);
    25 
    26     system("pause");
    27 }

    例题2.有三个数a、b、c,由键盘输入,输出其中最大的数和最小的数。

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    
    void main()
    {
        double a, b, c, max, min;
        printf("please input three numbers:");
        scanf("%lf%lf%lf", &a, &b, &c);
        if (a > b) { max = a; min = b; }
        else { max = b; min = a; }
    
        if (max < c) max = c;
        if (min > c) min = c;
    
        printf("max = %lf  min = %lf", max, min);
        system("pause");
    }

    例题3.读入1到7之间的某个数,输出表示一星期中相应的某一天的单词:Monday、 Tuesday等等,用switch语句做。

     1 #define _CRT_SECURE_NO_WARNINGS
     2 #include<stdio.h>
     3 #include<stdlib.h>
     4 
     5 void main()
     6 {
     7 
     8     int a;
     9     printf("please input integer number: 
    ");
    10     scanf("%d", &a);
    11 
    12     switch (a){
    13     case 1:printf("Monday");break;
    14     case 2:printf("Tuesday");break;
    15     case 3:printf("Wednesday");break;
    16     case 4:printf("Thursday");break;
    17     case 5:printf("Firday");break;
    18     case 6:printf("Saturday");break;
    19     case 7:printf("Sunday");break;
    20     default:printf("Error");
    21     }
    22 
    23     system("pause");
    24 }

    例题4. 给出一百分制成绩,要求输出成绩等级‘A’,‘B’,‘C’,‘D’,‘E’,90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为‘E’。

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    
    void main()
    {
        int a;
        printf("please input score: 
    ");
        scanf("%d", &a);
    
        a = a / 10;
        switch (a)
        {
        case 0:case 1:case 2:case 3:case 4:
        case 5:
            printf("E");break;
        case 6:
            printf("D");break;
        case 7:
            printf("C");break;
        case 8:
            printf("B");break;
        case 9:
            printf("A");break;
        default:printf("Error");
    
        system("pause");
    }
  • 相关阅读:
    二叉树的遍历
    98验证二叉搜索树
    104二叉树的最大深度
    101对称二叉树
    100相同的树
    递归算法
    52N皇后II
    51N皇后
    90子集II
    526优美的排列
  • 原文地址:https://www.cnblogs.com/Yang-Xin-Yi/p/13495819.html
Copyright © 2011-2022 走看看