C语言串讲.doc_第1页
C语言串讲.doc_第2页
C语言串讲.doc_第3页
C语言串讲.doc_第4页
C语言串讲.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言串讲1、一个程序只有一个有且仅有一个主函数。格式:main()另外还有两类函数:库函数和用户自定义函数。1.1、库函数1.1.1、标注输入输出函数 #include “stdio.h”printf(“输出控制”,参数列表)输出有两部分组成,原样输出部分和格式转换说明。参数列表,可有可无。如果有参数列表,参数列表前的”,”一定不能缺少。如果有多个参数,参数间用逗号分隔。例1:printf(“a=%d”,3); 输出结果是:a=3例2:printf(“#”); 输出结果是:#scanf(“输入控制”,参数列表)输入控制中有要求原样输入的部分时,输入数据也一定要原样输入。参数不可省。且每个变量前加”&”。例3:scanf(“a=%d”,&a); 输入:a=3(回车)例4:scanf(“%d”,&a); 输入:3(回车)getchar()括号中没有参数直接把函数的返回值赋值给某个变量例5:char c; c=getchar(); 输入:a(回车) 后把字符a赋值给变量c。putchar(参数)参数可以是字符变量也可是字符常量例6:char c=a; putchar(c);输出:a例7:putchar(c); 输出:c1.1.2、数学函数 #include “stdio.h”sqrt(参数)功能:求平方根abs(参数)功能:求绝对值。1.1.3、字符函数、字符串函数 #include “string.h”strcpy(d,s) 功能:把s所指字符串复制到d所指空间例8:若s中存放的是”string”,执行strcpy(d,s)后d中存放的也是”string”。strlen(s) 功能:求串s的长度例9:若s中存放的是”string”,执行strlen(s)得到的返回值是6。strcat(d,s) 功能:把s所指字符串复制到d所指字符串后面。例10:若d和s中存放的分别是”I am”和” a student”,执行strcat(d,s)后d中存放的串是”I am a student”。strcmp(d,s) 功能:比较d和s两个串的大小,若ds,则返回正值,若d=s,则返回0,若ds,则返回负值。比较时两个串中的字符逐个比较,当两个字符不同时,比较其ASCII码值,此时ASCII码大的,就认为这个字符串就大。例11:若d和s中存放的分别是”China”和”Chinese”,执行strcmp(d,s)后返回一个负数。1.2、用户自定义函数1.2.1、函数定义格式返回值类型 函数名(参数类型1 参数名1,参数类型n 参数名n)返回值类型缺省时,默认是int。小括号中的参数可以有多个,中间用逗号分隔。每个参数必须有参数类型,并且与主调函数中的对应参数的类型相同。例12:fun (int x, int y) float z;return z;缺省返回值时,默认是int型,而函数体是return语句返回的却是float型的z。这样的题常在改错题中出现。1.2.2、函数声明1.2.2.1、C程序设计中的规定先定义,后调用先声明,后调用,最后定义1.2.2.2、声明位置所有函数外,此时所有函数都可以调用声明的函数。某个函数体内,只声明函数的这个函数可以调用。例13:int f1();int f2();main()f1(); f2();f1()f1();f2();f2()f1();f2();函数f1()、f2()都在所有函数外面声明,则能被所有函数调用。例14:int f2();main()int f1();/*声明函数f1()*/f1(); f2();f1()f2();f2()f2();只在主函数中声明了f1(),所以f1()和f2()不能调用函数f1()1.2.2.3、声明格式返回值类型 函数名(参数类型1 参数名1,参数类型n 参数名n);声明必须以分号结束可以有三种格式,三种格式的不同之处仅在于参数名,参数名可有,可无;如果有参数名,参数名可以和函数定义时的一样,也可不同。例15:如果定义一个函数int max(int x, int y)声明的格式可以是int max(int, int);int max(int x, int y);int max(int a, int b);1.2.3、函数调用1.2.3.1、调用形式函数名(实际参数列表)例16:max(int x, int y)main()int a=2,b=3; printf(“max=%d”,max(a,b);只需要写函数名和实际参数名就行。1.2.3.2、执行过程语句中不能嵌套定义函数,但可以嵌套调用另一个函数main函数调用a函数结束调用b函数a函数b函数执行main函数的开头部分;遇函数调用a的操作语句,流程转去a函数;执行a函数的开头部分;遇函数调用b的操作语句,流程转去b函数;执行b函数,如果再无其他嵌套的函数,则完成b函数的全部操作;返回调用b函数处,即返回a函数;继续执行a函数中尚未执行的部分,直到a函数结束;返回main函数中调用a函数处;继续执行main函数的剩余部分直到结束。例17:int fun(int n)if(n=1) return 1;else return(n+fun(n-1);main()int x;scanf(“%d”,&x);x=fun(x);printf(“%dn”,x);执行程序时,给变量x输入5,程序的输出结果是15。分析:从主函数开始执行,到fun(x)时,把x的值赋值给fun(int n)中的n,函数fun(5)的值应该是fun(5)的返回值。fun(5)=5+fun(4);fun(4)=4+fun(3);fun(3)=3+fun(2);fun(2)=2+fun(1);fun(1)=1;则fun(5)= 5+fun(4)= 5+4+ fun(3)= 5+4+3+fun(2)= 5+4+3+2+fun(1)= 5+4+3+2+1=15。2、函数体函数体有两部分组成定义部分和执行部分。2.1标识符2.1.1、定义:用来标注名字的有效字符序列。2.1.2、命名规则:由字母、数字、下划线组成;以字母或下划线开头;严格区分大小写。2.1.3、分类:2.1.3.1、关键字:必须是小写。用来定义数据类型,如:int、short、long、float、double、char、void、static(静态变量)、signed(有符号)、unsigned(无符号)、struct(结构体)、union(共用体)等。用在语句结构中,如:if、else、while、do、for、switch、case、default、break、continue、goto、return等。2.1.3.2、预定义标识符可以用做用户标注识符,但含义发生变化,为了避免混乱一般不要这样使用。2.1.3.3、用户标识符用户标识符一般用来给变量、符号常量、函数、数组或者指针等命名。例18:合法的标识符:如:a、int、sum、_file、define、include、_2,其中合法的用户自定义的标识符a、sum、_file、define、include。不合法的标识符:如:yes?、234a、yes/no、.5、%d。2.2、定义部分2.2.1、数据类型2.2.1.1、整形2.2.1.1.1、整形常量整形常量分为十进制、八进制、十六进制三种。其中,十进制没有前导符,八进制前导符是0、十六进制前导符0x(或0X)。例19:以下选项是可作为C语言合法的整数的是:(C )A)10110B B)0386 C)0fXffa D)x2a2进制之间的转换十进制二进制、八进制、十六进制十进制转换成二进制规则:除2直到商为0,逆序取余。其它方法相同,不再赘述。二进制转换成十进制规则:将二进制的每一位数从高位到你们乘以2的n-1次幂,n为该位的位数,然后将这些积求和。例20:(13)10=(1101)2(1101)2=(13)10二进制八进制、十六进制二进制转换成八进制或十六进制规则:从低位向高位数,每一三位或每四位为一组转换成一位十进制数,或十进制数对应的字母。八进制或十六进制转换成二进制规则:每一位转换成三位或四位二进制数。例21:(11 101)2=(35)8=(1D)16(12)8=(001 010)2(12)16=(0001 0010)22.2.1.1.2、定义整型变量的关键字:int、short、long2.2.1.2、实型2.2.1.1.1、实型常量小数形式:不允许小数点两侧同时为空。指数形式:有三部分组成:小数(或整数)E正整数(负整数)例22:以下选项中合法的一组C语言数值常量是(B)A、028 .5e-3 -0xf B、12. 0Xa23 4.5e0C、.177 4e1.5 0abc D、ox8A 10.000 3.e52.2.1.1.2、关键字float、double2.2.1.3、字符型2.2.1.3.1、常量一对单引号引进来的一个字符,如a。字符所对应的ASCII码。转义字符,如n。例23:以下选项中合法的一组C语言数值常量是(B)A、”abc” B、n C、”9” D、972.2.1.3.2、关键字char2.2.1.4、结构体、共用体定义一个结构体或共用体struct 结构体名成员变量类型1 成员变量名1;成员变量类型n 成员变量名n;例24:struct student char name10;char sex;定义好结构体后,就可以定义结构体类型的变量、结构体类型的数组或结构体类型的指针变量了。如可以定义结构体类型的变量stu1,或结构体类型的指针变量stu2。定义格式:struct student stu1;struct student *stu2;引用结构体中的成员变量时略有不同。如stu1.sex,stu2-sex。共用体和结构体定义形式上大致相同,只需要把struct改为union即可。2.2.1.5、文件指针FILE 文件类型指针变量例25:FILE *wf;2.2.2、定义列表定义变量,int a;变义一维数组,int a10;定义二维数组,int a1010;定义指针变量,int *p;定义指向指针变量的指针变量,int *p;定义指针数组,int *p3;p是数组名,这个数组中存放的是地址,数组长度为3。定义行指针,int (*p)3;p是行指针,指向包括三个元素的一行。定义文件指针,FILE *wf;2.3、执行部分2.3.1运算表达式2.3.1.1、单目运算!逻辑非例26:!0=1 !5=0按位求反例27:14=1需要把14转换成二进制,然后再求反。+、-自增、自减例28:i=20;j=0;j=i+; 执行后i的值为21,j的值为20。例29:i=20;j=0;j= +i; 执行后i的值为21,j的值为21。注意:+或与运算对象的相对位置不同时,得到的表达式的值也不相同。*间接运算符&求地址运算符例30:int *p,a;p=&a;*P= 5;注意:两个*的不同含义,如果在定义部分,表示*用来说明后面的变量p是指针变量。执行部分*p表示的是指针变量p所指的存储单元的内容;第二条语句把变量a的地址赋值给p,则第三条语句执行后,变量a中存放的就是5。(类型)表达式 强制类型转换例31:(int)5.3=52.3.1.2、算术运算*、/、%比+、-的运算优先级高。/求商;%求余,且两侧必须是整数。例31:5/3=1 5%3=22.3.1.3、左移、右移位运算例32:142=3把14转换成二进制,然后左移或右移。左移几位,就在右面补几个0;右移时,移出去的各位可以忽略。2.3.1.4、关系运算、=、的运算优先级高于=、!=。注意=、=、!=的书写。关系运算只有两个值0或1。例33:35的值为0;35&i+表达式的值为0,i 的值为1。例36:i=1;35|i+表达式的值为1,i 的值为2。例38:i=1;3b?a+b:a-b则c的值为-3。2.3.1.8、赋值运算符号:=、+=、-=、*=、/=赋值表达式的值等于左侧变量的值。例40:a=2; 赋值表达式的值为2a+=3; 相当于a=a+3; 则a的值是5。赋值表达式的值为52.3.1.9、逗号运算符符号,表达式的值是最右边的表达式的值。例41:c=(2+3,5+6,3-2)则c的值为1。2.3.2三种基本控制结构:顺序、选择、循环。2.3.2.1、顺序(略)2.3.2.2、选择两路分支语句结构:if(表达式)语句if(表达式1)语句1 else 语句2其中语句、语句1、语句2可以是if语句或ifelse语句。例42:x=6;if(x4)if(x5)printf(“大于5”);else printf(“大于4且小于等于5”);输出结果应该是大于5例43:x=4.2;if(x4)if(x5)printf(“大于5”);else printf(“大于4且小于等于5”);输出结果应该是大于4且小于等于5例44:x=6;if(x4)if(x5)printf(“大于5”);else printf(“大于4且小于等于5”);输出结果应该是大于5例45:x=2;if(x4)if(x5)printf(“大于5”);else printf(“小于2”);输出结果应该是小于2一定要看清楚else和哪个if配对。多路分支结构switch(表达式)case 常量表达式1: 语句case 常量表达式n: 语句default: 语句花括号中的default可以放在任何位置。执行过程先判断switch后表达式的值,如果和某个case后常量表达式的值相同,则执行其后面的语句,直到遇到右花括号,或break语句。例46:a=5;switch(a)case 0: printf(“0”);case 5:printf(“5”);default:printf(“error”);执行结果是:5error例47:a=0;switch(a)case 0: printf(“0”);case 5:printf(“5”);break;default:printf(“error”);执行结果是:05例48:a=2;switch(a)default:printf(“error”);case 5:printf(“5”);break;case 0: printf(“0”);执行结果是:error52.3.2.3、循环注意:必须有循环变量,且必须有初值;必须有向循环结束方向变化的语句。语句结构:while(表达式)dowhile(表达式);for(表达式1;表达式2;表达式3)while(表达式)和dowhile(表达式);的区别是while循环可能一次循环体都不执行,而do while循环体则至少执行一次循环体。for中的三个表达式可以没有,但是其中的两个分号不能少。循环中常用到的break语句和continue语句有些区别,continue语句用来跳出当次循环,执行下一次循环,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论