C语言基本知识点

上传人:沈*** 文档编号:181127990 上传时间:2023-01-10 格式:DOC 页数:82 大小:433.86KB
收藏 版权申诉 举报 下载
C语言基本知识点_第1页
第1页 / 共82页
C语言基本知识点_第2页
第2页 / 共82页
C语言基本知识点_第3页
第3页 / 共82页
资源描述:

《C语言基本知识点》由会员分享,可在线阅读,更多相关《C语言基本知识点(82页珍藏版)》请在装配图网上搜索。

1、说在前面的话:大学节选经u 大学之道,在明明德,在亲民,在止于至善。u 知止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得。u 物有本末,事有终始。知所先后,则近道矣。u 古之欲明明德于天下者,先治其国;欲治其国者,先齐其家;欲齐其家者,先修其身;欲修其身者,先正其心;欲正其心者,先诚其意;欲诚其意者,先致其知。致知在格物。u 物格而后知至,知至而后意诚,意诚而后心正,心正而后身修,身修而后家齐,家齐而后国治,国治而后天下平。80后在校大学生完成电子设计全过程(TINA7opa4131 opa228 TL082)第一章C语言概述1.1 C语言出现的历史背景1.1.1 计算机基本原理1

2、.1.2 计算机语言* 计算机语言种类极多,每天都有增加,可以适当分类,如:通用(FORTRAN、COBOL、C、BASIC),专用(Ada、FOXPRO、LISP),高级(Basic、Pascal、Fortran、C),低级(汇编MASM、PL/M)。依据不同问题的要求,选用不同的语言,甚至组合使用。* 编译语言和解释语言* 代码效率:衡量语言效率,包括空间效率、时间效率1.2 C语言的特点1.2.1 C语言的历史* C语言最早是由美国Bell实验室设计的,主要用作UNIX系统的工作语言,后来发展成为一种通用语言。C与UNIX有密切的关系,C最早是在PDP机器上用UNIX操作系统上开发的,后

3、来又用C语言重写了UNIX系统。* C目前已经在大型机、中型机乃至微机上得到实现,并且有各种不同版本。其本身也处在不断的发展之中。目前主要版本包括:MS C、Turbo C、Quick C、Borland C+、Visual C+,目前在网络上广泛使用的Java也同C语言十分类似。1.2.2 C语言的特点* C语言简洁,结构清晰。i=i+1i+if (ab)max=a;max=(ab)?a:b;else max=b;for i=1 to n:for(i=1;i=n;i+).next同时,C语言以函数作为语言的基本结构,结构清晰,达到模块化、结构化的要求* C语言表达能力强。(运算符丰富、数据结

4、构丰富、允许进行低级操作)有些语言对公式表达能力强,有些语言对数据库表达能力强,C语言通用性好,对硬件及各种资源都有良好的控制。* C语言是一种高效率编译语言,目标代码质量高,用作操作系统语言。UNIX中13000行系统编码,除最底层有800行左右是用汇编语言写的,其余都是用C写的。事实上,有些汇编语言本身可以用C实现交叉汇编,如C-51,C-96。* 通用性好,可移植性强。由于C功能十分强大,不再需要针对特定机器用汇编语言进行扩充,加上C语言的标准化工作很好,所以在不同机器上,不同的操作系统上,几乎不需要改变,在源代码一级是通用、兼容的。* C语言的发展C、 C+、Visual C、Java

5、 .Tips: http:/www.ioccc.org/ The International Obfuscated C Code Contest,世界上最难懂的C编码大赛 Horton.c1.3 简单的C程序介绍* 例C1_1:main()printf(“Hello,worldn”);* 例C1_2:#include #include #include #define TRUE 1#define FALSE 0int i=0;void put_msg(void);main()int answer;clrscr();printf(Do you want to see the message ?n

6、);printf(Enter 0 for No, 1 for Yes=);scanf(%d,&answer);if (answer=TRUE)put_msg();elseputs(Goodbye for now.);void put_msg(void)clrscr();for(i=0;i=10;i+)printf(Test string #%d.n,i);* 从上例中可以看出,C程序主要结构如下:预处理指令includedefine全程变量说明函数变量main()主函数体用户自定义函数体* C语言主要由函数组成,结构化特性好,便于代码共享。* 函数由函数说明、函数体构成* C语言总是从main

7、()函数开始执行,而不管main()位于程序的什么地方。* C语言书写格式自由,如main()printf(“Hello,world.n”);但应培养良好的编程习惯。* C语句后面有;* 注解/*.*/1.4 C程序上机步骤1.4.1 C语言版本* 不同操作系统版本(MAC、OS/2、UNIX、DOS、WINDOWS.* 同操作系统下不同公司版本TC、BC+、MS C、Watcom C1.4.2 Turbo C特色* 集成环境。提供一个综合开发环境,包括编辑、编译、链接、调试。* 强大的联机帮助功能* 强大的图形功能* 目标代码质量高20%30%* 能直接嵌入汇编语言* 能直接调用系统功能1.

8、4.3 Turbo C使用第二章 数据类型、运算符与表达式2.1 C的数据类型2.1.1数据类型* 数据是程序的主要处理对象,语言的特征主要反映在数据类型上,如COBOL主要处理表型数据,人工智能语言主要处理逻辑型数据。C语言的数据类型非常丰富,可以处理各种类型的数据。* 区分数据类型的意义:* 节约内存* 小内存数据运行速度快2.1.2 C语言的主要数据类型* 基本类型* 整型* 字符型* 浮点型* 枚举型* 构造类型* 数组* 结构体* 公用体* 指针类型* 空类型TypeLengthRange unsigned char8 bits0 to 255 char8 bits-128 to 1

9、27 enum16 bits-32,768 to 32,767 unsigned int16 bits 0 to 65,535 short int16 bits-32,768 to 32,767 int16 bits-32,768 to 32,767 unsigned long32 bits0 to 4,294,967,295 long32 bits-2,147,483,648 to 2,147,483,647 float32 bits3.4 * (10*-38) to 3.4 * (10*+38) double64 bits1.7 * (10*-308) to 1.7 * (10*+308)

10、 long double80 bits3.4 * (10*-4932) to 1.1 * (10*+4932)2.2 常量与变量2.2.1常量和符号常量* 程序执行过程中不改变的量称为常量,如3.14159,16,:.* 常量的作用主要是便于理解,便于修改和移植,如 #define PI 3.14159#define EOF 0#define TRUE 1* 常量也可以用标识符进行命名,如上例中的PI、TRUE等,但符号常量不能被赋值。如下例是错误的:#define DOT .DOT=:;* 常量可以是各种类型,如:整型(180)、字符型(a)、浮点型(3.1415926).* 常量可以是各种

11、数制* 十进制122* 八进制0122* 十六进制0x12a、0X12A2.2.2变量* 变量属性* 变量类型* 变量名(地址)* 变量值* 变量名用标识符来表示,用来表示变量名、文件名等名字的有效字符序列称为标识符。* 有效字符集:09、az、AZ、_、($)* 第一个字符不能是数字* 一般情况下,前32个字符有效(可扩展)* 大小写代表不同标识符,如MAX!=max,习惯上用大写表示常量,小写表示变量。* 不能用关键词(保留词)作标识符,如:while、else、typedef、include.* 尽量使标识符有意义,如depth、length、color、location等,少用如:a、

12、x、a1* 每个变量在使用前都必须进行强制定义,“先定义,后使用”。如:int num;float depth;char gender;这点与BASIC中有默认定义不同。变量定义的意义在于:* 合理分配内存* 防止非法运算,如float a,b,c;c=a%b;* 防止误写变量名* 例C2_1#include void main()int lower,upper,step;float fahr,celsius;lower=0;upper=300;step=20;fahr=lower;while(fahr=upper)celsius=(5.0/9.0)*(fahr-32.0);printf(%4

13、.0f %6.1fn,fahr,celsius);fahr=fahr+step;该例子可简化为例C2_2:#include void main()float fahr,celsius;for(fahr=0;fahr=300;fahr+=20)celsius=(5.0/9.0)*(fahr-32.0);printf(%4.0f %6.1fn,fahr,celsius);还可简化为例C2_3:#include void main()float fahr;for(fahr=0;fahr=300;fahr+=20)printf(%4.0f %6.1fn,fahr,(5.0/9.0)*(fahr-32.

14、0);2.3 整型数据2.3.1整型常量* 十进制整数 ddd* 八进制整数0ddd* 十六进制整数0xddd* 可以加长整数后缀L或l2.3.2整型变量* 基本型int* 短整型short int、short* 长整型long int、long* 无符号型unsigned* 例C2_4#include main()int i;i=37000;printf(i=%dn,i); 结果将显示-285362.4 浮点型数据2.4.1浮点型常数* 十进制3.0、3.14159* 指数式2e15、2.0E15、3e-8* 指数不能小数,尾数不能没有。如3e2.4、E-5。2.4.2浮点型变量* floa

15、t、double、long double* 长度分别为4、8、10字节* float精度为7位有效数字,double精度为1516位* 不能写成double float或long double float2.5 字符型数据2.5.1字符常量* 可见ASCII字符,d,s,$* 不可见字符用转义字符表示。如n、a、b。见p16表2.3* 注意显示结果和打印结果可能不一致,如:printf(“abcdrefghn”);将显示efghprintf(“abbn”);将显示b2.5.2字符变量* 定义格式:char标识符* char类型与int类型关系char c1;c1=a;c1=c1+2;print

16、f(“now c1 is %c.n”,c1);将显示now c1 is c各种输入输出中,经常用到EOF符号,下面用程序检测EOF定义:#include void main()char c1;c1=EOF;printf(“EOF=%d.n”,c1);将显示EOF=-1#include main()char c1=a,c2=d,c3=h;printf(d-a+h=%c.n,c2-c1+c3);将显示d-a+h=k* 注意,C中没有字符串变量类型。2.5.3字符串常量* 例:“I am programmer”、“I am a t programmer”* x和“x”不同* 字符串可以用字符型数组来

17、存放。2.6 变量赋初值* 例:int i;i=20;* 例:int a;int b;int c;-int a,b,c;* 例:int i=20;* 变量不初始化,则其值不确定。2.7 各种数据类型的混合运算* int-unsigned-long-double| |char,short float例:#include main() int a,b; float ratio; printf(Enter two number:); scanf(%d %d,&a,&b); ratio=a/b; printf(The ratio is %f.n,ratio);当输入a=10,b=3时,期望输出为rat

18、io=3.3333,实际输出ratio=3.000。要改变这一情况,要将语句改为:ratio=1.0*a/b;注意,如改为:ratio=a/b*1.0;将仍然达不到效果。2.8 算术运算符和算术表达式2.8.1 C运算符简介2.8.2算术运算符和算术表达式* 基本算术运算符:+、-、*、/、%例:5/3=1;-5/3=-1* * / % - + -* 例:17/5%2+4=5;17/5.%2+4非法17/(int)5.%2+4=5* 自加减运算符+、* 不能用于常量或表达式:6+、(i+j)+* 例:if(c!=0)n+;或+n;也能用于如c1=si+;c2=s+i* 不要出现诸如:ai=i+

19、;之类的语句2.9 赋值运算符和赋值表达式2.9.1简单赋值运算* 赋值操作与赋值运算符C语言中将赋值操作作为一种运算,和算术运算一样,赋值运算也有值。如:a=3.5;a=b+4;其中,a=3运算的值为3,因此可以x=(a=3);结果x=3。这样,赋值运算不仅可以出现在赋值语句中,同样可以出现在表达式中,例如:while(c=getchar()!=EOF).* 赋值运算中的类型转换截断和扩展2.9.2复合赋值运算符* e1 op= e2 =e1=e1 op e2,例如:x+=5=x=x+5x*=y+1=x=x*(y+1)* 绝大部分二元操作符都可以和赋值运算符构成复合运算符,如:+=,-=,*

20、=,/=,%=,=,=,&=,=,|=* 可以提高编译质量,降低源程序复杂度,如:yyva1yypvp3+p4+yypvp1+p2=yyva1yypvp3+p4+yypvp1+p2+2可以简化成:yyva1yypvp3+p4+yypvp1+p2+=22.10 逗号运算符和逗号表达式* 格式:e1 , e2整个表达式的值是e2的值,例如:a=3*5,a*4构成一个逗号表达式,其值为60如:#include main()char oldch,ch=a;if(oldch=ch,ch=b)=a) puts(aye);else puts(bee);/*结果将显示bee*/* 逗号运算符级别是最低的。第三

21、章 最简单的C程序设计3.1 C语句概述* C程序* 源程序文件* 预编译命令* 函数* 说明部分* 语句(执行部分)* C语句种类* 控制语句1. if()else2. for()3. while()4. dowhile()5. continue6. break7. switch8. goto9. return* 函数调用语句,如printf(“This is a C statement.n”);* 表达式语句,由运算符构成表达式,由表达式构成语句。如x+是表达式,x+;就是语句,x+y;也是一个语句。a=3是一个表达式,表达式的值是3,a=3;是一个语句。* 空语句* 复合语句,一般用.括

22、起来。3.2 程序的三种基本结构* 顺序结构* 选择结构* 循环结构3.3 赋值语句* “=”是一个赋值运算符* 赋值表达式与赋值语句。如:c=getchar();是一个赋值语句,while(c=getchar()!=EOF)其中c=getchar()是一个表达式,而!=EOF也是一个逻辑表达式,返回值为0或1。注意其中的c=getchar()不能写成c=getchar();即表达式不能写成语句。3.4 数据输出* C语言中没有专门的输入输出语句,输入输出操作是通过函数实现的。printf和scanf是标准函数库中的两个常用函数,注意printf和scanf不是C语言的关键词,不是C语言标准的

23、组成部分。* printf函数格式:printf(格式控制,输出表列)* 格式控制:* 格式说明,如:%d,%ld,%u,%6.3f* 字符,如:The sum is,n,a,c=* 输出表列:* 表达式:2.98*3.14* 标识符:sum,x* 格式说明%(m)(l)d%(m)(l)o%(m)(l)x%(m)(l)u%c%(-)(m)(.n)s%(-)(m)(.n)f%(-)(m)(.n)e%g* 类型要匹配,注意非long型整数不能用long型输出,否则将输出错误结果。如a=10;printf(“%ld”,a);错误。同样,整型数不能用浮点型输出。* 要输出%,可以用%。例:#inclu

24、de #define format1 %d,%o,%x,%u,%ld,%lo,%lx,%lun#define varlist(ele) ele,ele,ele,ele,ele,ele,ele,elemain() int int_a=2; unsigned int un_b=65535; long long_c=65535; printf(a=format1,varlist(int_a); printf(b=format1,varlist(un_b); printf(c=format1,varlist(long_c);输出结果为:a=2,2,2,2,131074,400002,388038e,6

25、5535b=-1,177777,ffff,65535,-1,37777777777,388038e,65535c=-1,0,ffff,0,65535,177777,ffff,65535* putchar()函数:输出一个字符,可以是一般字符,也可以是转义字符。* puts()函数:输出一个字符串,例如:puts(“Hello,world”);注意:puts后面不需要加n,因为puts函数自动换行。* 采用puts()、putchar(),而不用printf()函数,因为printf()函数实现非常庞大,除非数值输出或特殊格式输出,一般尽量不用。3.5 数据输入* scanf()格式输入函数:s

26、canf(格式控制,地址表列)* scanf()中的地址表列必须是一个地址,而不是一个值,例如:int a;scanf(“%d”,a);/*错误*/scanf(“%d”,&a);/*正确*/* 格式控制可以用格式字符%(l)d、%(l)o、%(l)x、%c、%s、%(l)f、%(l)e等输入相应的十进制、八进制、十六进制、字符、字符串、实数等数据。* 如果在两个格式字符之间有空格,则表示输入的两个数据之间可以加入任意个回车符、制表符或空格符。#include main()int a,b;scanf(%d%d,&a,&b);printf(%d,%dn,a,b);格式控制输入%d%d12 13或1

27、213或1213%d %d同上%d,%d12,13%dabc%d12abc13* 如果输入数据时,遇到空格,则认为该数据输入完毕,例如:#include main()char name30;puts(Please input your name);scanf(%s,name);printf(Hello,%sn,name); 如果输入Wang Ziqiang,输出为Hello,Wang* getch()和getchar()都可以输入一个字符,但getch()不回显,例如: #include #include main() char c; while(c=getchar()!=q)printf(%

28、cn,c);将此例中getchar()改为getch(),并输入abcdefgqabcdef,观察两种程序的输出。第四章 逻辑运算和判断选取控制4.1 关系运算符和关系表达式4.1.1关系运算符及其优先次序* 关系运算符:、=、=、a+b=c(a+b)ab!=c = (ab)!=c a=b a=(bc!=c a=(bc)!=(c(c+d)* 关系表达式的值:C中没有布尔常量,关系运算结果为真,则表达式值为1,运算结果为假,则表达式值为0。代表真假的1和0总是int型的,并且可以执行通常的算术运算。如:a=1;b=2;c=3,如果d=ab=cb,则d=0。4.2逻辑运算符和逻辑表达式4.2.1逻

29、辑运算符及其优先级* 逻辑运算符:&、|、!* 优先级:!- & - |* &、|优先级高于赋值运算符,低于关系运算符,如:a=bc|!d&e=f = a=(bc)|(!d)&(e=f)4.2.2逻辑表达式* 用逻辑运算符连接的表达式,如:53&2|80)for(i=0;i0)else puts(“n=0,Error!”);事实上,else将与最近一个尚未与else配对的if联系起来。4.3.3条件运算符* 如下句子可以用条件运算符代替:if (表达式) max=a;else max=b;可以用运算符代替为:max=(表达式)?a:b;* 条件运算符优先于赋值运算符,低于算术运算符和关系运算符

30、* 只有赋值条件赋值语句可以用条件运算符代替4.4 switch语句* switch后的表达式必须是整型表达式,或与整型相兼容的值,例如char型、enum型等。* default可以省略,也可以出现在其他地方,case语句不必按照次序。例如:scanf(“5d”,&a);switch(a) case 3:break;default:break;case 5:break;case 6:break;case 2:break;第五章 循环控制5.1概述C语言中,用以实现循环的语句结构包括:* while() * do while() * for()* goto if5.2 while语句* whi

31、le语句格式为:while(表达式)语句。其中,表达式为真时,执行语句,为假时,跳过语句。例如: #include #define YES 1 #define NO 0 main() int c,nl,nw,nc,inword; inword=NO; nl=nw=nc=0; while(c=getchar()!=EOF)+nc; if(c=n)+nl; if(c= |c=n|c=t)inword=NO; else if(inword=NO)inword=YES; +nw; printf(line=%dtwords=%dtchars=%dn,nl,nw,nc); * 注意,while中必须包含使

32、循环结束的语句,如上例中的c=getchar()=EOF就是结束条件。5.3 do-while循环* 格式:do语句while(表达式)* 例如:余数问题。有一个数,用3除余2,用5除余3,用7除余2。#include main()int i; i=0; doi+;while(i%3!=2|i%5!=3|i%7!=2); printf(i=%dn,i); 结果是i=23* 注意,一般情况下,while和do-while是一样的,但do-while是非零循环,而while是可零循环。见书p69例5.4* 循环体如果是单个语句,可以不要,但加上有助于理解。5.4 for循环语句* 格式:for(表

33、达式1;表达式2;表达式3)语句,运行过程是:表达式1;while(表达式2) 语句; 表达式3; * 例如:for(i=1;i=100;i+)sum=sum+i;最常见的形式如:for(初值;循环结束条件;循环增量)* for各部分表达式都可以省略,如for( ; ; ;)是合法的,初值可以放到for前完成,增量可以在循环体内完成,结束条件可以用if+break完成。例如:sum=0;for(i=1;i100)break;* 甚至for语句中的循环体也可以省略,如:for(sum=0,i=1;i=100;sum=sum+i,i+);printf(“sum=%dn”,sum);注意,其中for

34、语句后的;代表空语句,如果没有空语句,下一语句将被作为循环体* for语句和while语句一般可以互相替代,一般for语句较简洁,功能也最强,但是,如果不需要初始化,用while比较自然,如:while(c=getchar()= |c=n|c=t) /*skip white space characters*/而需要初始化时,用for更方便,如:for(i=0;iN;i+)一个综合性的例子,此例将一个数字字符串如“-123”转化为数字-123,并忽略数字前的空格、制表符等:#include main()char s=-1223;int i,n,sign;for(i=0;si= |si=n|si

35、=t;i+);sign=1;if(si=+|si=-)sign=(si+=+)?1:-1;for(n=0;si=0&si=9;i+)n=n*10+si-0;printf(n=%dn,n*sign);5.5 break语句和continue语句* break语句作用:* 使流程跳出switch结构* 使流程跳出当前循环体* continue作用:结束本次循环,继续下一次判断以决定是否继续循环。例C_2/打印100以内的全部素数#include #include #define YES 1#define NO 0main()int i,j,sign; for(i=3;i=100;i+) sign=

36、YES; for(j=2;j=sqrt(i);j+) if(i%j=0) sign=NO;break; if(sign=YES)printf(%dt,i); 例:下面程序段将跳过负数不予处理,而仅处理正数。for(i=0;iN;i+)if(ai0)continue;5.6 goto语句* 格式:goto (语句标号)* 使用场合:跳出某种嵌套较深的结构* 尽量少用,破坏结构化,甚至导致堆栈溢出。但有时使用可以简化程序,减少变量,如:#include #include main()int i,j; for(i=3;i=100;i+) for(j=2;j=sqrt(i);j+) if(i%j=0)

37、goto next; printf(%dt,i); next:; 第六章 数组6.1一维数组的定义与使用6.1.1数组的定义* 格式:(type) 数组名常量表达式;如:int s10;* 数组名定义同标识符* 常量表达式表示数组元素个数,不能用变量进行动态定义。如sn* 数组元素从s0、s1s9,C语言不进行越界检查,越界使用数组将得到不可预料的结果。例:#includemain()int s5=1,2,3,4,5; int i; for(i=2;i8;i+)printf(s%d=%dt,i,si); putchar(n);得到结果为:s2=3 s3=4 s4=5 s5=23411 s6=2

38、5637 s7=157096.1.2一维数组元素的引用例:构造一个Fibonacci数列,并计算fi-1/fi#includemain()int f20=1,1; int i; float ratio; for(i=2;i20;i+) fi=fi-1+fi-2; for(i=0;i1)?(1.0*fi-1/fi):0); 结果为:f 0= 1 ratio=0.000000 f 1= 1 ratio=0.000000f 2= 2 ratio=0.500000 f 3= 3 ratio=0.666667f 4= 5 ratio=0.600000 f 5= 8 ratio=0.625000f 6=

39、13 ratio=0.615385 f 7= 21 ratio=0.619048f 8= 34 ratio=0.617647 f 9= 55 ratio=0.618182f10= 89 ratio=0.617978 f11= 144 ratio=0.618056f12= 233 ratio=0.618026 f13= 377 ratio=0.618037f14= 610 ratio=0.618033 f15= 987 ratio=0.618034f16=1597 ratio=0.618034 f17=2584 ratio=0.618034f18=4181 ratio=0.618034 f19=

40、6765 ratio=0.6180346.1.3一维数组的初始化* 用赋值语句初始化,如:int s5=0,1,2,3,4;* 静态数组初始化,如:static int s5=0,1,2,3,4;* 部分元素初始化,如:int s5=0,1,2;仅对前三个元素初始化,后面为0* 自动确定数组长度,如:int s=0,1,2,3,4;将自动确定数组长度为5。* 以下初始化是错误的:int s5=5*0;int s5=,3,4;6.2二维数组的定义与引用6.2.1二维数组的定义* 格式:(type) 数组名常量表达式常量表达式;如:float s43;* 内存中按行存放,即s00-s01- -s3

41、2,即右方下标变化最快。* 二维数组可以理解成若干个一维数组组成,如s33可以理解成:s03、s13、s236.2.2二维数组的引用* 注意下标不要越界,如:int s23;s23=4;错误6.2.3 二维数组的初始化* 基本同一维数组* 注意:int s34=1,2,3,4,5,6;表示:* 问题:int s4=1,2,3,4,5,6,7,8,9,10,11,12;系统可以自动确定为s34,如果int s4=1,2,3,4,5系统将如何确定?(系统将确定为s24)6.3字符数组6.3.1字符数组的定义char c10=M,y, ,n,a,m,e;注意,char c10与int c10是不同的

42、,例如:#include main()char s10=a,b,c,d,0; printf(%s,s);将输出:abcd。而:#include main()int s10=“a”,”b”,”c”,”d”,”0”; printf(%s,s);将输出:a。考虑一下,为什么?6.3.2字符数组的初始化* 注意,字符数组用来表示字符串时,必须注意末尾的结束标志0,没有结束标志,有时输出时会得到意想不到的结果,如:#include main()char t5=H,e,l,l,o;printf(%s,t);结果输出为:Hello%s。如果改为:#include main()char t6=H,e,l,l,

43、o,0; printf(%s,t);则输出正确结果:Hello6.3.3字符数组的引用6.3.4字符串和字符串结束标志* 利用字符串为字符数组赋值,如:char s=”Hello”;或char s=“Hello”;注意此时s数组长度为66.3.5字符数组的输入输出* 三种输出方法:例static char s=”Hello”;* 用循环实现,for(i=0;i5;i+)printf(“%c”,si);* 用字符串输出格式,printf(“%s”,s);* 用puts函数,puts(s);* 输入方式* 用for循环,如char s10;int i;for(i=0;i10;i+)scanf(%c

44、,&si);printf(%s,s);* 用scanf(“%s”,s)方式,如:char s30;scanf(“%s”,s);printf(“%s”,s);* 注意,数组名代表数组首地址,数组元素代表值6.3.6字符串处理函数* puts* gets* strcpy* strcmp* strlwr* strupr 例如:puts( strupr(“Hello, Worldn”);第七章 函数7.1概述* C语言是函数型语言,因此,函数是C语言最重要的组成部分。一组语句能处理不同的数据,一组语句能出现在程序的不同地方,这些都需要函数结构。C语言中没有另外的子程序结构。main()本身就是一个函数

45、。* C语言函数种类* 标准函数,即库函数,如scanf,printf,puts等* 用户自定义函数* C语言函数可以带参数,可以不带参数;可以返回值,可以不返回值;不允许嵌套定义,但允许递归使用。7.2函数说明的一般形式* 函数由两个必须的部分组成,即函数说明和函数定义。* 函数说明,或函数原型(prototype)用于告诉编译器有关函数的信息。函数说明包括函数名、函数参数的数目及类型,以及函数的返回类型。* 函数定义包括函数传递及返回的具体信息,以及函数体本身。例: #include int max(int x,int y);/*函数说明*/ void main() int a,b,c;

46、scanf(%d %d,&a,&b); c=max(a,b);/*函数调用*/ printf(max of %d and %d is %d.n,a,b,c); int max(int x,int y)/*函数定义*/ int z; z=(xy)?x:y; return(z); * 函数说明的一般格式:类型标识符 函数名(参数类型 参数名,.),如:int my_func(int a,int b,int c);double cube(double x);void show_color(void);* 所有函数在使用之前必须先加以说明,即先说明再使用。只有一种情况可以不加说明,即函数先定义,再使用

47、。如: #include int max(int x,int y) int z; z=(xy)?x:y; return(z); void main() int a,b,c; scanf(%d %d,&a,&b); c=max(a,b); printf(max of %d and %d is %d.n,a,b,c); 此例是合法的,但不是好的风格,因为可读性低,对程序整体意图不容易把握,第二个缺点是首先定义的函数必须是最详细的,函数体中不能调用任何其他函数,否则就会出错。使用函数说明往往比决定先定义哪个函数容易得多。* 参数名可以省略,因为函数说明仅仅是告诉编译器参数的个数及类型,并不关心参数的

48、名称,如下例是合法的:int max(int,int);* 如用户在函数说明中未说明返回类型,编译器认为返回类型为缺省型或整型。因此下例是合法的:max(int x,int y);max(int,int);作为良好的风格,应对函数类型作明确的说明,空类型的应说明为void型,整数型的应说明为int类型。7.3函数参数和函数的值7.3.1形参与实参* 实参可以是常量、变量或表达式,但必须是有确定的值,如:c=max(a,a+b);* 实参类型必须与形参类型一致,否则会出错。* 实参与形参的对应关系是单向的,即实参传递给形参,调用结束后,取得返回值,但实参的值并不发生改变。#include int

49、 change(int a,int b);void main() int a,b,c; scanf(%d %d,&a,&b); c=change(a,b); printf(max of %d and %d is %d.n,a,b,c);int change(int a,int b) int z; z=(ab)?a:b; a+;b+; return(z);此例中,虽然函数定义中,形参值发生了改变,但并不影响实参的值。如果输入值为12 13,不要误以为输出将是max of 13 and 14 is 13。7.3.2函数的返回值* 函数的返回值是通过return语句实现的,一般格式为:return

50、表达式;如果没有表达式,则表示仅从当前函数中返回调用处。* 除了void型以外,一般函数都必须要有return语句,不管是否产生了有用的数据。如main()函数中如果没有return将产生一个警告错误。* 函数体中出现多条return语句是允许的,因为第一个遇到的return语句将使流程推出函数,回到调用处。* 如果return的值与函数类型不符,以函数类型为准,如:double sum_it(int a,int b)return (a+b);返回时,将把类型提升到double型返回。尽量避免此类隐式转换,以免出现难以调试、寻找的错误。7.4函数的调用7.4.1函数调用的一般形式* 函数名(实

51、参表);* 函数调用的几种方法:* 函数语句,如:clrscr();* 函数表达式,如:c=a/max(a,b);* 函数参数,如:m=max(c,max(a,b)下面是一个较为全面的例子: #include #include void get_parms(float *p1,float *p2); float get_ratio(float divident,float divisor); void put_ratio(float quotient); const float INFINITY=3.4E+38; main() float a,b,ratio; char ch; doget_p

52、arms(&a,&b); ratio=get_ratio(a,b); put_ratio(ratio); puts(Press q to quit, other key to continue.);while(ch=getch()!=q); void get_parms(float *p1,float *p2) puts(Enter two numbers:); scanf(%f %f,p1,p2); float get_ratio(float divident,float divisor) if (divisor=0.0)return(INFINITY); elsereturn (divident/divisor); void put_ratio(float ratio) i

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!