⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 C语言程序设计初步.01

📁 经典C教程,带所有ANSI C的库函数说明及例子
💻 01
📖 第 1 页 / 共 4 页
字号:
    else{ a=0;
        b=10;
    }
if语句的嵌套
    当if语句中的执行语句又是if语句时,则构成了if 语句嵌套的
情形。其一般形式可表示如下:    if(表达式)  
        if语句;  
或者为
    if(表达式)  
        if语句;  
    else  
        if语句;
      在嵌套内的if语句可能又是if-else型的,这将会出现多个if和
多个else重叠的情况,这时要特别注意if和else的配对问题。例如:
    if(表达式1)
    if(表达式2)
        语句1;
    else
        语句2;
其中的else究竟是与哪一个if配对呢?
应该理解为:                 还是应理解为:    if(表达式1)                  if(表达式1)
      if(表达式2)                  if(表达式2)
        语句1;                      语句1;
      else                       else
	语句2;                    语句2;    
为了避免这种二义性,C语言规定,else 总是与它前面最近的if配对,因此对上述例子应按前一种情况理解。
void main(){
    int a,b;
    printf("please input A,B:    ");
    scanf("%d%d",&a,&b);
    if(a!=b)
    if(a>b)  printf("A>B\n");
    else     printf("A<B\n");
    else     printf("A=B\n");
}
    比较两个数的大小关系。
    
    printf("please input A,B:    ");
    scanf("%d%d",&a,&b);
    if(a!=b)
    if(a>b)  printf("A>B\n");
    else     printf("A<B\n");
    else     printf("A=B\n");
    本例中用了if语句的嵌套结构。 采用嵌套结构实质上是为了进
行多分支选择,例3.16实际上有三种选择即A>B、A<B或A=B。这种问
题用if-else-if语句也可以完成。而且程序更加清晰。因此, 在一
般情况下较少使用if语句的嵌套结构。 以使程序更便于阅读理解。    
void main(){
    int a,b;
    printf("please input A,B:      ");
    scanf("%d%d",&a,&b);
    if(a==b) printf("A=B\n");
    else if(a>b)  printf("A>B\n");
    else  printf("A<B\n");
}
条件运算符和条件表达式
    如果在条件语句中,只执行单个的赋值语句时, 常可使用条件
表达式来实现。不但使程序简洁,也提高了运行效率。
    条件运算符为?和:,它是一个三目运算符,即有三个参与运算
的量。由条件运算符组成条件表达式的一般形式为:
    表达式1?  表达式2: 表达式3
 其求值规则为:如果表达式1的值为真,则以表达式2 的值作为
条件表达式的值,否则以表达式2的值作为整个条件表达式的值。
   条件表达式通常用于赋值语句之中。例如条件语句:    if(a>b)  max=a;
    else max=b;可用条件表达式写为    max=(a>b)?a:b;
    执行该语句的语义是:如a>b为真,则把a赋予max,否则把b 赋
予max。
使用条件表达式时,还应注意以下几点:
1. 条件运算符的运算优先级低于关系运算符和算术运算符,但高于
   赋值符。因此    max=(a>b)?a:b可以去掉括号而写为    
   max=a>b?a:b2. 条件运算符?和:是一对运算符,不能分开单独使用。
3. 条件运算符的结合方向是自右至左。
例如:
    a>b?a:c>d?c:d应理解为
    a>b?a:(c>d?c:d)    这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条
件表达式。
void main(){
    int a,b,max;
    printf("\n input two numbers:   ");
    scanf("%d%d",&a,&b);
    printf("max=%d",a>b?a:b);
}
用条件表达式对上例重新编程,输出两个数中的大数。

switch语句
    C语言还提供了另一种用于多分支选择的switch语句, 其一般
形式为:    switch(表达式){  
        case常量表达式1:  语句1;  
        case常量表达式2:  语句2;  
        case常量表达式n:  语句n;  
        default        :  语句n+1;  
    }  
    其语义是:计算表达式的值。 并逐个与其后的常量表达式值相
比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的
语句,然后不再进行判断,继续执行后面所有case后的语句。 如表
达式的值与所有case后的常量表达式均不相同时,则执行default后
的语句。
void main(){
    int a;
    printf("input integer number:      ");
    scanf("%d",&a);
    switch (a){ 
	case 1:printf("Monday\n");
	case 2:printf("Tuesday\n");
	case 3:printf("Wednesday\n");
	case 4:printf("Thursday\n");
	case 5:printf("Friday\n");
	case 6:printf("Saturday\n");
	case 7:printf("Sunday\n");
	default:printf("error\n");
    }
}
    
    本程序是要求输入一个数字,输出一个英文单词。但是当输入3
之后,却执行了case3以及以后的所有语句,输出了Wednesday 及以
后的所有单词。这当然是不希望的。为什么会出现这种情况呢?这恰
恰反应了switch语句的一个特点。在switch语句中,“case 常量表
达式”只相当于一个语句标号, 表达式的值和某标号相等则转向该
标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语
句,所以出现了继续执行所有后面case语句的情况。 这是与前面介
绍的if语句完全不同的,应特别注意。为了避免上述情况, C语言
还提供了一种break语句,专用于跳出switch语句,break 语句只有
关键字break,没有参数。在后面还将详细介绍。修改例题的程序,
在每一case语句之后增加break 语句, 使每一次执行之后均可跳出
switch语句,从而避免输出不应有的结果。
void main(){
    int a;
    printf("input integer number:    ");
    scanf("%d",&a);
    switch (a){
      case 1:printf("Monday\n");break;
      case 2:printf("Tuesday\n"); break;
      case 3:printf("Wednesday\n");break;
      case 4:printf("Thursday\n");break;
      case 5:printf("Friday\n");break;
      case 6:printf("Saturday\n");break;
      case 7:printf("Sunday\n");break;
      default:printf("error\n");
    }
}
在使用switch语句时还应注意以下几点:
1.在case后的各常量表达式的值不能相同,否则会出现错误。
2.在case后,允许有多个语句,可以不用{}括起来。
3.各case和default子句的先后顺序可以变动,而不会影响程序执行
  结果。
4.default子句可以省略不用。程序举例
	输入三个整数,输出最大数和最小数。
void main(){
    int a,b,c,max,min;
    printf("input three numbers:    ");
    scanf("%d%d%d",&a,&b,&c);
    if(a>b)
      {max=a;min=b;}
    else
      {max=b;min=a;}
    if(max<c)
      max=c;
    else
      if(min>c)
	min=c;
    printf("max=%d\nmin=%d",max,min);
}
    
    本程序中,首先比较输入的a,b的大小,并把大数装入max, 小
数装入min中,然后再与c比较,若max小于c,则把c赋予max;如果c
小于min,则把c赋予min。因此max内总是最大数,而min内总是最小
数。最后输出max和min的值即可。
   计算器程序。用户输入运算数和四则运算符, 输出计算结果。
void main(){
    float a,b,s;
    char c;
    printf("input expression: a+(-,*,/)b \n");
    scanf("%f%c%f",&a,&c,&b);
    switch(c){
       case '+': printf("%f\n",a+b);break;
       case '-': printf("%f\n",a-b);break;
       case '*': printf("%f\n",a*b);break;
       case '/': printf("%f\n",a/b);break;
       default: printf("input error\n");
    }
}
    
    float a,b,s;
    char c;
    printf("input expression: a+(-,*,/)b \n");
    scanf("%f%c%f",&a,&c,&b);
    switch(c){
       case '+': printf("%f\n",a+b);break;
       case '-': printf("%f\n",a-b);break;
       case '*': printf("%f\n",a*b);break;
       case '/': printf("%f\n",a/b);break;
       default: printf("input error\n");
    }
    本例可用于四则运算求值。switch语句用于判断运算符, 然后
输出运算值。当输入运算符不是+,-,*,/时给出错误提示。
循环结构程序
    循环结构是程序中一种很重要的结构。其特点是, 在给定条件
成立时,反复执行某程序段,直到条件不成立为止。 给定的条件称
为循环条件,反复执行的程序段称为循环体。 C语言提供了多种循
环语句,可以组成各种不同形式的循环结构。
while语句
while语句的一般形式为:
    while(表达式)语句;  其中表达式是循环条件,语句为循环体。
    while语句的语义是:计算表达式的值,当值为真(非0)时, 执
行循环体语句。其执行过程可用图3—4表示。
    统计从键盘输入一行字符的个数。
#include <stdio.h>
void main(){
    int n=0;
    printf("input a string:\n");
    while(getchar()!='\n') n++;
    printf("%d",n);
}        int n=0;
    printf("input a string:\n");
    while(getchar()!='\n')
      n++;
    printf("%d",n);
    本例程序中的循环条件为getchar()!='\n',其意义是, 只要从
键盘输入的字符不是回车就继续循环。循环体n++完成对输入字符个
数计数。从而程序实现了对输入一行字符的字符个数计数。
使用while语句应注意以下几点:
1.while语句中的表达式一般是关系表达或逻辑表达式,只要表达式
  的值为真(非0)即可继续循环。
void main(){
    int a=0,n;
    printf("\n input n:    ");
    scanf("%d",&n);
    while (n--)
      printf("%d  ",a++*2);
}    int a=0,n;
    printf("\n input n:    ");
    scanf("%d",&n);
    while (n--)
      printf("%d  ",a++*2);
    本例程序将执行n次循环,每执行一次,n值减1。循环体输出表
达式a++*2的值。该表达式等效于(a*2;a++)
2.循环体如包括有一个以上的语句,则必须用{}括起来, 组成复合
  语句。
3.应注意循环条件的选择以避免死循环。
void main(){
    int a,n=0;
    while(a=5)
      printf("%d  ",n++);
}    int a,n=0;
    while(a=5)
      printf("%d  ",n++);
    本例中while语句的循环条件为赋值表达式a=5, 因此该表达式
的值永远为真,而循环体中又没有其它中止循环的手段, 因此该循
环将无休止地进行下去,形成死循环。
4.允许while语句的循环体又是while语句,从而形成双重循环。

do-while语句
do-while语句的一般形式为:
    do语句;  
    while(表达式);  其中语句是循环体,表达式是循环条件。
    do-while语句的语义是:先执行循环体语句一次, 再判别表达
式的值,若为真(非0)则继续循环,否则终止循环。其执行过程如图
所示。
    do-while语句和while语句的区别在于do-while是先执行后判断,
因此do-while至少要执行一次循环体。而while是先判断后执行,如
果条件不满足,则一次循环体语句也不执行。while语句和do-while
语句一般都可以相互改写。void main(){
    int a=0,n;
    printf("\n input n:    ");
    scanf("%d",&n);
    do printf("%d  ",a++*2);
      while (--n);
}    
    int a=0,n;
    printf("\n input n:    ");
    scanf("%d",&n);
    do printf("%d  ",a++*2);
      while (--n);    在本例中,循环条件改为--n,否则将多执行一次循环。这是由
于先执行后判断而造成的。
对于do-while语句还应注意以下几点:
1.在if语句,while语句中, 表达式后面都不能加分号, 而在 do  -while语句的表达式后面则必须加分号。
2.do-while语句也可以组成多重循环,而且也可以和while语句相互
  嵌套。
3.在do和while之间的循环体由多个语句组成时,也必须用{}括起来
  组成一个复合语句。
4.do-while和while语句相互替换时,要注意修改循环控制条件。

for语句
    for语句是C语言所提供的功能更强,使用更广泛的一种循环语
句。其一般形式为:
    for(表达式1;表达式2;表达3)  
        语句;
      表达式1通常用来给循环变量赋初值,一般是赋值表达式。也允
许在for语句外给循环变量赋初值,此时可以省略该表达式。
    表达式2通常是循环条件,一般为关系表达式或逻辑表达式。
    表达式3通常可用来修改循环变量的值,一般是赋值语句。
    这三个表达式都可以是逗号表达式, 即每个表达式都可由多个
表达式组成。三个表达式都是任选项,都可以省略。
    一般形式中的“语句”即为循环体语句。
for语句的语义是:
1.首先计算表达式1的值。
2.再计算表达式2的值,若值为真(非0)则执行循环体一次, 否则跳
  出循环。
3.然后再计算表达式3的值,转回第2步重复执行。
    在整个for循环过程中,表达式1只计算一次,表达式2和表达式
3则可能计算多次。循环体可能多次执行,也可能一次都不执行。
for 语句的执行过程如图所示。
void main(){
      int n,s=0;
      for(n=1;n<=100;n++)
	s=s+n;
      printf("s=%d\n",s);
}           
    用for语句计算s=1+2+3+...+99+100
    
      int n,s=0;
      for(n=1;n<=100;n++)
	s=s+n;
      printf("s=%d\n",s);
    本例for语句中的表达式3为n++,实际上也是一种赋值语句,相
当于n=n+1,以改变循环变量的值。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -