C语言项目开发教程第1章.ppt_第1页
C语言项目开发教程第1章.ppt_第2页
C语言项目开发教程第1章.ppt_第3页
C语言项目开发教程第1章.ppt_第4页
C语言项目开发教程第1章.ppt_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

1、第一章,初步认识C语言,C语言是最通用和流行的计算机程序设计语言之一。在操作系统和系统实用程序以及需要对硬件进行操作的环境中,C语言明显优于其他高级语言,很多大型应用软件都是用C语言编写的。 C语言是1972年由美国的Dennis Ritchie设计发明的,并首次在UNIX操作系统的 DEC PDP-11计算机上使用。它由早期的编程语言BCPL(Basic Combind Programming Language)发展演变而来。C语言从诞生到现在已有40多年的历史,仍以其紧凑的代码、灵活的表达方式、高效的运行效率、强大的功能,以及可直接操作计算机硬件等特点,深受广大开发人员和编程爱好者的喜爱。

2、 在使用C语言开发具体项目之前,需要先了解一些关于C语言以及C语言程序的相关知识。通过对本章的学习,能够对C语言的产生和发展、C语言的特点、C语言的编程风格等有一定的认识。通过每一个任务的实现,了解C语言的运行环境和C语言程序的编写和执行过程,掌握用C语言解决问题的过程。,任务1.1 学生信息管理系统之菜单设计,任务目标 掌握C语言的基本知识,包括C语言的发展历史、C语言的基本特点和C语言的结构特点等。 比较C语言和其他语句之间的区别。 熟悉C语言的开发集成环境,学会初步创建、编写、编译和执行一个C语言程序。 掌握C语言的输入和输出函数的用法。 实现学生管理系统菜单设计。,1.1.1 C语言基

3、本知识,1C语言发展历史 C语言的发展颇为有趣。它的原型ALGOL 60语言出现于1960年,ALGOL 60是一种面向问题的高级语言,它离硬件比较远,不适宜编写系统程序。1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。CPL语言更接近硬件,但规模比较大,难以实现。1967年,剑桥大学的Matin Richards 对CPL语言进行了简化,于是产生了BCPL语言。 1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将BCPL语言煮干,提炼出它的精华。并且

4、他用B语言写了第一个UNIX操作系统。 而在1973年,B语言也给人“煮”了一下,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。 为了使UNIX操作系统推广,1977年Dennis M.Ritchie 发表了不依赖于具体机器系统的C语言编译文本可移植的C语言编译程序。,1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著The C Programming Language,对C语言的流行起到了很大的推动作用。 1988年,随着微型计算机的日益普及,出现了许多C语言

5、版本。由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准。C语言发展迅速,而且成为最受欢迎的语言之一,主要因为它具有强大的功能。许多著名的系统软件,如DBASE PLUS、DBASE 都是由C语言编写的。用C语言加上一些汇编语言子程序,就更能显示C语言的优势了,如PC-DOS、WORDSTAR等就是用这种方法编写的。,2C语言的特点,C语言既有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具

6、备很强的数据处理能力,不仅仅是在软件开发上,就连各类科研都需要用到C语言。它适于编写系统软件、三维、二维图形和动画,具体应用比如单片机以及嵌入式系统开发。 如今,越来越多的人在学习C语言,使用C语言,用C语言开发各个领域中的应用软件。C语言生命力之所以强,是因为其具有不同于其他语言的特点。其主要特点如下。 (1)简洁紧凑、灵活方便。C语言一共只有32个关键字,9种控制语句,程序书写自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。 (2)运算符丰富。C语言的运算符包含的范围很广

7、泛,共有34个运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C的运算类型极其丰富,表达式类型多样化,灵活使用各种运算符可以实现在其他高级语言中难以实现的运算。,(3)数据结构丰富。C语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据类型的运算。并引入了指针概念,使程序效率更高。另外,C语言具有强大的图形功能,支持多种显示器和驱动器,且计算功能、逻辑判断功能强大。 (4)C语言是结构式语言。结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、

8、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便地调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。 (5)语法限制不太严格、程序设计自由度大。一般的高级语言语法检查比较严,能够检查出几乎所有的语法错误。而C语言允许程序编写者有较大的自由度。 (6)允许直接访问物理地址,可以直接对硬件进行操作。C语言允许直接访问物理地址,可以直接对硬件进行操作。因此既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可以用来写系统软件。 (7)C语言程序生成代码质量高,程序执行效率高。一般只比汇编程序生成的目

9、标代码效率低10%20%。 (8)C语言适用范围大,可移植性好。C语言有一个突出的优点就是适合于多种操作系统,如DOS、UNIX,也适用于多种机型。,3C语言的结构特点,先看下面的案例,通过案例来了解C程序的结构特点。 【案例1-1】 求两个数之和。 源程序如下: #include /*将stdio.h文件包含在本程序中*/ void main() /主函数 /函数体开始 int a,b,c; /定义三个int类型的变量a,b,c a=3;b=2; /变量赋值 c=a+b; /将变量a和变量b的和赋给变量c printf(%dn,c); /*调用标准输出函数,按十进制整数形式输出变量c*/ /

10、*函数体结束*/ 该程序实现的功能是求出整数数据a和b的和并输出。其中a的值为3,b的值为2,将a和b的和赋值给c,然后输出变量c的值。程序运行结果如下: 5 Press any key to continue,代码中的“include”为文件包含命令,其意义为将或“ ”内指定的文件包含到本程序中,成为本程序的一部分。被包含的文件通常是由系统提供的,其扩展名为.h,因此也称为头文件或首部文件。C语言的头文件中包括了各个标准库函数的函数原型,并有对应的函数实现。程序中调用一个库函数时,都必须包含该函数原型所在的头文件。在本案例中,使用了一个库函数prtinf,即标准输出函数。其所在的头文件名为s

11、tdio.h文件,因此在程序的主函数前用include命令包含了stdio.h文件。 因为在程序中使用了printf()函数,该函数为stdio.h中定义的标准输出函数,为了使用printf()函数,需要将包含该函数相关信息的头文件stdio.h包含到本文件中。 “int a,b,c”的作用为声明三个int,即整数类型的变量,变量名分别为a、b、c,这三个变量的取值只能为整数。 “/”和“/*/”均用来表示注释。“/”用来作单行注释,其后面本行内的内容为注释信息。“/*/”用作多行注释,“/*”和“*/”之间的内容均为注释信息,可有多行。注释是给阅读程序的人看的,用来辅助理解程序,在编译和运行

12、阶段不起作用,注释信息可以添加在任何位置。 “c = a + b”用来实现加法运算,表示将a和b的值相加,再赋值给b。 “printf(%dn,c)”用来输出。“%d”表示输出的信息为十进制整数,“n”为换行符,在信息输出后,屏幕上闪烁的光标将会显示在该输出的下一行。 mian函数是主函数的函数名,表示这是一个主函数。在主函数main()中可以调用的函数包括标准库和自定义函数。,由上述例子可以看出,C语言结构和书写特点如下: C语言是由函数组成的。一个函数有一些语句组成,共同实现某一功能。在以后的案例中我们会看到每一个函数均可被其他函数调用,也可调用其他函数,main函数除外:main函数不能

13、被其他函数调用。C程序可以有若干个函数组成,但是其中必须有一个且只能有一个是main()。 程序的执行必须从主函数main()开始,在主函数main()中结束。 C语言程序书写自由,一行内可以写一条或多条语句,一条语句也可以写在多行。 用 括起来的部分,通常表示程序的某一种层次结构。一般情况下,左右花括号各占一行,并上下对齐,便于检查花括号的成对性。 C语言程序是区分大小写的,如输入Printf则程序会报错。 程序的书写根据从属关系采用缩进的格式,可使程序的层次结构更加清晰,从而提高程序的可读性。同一层次要左右对齐,第一层次的语句或说明要比高一层次的语句缩进若干个字符,这样程序层次结构更加清晰

14、。 C语言中每一条语句和数据定义都必须以“;”结束。 C语言用“/”或“/*/”来表示注释。编码过程中配合良好的注释,可增加程序的可读性和可维护性。 对于C程序的书写格式,读者可从后面的程序中逐渐体会,编码时遵循以上规则,以形成良好的编程风格。,1.1.2 C语言与其他语言,1C到C+ 计算机诞生初期,人们要使用计算机必须用机器语言或汇编语言编写程序。世界上第一种计算机高级语言诞生于1954年,它是FORTRAN语言。先后出现了多种计算机高级语言。其中使用最广泛、影响最大的当推Basic语言和C语言。 C语言最初不是为初学者设计的,而是为计算机专业人员设计的。大多数系统软件和许多应用软件都是用

15、C语言编写的。但是随着软件规模的增大,用C语言编写程序渐渐显得有些吃力了。 C+是由AT putchar(c1);putchar(c2);putchar(c2); putchar(c3);putchar(t); /t表示空格 putchar(c4),putchar(c2),putchar(c5); putchar(n);putchar(i);putchar(n);putchar(g); putchar(n); /n表示换行 该程序的运行结果如下: Good morning,2标准格式输出函数printf(),printf()函数的作用为按用户指定的格式,把指定的数据输出到计算机系统默认的输出设

16、备(一般为终端或显示器)上。printf的一般格式为: printf(格式控制串,输出项序列); 格式控制串中包含两种信息:格式控制说明和普通字符。格式控制说明是由“%”字符开始的,后面跟格式控制符,说明输出数据的类型、形式、长度、小数位等信息,其作用为按要求的格式将数据输出,如“%d”,“%f”等;普通字符为要输出的字符,如字母、符号、空格、换行等,运行时会在屏幕上原样输出,一般为提示作用。 输出项序列中各个输出项用逗号隔开,输出项可以为变量、表达式、字符等。 格式控制说明和输出项应该在类型、个数、顺序上保持一致,且从左到右一一对应匹配。在输出时,每个对应输出项的值替换格式控制说明所在的位置

17、,显示在屏幕上。,【案例1-3】 输出整型变量的值。 源程序如下: #include void main() int a=13,b=27; printf(%d %dn,a,b); printf(a=%d,b=%dn,a,b); printf(a+b=%dn,a+b); 程序运行结果如下: 13 27 a=13,b=27 a+b=40 printf(a+b=%dn,a+b);中,a+b=为普通字符,直接输出,%d对应后面a+b,被替换成a+b的和。而c的值为1.3,但是因为其输出格式要求为整数,则只输出c的整数部分,即输出为c=1。,printf函数常用的格式说明符如表1-1所示。 表1-1 p

18、rintf函数格式说明符 格式转换符含 义举 例结 果 %d以十进制形式输出一个整型数据int x=10; printf(%d,x);10 %o以八进制形式输出一个无符号整型数据int x=10; printf(%o,x);12 %x或%X以十六进制形式输出一个无符号整型数据int x=10; printf(%x,x);a %u以十进制形式输出一个无符号整型数据int x=10; printf(%u,x);10 %f以十进制形式输出一个浮点型数据float f=-12.3; printf(%f,f);-12.300 000 %e或%E以指数形式输出一个浮点型数据float f=12.3; pr

19、intf(%e,f);1.230000e+001 %c输出一个字符型数据char c=c; printf(%c,c);c %s输出一个字符串char s=Hello! ; printf(%s,s);Hello! 另外,在格式说明中,可以在%和上述格式字符间插入以下几种修饰符,用来表示数据的输出宽度,修饰符的用法如表1-2所示。,表1-2 printf修饰符用法 格 式说 明 l可加在格式符d、o、x、u前面,如%ld,表示长整型 mm表示一个正整数,指定数据输出宽度 nn表示一个正整数,对于实数,表示输出n位小数;对于字符串,表示截取的字符个数 -输出的内容左对齐 【案例1-4】 修饰符的用法

20、。 源程序如下: #include void main() int a=123;float f=123.456; printf(%8d,%2dn, a, a); printf(a=%d, a=%-6d, a=%6dn, a, a, a); printf(%f,%8f,%8.1f,%.2f,%.2en, f, f, f, f, f); 程序的运行结果如下: 123,123 a=123,a=123,a=123 123.456001,123.456001,123.5,123.46,123e+002,该程序中“printf(%8d,%2dn, a, a)”分别以8字符宽度和2字符宽度显示整型变量a,且

21、默认输出为右对齐。所以第一行输出结果中先是5个空格,然后是a的值;而在指定的2字符宽度小于原整数的字符长度时,仍完整地显示原整数变量。 “%-6d”为以6个字符宽度 显示变量a,且采用左对齐的方式,通过比较“a=%-6d”和“a=%6d”的输出结果可看出左对齐和右对齐的区别。 “%8.1f”的作用为只显示小数点后一位数据,并采用四舍五入的方式截掉后面部分,所以显示的值为123.5,按8字符宽度显示。“%.2e”为采用指数形式显示数据,并且小数点之后取两位有效数据。 【案例1-5】 字符和字符串的输出。 源程序如下: #include void main() char c1=H,c2=e,c3=

22、o; printf(%3c%c%c%c%cn,c1,c2,l,l,c3); printf(%s,%9s,%5.4s,%.3s,%.2stn,Hello,Hello,Hello,Hello,Hello); printf(Nice to meet you!n); 程序运行结果如下: Hello hello, Hello, Hell,Hel,He Nice to meet you!,“%5.4s”表示截取字符串中前4位,并以5个字符宽度显示在屏幕上。 “printf(Nice to meet you!n)”为printf最简单的用法,没有用到任何格式控制说明和变量,直接将字符串显示在屏幕上。 转义字

23、符是一种特殊的字符常量。转义字符以反斜线“”开头,后面跟一个或几个字符。转义字符有特殊的含义,不同于普通的字符,所以称为转义字符。例如,最常用的转义字符“n”,其意义为“回车换行”。转义字符主要用来表示那些不用于一般字符,而且不便于表示的控制代码。因为“”为转义字符的标志,所以每当“”出现时,编译器将自动把其和后面的字符连接起来读取其含义,而编程人员想要输出“”字符时便无法完成。所以用“”的形式来表示输出“”。如在案例1-5中,“tn”表示先输出一个空格,然后输出一个字符“”,再转到下一行。 常用的转义字符及其含义如表1-3所示。,表1-3 常用的转义符及其含义 转 义 符含 义 t空格,跳到

24、下一个tab位置 n换行,将但前位置移到下一行开头 b退格,将当前位置移到前一列开头 r回车,将当前位置移到本行开头 f换页,将当前位置移到下页开头 反斜线字符“” 单引号 ”双引号 a响铃 ddd1到3位八进制数所代表的字符 xhh1到2位十六进制数所代表的字符,【案例1-6】 打印一个金字塔。 源程序如下: #include void main() printf( *n); printf( *n); printf( *n); printf( *n); printf( *n); printf( *n); printf( *n); printf( *n); printf( *n); print

25、f( *n); 该程序的输出结果如下: * * * * * * * * * * 通过空格和换行等控制字符显示的位置,可以在屏幕上打印很多图形,读者可自己进行尝试。,3字符输入函数getchar(),字符输如函数getchar()的功能为读取屏幕上的一个字符,所在头文件也是stdio.h。getchar运行时会暂停,等待用户的输入,且接收用户输入时必须按Enter键结束,然后取走所输入字符的第一个字符。 字符输入函数每执行一次就从屏幕上读取一个字符,可将这个字符赋值给一个变量。,【案例1-7】 字符输入函数的用法。 源程序如下: #include void main() char c1,c2;

26、printf(请输入第一个字符:); c1=getchar(); printf(您输入的第一个字符为%cn,c1); printf(请输入第二个字符:); c2=getchar(); printf(您输入的第二个字符为); putchar(c2); printf(n); 程序运行结果如下: 请输入第一个字符:a 您输入的第一个字符为a 请输入第二个字符:您输入的第二个字符为,在程序中输入字符a,然后按Enter键,程序的输出如案例1-7运行结果所示。每当按下Enter键时,向键盘缓冲区发去一个“回车”(r)和一个“换行”(n),“r”将光标移动到本行行首,“n”将光标移动到下一行。这时缓冲区中

27、有3个字符:“arn”。第一个getchar函数读取第一字符a赋值给c1,并将回车符“r”从缓冲区中去掉,但是留下了“n”,于是第二个getchar将“n”赋值该给c2。 要解决这个问题,可以在两个scanf()函数之后加入语句fflush(stdin),其作用为清除缓冲区,这时可输入第二个字符作为c2。 如将案例1-7更改如下:,#include void main() char c1,c2; printf(请输入第一个字符:); c1=getchar(); printf(您输入的第一个字符为%cn,c1); fflush(stdin); printf(请输入第二个字符:); c2=getc

28、har(); printf(您输入的第二个字符为); putchar(c2); printf(n); 则程序的运行结果如下: 请输入第一个字符:a 您输入的第一个字符为a 请输入第二个字符:b 您输入的第二个字符为b 注意,只有在读取的数据为字符或字符串类型时,才会发生上述问题,其他情况下均不需要情况缓冲区,这是因为在读取其他类型(如整型)的数据时,会跳过空白字符(空格、制表符和换行符)直到遇到一个非空白字符。 另外,getche()和getch()也是字符输入函数,其所在的头文件均为conio.h。,4格式输入函数scanf(),scanf()函数的作用为按照用户指定的格式从键盘上把数据输入

29、到指定的变量中,所在包为stdio.h。scanf的一般格式为: scanf(格式控制串, 地址表列); scanf接受用户输入时可以空格、制表符和换行符结束。 格式控制串的使用规则和printf相同,但是输入时不能规定精度,如“sacnf(“7.3f”, char c1,c2,c3,c4; printf(Please enter one integer: ); scanf(%d, 程序运行结果如下: Please enter one integer:4 Please inter four characters:abcd You have entered 4 and abcd 运行以上程序时,

30、在输入“abcd”时不能添加空格,否而程序会将空格读取并赋值给指定的变量。,【案例1-9】 含有附加控制符的数据输入。 源程序如下: #include void main() int n1,n2,n3; printf(请输入三个整数: ); scanf(%d%d%d, 程序输出结果如下: 请输入三个整数:1 2 3 n1=1,n2=2,n3=3 请输入三个整数:123456 n1=12,n2=345,n3=6 请输入三个整数:1,23,345 n1=1,n2=23,n3=456,第一次输入时按顺序输入三个整数数据,之间以空格表示一个数据输入结束,分别将三个整数赋值给n1、n2和n3。 第二次输

31、入时,scanf函数中的整型变量根据格式项中指定的列宽来分隔数据。在输入123456后,系统将前两个宽度数据12赋值给n1,中间三个宽度数据345赋值给n2,最后只剩下一个宽度数据,小于指定宽度,此时只需将剩余数据全部赋值给n3即可。如最后剩余数据宽度大于指定宽度,也只截取指定宽度数据。 第三次输入时,scanf函数格式控制串“%d,%d,%d”中含“,”,则在输入数据时也必须在数据之间添加逗号,否则会显示输入错误。,1.1.5 任务实现,1问题描述 学生成绩管理是学校教学管理中十分重要又相当复杂的管理工作之一。为了保证学校的信息流畅、工作高效,有必要设计一个学生成绩管理系统。 学生成绩管理系

32、统完成一系列的功能,包括:录入学生信息、显示学生信息、查询学生信息、修改学生信息、学生成绩排序等。 在这里要实现的功能为打印学生成绩管理系统菜单。在菜单项中应列出所有的功能选项,以供用户选择。在用户选择特定的选项后,进入该功能。 2要点解析 程序的主要功能为显示欢迎信息并列出学生管理系统的主要功能供用户选择。主要功能包括: (1)添加学生信息。 (2)查找学生信息。 (3)删除学生信息。 (4)修改学生信息。 (5)学生成绩排序。 (6)统计学生成绩信息。 (7)保存数据到文件。 (8)读取所有学生信息。,3程序实现 通过对上述知识的了解,便可以尝试实现“学生成绩管理系统菜单设计”任务。 任务

33、一的源程序如下: #include #include #include /以下为自定义函数声明语句 void choose(); /选择功能函数 void insert(); /插入学生成绩信息 void search(); /查找学生成绩信息 void del(); /删除学生成绩信息 void modify(); /修改学生成绩信息 void order(); /按平均分成绩排序 void total(); /学生成绩信息统计 void write(); /将学生成绩信息保存在文件中 void read(); /从文件中读取所有学生成绩信息 void main()/*主函数*/ print

34、f(nn); printf(tt|-STUDENT-|n); printf(tt|t 1. 添加学生信息 |n);,printf(tt|t 2. 查找学生信息 |n); printf(tt|t 3. 删除学生信息 |n); printf(tt|t 4. 修改学生信息 |n); printf(tt|t 5. 学生成绩排序 |n); printf(tt|t 6. 统计学生成绩信息 |n); printf(tt|t 7. 保存数据到文件 |n); printf(tt|t 8. 读取所有学生信息 |n); printf(tt|t 0. 退出系统 |n); printf(tt|-|nn); printf

35、(choose(0-7):); choose(); /通过用户输入选择相应的功能实现 程序运行结果如图1-9所示。 图1-9 运行结果,任务1.2 鸡兔同笼问题,任务目标 了解C语言中的基本数据类型。 掌握数据类型之间的转换方法。 了解常量和变量的概念,掌握变量定义的方法。 掌握C语言中运算符和表达式的概念,掌握几种表达式的含义和用法。 实现鸡兔同笼问题程序,1.2.1 基本数据类型 计算机语言中的数据类型是为了高效处理不同数据而引入的一个概念,通过数据类型把不同特征的数据以及这些数据的处理方法封装在一起,既便于对信息的处理,也便于计算机硬件的实现。例如,C语言中有整数类型、浮点类型、字符类型

36、等基本数据类型,另外,还提供了自定义数据类型。 下面具体讲解每一种基本数据类型。 1整数类型 整数类型也称为整型,用来存放整数数据,如1、21、-4、0等,在C语言中用关键字int来表示。整型数据可以为十进制、八进制(以0开头)或十六进制(以0 x开头)。 根据所占内存空间大小的不同,整型数据又可以分为三种:整型,以int表示;短整型,以short int 表示,简写为short;长整型,以long int表示,简写为long。int、short和long具体长度和系统及编译器有关。 除上述三种类型以外,整型数据还可以分为有符号整数(用signed表示,通常可以忽略)和无符号整数(用unsig

37、ned表示)。有符号整数存储时一般用最高位作为符号位,0为正数,1为负数。无符号整数只能表示正数。,2浮点类型 浮点类型用来存放小数或者超出整数范围的数值。 浮点类型分为单精度型和双精度型两种:单精度型用关键字float来表示,有4字节;双精度型用关键字double表示,需要8字节存放。标准格式的浮点数在存储时可分为三个部分:符号位、指数位、尾数位。为了统一表示,尾数位应该小于1。 由于浮点类型提供的有效数据个数总是有限的,在有效位以外的数字将会被舍去。,【案例1-10】 浮点类型。 源程序如下: #include void main() double d; float f; d=123456

38、789123.45; printf(d=%fn,d); f=123456789123.45; printf(f=%fn,f); 程序运行结果如下: d=123456789123.450000 f =123456790528.000000 double所能表示的数据长度大于float,所以程序中对同样的数据,double类型可以完整地记录所有有效位,而float只能记录前7位有效数据,后面的数据没有意义,几乎不起作用。,3字符类型,字符类型数据如字母AZ、数字、符号、换行符、空格等,C语言中用char表示字符类型数据。在计算机中,字符是以ASCII码的形式存储的,每个字符都有对应的ASCII码。

39、 例如,大写字母A对应的ASCII码值为65,即一个整数。因此,字符类型和整型关系非常密切,可以把字符类型看作为特殊的整型。,【案例1-11】 查看字符对应ASCII。 源程序如下: #include void main() char c1=A,c2=Z,c3=a,c4=z; int n1=33,n2=40,n3=53,n4=63; printf(A %d Z %dn,c1,c2); printf(a %d z %dn,c3,c4); printf(33%c 40%cn,n1,n2); printf(53%c 64%cn,n3,n4); 程序运行结果如下: A -65 Z -90 a -97

40、z -122 33 -! 40 - 53 -5 64 -? 从程序运行结果中可以看出,A和Z对应的ASCII码分别为65和90;ASCII码中33对应的符合为!,64对应的字符为?。,4数据类型转换,数据类型转换分类自动转换和强制类型转换。 自动转换发生在参与运算的多个操作数类型不一致时,则先转换成同一类型,再进行计算,如加法操作中两个操作数分别为int类型和float类型,则都先转换为float类型,再进行计算,计算结果为float类型。 自动类型转换的规则如下: double、floatlongunsignedintchar、short 自动类型转换由机器自动完成,并且不会丢失数据。 强制

41、类型转换是通过类型转换运算来实现的。其一般形式为: (类型说明符) (表达式) 其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。例如: float a=5.432;int b=(int)a;则把a转换成整型,1.2.2 常量和变量,每个C程序中处理的数据,无论哪种数据类型,都是以常量和变量的形式出现的。在程序中,常量是可以不经说明而直接引用,而变量是必须先定义后使用的。 1常量 常量为程序执行过程中值保持不变的量。 C语言中常量可以分为两种:直接常量和符号常量。 直接常量为直接以数据形式表现的常量,也称为常数。直接常量根据类型又可以分为4种:整型常量、实型常量、字符常量和字符串常量

42、。 整型常量有3种表现形式:十进制整数,如0、23、-23等;八进制整数,以数字0开头,如012、-034、0567等;十六进制整数,以0 x开头,如0 x123、0 xa3等。,实型常量有两种表现形式:由数字和小数点组成的实型数据,如12.34,-567.08等;以指数形式表示的实型数据,如12.3e4,表示12.3*1000,e后面必须为整数。 字符常量指单一的字符数据,一般由单引号引起来,如a、! 、n、4等。任意数字均可被定义为字符常量,但定义为字符常量以后为字符类型,不能参与数字计算。 字符串常量为一串字符,由双引号引起来,如hello、12345等。字符常量a和字符串常量a是不同的

43、,因为进算计在存储时,会自动在字符串的结尾添加0表示字符串的结束,所以a实际上由a和0两个字符组成。 符合常量为用符合表示数据的常量。符号常量在使用前必须先定义,通常用大写字母来定义符合常量。符合常量一旦定义好之后不能在程序执行过程中修改其值。符合常量定义格式为: #define 常量名 常量值,【案例1-12】 符号常量的使用。 源程序如下: #include #define PI 3.14 void main() float radius; /表示圆的半径 float area; /表示圆的面积 printf(请输入圆的半径:); scanf(%f, 程序输出结果如下: 请输入圆的半径:1

44、0 圆的半径为10.000000 圆的面积为314.000000,2变量,变量是指在程序执行期间值可以发生变化的量。变量代表内存中具有特定属性的内存单元,用来存放程序执行过程中的输入数据、中间结果和最终结果。一个变量应该有一个名字,映射到特定存储单元,存储单元内存放变量值,如图1-10所示。 图1-10 变量的存储 变量名为变量标识符,在编译过程中通过变量名查找相应的内存单元,并从内存单元中读取数据。变量的命名必须符合一定的规范:变量名必须以字母打头,名字中间只能由字母、数字和下画线“_”组成;变量名的长度不得超过255个字符;变量名在有效的范围内必须是唯一的。 在C语言中,变量必须“先声明、

45、再使用”,在使用一个变量之前,必须先对它进行定义:指定数据类型和一个唯一的变量名。变量声明格式如下: 数据类型符 变量名; 可以在一个变量类型符后定义多个变量,变量间用逗号隔开,但最后一个变量后必须加“;”。在变量声明的同时可以给变量赋值。如“int a”,表示定义一个类型为整型的变量a;“char c=a”;表示声明一个类型为字符型的变量c,同时给c赋值为字符a。,1.2.3 运算符和表达式,C语言中,对常量和变量的处理是通过不同的运算来实现的,用来表示各种运算的符合称为运算符,常量和变量通过运算符组成C语言的表达式。C语言中运算符的种类很多,这里重点介绍算数运算、赋值运算和逗号运算,以及相

46、对应的表达式。,1算术运算和算术表达式,算术运算符可分为两类:双目运算符需要两个运算对象,单目运算符只需要一个运算对象。运算对象可以是常数、变量和函数等。 C语言中提供了5个基本运算符: 加法运算符“+”双目运算符,求两个数相加之和,如a+b、3+2等。 减法运算符“-”可作为双目运算符,求两个数相减的差,如a-b、5-4等;也可作单目运算符,表示运算对象取负数,如-4、-a等。 乘法运算符“*”双目运算符,取两个数的乘积,如6*2、a*b等。 除法运算符“/”双目运算符,求两个数相除的商,如a/b、3/2等,0不能作为除数。如果两个运算对象都是整数,则商也是整数,得到的结果只取整数部分;如果

47、有其中一个运算对象是实数,则计算结果也用实数表示。 取模运算符“%”双目运算符,求两个数相除的余数,如5%3=2,其中两个操作数都必须为整数。 C语言中还提供了自增运算符“+”和自减运算符“- -”,分别表示将操作对象加1或减1,然后存回到原操作对象中。这两个运算符都是单目运算符,运算对象只能是变量,且只能为整型或字符型。 自增和自减操作符可以放在操作对象的前面,也可以放在操作对象的后面,其区别可看案例1-13。,【案例1-13】 自增和自减操作符的使用。 源程序如下: #include void main() int a=3,b; b=+a; printf(a=%d,b=%dn,a,b);

48、b=a+; printf(a=%d,b=%dn,a,b); 程序运行结果如下: a=4,b=4 a=5,b=5 执行“b=+a”时,先对a进行加1运算,计算结果替换原来a的值,然后再将a的值赋给b,所以a=b=4;而执行“b=a+”运算时,先将a的值赋给b,然后再对a进行加1运算,用运算后的值替换原来a的值,所以此时a=5,b=4。 自减运算的使用方法同上。 用算术运算符和表达式将运算对象连接起来的式子成为算术表达式,例如5+3、a+、(3+a)*b等,都是算数表达式。 计算算术表达式时要注意运算符的结合性和优先级,如从左到右运算、先算括号里面的、先乘除后加减等。,2赋值运算和赋值表达式,赋值

49、运算用运算符“=”表示,作用为将运算符右边的数据,存放到左边变量所在的内存单元内。含有赋值运算符的表达式为赋值表达式。 赋值运算符左边的操作对象必须为变量,右边可以为常量、变量、函数等。赋值运算符左右的操作对象必须是同一数据类型,否则无法进行操作。 如果一个赋值语句中有多个赋值运算符,则按照先右后左的顺序进行计算,如“a=b=3*2”,则先计算“b=3*2”的值,再把b的值赋给a。 注意,“=”和“=”是两个不同的操作符,“=”的作用为判断两个操作数是否相等,如“a=b”,该操作判断a和b是否相等,相等则返回真1,否则返回0。 除了简单的赋值运算外,还可加上其他操作符构成复合的赋值运算,如赋值

50、运算表达式“a+=3”,表示a=a+3。同理,还有其他复合赋值运算符-=、*=、/=、%=等。,【案例1-14】 赋值表达式。 源程序如下: #include void main() int a=3; a+=3; a*=3; a+=a+=3; printf(a=%dn,a); 请读者自行分析该程序的运行结果。,3逗号运算和逗号运算表达式,逗号运算符是把逗号“,”作为运算符,利用逗号把多个表达式连接在一起。这样构成的表达式,为逗号表达式。运算时,用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。逗号表达式的格式为: 表达式1,表达式2,表达式n; 逗号运算符的优先级是最低的。 【案例1-15】 逗号表达式。 原程序如下: #include void main() int x=2,y=5; int a,b,c; a=(y+,x+3); b=(x+3,y+,x+); c=(x+,y+,x+7); printf(a=%d,b=%d,c=%dn,a,b,c); 程序运行结果如下: a=5,b=2,c=11 分析该程序的运行结果:在“a=(y+,x+3)

温馨提示

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

评论

0/150

提交评论