C语言梗概

12 篇文章 0 订阅
本文详细介绍了C语言程序的基本结构,包括函数、标识符、保留字、基本数据类型和算术表达式。讲解了主函数main()、变量说明、赋值语句以及基本输入输出函数printf()和scanf()的使用。此外,还阐述了流程控制语句,如for、while、do-while循环,if条件语句,以及break和continue的用法。最后提到了switch语句和条件表达式运算符的应用。
摘要由CSDN通过智能技术生成

1C 语言程序的基本形式

1.1 C 语言的结构

C 语言程序都是由一个或多个函数(Function)构成。一个 C 程序至少必须存在一个函数 “main()”。它是程序运行开始时调用的一个函数。它表明该程序完成动作轮廓。C 语言程序 的基本形式如下:

  void main()  

  {  
  	变量说明语句;  
  	执行语句;  
  }  

main()为主函数,只能有一个。执行语句中,可有其他函数,但不能用 main 为函数名。 许多常用的函数做成标准函数与 C 编译器一起提供给用户,这就是标准库函数。

例 1.1:C 语言程序

  /* This program is sum of two integer and the results */  

  void main()  
  {  
  int a,b,sum;/*说明 a,b 和 sum 为整型变量*/  
  a=123;  
  b=456;  
  sum=a+b;  
  printf(“The sum of %d and  %d is %d
”,a,b,sum);  
  }  

此例中,只有一个函数——主函数 main()。第一个语句是说明 a,b 和 sum 这些变量的 语句,说明它们都是整数(int)型的变量。所有语句都放在左右花括号之内,各语句之间以分 号“;”结束。

1.2 标识符

C 语言中所使用的每个函数和变量都应有唯一的名称,这样才能被识别和使用。通常, 这种函数和变量名称用一串字符表达,称为标识符。C 语言使用的标识符有严格限制:

(1) 必须以字母或下划线开头, ;

(2) 必须由字母,数字或下划线组成

(3) 大小写字母是有区别的;

(4) 不允许用一些保留字(或叫关键字)。

例: 正确的函数或变量名:

  _abc, veb7, lev_5  

错误的函数或变量名称的实例:

  3H, sUM$,char  

1.3 保留字(即关键字)****

在 C 语言中保留字或关键字并不太多,原先规定有 28 个,新标准规定改为 32 个,如

下所示:

auto   default  extern   long  static void break  do for  
register   struct   volatile case double  float return  switch   
while  char enum goto  sizeof typedef  continue  else  if
signed union int short unsigned 

1.4 基本数据类型

C 语言可以使用多种数据类型
(1)基本类型

·整数类型 int
·实数类型(浮点类型):
单精度浮点型 float
双精度浮点型 double
·字符类型 char
·枚举类型 enum

(2)构造类型

·数组类型 []
·结构类型 struct
·联合类型 union

(3)指针类型&, *

(4)空类型 void

1. 整数型(integer——int)

整数型常量不仅可以用十进制表示,也允许用八进制或十六进制表示,例如:

  62     十进制数  
  053    八进制数     以 **0** 打头,由 0~7 构成。  
  0x32   十六进制数   以 **0x** 打头,由 0~9 和 A~F 构成。  
  如 0x2C2 即(2×16+12)×16+5=709  

整数类型又可细分成不同长短的类型,应加上类型修饰符构成,即:

 short    int   可简化为 short
 long     int   可简化为 long   
 unsigned int   可简化为 unsigned   

2.浮点类型(float)****

实数类型也叫浮点类型。可包含有整数部分和小数部分,例如:

0.012 等同于.012   (省略0)
5.0 等同于 5.      (省略0)

科学计数法中,则用“尾数+e+指数”表示浮点数值,e 即 exponent(指数)例如:

  6.3e5 等同于 630000.0   6.3x10^5

其中,6.3 就是尾数,含有整数部分(integer part)为 6 和小数部分(fractional part)为 3, 而 5 就是指数 (exponent) 部分。尾数和指数也都有可能为负值,例如:

  -1.23e4         -1.23x10^4
  12.34567e-8     12.34567x10^(-8)
  -78e-12         -78x10^(-12)

3.字符类型(char)

字符类型的数据代表一个字符,由一对单引号将字符括起来,表示的是该字符在 ASCII 码表中的代码 值,例如:

  ‘a’  即 97
  ‘A’  即 65   

它们占 1 byte。

ASCII 码表中的某些控制字符不可显示,则通过加反斜线“”的转义字符表示,例如:

  ‘’   表示 NULL(空)              即 0
  ‘	’   表示 tab(制表)             即 9
  ‘
’   表示 new line(新行或换行)   即 10   
  ‘
’   表示 return(回车)          即 13   
  ‘\’   表示反斜线                即 92  

例 1.2:ASCII 码值。

  #include<stdio.h>  
  void main ( )  {  

  		char c1, c2;  /*定义字符类型*/  

		c1=97; c2=98;  /*赋整型值*/  

 		printf("%c # %c
", c1,c2);/*以字符类型输出*/  

  }  

例 1.3: 小写转大写

  void main ( )  {  
  		char c1, c2;  c1='a'; c2='b';   /*定义字符类型*/  
  		c1=c1-32; c2=c2-32; /*整型数值运算*/  
  		printf("%c %c", c1, c2);  
  }  

1.5 算术表达式

1. C 语言中算术运算符

算术表示达式由变量、常量及算术运算符构成。在 C 语言中算术运算符有:

+、 -、 *、 /、 %  、-- 、++  

+,-,*,和/为四则运算符,和日常概念没有区别,其中 * 和/优先于+和-。 %为取模(Modulus)运算符,是针对整数运算,即取整数除法之后,所得到的余数,例如:

 10%3=1    即 10 对 3 取模,结果为 1。 
 13%8=5    即 13 对 8 取模,结果为 5。

--为自减 1,++为自增 1。

n++或++n 都变量 n 自增 1,最终结果与 n=n+1 等效。但处理过程却有所区别。 ++n,表示 n 先自增 1,然后进到具体的式子中运算;n++,则 n 本身先进入式中运算, 最后 n 再增 1。

例如:已知 n=6,则  

  m=++n;结果为:m=7,n=7   

  m=n++;结果为:m=6,n=7   

  n--与--n 同样类似。  

****2.数据类型与运算结果的关系

(1) 同类型数据运算结果仍保持原数据类型 整型数的除法得到的结果仍是整型数,小数部分将被去掉,例如:

   5/2=2   

而不是 2.5。浮点数的除法得到的仍是浮点数,例如:

 5.0/2.0=2.5   

(2) 不同数据类型混合运算,精度低的类型往精度高的类型转换后,再做运算。例如:

 5.0/2=2.5   

1.6 C 语言的基本语句

1. C 语言的特点

(1) 所有 C 语句都以“;”分号结尾。一条语句可以不止一行,不必加续行符,只根据“;” 来确定语句结束。两条或多条语句也可写在同一行,用“;”分开。

(2) 语句可从任一列位置开始,每行开头,有多少空格都可以,但为了可读性好,通常习惯还是按一定规律缩进。

2. 变量说明语句

变量说明语句的主要作用就是定义变量类型,其格式是:

 类型说明符    变量 1,变量 2,…;例如:  

    int       number;  

    char      a,b,c;  

    float     t1; 

3. 赋值语句

赋值语句是将常量或算术表达式的运算结果赋给变量,其格式是:

变量名=常量或算术表达式; 例如:

  int number;  

  number=10;  

例 1.4: 赋值操作

 void main()  

  {  

		  int n1,n2,n3;  
		
		  int total;  
		
		  n1=1;  
		
		  n2=2;  
		
		  n3=3;  
		
		  total=n1+n2+n3;/* 赋值操作*/  

  }  

4.基本输入输出语句

printf()和 scanf()是 C 语言的基本输入输出函数,都放在标准函数库中,为了使用它们, 应在程序开头加上:

  #include <stdio.h>  

基本输入输出语句就是直接调用这两个基本输入输出函数。
(1)输出语句

一般格式是:

  printf (“控制串”,表达式 1,…,表达式 n);

控制串(或格式串)是用双引号括起来的输出格式控制说明。控制串中每一个变量都应当 与后面相应的某个表达式对应。

控制串分两部分,即:要显示的字符和格式串。格式串以“%”开头,后跟格式码。格式串与参数一 一对应。含有不同格式码的格式串表示显示不同的内容,如下所示:

  %c 显示字符  

  %s 显示字符串  

  %d 以十进制格式显示整数  

  %o 以八进制格式显示整数  

  %x 以十六进制格式显示整数  

  %u 显示无符号整数  

  %f 显示浮点数  

  %e 以科学计数法显示数字    

格式码前可加修改量以便更好地控制显示格式,主要有:

·字符宽度控制,例如:

  %4d 显示十进制整数,至少给 4 个数字位置 
  %10s 显示字符串,至少给 10 个字符位置 

·精度控制,例如:

 %10.4f 显示浮点数,共占 10 位,小数点后取 4 位 
 %5.7s 显示字符串,最少占 5 位,最多占 7 位 

·L 或 h

 %Ld 显示十进制长整数  
 %hd 显示十进制短整数  
 %Lf 显示双精度浮点数  

·显示位置默认为右对齐,若加负号(即“-”),则为左对齐,例如:

 %d 右对齐显示十进制整数  
 %—d 左对齐显示十进制整数  

例如:

  prinft(“Welcome!”);  

屏幕上显示结果:

  Welcome!  

例如:

prinft(“Welcome
”);  

与前例不同是后面加了一个换行符。

例如:

  int number=10;  

  printf(“The number is %d
”,number);


应显示:  


  The number is 10   

例如:

 float valuel,value2,value3;  

  value1=2.3;  

  value2=4.5;  

  value3=6.7;  

  printf(“The average of %of and %f and  %f is %f
”,value1,value2,value3,(value1+value2+value3)/3.0);  

应显示:

  The average of 2.3 and 4.5 and 6.7 is 4.5   

%d 和%f 表示在相应的位置显示的数据类型,且一一对应。%d 表示要显示整型数,%f 表示要显示浮点型数。

(2)输入语句

一般格式是:

 scanf(控制串,地址表达式 1,地址表达式 2,……,地址表达式 n);  

控制串(或叫格式串)与前述 printf()中的控制串类似,也包含有以“%”开头加格式码组 成的格式串。控制串是用双引号括起来的输入格式控制说明。地址表达式所列出的应当是变量的地址,而不是变量名。每个地址表达式的值,对应于前面控制串中某一格式变量的地址。

如:

 int number;  

  scanf(“%d”,&number);

其中,%d 表示应以整型格式输入,&number 表示指向 number 的地址。

注意:

控制串中的非空白符,例如:

  scanf(“%d,%d”,&i,&j) ;

上式中“%d”之间有逗号,输入时也应加逗号。还可用修改控制域宽,例如:

 %20s 就只取前 20 个字符  

 %s 取全串  

例如 :

float average;  

scanf(“%f”,&average);  

其中,%f 表示应以浮点型格式输入,&average 表示指向 average 的地址。

2 章 流程控制

2.1 控制表达式

程序的流程走向是由条件表达式的值控制决定的。表达式总是有值的。

1.逻辑表达式

逻辑表达式由变量、常量和逻辑关系运算符构成,用以表示变量的逻辑关系。

 (1) 逻辑与 (AND)   &&
 (2) 逻辑或 (OR)    ||
 (3) 逻辑非 (NOT)   !  

逻辑表达式只有两种可能的取值,真假必取其一。假者取值为 0;真者取值为 1。

2.关系运算符

变量与变量或常量之间比较数值上大小的关系用关系运算符来表示。关系运算符共有六 种,即:

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

关系表达式也只有两种可能的取值,例如:

  ‘a’==’b’  

此式取值 0,值为假(false)。 又如,已知变量 x=’c’,则表表达式

  x>’b’  

值为真(true),取值 1。

3. 运算操作符的结合性和优先级

运算操作符的结合性和优先级规定了表达式运算操作的处理顺序。优先级高的操作应优先执行。

例如,处理表达式

  a+b*c 时,*优先于+,相当于 a+(b*c)。  

有部分运算操作符的结合性是从右向左。最常见的赋值表达式中,赋值运算操作符的结

合性就是自右向左。例如,

  a=b+c 是将 b+c 结果赋给 a  

又如:

  a*=b+c 相当于 a=a*(b+c)。  

单操作数的运算操作符++(自增 1),++(自减 1),-(负号)的结合性也都从右向左。

例如,

  -i++相当于-(i++),而不是(-i)++  

关于运算符的优先级低于算术运算符,例如:

  a<b+c 等同于 a<(b+c)  

2.2 for 循环语句

1. for 循环语句的一般格式为:

 for(初始化表达式;循环条件;循环表达式) 
 		循环体语句块  

例 2.1:在屏幕上,显示 1~100

  #include <stdio.h>  
  void main()  
  {  
  int n;  
  for (n=1;n<=100;n++) 
  	    printf(“%d
”,n);   /*循环体语句*/ 
   }  

for 语句中“;”隔开的各部分:

 (1)初始化表达式,用于循环开始前,为循环变量设置初始值。 
 (2)循环条件是一个逻辑表达式,若该式取值为真即条件满足,则继续执行循环;否则,执行循环体后的语句。  
 (3)循环表达式定义了每次循环时,循环变量的变化情况。  
 (4)循环体可以是一条语句或一组语句,若是一组语句,需要用“{”和“}”括起来。 

2. for 语句执行过程

 (1)计算初始表达式。  
 (2)判断循环条件,若满足,则执行;否则,退出循环。  
 (3)执行循环。  
 (4)返回第(2)步。  

例 2.2:显示十的阶乘 10!

#include <stdio.h> 

void main()  
{  
  int n,result;  
  result=1;  
  for(n=1;n<=10;n++)  {  
	  result*=n   
	  printf(“%d!=%d
”,n,result);  
  }  
}  

例 2.3:打印可印刷字符的 ASCII(从 32 到 126)代码字符对照表。

 #include <stdio.h>  

 main ()  {  

	 int i;  
	
	 for (i=32;i<127; i++)  {  /* 从 ASCII 码为 32 的开始 */  
	 
		  printf("%4d %c",i,i); /* 打印 ASCII 码及其对应的字符 */  
		  if ((i+4)%5 == 0) printf ("
"); /* 每行打印 5 个字符后换行 */  
	
	  }  

  }  

3.嵌套的 for 语句

在 for 的循环体中还包含 for 语句,这就是嵌套的 for 语句。
例 2.4:计算五个给定数的阶乘

#include <stdio.h> 

 void main()  

{  

  int i,j,number,result;  
  for(i=1;i<=5;i++)  {  

		  scanf(“%d”,&number);
		  result=1;  
		
		  for(j=1;j<=number;j++)  		
			  result *=j;   /*内循环体语句*/  
		
		  printf(“%d!=%d
”,number,result);  

  }   /*外循环体语句*/  
}  

2.3 while 语句

按某一条件循环,可以不知道循环的次数,直到不满足该条件时,才停止循环。

1.while 语句的一般格式为:

  while(循环条件)  
     循环体语句块  

例 2.5:显示 1~100

  #include <stdio.h>  

  void main()  

  {  
	  int n; 
	  n=1;  
	  while(n<=100){  
	     printf(“n=%d”,n);  
	     n++;  
	  }  

  }  

2.while 语句的执行过程

  (1) 判断循环条件是否满足,不满足就退出循环体。  
  (2) 执行循环体。  
  (3) 返回第(1)步。  

如果循环条件根本不能成立,则永不执行循环体;反之,若循环条件总是成立,则成为 永久循环(死循环)。

例 2.6:倒排输出数字

  #include <stdio.h>  
  void main()  
  {  
		  int number,rdigit;  
		  scanf(“%d”,&number);  
		  while(number!=0){  
				  rdigit=number%10;   /*取出低位数*/  
				  printf(“%d”,rdigit);  
				  number/=10;  		
		  }  printf(“
”);  /*循环跳出后换行*/  
  }  

输入的数若为 12345 则输出 54321。

例如:利用 while 语句和空语句跳过所有的空白字符

  while(c=getchar())==’’);  

例如:永久循环

  while(1){ 
   …  
  }  

2.4 Do- while 语句

Do- while 语句为当型循环结构,执行时先执行循环体语句再判断循环条件。

1.do- while 语句的一般格式为:

   do   

     循环体语句块  

  while(循环条件);  

例 2.7:倒排数字输出

  #include<stdio.h>  
  void main()  

  {  

  int number,rdigit;  
  printf(“Please input  a number:”);  
  scanf(“%d”,&number);  

  do{  
      rdigit=number%10;  
      printf(“%d”,rdigit);
      numbe/=10; 
  }while(number!=0); 

  }  

2. 执行过程

  (1) 执行一次循环体。  
  (2) 判断是否满足循环条件,若满足,则循环,转到(1)继续执行;否则,执行随后的语句。  

2.5 if 语 句

1.简单的 if 语句

简单的 if 语句格式为:

if(条件表达式)  
      语句块  

只要条件表达式满足逻辑关系,即表达式的值为真,就执行语句块。
例 2.8:比较两个数

#include<stdio.h>

void main()
{

    int m,n;
    printf(“Please input two numbers
”);  
    scanf(“%d %d”,&m,&n);  
    if(m>n)
        printf(“The first number is bigger
”);  
}  

2.复合句的 if 语句

复合的 if 语句格式为:

  if(逻辑表达式)  
     语句块 1  
  else   
     语句块 2   

若满足逻辑关系,即逻辑表达式的值为真,则执行语句块 1;否则,执行语句块 2。

例 2.9:比较两个数的改进

#include <stdio.h> 
int main()
{
        int m,n;
        
        printf(“Please input  two numbers
”);  
        scanf(“%d %d”,&m,&n);  
        if(m>n)
            printf(“The first number is bigger
”);
        else  /* 相当于 m<n */
           printf(“The first number is bigger
”);
   
}  

例 2.10:检查闰年

/* This program  determines if a year is  a leap yaer */

#include <stdio.h>

main()  {

    int x;
    printf(“Please input  two numbers
”);
    scanf(“%d”,&x);
    if(x%4==0&&x%100!=0||x%400==0)  
        printf(“%d is a leap year
”,x);
    else /* 不满足上述条件 */
         printf(“%d is not  a leap year
”,x);
}  

可见,这种复合的 if 语句是等同于两个简单的 if 语句,即:

  if(逻辑表达式)  
        语句块 1   
  if(逻辑表达式)  
        语句块 2   

3.嵌套的 if 语句

在 if 语句的语句块中还可包含 if 语句,这就形成嵌套的 if 语句。其格式为:

if(逻辑表达式 1)  
	语句块 1   
else if(逻辑表达式 2)     
    语句块 2  
else   
    语句块 3   

例 2.11:

              -1  (x<0)
有一个函数 y=   0   (x=0) 
               1  (x>0)  


#include<stdio.h>
void main ( )  {

    int x,y;
    scanf ("%d",&x);  
    if (x<0) 
        y=-1;
    else if (x==0) 
        y=0;
    else 
        y=1;
    printf ("x=%d,y=%d
",x,y);

}

此例 if 与 else 是成对的,比较容易理解。 实际上也可能在嵌套中只有 if,而没 有 else, 这样就容易造成错误。因为 else 总是与前面最相近的一个不包含 else 的 if 语句对应匹配, 为避免发生这种错误,应将嵌套中的 if 语句用“{”和“}”括起来,即:

  if(逻辑表达式 1){  
	  if(逻辑表达式 2)  
		  语句块 1   }  
  else    
      语句块 2   

4. else-if 语句

实际上,这也是一种嵌套,在 else 下再嵌套 if_else,形成如下格式:

if(逻辑表达式 1)  
    语句块 1
else if(逻辑表达式 2)  
        语句块 2
    else if(逻辑表达式 3)  
            语句块 3
         …
             else
                 语句块 n   

例 2.12:用 else-if 语句,写一个程序,输入一个数 x,打印出符号函数 sign(x)的值。

                  -1       x<0       
符号函数为 sign(x)= 0       x=0
                   1       x>0  


#include <stdio.h>

void main()  {

    int number,sign;

    printf(“Please type  in a number x=”);  
    scanf(“%d”,&number);  
    if(number<0)
        sign=-1;
    else if(number==0) /*else 包括=0 和>0 两者*/
        sign=0;  
    else
        sign=1;

    printf(“sign(x)=%d
”,sign);
}

2.6 条件表达式运算符

条件表达式运算符的一般格式为:

 条件 ? 表达式 1:表达式 2  

这是一个三元运算符,它控制三个操作数,第一个操作数是条件,条件通常是一个逻辑关系表达式。该条件若为真,取表达式 1 的值,就是整个条件表达式的运算结果;否则,取表达式 2 的值作为整个条件表达式的运算结果。

例 2.13:求最大值.

#include <stdio.h>  
main()
{
    int a,b,c;  
    scanf(“%d %d”,&a,&b);
    c=(a>b)?a:b;
    /* 取 a 和 b 中大者赋给 c */
    printf(“The maxum is %d”,c); 
} 

2.7 break 语句

break 语句用在 for,while,do 以及 switch 语句中。当执行一个循环体时,在某一特定状态出现 break 语句时,立即退出循环体,且只退出本级循环。

例 2.14:九九乘法表

#include <stdio.h>

main()
{
    int i,j;
    for(i=1;i<=9;i++){
        for(j=1;j<=9;j++){
            if(j>i)break; /* 被乘数大于乘数时跳出内循环 */
            printf("%d ",i*j);
        }
        printf("
");
    }
}

其结果将打出三角形的乘法表,即

1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
6 12 18 24 30 36
7 14 21 28 35 42 49
8 16 24 32 40 48 56 64
9 18 27 36 45 54 63 72 81

2.8 continue 语句

continue 语句执行后,在本次循环中其他语句均不执行,转而继续执行循环体的下一次循环。在 while﹑do 循环中意味着立即转入条件测试,在 for 循环中意味着立即转到执行 i++,而进入下一次重复。
例 2.15:只做正数的累加而跳过负数

#include <stdio.h>  
main()
{

    int a,i,n,sum;  
    scanf(“%d”,&n);  
    sum=0;
    
    for(i=0;i<n;i++){  
        scanf(“%d”,&a);  
        if(a<0)
            continue;
        sum+=a;  
    }
    printf(“The sum=%d
”,sum);  
}  

2.9 switch 语句

switch 语句的一般格式为:

switch(表达式)  {
case 常量 1:  
    语句块 1
    break;
case 常量 2:  
    语句块 2
    break;
    …
case 常量 n:  
    语句块 n   
    break;
default:  
    语句块 n+1   
    break;
}

它是根据表达式为不同的值而执行不同的语句块,可以看成是特殊的 else_if 语句。即:

if(表达式==常量 1)  
    语句块 1
else if(表达式==常量 2)  
    语句块 2
    …
else if(表达式==常量 n)  
    语句块 n  
else
    语句块 n+1  

但用 switch 语句则更方便,实际上也用得更多一些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值