




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
*C语言规则与个人笔记 赵全胜手工编辑 北京城市学院多媒体(1)班2008.11.5* 各种类型占用的字符十进制转换成二进制 方法除2留1或0如:235 235/2=117 117/2=58 58/2=29 14 7 3 1 出现1 1 0 1 0 1 1十进制235=1101011 每个字节等于8个位int 2个字节 范围 -3276832767 整型unsignedint 2个字节范围 065635 无符号整型signedshortint 2个字节范围 -3276832767 有符号短整型unsigned short int2个字节范围 065635 无符号短整型long int 4个字节范围 -21474836482147483647 长整型unsigned long int 4个字节范围 04294967295无符号长整型Int 整型 unsigned 无符号signed 有符号 short 短型 long 长型在一个整数后加上U或L,在内存中以无符号和长整型存储,因为在使用函数时型参为L,实参也要为L才行。float 单精度 4个字节 有效数字67double 双精度 8个字节有效数字1516long double 长型双精度 16个字节 有效数字1819 转义字符及其含义 ASCLLn 换行,回车 10t 水平制表 9b 退一格 8r 回车,回到本行开头 13f 换页,一道下行开头 12 显示要输出的字符 92ddd 1到3位8进制数所代表的字符xhh 1到2位16进制数所代表的字符字符占一个字节 字符变量不能存储字符串强制类型转移(double)a (int)(x+y) (float)(5%3) (类型名)表达式或变量 %使模运算必须都是int 注意注意逗号表达式型式: 表达式1,表达式2,表达式N; 整个表达式从1开始,最后的值用表达式N的值表示。 C语言的9种控制语句if()else 条件语句for() 循环语句while() 循环语句dowhile() 循环语句continue 结束本次循环语句break 终止履行while或循环语句switch 多分支选择语句goto 转向语句return 从函数返回值的语句输出输入putchar(i);输出字符 i=getchar;(输入字符) printf(格式输出); scanf(格式输入); puts(i);输出字符串 gets(i);输入自负串头文件include”stido.h” %d十进制控制字符 如:输出%mnd m是数据的宽度 n是小数后保留几位%ld long型输出 %x 十六进制输入或输出%o 八进制输入或输出 %u 无符号输出%c 字符型 %s 字符串%- 输出数或字符靠左 sprt() 开放函数 &并且 |或者 !非条件元算符(三目运算)表达式1?表达式2:表达式3; 表达式1为真则去表达式2的值 否则去表达式3的值;如:max=(ab)?a:b; 如果a确实大于b 那么max的值就是aswitch分支选择语句switch (将要判断的表达式)case 如果和这个值相同:则运行这个;break; case如果和这个值相同:则运行这个;break ; defanlt : 后则这样处理;goto 不符合结构化设计。Whilewhile内容 先判断后运行 和dowhile相反do内容不管条件满足与否先运行一遍break 适用于循环和分支选择(switch)其跳出循环的作用contine 跳过循环下面的部分,在从循环开始在运行 循环运行时不能改变循环的条件一位数组的初始化数组不可以这样 a;int a10=0,110;赋值应于变量,类型相同 列a34=1,25; 表示3行4列 a00是1 a10是2 行 a20是5 字符数组初始化char c10=i,o,v,e,;定义一个字符数组并赋一个字符串char c =”china”; 这里不用写下标,判断!=0即可 函数函数调用方法函数语句 如:printsar() ; 不要求返回值,只要函数完成一定操作函数表达式如:c=2*max(a,b) 返回值乘以2赋值给c函数参数函数调用作为一个函数的实参 m=max(a,max(b,c); 函数的参数本来就是要求是表达式的型式什么叫定义和声明定义是指对函数功能的确立,包括指定函数名,函数值的类型,型参及其他类型,函数体等,它是一个完整的独立体的函数单位。声明它的作用是把函数的名字函数的类型以及型参类型,个数和顺序告诉编译系统,以便在以后调用函数是系统按此进行对照检查。函数原型的一般型式函数类型 函数名 (参数类型1 参数名1,参数类型2 参数名2,参数类型n+1 参数名n+1)Intadd (int amx,int amy ,int maxy)将数组作实参只用写数组名即可 int a10a当型参接受时应用一个数组,类型应当一致y10实参和型参用到同一个变量是应分别定义 如:i局部变量和全局变量局部变量在函数定义的,应用范围也在内部全局变量在函数外定义的变量,可以为本文件中其他函数所用,它的范围在定义变量的位置到本源程序结束, *全局变量首字母应大写 尽可能不用全局变量*变量的存储类型静态存储方式在程序运行期间分配固定的存储空间动态存储方式在程序运行期间根据需要进行动态的分配存储空间Static 是定义变量为静态变量存储方式 extern 定义全局变量,可以用它引用外部变量使用合并文件的方法和注意事项合并文件是内容定义不应该有相同的部分 定义外部变量 用estern mxn Mxn 就可以调用了 A.文件 B.文件A.文件不main()函数 有个main()函数 只要定义和声明 便可以调用和进行处理好个函数 运行了之间的运算就可以了Static定义外部变量 如:static int mxn extern 引用外部变量 如:extern int mxn定义和声明的重点分析定义由调用函数进行处理的并分配了内存。 声明不需要建立存储空间的声明Static 可以定义内部函数,只能本文件使用 如:static int fun (int a, int b)Extern 可以定义外部函数,可以被其他文件调用 如;extern int fun (int a,int b) 宏定义define A 3.1415927宏定义命令 宏定义变量名 宏定义被赋给得值 注意 后面不可以加分号,否则会被宏定义转换掉define 的范围是从开始到文件结束, 但用define可以提前结束它。 如:从#define IP 3.1415927 到undef IP 结束带参数的宏定义 define a(a,b) a*b 宏定义 命名与参数 如何处理 只要在程序中调用s(3,4);并知道a和b的值,此时为实参,上面的定义为型参。 宏定义内可以加其他宏 文件包含处理include命令可用来包含其他文件的作用,记载头文件种声明调用。 被包含着内部不能有mani()函数; 文件包含大大有利于一些常规的常量定义,或有一定功能的 函数的使用;使用#include编译时将包含的文件copy到当前文件,使用#include的位置,只有包含进去了,才能调用其他文件的常量和函数;一个#include只能包含一个文件进去;如:文件1包含文件2,文件2要用文件3的内容,头文件必须把先用的文件 包含进去1文件 #include”2文件.c”; 2文件 #include”3文件.c”;包含文件可以嵌套使用,但嵌套的文件内部不能包含外部的文件。的头文件有利于系统自定义的文件 “ ”的头文件有利于自己定义的文件。包含后编译会成为一个文件,文件2上全局变量在文件1中也有效,不用extern声明; 条件编译ifdef(一个头文件) #ifndef(一个头文件)条件真有这个文件则运行这行 条件假则运行这行#else #else条件假则运行这行 条件真这个文件则运行这行#endif #endif#if(表达式 如:ab或宏文件定义LETTER 1 头文件有#define LETTER 1)真则编译#else为假则编译#endif 指针指针 个变量的地址称为该变量的指针。指针变量 个变量专门用来存放另一个变量的地址(即指针),则称为变量指针。 变量的指针就是变量的地址 。 存放变量地址的变量是指针变量,用来指向另一个变量, 为了表示指针变量和它所指向的变量之间的联系,在程序中用“*”表示, 如:i_po指针变量,*i_po 是i_po所指向的变量。指针*i_po也代表一个变量,他和变量i 是同一回事。 如:1 i=3; 2 *i_po=3; 相同。*i_po=3是将赋值指针变量i_po所指向的变量。定义一个指针变量 基类型 *指针变量名 int *max; 将指针变量指向另一个变量,int i=3,*p=&i;不带*时指针只表示指向变量得值,如用*时和使用改变量等价。定义一个指针变量 Int *po_1,*po_2; int是指针变量的基类型, 指针什么类型就只能指向什么类型变量,(因为各类型存储不同)。指针变量的使用 指针只存放地址,不能赋给任何值,如:int *p;p=100;是错误的,&加上后表示去该变量的地址, *加上后表示间接访问冒个变量,并可以对其进行任何合法操作和使用该变量等同。若po_1=&a; &*po_1 &和*优先级相同 从右到左 *po_1等于a,在去a的地址为&a,所以&*po_1等于&a。指针变量指向指针的操作 po_2=&*po_1; *po_1是指针,po_2是指针变量。指针变量作为函数的参数 现已指针变量作为实参(po)传给型参用(*p)接受,也可以实参用(*po) 如前面有po=&a;的操作。则相等于实参用a。 指针与数组指向数组的指针 int a10,*p;p=&a;等于p指向了a的0元素,将a数组的首地址赋给了指针变量p,使用指针变量指向数组,切记要指向数组的有效范围。如 int a10,*p;p=&a;*(p+10)就是错误的了 以越界。用数组名作为函数参数 int a10; 用a作为实参,b在型参处接受, 如:是实参用数组,型参可以用指针接受数组的首地址, 一般变量给指针赋值 int a,*p;p=&a; 将数组首地址赋给指针 int a10,*p;p=a;二维数组 a34 3表示行a0,a1,a2; 4表示列 如a 3行 | 4列 a00 a10 a20 a01 a11 a21 a02 a12 a22 a03 a13 a23实参 型参 传 Int a10,*p; 接受数组名a数组名a数组名a字符指针变量 p字符指针变量 p字符指针变量 p1字符指针变量 p数组名a字符指针与字符数租的区别1, 字符数组由若干个元素组成,每个元素存放一个字符,而字符指针变量中只存放地址(字符串的首地址),而不是将字符放到字符指针变量中,2,字符数组要每个元素分别赋值,如,str=”I LOVE CHINA”; 自负指针可以如下操作 如 char *a;a=”I LOVE CHINA”;数组是不能这样操作的。定义一个字符型指针,将指针变量指向字符的首地址到”0”结束。给字符数组赋值 char str15;getx(str)或scanf(“%s”,str);字符指针只能 char *a,str10;a=str; scanf(“%s”,str);应做到使用指针先定义好指针指向的变量在使用,防止不定义指针的指向,而造成系统随意指向一个内存地址的情况, *这样很危险*指向函数的指针定义指向函数的指针变量 指针*p,函数max(),(*p)(),p=max;数据类型 这里是数据返回值得类型(*指针变量名)() 指针指向函数max()的入口,不牵涉到实参和型参,只要函数开头定义了一个函数和指向函数的指针变量,即可调用此函数对调用函数的计算。如:先定义 int pr (int, int, int(*p)();在调用pr(pr中的参数,pr中的参数 ,一个函数名如a);即可把函数pr中的两个参数被函数a调用并计算。 返回指针值的函数 只是带回的值的类型是指针类型而已,这种带回返回值的函数 定义为类型名 *函数名 (参数列表) 如:Int *a (int x,int y) 指针数组和指向指针的指针指针数组 个数组,其元素均为指针类型数据,也就是说,指针数组中的每个元素都相当于一个指针变量。 定义型式为 类型名 *数组名数组长度 如:int *a10;指向指针的指针型式为 char *p;对*p的指向操作时应注意,只能指向地址,对数组a4指向时 p=&a;如:int a4=1,2,3,4;*op,*p;op=&a;p=op;也是可以的因为op本身也是地址。指针数组作main()函数的型参main(int argc, char *argv) 表示命令行中有几个参数 表示指针数组 命令行原型 命令名 参数1,参数2,到参数n 指针的数据类型和指针运算int i; 定义数据变量i;int *p; p为指向整型数据的指针变量。int an 定义整型数组,它有n个元素。int *pn 定义指针数组p,它有n个指向整型数据的指针元素构成。int(*p)(n) p为指向含n个元素的一维数组的指针变量。int f() f为带回整型函数值的函数。int *p() p为带回一个指针的函数,该指针指向整型数据。int (*p)() p为指向函数的指针,该函数返回一个整型值。int *p p是一个指针变量,它指向一个指向整型数据的指针变量。指针运算 如:p+,p ,p+i,p-i,p+=i,p-=i; *重要* C语言规定,一个指针变量加减一个整数,并不是简单的将值加减,指针变量加减是按指针变量的类型按所占用的内存单元的字节数进行加减的。指针变量的赋值 Int a,array10,*p.*p2; 函数max(); p=&a; 将变量a的地址赋给p p=array; 将数组array的首地址赋给p。 p=max max一定以为函数,将max的入口地址赋给p。 p=p2 p1和p2都是指针变量,p2将自己的地址赋给p。指针变量不能赋于除地址以外的任何值,同样也不能将指针变量的地址赋给任何整型变量。但指针可以指向空(NULL)。 p=NULL ;NULL为整型数0.任何指针变量或地址都可以与NULL作=,!=,的比较。如:if(p=NULL)两个指针变量可以向加减,条件类型必须相等。void指针类型可以用void(空型)定义一个指针变量,运算和赋值必须进行强制转换。如:void *p2,p=(char *)p2;指针函数也能用void,如希望引用此地址,也要转换。Void *f(int a,int b) p1=(int*)f(a,b);指针对与C的重要性 1 提高程序效率 2在调用函数时变量改变得值那个为主函数使用,既可以从主函数调用得到多个可改变得值, 3 可以实现动太存储分配 结构体和共用体 结构体在后面要加上“;”号十分重要 声明结构体的型式为:struct 结构体名 成员列表;结构体变量; 结构体的成员声明格式:类型名 成员名; 定义结构体变量地方法 ; struct structMAX int a; long a1; char b2; p1, p2; 声明结构体 结构体名 结构体成员 结构体成员 结构体成员 具有此结构体的变量 定义了p1和p2为结构体structMAX类型的变量,即它具有structMAX类型的结构。 在结构体声明时可以同时定义结构体变量,结构体成员被称为“域” ,成员列表中的变量名与程序中的变量名可以相同,*结构体可以放在一个以h为后缀名的头文件内,用#include包涵,即可调用此结构体类型,*结构变量的引用 1不能将一个结构体变量作为一个整体进行输入输出 如; struct structMAX int a;long b;ac;printf(”% d %ld”,struct );是错误的 应用结构体成员的型式 结构提名. 成员名 如:structMAX.a=10110;是成员(分量)运算符,它在运算符中优先级最高。他会吧structMAX.a看作整体。 2如果成员本身有看做一个结构体,则要用若干个成员运算符,一级一级的找到最低成员,只能对最低的成员进行赋值或存取以及运算。 3 对结构体变量的成员可以向普通变量一样进行各种运算,可以引用结构体变量成员的地址,也可以应用结构体变量的地址,但不能用scanf()输入,因为这只是结构体的地址。 结构变量的初始化 main() struct structMAX cong int unm; char name20; char sex; char addr20; ;a=89031,”lilin”,m,”123 beijing road”;printf(“NO:%ldn name:%sn address:%sn”,a.unm,,a.sex,a.addr);/*NO:89031 name:lilin sex:m address:123 beijing road*/结构体数组 定义结构体数组 和定义结构体变量的方法相仿,只需要说明是数组即可,如:struct pint num;stu3;或 struct pint num;struct p stu3;以上定义结构体数组stu3;结构体数组的初始化struct p;stu3=,;或stu=,; 指向结构体类型数据的指针 main()struct plong num; char name20;stu_1,*p;(定义了结构体指针p)p=&stu_1;printf(“%ld”,(*p)。num);(*p)。num可以写为p-num; 三种等价型式 1 结构体变量.成员名 stu_1.num; 2 (*p).成员名 (*p).num 3 p-成员名 p-num;-称为 指向运算符 p-n 得到p指向的结构体成员n的值。p -n+ 得到p指向的结构体变量成员n的值,用完后该值在加1.+p -n 得到p指向的结构体变量中的成员n的值先加1,然后再使用它。如果 n=2;的话 p-n p指向的地址得值为2.p -n+ p指向的地址得值为,而后加1等于3。 +p -n p指向的地址得值为3。指向结构体数组的指针 在mani()定义一个结构体类型并初始化在,main()内用结构体名定义一个具有此结构类型的指针变量用for循环把他输出。用结构体变量和指向结构体的指针作函数参数注意有两个注意事项: 1 用结构体变量成员作参数,如:stu3.num或做函数参数,将实参值传给型参,用法和普通变量做实参是一样的。属于值单向传递的方式,实参和型参要一致。 2 C老版本不支持,ANSI C可以当实参和型参都开辟内存空间开销太大,和函数型参改变结构体值后,改变的之不能返回值函数,所以应减少使用。 struct po int num; Char name2;stu=;main()void print(struct po *); Print(&stu);void print(struct po *p)printf(“,p-num,p -name);用指针处理链表链表中每个元素称为“结点“,每个节点都应包括两个部分:1 用户需要的实际数据2下个节点的数据链表尾部的元素节点地址为NULL(空地址),一个节点中应该包含一个指针变量,用它存放下一个节点的地址 如: struct opint num;float score;struct op *naxt; ;naxt是指针类型的成员,他指向struct op类型的数据,(这里就是next所在的结构体类型),*一个指针类型的成员既可以指向指向其他类型的结构体数据,也可以指向自己的结构体。*处理动态链表所需的函数 malloc原型是 void *malloc(unsigned int size) 作用 在内存的动态存储中分配一个长度为size的连续空间,此函数的值即返回值是一个指向分配域起始地址的指针(类型为void),函数失败返回NULL表示内存空间不足。calloc 原型为 void *calloc(unsigned n,unsigned size) 作用 在内存的动态存储中分配n个长度为size的连续空间,返回一个指向分配域起始地址的指针,失败返回NULL。用calloc可以为一位数组开辟动态存储空间,n为数组元素个数,为个元素长度是size。free 原型是 void free(void *p) 作用是释放由p指向的内存区,使这部分内存被其他变量使用,p是最近一次调用calloc或malloc函数是返回的值,free无返回值。早期C将malloc和calloc得到指向字符类型数据的指针,ANSI C将规定malloc和calloc定位void* 类型 建立动态链表/*启动函数*/#include stdio.h#includelian1.c#includelian2.c#includelian3.c#includelian4.cmain()struct student *head,stu; /*声明结构体指针和函数*/ long del_num; /*声明一个函数*/ printf(input records:n); head=creat(); /*调用creat新开辟内存单元,并将链表头返回给结构体指针head*/ print(head); /*调用print函数,将链表头传去,利用函数输出所有数据*/ printf(n input the deleted numder:); scanf(%ld,&del_num); head=del(head,del_num); /*将用户新输入的数据和链表头传给del函数*/ print(head); /*调用print函数,将链表头传去,利用函数输出所有数据*/ printf(n input the inesrted record:); scanf(%ld,%f,&stu.num,&stu.score); head=insert(head,&stu); /*将两个数据传给insert函数处理*/ print(head);/*函数1*/#includemalloc.h /*调用新开辟内存的函数库*/#define NULL 0 /*宏定义NULL的值是0*/#define LEN sizeof(struct student) /*宏定义LEN,的sizeof函数内部参数是struct student的长度*/struct student /*声明结构体*/long num; /*结构体成员*/float score; /*结构体成员*/struct student * next; /*定义结构体指针,用来放下一个节点地址*/;int n; /*定义全局变量*/struct student * creat(void) /*定义结构体函数*/struct student * head; /*定义结构体指针,做链表头使用*/struct student * p1,*p2; /*定义结构体指针*/n=0; /*结点计数器*/p1=p2=(struct student *)malloc(LEN); /*将结构体指针指向新开辟的内存头*/scanf(%ld,%f,&p1-num,&p1-score); /*读取两个数据*/head=NULL; /*对头文件指针初始化为0*/while(p1-num!=0) /*检测用户是否输入了0*/n=n+1; /*计数器加1*/if(n=1) head=p1; /*判断结点如果是第一个,就将结构体指针p1指向链表头*/elsep2-next=p1; /*结点不是第一个了,说明多个,就将p1指向的文件地址赋给,p2保存*/p2=p1; /*是p2指向p1的地址*/p1=(struct student *)malloc(LEN); /*新开辟的内存地址赋给p1*/scanf(%ld,%f,&p1-num,&p1-score);p2-next=NULL; /*结束链表*/return(head); /*返回链表头指针*/*函数2*/void print(struct student *head) /*定义print函数*/struct student *p; /*定义结构体指针p*/printf(n Now,Thexe %d records are:n);p=head; /*将链表头地址赋给 结构体指针p*/if(head!=NULL)doprintf(%ld %5.lfn,p-num,p-score); /*输出链表成员数据*/p=p-next; /*是结构体指针p 指向下一个结点*/while(p!=NULL); /*结构体指针不能为0的话*/*函数3*/struct student *del(struct student *head,long num) /*定义del函数*/ struct student *p1,*p2; /*定义结构体指针*/ if(head=NULL)printf(n list null!);exit(1); /*如果链表头是0 则退出*/ p1=head; /*链表头赋给结构体p1*/ while(num!=p1-num&p1-next!=NULL) /*在不到链表尾和找不到相同数据是循环*/ p2=p1;p1=p1-next; /*是p2指向p1的地址,将p1指向下一个地址*/ if(num=p1-num) /*如果找到了和用户输出相同的数据*/ if(p1=head) head=p1-next; /*如果p1指向链表头,就将p1存放下一个节点的地址赋给链表头*/ else p2-next=p1-next; /*在链表中间的话,将下一个存放节点的地址赋给p2,作用就做到了删除的目的*/ printf(delete:%ldn,num); n=n-1; /*结点计数器减1*/ else printf(%ld not deen fonud! n,num); return(head); /*返回链表头,供其他函数使用*/ /*函数4*/struct student *insert(struct student *head,struct student *stud) /*定义insert函数*/struct student *p0,*p1,*p2; /*定义结构体指针p0,p1,p2*/p1=head; /*链表头赋给结构体p1*/p0=stud; /*将用户输出的数据首地址赋给结构体指针p0*/if(head=NULL) /*如果链表头为0*/head=p0;p0-next=NULL; /*用户输出的数据赋给链表头,并结束链表*/elsewhile(p0-nump1-num)&(p1-next!=NULL)/*用户输入的数据如果大于链表成员的 并且 链表不等于0*/p2=p1 ; /*p1地址赋给p2*/p1=p1-next; /*是p1指向下一个结点*/if(p0-numnum) /*如果用户输出数据小于等于链表p1的num成员*/if(head=p1)head=p0; /*如果链表等于p1 则用户输出的数据赋给链表头*/elsep2-next=p0; /*p0赋给p2的成员*/p0-next=p1; /*p1赋给p0的成员*/elsep1-n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机电岗位专业试题及答案
- 《烹饪原料初加工工艺》项目二鲜活原料的初加工
- JavaEE轻量级框架Struts2 spring Hibernate整合开发 第3章Struts2标签库及使用
- 吉林省四平市普通高中2024-2025学年高一上学期第一次月考生物学试卷(有答案)
- 墙垛式护栏施工方案
- 福建省泉州市安溪县2024-2025学年高二上学期11月期中考试生物试卷(含答案)
- 欧式别墅大门施工方案
- 金属加工行业深度市场报告
- 济南水泥荷兰砖施工方案
- 江西省南昌市零模2026届高三上九月测试思想政治试卷(含答案)
- 借款利息确认书
- 熟识邮轮客舱房态讲解
- 汉字五行属性查询表
- 项目验收签收单
- 食品公司员工培训计划书
- 风湿性疾病的影像学表现
- 四川省建筑工程地下结构抗浮锚杆关键技术作业规程
- 丁酮化学品安全技术说明书
- (正式版)SHT 3045-2024 石油化工管式炉热效率设计计算方法
- 灭火器正确使用方法
- pvc压延膜生产工艺
评论
0/150
提交评论