1、C语言程序设计,教 师: 何春燕 E-mail:,大学公共计算机,计算机基础1:计算机应用基础,计算机基础2,理工:C语言程序设计,文科:,Visual FoxPro程序设计,Access 数据库管理系统,为什么要学习C语言?1. 专业需要2. 简单,应用广泛3. 兼有高级语言和低级语言的优点,10级C语言课程的特点:1. 改教材:更简单2. 改学时:36(理论)+20(实践)3. 改考核:允许参加国家计算机二级考试,如何学好C语言? 相信自己能学好C语言,不懂就问 课前预习,课后复习 多读程序,多练题 多上机实践 利用机房、图书馆、网络等资源学习,课程的教学进度,第一章 C语言基础知识(6学
2、时) 第二章 算法描述(1学时) 第三章 C语言控制结构(7学时) 第四章 数组与指针(8学时) 第五章 函数(6学时) 第六章 结构体与共用体(4学时) 第七章 文件操作(2学时),第1章 C语言基础知识,学习要求:,理解C程序的基本结构 熟悉C程序的编程环境 掌握基本数据类型 掌握基本输入、输出函数 掌握运算符和表达式,1.1 C语言概述,C语言诞生:1978年美国贝乐实验室C语言推广:UNIX操作系统C语言的特点:语言简洁、紧凑,使用方便灵活32个关键字、9种控制语句运算符丰富(34种),数据类型丰富以函数为程序的模块单位,是完全的模块化和结构化语言程序书写自由,主要用小写字母表示生成目
3、标代码质量高,程序执行效率高程序可移植性好,1.1.1 C程序的结构,【案例1.1】编写程序,在屏幕上输出字符串“Hello,World!”。,【程序详解】,/*Example11.c */ #include /包含库文件stdio.h void main() /定义名为main的函数 printf(“Hello,World!n”); /调用printf语句,将引号内的内容输出到屏幕 ,【归纳总结】C程序的基本结构:,初学者在调试程序时常遇到的问题是语法错误,如案例1.1中 将“printf”写为“Printf” 将其中的引号、括号、分号等错写为中文标点符号 丢失语句后的分号 C语言规定标识符
4、、函数名等区分大小写,标点符号一律采用英文符号。,经验交流,1.1.2 C程序的上机步骤,C程序的集成开发工具有Turbor C、WinTC、Borland C+、Visual C+ 6.0等,下面以Visual C+ 6.0中文版为例介绍C程序的上机步骤:,(1)新建文件夹 (2)启动VC+ 6.0 (3)新建C语言源程序文件 (4)编码 (5)编译、连接 (6)运行,1.2 C语言的基本数据类型,图1-9 C语言的数据类型,表1-1 C语言基本数据类型的长度和范围,C+系统中int 及unsigned int型占内存字节数为4B,其他相同,1.2.1标识符,在C语言中,标识符用来对变量名、
5、函数名、标号和其他各种用户定义的对象命名。C语言的标识符应遵循以下规则:,(1) 只能由英文字母、数字和下划线组成,且必须以字母或下划线打头 (2) 不允许同关键字相同(3) Turbo C允许标识符的最大长度为32个字符,建议不超过8个字符(4) 标识符命名尽量做到“见名知意”(5) 标识符区分大小写,1.2.2常量,在程序执行过程中,其值不发生改变的量称为常量。程序中,能够从字面上看出数值的常量称为字面常量或直接常量。,1直接常量,整型常量:12、0、-3; 实型常量:4.6、-1.23; 字符常量:a、b; 字符串常量,在语言中,使用的整型常量有八进制、十六进制和十进制三种,各自表示形式
6、如表1-2所示。,在语言中,使用的实型常量有十进制小数和指数形式两种,字符类常量有字符型和字符串型。如下表所示,表1-5 转义字符及其含义,【案例1.2】读程序写出运行结果。,/*Example12.c */ #include #define PI 3.14159 /定义符号常量PI main() printf(“%dn“,A); /输出直接常量A的ASCII码值printf(“%cn“,A+32); printf(“%fn“,PI); /输出符号常量PI的值 ,2符号常量,符号常量是指用一个标识符代表的一个常量。符号常量在使用之前必须先定义,其一般形式为:#define 标识符 常量,1.2
7、.3变量,在程序运行中,值可以改变的量称为变量。变量存储在内存单元中,一个变量有一个名字,在内存中占据一定的存储单元。在C语言中,变量必须“先定义,后使用”,变量定义给出了变量的名称,确定了变量的数据类型。,变量定义语句的一般格式为:类型标识符 变量名, 变量名, ;,例如:long int x=12;,x,图1-9 变量x的地址,编译时,系统根据指定的类型分配给变量一定的存储单元,变量所占用内存单元的第一个字节的地址就是变量的地址。如图1-9所示,长整型变量x占用了4个字节的存储单元,它的第一个字节的地址为1001,所以变量x的地址为1001。,常见的C语言变量类型如表1-4所示。,注意:
8、定义变量时,类型符和变量名之间至少有一个以上的空格分隔。,【案例1.3】变量的定义与引用演示。,【程序详解】,/*Example13.c */ #include main() int a,b,c; /变量声明a=12; b=-15; c=0; /变量初始化printf(“First: c=%dn“,c); c=a+2; printf(“Second: c=%dn“,c); c=a+b; printf(“Third: c=%dn“,c); ,1.3基本输入输出函数,C语言中的标准输入/输出操作是通过函数调用来实现的,这些函数的原型在“stdio.h”中定义,使用时要在程序的开头包含头文件“std
9、io.h”。,引用“stdio.h”头文件进行预编译的语句如下:,#include或#include ”stdio.h”,1.3.1格式化输出函数,格式化输出函数printf()的作用是按控制字符串指定的格式,向标准输出设备(一般为显示器)输出指定的输出项,其一般形式为:,printf(“格式控制字符串”, 输出表列);,格式控制字符串包含普通字符、转义字符、格式说明符三类。,(1)普通字符,如“A”、“BeiJing”、“请输入一个整数”等,这类字符按原样输出 (2)转义字符用于表示那些无法在屏幕上显示的控制字符 (3)格式说明符用来控制输出表列中数据的输出格式,其描述形式如下:,%+-0m
10、.n, 形式字母的使用如表1-6所示。 “m.n” 指定输出长度。如果输出的是实数,则m表示该实数输出占用位置的宽度,n表示小数部分的位数。 例如: float x=3.1415; printf(“%4.2f”,x);,“0” 指定不使用的空位置填数字“0”(默认空位置为空格),注意:该项只对数值输出有效。例如: int x=1234; printf(“%06d”,x); printf(“%6d”,x); 输出结果是:0012341234(表示空格,下同),“+”和“-” 用来指定输出的对齐方式。“+”表示靠右对齐,可缺省,“-”表示靠左对齐。 “%” 为格式转换说明符的开始标记。,表1-6
11、形式字母的含义,【案例1.4】阅读以下程序,分析输出结果,/*Example14.c */ #include main() int a=5; float b,c;b=2.623;c=3.1415;printf(“-格式化输出命令演示-n“); /提示信息 printf(“a=%d,tb=%fn“,a,b); printf(“b+c=%06.2fn“,b+c);,1.3.2格式化输入函数,格式化输入函数scanf()的功能是按用户指定的格式从键盘把数据输入到指定的变量中。其一般形式为:,scanf(“格式控制字符串”, 地址表列);,其中,格式控制字符串的作用与printf()函数相同,但不能显
12、示非格式字符串。地址表列中给出各变量的地址,地址由地址运算符“&”后跟变量名组成。例如:,&a, &b,格式控制字符串的描述形式如下:%l,【案例1.5】按用户输入的商品原价和折扣率,计算商品的实际售价。,【程序详解】 /*Example15.c 计算打折后的价格*/ #include main() float price,discount,fee; /定义变量printf(“Input Price,Discount:“); /提示信息scanf(“%f%f“, /输出打折后的价格,保留两位小数 ,(1)scanf()函数中没有精度控制,如:scanf(“%5.2f“, ,若想让a=12,b=
13、13,则应输入的内容为:a=12,b=13 (4)连续输入多个数值数据时在格式字符串中没有指定分隔符,则可以用空格、回车、跳格作为分隔符。,经验交流,1.3.3字符输入输出函数,在C语言中还提供了一类专用于字符输入和输出的函数,这里主要介绍字符输入getchar()函数和字符输出putchar()函数。,1. putchar()函数 putchar()函数是字符输出函数,其功能是向输出设备(显示器、打印机等)输出单个字符。 其函数原型为: int putchar(int ch),2. getchar()函数 getchar()函数是字符输入函数,其功能是从键盘上输入一个字符。 其一般形式为:
14、int getchar();,【案例1.6】分析以下程序,当键盘输入“Picture”时,输出结果是什么?/*Example16.c 测试字符输入输出函数*/#includemain()char c;printf(“Please input : “);c=getchar();putchar(c);putchar(n); ,1.4 运算符和表达式,C语言中的运算符包括算术运算符、赋值运算符、关系运算符、逻辑运算符、逗号运算符和位运算符等,由运算符将运算对象(操作数)连接起来的式子称为表达式。,1.4.1算术运算符与算术表达式,常用的算术运算符及其功能如表1-7所示。“+”和“-”运算符具有右结合
15、性,有以下几种形式:,(1)+i i自增1后再参与其它运算 (2)- -i i自减1后再参与其它运算 (3)i+ i参与运算后,i的值再自增1 (4)i- - i参与运算后,i的值再自减1,表1-7运算符及其功能描述,【案例1.7】将一个三位正整数的百位、十位、个位数字按逆序输出。,/*Example17.c 三位数逆序输出*/ #include main( ) int bai,shi,ge,a; printf(“Please input an integer:“); scanf(“%3d“, / 输出结果 ,【程序详解】,【归纳总结】,在书写算术表达式时,应该遵循下列规则:(1) 所有内容都
16、必须写在一行上,例如, 必须写成2/3。(2) 在表达式中只允许使用圆括号。为了确保表达式中的每个运算符能按预期的顺序进行计算,应当适当地添加括号。(3) 表达式中的乘号(*)不允许省略,例如,(x-1)(x+1)必须写成(x-1)*(x+1),2x必须写成2*x。,经验交流,1.4.2赋值运算符与赋值表达式,C语言中将符号“=”称为赋值运算符,其左边是变量,右边是常量或表达式,简单赋值表达式一般形式为:变量名=表达式2. 复合赋值表达式一般形式为:变量名 二目运算符=表达式其等价于变量=变量 二目运算符 表达式,【例1.9】写出以下程序的运行结果,/*Example19.c 测试复合赋值表达
17、式 */ #include main() a, n=5; /定义变量a和n,并对int赋初值5a=14; a+=a; printf(“after a+=a: %dn”,a); /以下计算复合赋值表达式,并输出a=14; a-=2; printf(“after a-=2: %dn“,a);a=14; a*=2+3; printf(“after a*=2+3: %dn“,a);a=14; a/=a+a; printf(“after a/=a+a: %dn“,a);a=14; a%=(n%=2); printf(“after a%=(n%=2): %dn“,a);a=14; a*=a-=a*=a;
18、printf(“after a*=a-=a*=a: %dn“,a); ,1.4.3逗号运算符与逗号表达式,C语言中的符号“,”是一个特殊的符号,既可作为分隔符,也可作为逗号运算符。作为分隔符常用在变量的定义和函数的参数中;作为逗号运算符时,可以构成逗号表达式。逗号表达式的一般形式为: 表达式1,表达式2,表达式n,【例1.10】写出以下程序的运行结果。,/*Example110.c 测试逗号表达式*/ #include main() int x,y;y=(x=4*9,x*4); /逗号表达式printf(“x=%dn“,x);printf(“y=%dn“,y); ,1.4.4简单的位运算与位表
19、达式,位运算主要是针对整型和字符型数据而言,不适用于浮点型等其它数据类型。参加运算的两个数据,对其二进制值按位进行运算。C语言中的简单位运算符如表1-8所示。,表1-8 简单的位运算符及其含义,位运算的操作数只有两个:0或1,位运算规则如表1-9所示。表1-9 位运算规则,【案例1.11】将短整型数289高8位清0,低8位保持原样。,【问题分析】 根据题意,只要将变量(289)10=(0000000100100001)2和(0000000011111111) 2 即(127) 10进行“与”运算,即可将a的高8位清0,低8位保留。0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1&
20、 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1,/*Example111.c 按位“与“运算*/ #include main( ) short int a=289; /初始化短整型变量 a=a /输出 ,【程序详解】,1.4.5运算符的优先级,在复杂表达式中先计算优先级高的运算符组成的表达式,除非用圆括号改变它们的顺序。运算符的优先级与运算的结合方向P19页如表1-10所示,各运算符的优先顺序按序号由高到低。,1.5类型转换,在C语言中,当不同类型的数据进行混合运算时,应当首先将其转换成相同的数据类型,然后进行运
21、算。数据类型转换分为隐式类型转换和显式类型转换两种。,1.5.1隐式类型转换,【案例1.12】写出以下程序的运行结果。,/*Example112.c */ #include main( ) float f=6.8, t;int a=2,b;t=a+f;b=a+f;printf(“a+f=%fn“,t);printf(“a+f=%dn“,b); ,【问题分析】,上述程序中,a+f的值是float型,赋给变量t(float)输出;赋给变量b(int)时,要进行隐式数据类型转换,将float型自动变为int型。,【归纳总结】,隐式数据类型转换, 在长数据类型值赋给短数据类型变量时,会进行数据截断,导
22、致数据丢失; 在短数据类型值赋给长数据类型变量时,一般将短类型数据转换为长类型,遵循的转换规则如图1-17所示。,图1-17 隐式数据类型转换规则,1.5.2显式类型转换,显式类型转换又叫强制类型转换,利用这种转换方式直接可以将数据转换成指定的数据类型。一般形式为:()(),【案例1.13】写出以下程序的运行结果。,/*Example113.c 比较显式和隐式类型转换*/ # include “stdio.h“ main() int a=5;printf(“%dn“,a/2); printf(“%fn“,(double)(a/2); printf(“%fn“,(double)a/2); ,【问
23、题分析】,上述程序中,在第一个printf语句中,未进行数据转换,按原类型输出;在第二个printf语句中,(a/2)进行整除运算得到整型值2,显式转换为双精度类型后输出;在第三个printf语句中由于()运算符的优先级最高,先将a强制转换为双精度类型,最后除以2按双精度类型输出。,【归纳总结】,C语言中的类型转换都是为运算而进行,因此,无论隐式类型转换和显式类型转换,其作用范围只局限于本次转换,而不会影响原数据的类型。,本章作业,1、书p3页习题 一、二、三做在书上 2、以下两题请在网络学堂交作业 书P26页的第四题编程题 分析以下程序,写出运行结果,最后运行。实验教程P11-13页中的例1.4、 例1.5、 例1.6、 例1.7、 例1.8(提交作业时只需要交.c文件) 备注:请将以上所有源程序代码(即*.c)打包压缩为一个文件,文件名为姓名学号(张亮20103787989),