00-C语言重要知识点复习

C语言重要知识点复习

1,自加自减运算(单目运算)

说明:

(1)运算对象只能是一个变量

2++; /*Error*/

(2)前置是先运算,后引用,而后置是先引用后运算

int i,x;
i = 5;
x = i++; /*x=i;i=i+1*/
i=5;
x = ++i; /*i=i+1;x=i;*/

2,运算的优先级

(1)

第一原则:单目运算的优先级高于双目运算

x=*p++ <-> x=*(p++) <-> x=*p,p=p+1
x=*++p <-> x=*(++p) <-> p=p+1,x=*p

第二原则:算术运算->关系运算->逻辑运算->赋值运算

a+b>c&&c!=0 <-> ((a+b>c)&&(c!=0))

(2)优先级总表

级别运算符结合顺序
1() [] ->从左向右
2! - ++ – (type) sizeof * &从右向左
3* / %从左向右
4+ -从左向右
5<< >>从左向右
6< <= > >=从左向右
7== !=从左向右
8&从左向右
9^从左向右
10|从左向右
11&&从左向右
12||从左向右
13? :从右向左
14= op=从右向左
15,从左向右

3,三种循环

(1)while循环(当型循环)

**格式:

​ while(条件表达式)

​ 语句;

表达式:值非0,表示满足条件;值为0,代表不满足条件

语句(复合语句):重复执行部分(循环体)

**流程图:

1557411418551

**举例:

//求s=1+2+3+4+...+100

#include<stdio.h>
void main(void)
{int s=0,i=1;
while(i<=100)
{
    s=s+i;//s+=i;
    i++;
}
printf("s=%d\n",s);
}

(2)do-while循环(直到型循环)

**格式:

​ do{

​ 语句;}

​ while(条件表达式);

**流程图:

1557411792125

**while循环与do-while循环的区别:

while循环先判断条件,后执行循环体;

do-while循环先执行循环体,后判断条件

**举例:

//求30!

#include<stdio.h>
void main(void)
{
    float s=1.0;
    int i=1;
    do{
        s*=i;
        i++;
    }while(i<=30);
    printf("301=%f",s);
}

(3),for循环

**格式:

​ for(e1;e2;e3)

​ statement;

e1:初值表达式

e2:测试表达式

e3:增值表达式

**流程:

1557412308338

**举例:

//求:s=1+2+3+...+100

#include<stdio.h>
void main(void)
{
    int s,i;
    for(s=0,i=1;i<=100;i++)
    {
        s=s+i;
    }
    printf("s=%d",s);
}

**注意:在for循环中,e1,e2,e3都可以省略。

(4),无限循环和空循环

**条件为恒真的循环-无限循环

while(1){...}



do{

	...}while(1);//靠条件控制的break语句退出循环



for( ; ; ){...}
//例:程序等待直到输入字母A

for(;;)
{
    ch=getchar();
    if(ch=='A')break;
}

**循环体为空语句的循环-空循环

for(i=1;i<=MAX;t++);
//作用:程序延时

4,字符串的比较strcmp(str1,str2)

作用:对str1和str2进行逐位无符号字符比较,直到对应位字符能够确定关系或到串尾为止。返回整型比较结果。

字符的数值关系及是字符的ASCII码值的数值关系。

比较结果strcmp的值
str1<str2<0
str1==str2==0
str1>str2>0
char str1[]={"abcd"};
char str2[]={"abcd"};
int iRe1,iRe2,iRe3;
iRe1=strcmp(str1,"abdc");
iRe2=strcmp(str1,str2);
iRe3=strcmp("abcde",str2);

5,数组的常用算法

数组是同类型数据的集合。
便于整体处理数据,数组操作的主要算法有:

(1)求极值;

(2)排序;

(3)查找;

6,指针

C语言的指针支持:

(1)函数的地址调用;
(2)动态分配内存;
(3)数组的地址引用。

#include <stdio.h>
void main (void )
{ 
  int x ,*p;
  x=55;
  p=&x;
  printf ( “ %d, %u ”, x, *p) ;
  *p=65;
  printf ( “ %d, %u”, x, *p) ;
}

//int  *p;   *p=2;    /* Error!*/

(1)指针必须指向对象后,才能引用。
(2)&和*为互补运算。

7,指针与数组

数组是同类型的变量的集合,各元素按下标的特定顺序占据一

段连续的内存,各元素的地址也连续,指针对数组元素非常方便。

(1)指针与一维数组

通过指针引用数组元素可以分以下三个步骤:

**说明指针和数组

int   *p,a[10];

**指针指向数组

p=a;        /*指向数组的首地址*/
p=&a[0]; /*指向数组的首地址*/

**通过指针引用数组元素

当指针指向数组的首地址时,则下标为i的元素地址为:p+i或a+i

(2)引用数组元素

**三种方法:

下标法: a[ i ]

指针法: *(p+i)

数组名法:*(a+i)

**注意:数组名是常量地址,不能改变!

a=p;    /*Error!*/

8,动态分配函数 (<stdlib.h>)

malloc(m):开辟m字节长度的地址空间,并返回这段空间的首地址

sizeof(x):计算变量x的长度

free§:释放指针p所指变量的存储空间,即彻底删除一个变量

9,参数传递

(1)函数调用时传送给形参表的实参必须与形参在类型、个数、顺序上保持一致

(2)参数传递有两种方式
**传值方式(参数为整型、实型、字符型等)
**传地址
参数为指针变量
参数为数组名

10,结构体

(1)struct 结构名{

​ type 成员1 ;

​ type 成员2 ;

​ …

​ type 成员n ;

​ };

struct:结构标志

结构名:用标识符命名的结构类型名

(2)结构的定义确定了如下两点:

定义结构类型,确定结构中的成员项的名称及类型。

指明该结构类型的变量在内存中的组织形式。

struct Book {
    char no[15];   
    char name[50]; 
    float price;   
}; 
struct Book b[10];  //正确
struct {
    char no[15];   
    char name[50]; 
    float price;   
} Book; 
struct Book b[10];  //错误
typedef struct {
    char no[15];   
    char name[50]; 
    float price;   
}Book; 
Book b[10];  //正确

11,结构指针

方式一:(*p).成员项名

方式二: p->成员项名

typedef struct LNode{
     ElemType   data;       //数据域
     struct LNode  *next;   //指针域
}LNode,*LinkList;   
                // *LinkList为Lnode类型的指针
LNode *p <-> LinkList p

12,总结

(1)从编译器的角度理解C语言的语法规则和处理数据的方式

•int x,y,*p;(符号表,变量先定义后使用,定义后有内存单元)

•语句的语法,如赋值语句:x=a+b;(正确) a+b=x;(错误)

•#define N 5; (后面有分号错误,因为N会被定义为“5;”)

•函数调用通过栈,函数内的局部变量作用域,函数参数传递

•在不同的函数中试图改变一个数据,可以通过:

函数return

指针

全局变量

(2)从机器执行的角度理解算法,将算法描述逐句变为程序

•依次: 循环(for,while),注意循环变量的初值和终值

•比较或分情况:分支(if,switch)

•移动:赋值(后移a[i+1]=a[i]; 前移:a[i-1]=a[i];)

•交换:三条赋值

•记录或保存变量的值:一条赋值

•对于链表,常用的三条语句如下:

p=L->next;         //p指向首元结点

while(p!=NULL)    //p未到表尾

p=p->next;        //p指向下一个结点

另外,指针保留技术:

q=p;p=p->next;  
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页