天天看点

C语言基本知识

软件是将一组程序组织起来

每个程序由一组指令组成

数据结构+算法

数据结构

          在程序中要指定数据的类型和数据的组织形式。

算法(程序的灵魂)

    就是为了解决实际问题而提出的具体方法与步骤.

算法的特点

有穷性:         一个算法一定是有限的步骤.

确定性:        每一个步骤都是确定的,不是含糊的.

有零个或多个输入:    指在执行算法时需要从外界取得必要的信息.

有一个或多个输出:    目的是为了求解,”解”就是输出

有效性:         每一步都应当有效的执行,并得到确定的结果.

算发-解决问题

1.为了解决一个问题

2.清楚地理解这个问题

3.收集相关信息

4.处理这些信息

5.得出解决方案 

C 语言的应用领域

C 语言最初用于系统程序设计

    系统程序是计算机操作系统或操作系统支持的实用程序的组成部分

    操作系统、解释器、编辑器以及汇编器通常称为系统程序

UNIX 操作系统是用 C 语言开发的

有许多种 C 编译器,可以满足几乎所有类型 PC 的需要

C语言的特点

C语言同时具有汇编语言和高级语言的优势。

(1)语言简洁、紧凑,使用方便、灵活。

(2)运算符极其丰富。

(3)生成的目标代码质量高,程序执行效率高。

(4)可移植性好(较之汇编语言)。

(5)可以直接操纵硬件。

C语言规则

C语言有32个关键字

这些关键字结合惯用语法构成了 C程序设计语言

所有用C语言编写的程序必须遵守的规则

所有关键字使用小写形式

   C语言是区分大小写的,int 和 INT 不同

 关键字不能用作变量名或函数名

 程序执行总是先调用main()函数

每个程序必须有一个而且只能有一个称作主函数的main()函数; main()函数后面必须跟有圆括号。括号内可以有参数可以没有参数。

  所有函数名后必须跟一个左大括号{ 表示代码块开始。同样,右大括号 }表示代码块的结束。

    大括号之间写处理问题的代码。除了在函数中,在循环语句、判断语句等其他语句情况下也必须使用大括号{}。

  代码语句的结束用分号;表示。编译器无法识别回车、空格,每条语句只能以分号结束,同一行中可以有多条语句。

注释是用于描述命令、函数或整个程序。

它有两种形式“多行注释”和“单行注释”。

多行注释部分包含在“/*”和“*/”之间, 在编译时它被 C编译器忽略。

单行注释则在 // 后面,在编译时它被C编译器忽略。

每个C程序的最上面必须倒入头文件

   #include<stdio.h>,也可以倒入其他头文件#include<*.h>根据实际需要。

#include <stdio.h>

void main()

{

   printf("Hello World\n");

}

常量

常量就是一个保持不变的值,而且不可能被改变

示例

5    数字/整型常量

5.3  数字/实型常量

''Black''   字符串常量

'C'         字符常量

什么是变量?

变量是储存信息的地方.

变量是内存中的一个地址

在地址中可以进行数据的存储和读取

示例:变量

BEGIN

DISPLAY ‘Enter 2 numbers’

INPUT A,B

C=A+B

DISPLAY C

END

A 、B和C是伪代码中的变量

*变量类型(如整型)告诉编译器给变量分配

多大的内存

操作系统负责记住变量在内存中的地址

要引用内存空间中的值,只需指定变量名

标识符

用来标识变量名、符号常量名、函数名、数组名、类型名、文件名和其他各种用户定义的对象的名称都称为标识符

标识符的长度可以是任何合适的数值,但是各种编译器能够识别的变量中的字符数目有所不同,见意不要超过8个字符(VC环境)

C 语言中的标识符区分大小写

标识符的命名规则

变量名应该以字母或下划线开头

第一个字符后面可以跟字母、数字或

应该避免使用专有名词来命名变量

应该避免使用可能引起混淆的字母

变量名区分大小写

编写程序时应该遵循一些标准的变量命名约定

变量名应该是有意义的而且是描述性的

标识符命名的良好习惯──见名知意:

通过变量名就知道变量值的含义。通常应选择能表示数据含义的英文单词(或缩写)作变量名,或汉语拼音字头作变量名。

 例如, name/xm(姓名)

   sex/xb(性别)

   age/nl(年龄)

标识符举例:

[合法的]  如:

  areana、 _count、mark40、class_one

[不合法的]

12sttes、 oh!god、start…end

关键字

在一个特定语言的上下文中有特殊意义的单词

所有的数据类型都是保留的关键字

在指定变量名的同时还要指定将要存储在其中的数据类型-变量声明

C语言关键字

auto  break  case  char  const

continue default  do  double  else

enum  extern  float  for  goto

if  int  long  register return

short  signed  sizeof  static  struct

switch  typedef  union  unsigned void

volatile while   

基本数据类型

int

float

double

char

void

int 类型

存储数字数据

声明方式:int num;

不能存储类似于“Alan” 或“abc”等任何其他类型的数据

*分配16 位(2 个字节)的内存空间,整数的范围是从 - 32768 到 32767

(注意:在我们当前环境里,int占用4个字节)

 示例:12322、0、-232

      如: int num = 12332;

float 类型

存储整数或包含小数位的值

声明方式:float num;

最高精度是 6 位

*分配32 位(4 个字节)的内存空间

 示例:23.05、56.5、32

如: float num = 23.05;

double 类型

存储超出float类型大小的限制的值

声明方式: double num;

最高精度是 10 位

*分配64 位(8 个字节)的内存空间

  示例:23.34232324

如: double num = 23.34232324;

char 类型

存储一个字符信息

声明方式: char gender;

                          gender='M';

*分配8位(1 个字节)的内存空间

  示例:'a'、'm'、'$'、'%'、'1'、'5'

如: char gender = ‘A’;

[注意] 给字符型变量赋值必须加上一对单引号‘’

字符型变量 C

char 与 int的联系

字符在计算机中是以ASCII来存储的,

字符变量在内存中的值是ASCII表中对应的整数

void 类型

告诉编译器没有任何类型的值

声名方式:void num 

不返回任何值

派生数据类型

通过修改四种基本数据类型以适应不同的

情况而产生的数据类型叫做派生数据类型

signed 和 unsigned 类型

signed最重要的是修改char数据类型(缺省为signed )

    (0-127)有符号的, 有正负之分的

unsigned 类型指定变量只能接受正值

 unsigned int varNum;

 varNum=63123;

加上unsigned前缀,正数的取值范围是原来的两倍

修饰符可以与 int 和 float 数据类型一起使用

unsigned int 支持的范围是从 0 到 65535

long 和 short 类型

要求某个整数的长度比正常长度更长或更短时,使用long 和short

* short int 占 8 位(1 个字节)的内存空间

允许的数字范围是从 -128 到 127

* long int 占 32 位(4 个字节)的内存空间

 -2,147,483,648 到 2,147,483,647

* long double 占 128 位(16 个字节)的内存空间

数据类型范围 2-1

类型  *近似大小(位)  最小范围

char   8  -128 到 127

unsigned char  8  0 到 255

signed char  8  -128 到 127

int   16  -32,768 到 32,767

unsigned int  16  0 到 65,535

signed int  16  与 int 相同

short int  8 

unsigned short int 8  0 到 65, 535

signed short int 8  与 short int 相同

long int  32  -2,147,483,648 到 2,147,483,647

signed long int  32  0 到 4,294,967,295

unsigned long int 32  0 到 4,294,967,295

float   32  六位精度

double   64  十位精度

long double  128  十位精度

声明示例

main ()

 char abc;    /*声明abc */

 int xyz;    /*声明xyz */

 float length;   /*声明length */

 double area; /*声明area */

 long int liteyrs;   /*声明liteyrs */

 short int arm;    /*声明arm */

 }

运算符

算术     一元、二元运算符都是算术运算符

逻辑    用于对包含关系运算符的表达式进行合并或取非

关系    测试两个变量或一个变量和一个常量之间的关系

位        将数字按位进行计算

算术运算符

一元运算符            操作            二元运算符              操作

-                              一元减             +                               加

++                                递增             -                               减

--                                 递减             *                               乘

                                                         %  模                       计算一个整数除法的余数

                                                        /                                 除(整除)

++和--运算符前置和后置有很大区别

用于各类数值运算

包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。

++在前 如  “++a” 先加后加入运算。

++在后 如  “a++” 先加入运算后加。

“--”也是同样道理

x++ 和 ++x 可以写成 x= x + 1

x-- 和 --x 可以写成 x = x - 1

[举例] 算术运算符.c  先加后加.c

关系运算符

用于测试两个变量或一个变量和一个常量之间的关系

运算符 关系运算

> 大于

>= 大于等于

< 小于

<= 小于等于

== 等于

!= 不等于

逻辑运算符

逻辑运算符用于对包含关系运算符的表达式进行合并或取非

运算符 逻辑运算

&& 与

|| 或

! 非

示例:if ((a>10) && (a<20))

使用逻辑运算符的表达式,返回 0 表示假,返回 1 表示真

位运算符

将数字转换成等价的二进制形式后再处理数据(按位表示法)

运算符  描述

按位与 

( x & y)  如果两个操作数的相应位均为 1,则该位的结果值为 1

按位或  

( x | y)   如果两个操作数的相应位有一个为 1,则该位的结果值为 1

按位取反( ~x)   将操作数按位取反 (0 到 1 和 1 到 0) 

按位异或( x^y) 如果参加运算的两个操作数的相应位同号,则结果为 0,异号则为 1

操作数  位操作  位表达式  数字

10 & 15     1010 & 1111 1010  10

10 | 15  1010 | 1111 1111  15 

10 ^ 15  1010 ^ 1111 0101   5

~ 10  ~1010  0101  5

位运算符将数字视为二进制值,并按位进行相

应运算,运算完成后再重新转换为数字

赋值运算符

用于赋值运算

分为简单赋值(=)

复合算术赋值(+=,-=,*=,/=,%=)

复合位运算赋值(&=,|=,^=,>>=,<<=)

三类共十一种

变量赋值

赋值语句是由赋值表达式再加上分号构成的表达式语句。

其一般形式为:

变量=表达式

可以用在任何有效的 C 表达式中

通用的形式:变量名=表达式

将同一个值赋给多个变量的操作叫做多重赋值

a=b=c=10

但是,不能像下面的语句中那样赋值:

int a=int b=int c=10

表达式

运算符和操作数的有效组合

在程序执行的过程中,变量

  的实际值和表达式中出现的

  常量一起使用

运算符优先级

优先级建立了计算算术表达式时,一组运算符相对于另一组的层次关系

优先级指 C 计算运算符的顺序

可通过将表达式括在括号中 来改变运算符的优先级

运算符类型 运算符  结合律

一元  - ++ --    从右向左

二元      ^    从左向右     

二元      * / %    从左向右     

二元      + -    从左向右     

二元      =    从右向左

当一个表达式中的运算符具有相同优先级时,

结合律还指出C语言计算这些运算符的顺序

示例:-8*4%2-3

计算顺序如下:

完成的操作                         结果

-8(一元减法)                       -8

-8*4                                -32

-32%4                               0

0-3                                -3

比较运算符之间的优先级

不存在相对于其他算术运算符有较高的优先级

始终按从左向右顺序进行计算

优先级 运算符

1     非

2     与 

3    或  

当条件中有多个逻辑运算符时,计算将从右向左进行

运算符之间的优先级

当公式中含有多种类型的运算符时,必须确立不同类型运算符之间的优先级顺序。一般来说,算术、比较、逻辑运算符的优先级符合下表

优先级 运算符类型

1     算术 

2     比较

3    逻辑

修改优先级

括号 ( ) 的优先级最高。

使用括号 ( ) 可修改运算符的优先级。

在括号嵌套 ( ( ( ) ) )  的情况下,最里层的最先执行。

包含多个括号的表达式从左向右进行计算。

数据类型转换

变量的数据类型是可以转换的。

转换的方法有两种:

一种是自动转换

一种是强制转换。

类型转换

运算符的操作数属于不同的数据类型,运算时通常会将这些操作数转换为同一类型

自动转换遵循以下规则

若参与运算量的类型不同,则先转换成同一类型,然后进行运算。

转换按数据长度增加的方向进行,以保证精度不降低。

所有的浮点运算都是以双精度进行的

char型和short型参与运算时,必须先转换成int型。

强制类型转换

通过类型转换运算来实现的

(类型说明符)  (表达式)

例如:

(float) a      把a转换为实型

(int)(x+y)     把x+y的结果转换为整型

继续阅读