4.15k likes | 4.32k Views
计算机技术基础. C 语言程序设计. 第一章 简单的 C 语言程序设计 第二章 数据类型、运算符与表达式 第三章 算法与程序设计基础 第四章 函数 第五章 指针和数组 第六章 结构体和共同体 第七章 文件. 目 录. 第一章 C 语言概述. §1.1 C 语言的概况 §1.2 几个简单的 C 程序 §1.3 C 语言的特点 §1.4 上机步骤. §1.1 C 语言的概况. 一、发展简史 : ALGOL ( 1960 )(离硬件较远) CPL ( 1963 )(剑桥大学) B CPL ( 1967 )(剑桥大学)
E N D
计算机技术基础 C语言程序设计
第一章 简单的C语言程序设计 第二章 数据类型、运算符与表达式 第三章 算法与程序设计基础 第四章 函数 第五章 指针和数组 第六章 结构体和共同体 第七章 文件 目 录
第一章 C语言概述 §1.1 C语言的概况 §1.2 几个简单的C程序 §1.3 C语言的特点 §1.4 上机步骤
§1.1 C语言的概况 一、发展简史: ALGOL(1960)(离硬件较远) CPL(1963)(剑桥大学) BCPL(1967)(剑桥大学) B(1970)(贝尔实验室、很接近硬件、但功能有限) C(1972)(贝尔实验室、用C语言写UNIX操作系统) 二、C简介: 1.C语言是一种计算机高级语言。 2.C语言具有一般高级语言的特性,又具有低级语言的特性, 集两者的优点于一身。 3.C语言既可用来编写系统软件,也可编写应用软件。
一、C程序的结构: §1.2 几个简单的C程序 1、C程序是一个或几个函数的集合,其中一个函数必须是主函数main( ),它代表程序开始执行的起始位置。 函数是C程序的基本单位。 C程序中有三种类型的函数: 1).main( ) :主函数,每一个C程序必须有且只有一个 main()函数。 2).库函数:开发系统提供的特殊函数,如scanf( )、 printf( )等。 Turbo C开发系统提供三百多个函数。 3).自定义函数:程序员自己设计的函数,如max()。
2、无论main()函数位置如何,一个C程序总是从main()2、无论main()函数位置如何,一个C程序总是从main() 函数开始执行。 3、一个函数由两部分构成: (1)函数首部:即函数第一行包括:函数类型(返回值类 型)、函数名、参数名、参数类型。 注:函数名后必须跟一对圆括弧。 (2)函 数 体:大括号{ }中的部分。 包含 声明部分:定义变量或声明所调函数 执行部分:由若干语句组成 4、C程序书写格式自由,一个语句可以占多行,一行也可以有多个语句。
5、语句和数据定义后必须要有分号。 例、c = a + b ; 6、C语言用库函数进行输入输出。 如scanf()、printf()。 7、C语言用/* */作注释。
[例1.1] main( ) { printf(“Hello,world!\n”); } 该程序的功能:在屏幕上输出一行信息: Hello,world! 1、main( ) 表示“主函数”,每一个C程序都必须有且只 有一个主函数。 2、main函数体由大括号{ }括起来。 3、语句后面有一个分号。 4、printf( )是C语言的输出函数。双引号内的字符 被原样输出。 5、“\n”是换行符。
[例1.2]求123与456相加之和。 main( ) { int a, b, sum;/*定义三个整型变量。*/ a = 123;b = 456;/*把常数123赋给变量a。把常数456赋给变量b*/ sum = a + b;/*计算a、b之和,并把和值赋变量给sum*/ printf(“Sum is%d\n”, sum);/*输出sum的值*/ } 程序的输出信息为:Sum is 579 /* */中间的内容表示“注释”。注释是程序员对程序某部分的功能和作用所做的说明,是给人看的,对编译和运行不起作用。 %d表示整型格式,在输出时,该位置用对应变量sum的值代替。
[例1.3]求任意两数之和。 main( ) { int a, b, sum;/*定义三个整型变量。(int = integer)*/ scanf(“%d,%d”,&a,&b);/*从键盘随机输入两个数分别赋给变 量a和b*/ sum = a + b;/*计算a、b之和,并把和值赋变量给sum*/ printf(“a+b=%d\n”, sum);/*输出sum的值*/ } 从键盘输入:70,90 程序的输出信息为:a+b= 160
[例1.4]用调用用户自定义函数的方法求任意两数之和。[例1.4]用调用用户自定义函数的方法求任意两数之和。 main( ) { int a, b, s; printf(“请输入两个整数a,b:”); scanf(“%d,%d”,&a,&b); s = sum(a , b); printf(“a+b=%d\n”, sum); } int sum(int x,int y) { int z; z=x+y; return z; } 1.请输入两个整数a,b: 2.请输入两个整数a,b:70,90 70,90 a+b= 160 a+b= 160
二、C语言常用符号: 1、关键字(34个):有特定含义,不能被作它用, 必须用小写字母。 2、标识符:有效字符序列 C语言规定:字母、数字、下划线三种字符组成且 第一个字符只能是字母或下划线 注: (1)实质:就是一个名字(常量、变量、数组、 函数、文件)。 (2)区分大、小写。 (3)遵循“见名知意”原则。 (4)对变量“先定义、后使用”原则。
§1.3 C语言的特点 一、C的特点: 1、语言简洁,使用方便、灵活。 2、运算符丰富。 3、数据结构丰富。 4、结构化程序设计理想,符合现代编程风格。 5、语法限制不严格,程序设计自由度大. 6、C语言允许直接“访问”硬件物理地址,能进行 位操作,实现汇编语言的大部分功能。 (因此,C语言常被称为“中级语言”。)
7、目标代码效率高,仅比汇编程序生成的目标代码执7、目标代码效率高,仅比汇编程序生成的目标代码执 行效率低10~20%。 8、可移植性好。基本不作修改就可以在不同型号计算 机、不同操作系统上执行。 C 通用 BASIC 初学者易入门 PASCAL 教学语言 FORTRAN 科学计算 COBOL 商业管理数据处理
二、C的优点 1)、高效 2)、可移植 3)、灵活 4)、有能力 例如:大部分实用的、便于移植的UNIX操作系统用c语言写的,在UNIX系统中,c语言之外的其它语言,如FORTRON、APL、PASCAL、LISP、LOGO、BASIC的编译程序或解释程序用C写成的。 C将成为当今最重要的语言之一。
§1.4 Turbo C 程序设计环境的上机步骤 计算机只能识别和执行由0和1组成的二进制的指令,而不能识别用高级语言编的程序指令。为了使计算机能执行高级语言程序,必须先用一种软件(编译程序)把高级语言程序翻译成二进制的指令(目标程序),才能被计算机识别和执行。
一、上机步骤 1、启动Turbo C: 在桌面上找到TC的快捷方式,双击tc↙ 2、编辑源程序。C源程序的文件扩展名必须是.C。(上机输入源程序) 。 3、编译、连接、运行:Ctrl+F9若源程序无语法错误,生成可执行文件EXE;若源程序有语法错误,在Message窗口显示错误信息,此时没有生成可执行文件,应回到第2步,修改程序的错误,直到无语法错误、生成可执行文件。 5、观看运行结果: Alt+F5 。 5、退出Turbo C,按Alt+X。
二、Turbo C集成环境介绍 1、启动Turbo C 后,界面: 2、File菜单(文件操作) 3、Run菜单(各种程序运行方式) 4、Compile菜单(编译、连接) 5、Project菜单(工程管理) 6、Option菜单(开发环境定制) 7、Debug菜单(调试) 8、Break/Watch菜单(断点管理)
建 议 不要只读程序,要试者通过上机练习来学习C语言! 编制程序时最好用自己的方法。不要照搬书上的。 如果你肯积极地上机练习,你一定会更快更深地掌握c语言!
C的数据类型概要: 数据类型是任何 语言的基础 在C语言中,程序中的每一个数据都有一个确定的类型。
基本数据类型定义关键字: 整 型: int 字 符 型: char 单精度浮点型: float 双精度浮点型: double 基本数据类型修饰符: signed [有符号的,系统默认,可缺省] unsigned (无符号的) long (长的) short (短的)
§2.3常量(Constant) 定义: 在程序运行过程中,其值不能被改变的量。 分类: 类型上 整型常量 实型常量 字符型常量 形式上 字面常量或直接常量 符号常量(用一个标识符代表一个常量)
2.3.1 整型常量 一、三种表示形式: 1、十进制整数 例:123 十进制: 表示十进制数123 2、八进制整数(以0开头) 例:0123: 八进制数 ,表示十进制数83 3、十六进制整数(0x开头) 例:0x123:十六进制数, 表示十进制数291
二、整型常量的分类: 1、基本型 ( int或 short (short int) ) 一般占2个字节, 范围: -32768 ~ +32767之间。 2、长整型 ( long或long int) 占4个字节, 范围:-217483648 ~ +217486647之间, 以字母l或L结尾,如:123456789L。 3、无符号型 ( unsigned int或unsigned long) 无符号基本型:范围:0 ~65535以u或U结尾 无符号长整型:范围:0~ 4294967295 以字母ul或UL结尾。如:123456789UL
1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 三、整型数据在内存中的存放形式: 整型数据在内存中是以补码形式存放的。 int i; i=-5; 十进制数-5的二进制形式为101,在C编译系统下,每一个整型变量在内存中占2个字节。 [-5]原码 [-5]反码 [-5]补码
2.3.2 实型常量 实数(real)又称为浮点数(float), 一、两种表示方法: 1、十进制小数形式(必须有小数点) 0.123 122.0 .123 122. 0.0 2、指数形式(必须e前有数、e后为整) 123e3或123E3都代表:123103 指数形式有多种形式,但一般按规范化的指数形式输出 (1.23 105) 动动脑吧 3e2.5 E3 E 2
二、实数常量的分类: 1、单精度实型数(float): 32位 有效数字在6~7位,数值范围在:10-37~ 1038 2、双精度实型数(double float) 64位 有效数字在15~16位,数值范围在:10-307~ 10308 C语言中:实型常量默认为double型 若要表示单精度实型数,则要在其后加f或F以示区别。 如:12.5678 双精度实数 12.5678f 单精度实数
数符(1位) 纯小数部分(23位) 指数部分(8位) 三、实型数据在内存中的存放形式 实型数据在内存中是以指数形式存放的。 在C编译系统下,每一个实型变量在内存中占4个字节 (32位)。
2.3.3 字符常量 1.定义:用单引号(撇号)括起来的一个字符(注意只能是单个字符)。 2.转义字符:以“\”开头的字符序列(特殊形式的字符常量) 3.字符在内存中以ASCII码形式存放。 如:‘a’、‘A’、 ‘0’、 ‘8’、‘?’、‘$’。(查ASCII表) 注意:(1)C语言区分大小写 所以‘a’和‘A’是不同的字符常量。 ‘a’ : ASCII码:97 ‘A’ : ASCII码:65 ASCII码由小到大:数字<大写字母<小写字母 (2)字符常量能和整数一样参与数值运算。 (如书P30例2.5)
2.3.4 字符串常量 1.字 符常量:单引号括起来的一个字符如‘a’。 2.字符串常量:双引号括起来的字符序列如“a”或“ac”. 3.在内存中的存放:每一个字符均以其ASCII码存放,且最后自动添加一个“空字符\0”. 4.C规定:在每一个字符串的结尾自动加一个“字符串结束标志”‘\0’,以便系统据此判断字符串是否结束。 例:“CHINA ”“How do you do? ” “CHINA ”在内存中的存放情况是: 想一想:‘a’与“a”有何区别? C H I N A \0
2.3.5 符号常量 1.定义时用#define 2.一般符号常量大写,变量名小写 3.值在其作用域内不能改变也不能再赋值 4.优点: (1)含义清楚 (2)一改全改 [例2.1]#define PI 3.14 #define R 5 main() { float circle, area; circle = 2*PI*R; area = PI*R*R; printf(“周长 = %f,面积=%f”, circle,area); }
§2.4 变量(Variable) 1.定义: 其值可以被改变的量。 2.表示:用标识符表示,遵循标识符命名规则。 3.定义变量的格式:类型名 变量名 注意:(1)“先定义,后使用” 目的: ①凡未被定义,就不能用作变量名,保证正确性; ②每一变量指定为确定类型,编译时可为其分配 相应的存储单元; ③便于在编译时,根据变量类型来检查运算是否合法。 (2)区分大小写 (3)建议变量长度:不超过8个字符。 4.区分:变量名:实质是一个符号地址,编译连接时给其分配一 个内存地址。 变量值:变量名所对应的存储单元中存放的值、数据。
变量值 变量名(符号地址) total 2000 2001 80 2002 2003 存储单元号(物理地址) 5 2004 2005 2006 2007 变量在内存中占据一定的存储单元 (具体长度视数据类型而定)。 (1)int total; (2) float a=5; total=80;
下列哪些是合法变量名? 1. sum 2. 8average 2. student_name 4. _above 5. lx1_1_2 ×
2.4.1 整型变量 一、整型变量的分类(IBM PC) 基本型(整型)int2字节 短整型 short 或 short int2字节 长整型 long 或 long int4字节 无符号整型: unsigned 2字节 无符号短整型:unsigned short 2字节 无符号长整型:unsigned long 4字节 说明: C语言标准没有规定整型变量在计算机内存中所 占的字节数,它与具体的机器和操作系统有关,但一般 是2字节。
二、整型变量的定义 [例2.2] main() { int a,b,c,d; unsigned int u; a = 12; b = -24; u = 10; c = a+u; d = b+u; printf("a+u = %d, b+u = %d\n", c, d); } 程序运行结果:a+u = 22, b+u = -14
说明:整型数据的“溢出” int范围为-32768~32767。 unsignde int范围为0~65535。 超出后发生“溢出”,但运行时不报错。 [例2.3]即教材P34例2.9 main() { int a,b; unsigned i,j; a = 32767; b = a+1; i = 65535; j = i+1; printf(" %d,%d, %u , %u ", a, b,i, j); } 程序运行结果:32767,-32768,65535,0
-1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 [例2.4]即教材P34例2.7 main() { int a=1; int b=-1; unsigned c,d; c=a ; d=b; printf(" %d,%d, %d, %u , %d, %u ", a, b, c, c, d, d); } 程序运行结果:1,-1, 1, 1, -1, 65535
2.4.2 实型变量 一、实型变量的分类 单精度:float 4字节(32位) 双精度:double 8字节(64位) 二、实型变量的定义 例1:float x,y; double z; 例2:float a; a=123456.791; 注: float型变量只能接受7位有效数字,最后两 位数字不起作用。 double 型变量能接受16位有效数字。
说明:实型数据的舍入误差 由于存储单元有限,因此有效数字有限。 float型有效数字7位,后面数字无意义,不准确表示该数。 [例2.5]main( ) { float a,b; a = 1234567.11e2; b = a + 20; printf(“a=%f\nb=%f\n”,a,b);} 程序运行结果: a=123456712.000000 b=123456736.000000
2.4.3 字符型变量 1.定义:用来存放一个字符常量的变量. 2.在内存中占一字节宽度,以ASCII码形式存放。 注:(1)字符变量≠字符串常量 (2)无专门的字符串变量 若保存字符串,必须使用字符数组。 例: char c1= ‘a’,c2; 等效 c2 = ‘b’; √ c2=“abcd”;× char c1,c2; c1= ‘a’ ; c2 = ‘b’;
说明:字符型与整型可通用、互相赋值 原因:字符以ASCII码存储,其存储方式与整数类 似。从而,C语言允许字符和整数之间进行运算。 [例2.6] main() { char c=97; int i= 'a' ; printf("%c,%d\n",c,c); printf("%c,%d\n",i,i); } 输出: a,97 a,97 c i a 97
补充说明 一、变量赋初值 含义:在定义变量的同时指定其初值。 例:int a = 3; float f = 2.56; char c = 'a'; int a, b, c = 5; 注意:多个变量指定相同的初值。 int a = b = c = 3 ;× int a = 3, b = 3, c = 3;√ int a; a=3; int a,b,c; c=5;
二、各类数据混合运算 1.整型、实型(包括单、双精度)、字符型数据可以混合运算。例: 10 + 'a' + 1.5 - 8765.1234 * 'b' 2.混合运算时,先转换成同一种类型,然后进行运算。 转换规则: 横向为自右向左强制转 换, 纵向从低到高可多 次或一次转换成功。 高 double float long unsigned 低 int char,short
例: int i; float f; double d; long e; 10 + 'a' + i*f - d/e 高 double float long unsigned 低 int char,short 上述转换过程是由系统自动进行的。
§2.5 常用运算符与表达式 2.5.1 算术运算符与算术表达式 算 术 运 算 符 + - * / %模运算符(求余)++ -- 表 达 式 一般形式 算术运算符和括号将运算对象连接起来 表达式值 算术运算结果 举 例 ①’a’-1.5+a*b/c ②i++ ③++i 优 先 级 ++ -- * / % + - 结 合 性 左→右 右→左 ++ --
说明:算述运算中 • / 两整数相处结果为整数 • 例:5/3=1 -5/3=-1 (向零取整) • 2. % 两侧必须为整型数据 • 例: 5%3=2 -5%3= -2 (余数符号与被除数相同) • 3.因为所有实数都按double型运算, • 所以+ - * / 两侧只要有一个为实数, • 则结果为double型