第四章 选择结构程序设计

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");
}
原文地址:https://www.cnblogs.com/Yang-Xin-Yi/p/13495819.html