C语言笔记Word下载.doc
《C语言笔记Word下载.doc》由会员分享,可在线阅读,更多相关《C语言笔记Word下载.doc(14页珍藏版)》请在冰点文库上搜索。
数据结构,对操作的描述:
算法
完整的程序设计应该包括四部分:
程序设计=数据结构+算法+方法+工具
数据元素:
数据的最小单位数据结构:
数据元素的组织形式
一个正确的程序通常包含两方面的含义:
一是书写正确,二是结果正确。
书写正确是指程序语法正确,符合程序语言的规则;
结果正确是指对应于正确的输入,程序能够得到所期望的输出。
1.顺序结构程序按照语句的书写次序顺序执行。
2.选择结构通过判断特定条件,选择一个分支执行。
3.循环结构在给定条件下,反复执行循环体,直到条件不满足为止.
算法的概念:
算法:
完成一项任务的具体步骤计算机语言的别名:
算法语言
一个算法,就是一个有穷规则的集合,其中之规则规定了一个解决某一特定类型的问题的运算序列。
”任何解决问题的过程都是由一定的步骤组成的,把解决问题确定的方法和有限的步骤称作为算法。
算法的常用表示方法:
自然语言传统流程图结构化流程图
自然语言特点:
描述算法通俗易懂,容易产生歧义。
对复杂问题,语句繁琐、冗长,并且很难清楚地表达算法的逻辑流程,往往需要根据上下文判别其含义,尤其对描述含有选择、循环结构的算法,不太方便和直观,一般不常使用。
传统流程图缺点:
使用者可以毫不受限制地使流程随意地转向,使流程图变得毫无规律,难以阅读、修改,使算法的可靠性和可维护性难以保证。
解决办法:
必须限制箭头的滥用,即不允许无规律地使流程随意转向,只能顺序的进行下去。
N—S流程图
由美国学者I.Nassi和B.Shneiderman提出表示算法的图形工具。
基本单元是矩形框,用不同的形状线分割,表示三种结构。
只有一个入口,一个出口,没有流程线。
N--S图的优点
比文字描述直观、形象、易于理解;
比传统流程图紧凑易画。
尤其是它废除了流程线,整个算法结构是由各个基本结构按顺序组成的,N--S流程图中的上下顺序就是执行时的顺序。
三种基本程序结构的N–S流程图1.顺序结构2.选择结构3.循环结构
几种常用算法介绍
1.枚举法(穷举法)特点:
算法简单,容易理解,运算量大。
2.递推法(迭代法)
3.求最大值、最小值问题
结构化程序设计方法
结构化程序设计方法是公认的面向过程编程应遵循的基本方法和原则。
结构化程序设计方法主要包括:
①只采用三种基本的程序控制结构来编制程序,从而使程序具有良好的结构;
②程序设计自顶而下;
③用结构化程序设计流程图表示算法。
数据类型、运算符与表达式
C语言的基本符号
C语言的基本字符集
数字:
0123456789
字母:
abc……zABC……Z
运算符:
+-*/%=<
>
<
=>
=!
=
==<
<
>
&
|&
&
||^~()
[]{}->
.!
?
:
;
“‘
特殊符号:
_(下划线)回车(\r)换行(\n)制表符(\t)
基本标识符:
变量名、函数名、文件名、数组名、类型名
规则:
字母或下划线开头,后面是字母、下划线或数字
C语言的关键字:
保留字(32个)auto breakcasecharconst
continuedefaultdodoubleelseenumexternfloatforgotoif int longregisterreturnshort signedsizeostaticstructswitchtypedefunionunsignedvoidvolatilewhile
在程序运行中,其值保持不变的量称为常量。
常量的表示方法:
数值常量例如:
10,3,2.68等
符号常量用一个符号代表一个常量
变量:
变量通过变量名标识,变量名和内存中的存储单元相对应。
编写程序时通过变量名来存、取存储单元。
变量必须先定义,后使用。
命名规则:
变量名由标识符表示,只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。
说明:
*变量要“先定义,后使用”
定义格式:
类型说明符标识符1,…,标识符n
例如:
intx,y,z;
floata,b,c,d;
*选变量名时,要做到“见名知义”
例如:
name,st_age,xm,nl,class,sum
许多程序设计语言都把它们能处理的数据分成若干类,这些类就是数据类型。
为什么要划分数据类型?
①不同类型的数据在计算机内表示不同;
②不同类型的数据能执行的运算不同;
③计算机能处理的问题中的数据是广义的。
变量名代表内存中的存储单元,变量的类型决定存储单元的大小。
C语言数据类型:
整型
字符型精度型
算术类型实型(浮点型)
基本类型枚举类型双精度型
指针类型
数据类型
数组
构造类型结构体类型
共用体类型
整型:
基本整型int短整型shortint长整型longint
无符号整型unsignedint无符号短整型unsignedshort无符号长整型unsignedlong
实型:
实型变量分类:
单精度、双精度和长双精度型。
实型数据在内存中的存放形式:
实型数据也称为浮点数,是指小数点位置可以任意浮动的数。
科学记数法表示:
十进制数-12345678可表示为:
-12345678=-1.2345678Í
107
计算机中采用以2为底的科学记数法存储:
N=数符Í
尾数Í
2阶码
(其中:
数符0为正,1为负,尾数和阶码都用二进数表示)
二进制数可表示为:
110.011(B)=1.10011×
2+10
尾数的位数决定数的精度,阶码的位数决定数的范围
由于机器存储位数的限制,浮点数都是近似值,多个浮点数运算会产生误差。
双精度型用于扩大存储位数,目的是增加实数的长度,减少累积误差,改善计算精度。
将实数分成两类:
浮点数(Float)和双精度数(Double)。
浮点数用32位表示:
数符1位,阶码8位,尾数23位
双精度数用64位表示:
数符1位,阶码11位,尾数52位为了处理负指数的情况
单精度浮点数机内存储格式(占4个字节,32位)
单精度实数的精度取决于小数部分的23位二进制数位所能表达的数值位数,将其转换为十进制,最多可表示7位十进制数字,所以单精度实数的有效位是7位。
实型常量(实型常数不区分单精度和双精度)
两种表示形式:
十进制数形式:
由数字和小数点及正负号组成。
(注意:
必须有小数点)例如:
23.678.67823.
指数形式:
由数字、小数点、字母e或E及正负号组成。
(注:
e或E之前必须有数字,且后指数必须为整数)例如:
3.5E-52e3
1.字符常量
用单引号括起来的一个字符(只能包含一个字符)
例如:
‘a’‘A’‘$’‘!
’‘abc’、“a”注:
‘a’与‘A’是不同的字符常量。
转义字符:
转义字符的概念:
是一种特殊的字符常量,用于表示常用的、但却难以用一般形式表示的不可显示字符。
转义字符的表示:
用一个转义标识符“\”开头,后面是需要的转义字符。
常用的转义字符序列的字符常量见下表:
转义字符功能
\n换行
\v垂直制表
\b退格
\r回车
\f走纸换页
\t跳到下一个制表位(8列)
\\反斜线字符
\'
单引号字符
\“双引号字符
\ddd1至3位八进制数表示的字符
\xdd1至2位十六进制数表示的字符
2.字符变量
定义形式:
char占存储空间:
一个变量一个字节
3.字符串常量
字符串常量是用双引号括起来的一个或多个字符。
例:
"a"串长1
"ThisisCstring"串长16""(空格)长1""(不含空格)串长0
字符串常量中的字符依次存储在内存中的一块连续区域,末尾自动添加\0作为字符串的结束标志。
n个字符组成的字符串常量,占内存空间为n+1个字节。
字符常量和字符串常量的区别:
在程序中,可以用字符常量或字符串常量表示单个字符,例如‘a’,或“a”,两者的区别如下:
(1)字符串"
a"
在内存中占2个字节,而字符'
a'
在内存中占1个字节。
字符串"
字符'
(2)不能将字符串赋给一个字符变量。
charch1,ch2;
ch1='
;
/*正确*/h2="
/*错误*/
3.3运算符和表达式
描述各种操作的符号。
3.3.1算术运算符和算术表达式
1.算术运算符
+ -* / %
2.算术表达式:
由算术运算符、常数、变量、函数和圆括号组成。
应注意:
左右括号必须配对,多层括号都用圆括号表示。
例如:
‘a’+‘b’+a*b/c+2.8
3.优先级:
* / % 高于 + -
4.结合性:
“左结合性”或称为“自左至右的结合方向”即运算对象先与左边的运算符结合。
例如:
a-b+c
注意:
/是除法运算符。
当两个整数相除时为整除。
9/2=4;
-9/2=-4;
(若有一个是负数,采取向零取整)
%是取余数运算符,只能作用于两个整数。
运算结果的符号与被除数的符号一致。
9%2=1;
-9%2=-1;
9%-2=1;
平方根函数:
sqrt(x),计算sqrt(4.0)的值为2.0
绝对值函数:
fabs(x)
幂函数:
pow(x.n),计算xn
指数函数:
exp(x),计算ex
以e为底的对数函数log(x),计算lnx
调用数学函数时,要求在源文件中包含头文件math.h.
3.3.2赋值运算符和赋值表达式
1.一般赋值运算符:
=
赋值表达式:
由赋值运算符将一个变量和一个表达式
连接起来的式子。
形式:
变量名=常量或表达式
功能:
将右边常量或表达式的值赋给左边的变量。
a=3;
b=c+d;
①赋值后,原来左边的值被右边表达式的值替换;
②如果右边表达式的值的类型与左边变量的类型不一致,以左边变量的类型为准,将表达式值的类型转换为左边变量的类型。
③结合方向“从右向左”。
例:
x=y=a+b;
2.变量的初始化
3.复合赋值运算符
复合赋值运算符:
在赋值符“=”之前加上其它运算符
共有10种复合赋值运算符:
+=,-=,*=,/=,%=(算术运算有关)
=,>
=,&
=,^=,|=(与位运算有关)
3.3.3逗号运算符和逗号表达式
1.逗号运算符:
即“,”优先级:
所有运算符中级别最低的运算符。
2.逗号表达式:
表达式1,表达式2,……,表达式n
求解过程:
顺次求解表达式1,表达式2……最后求解表达式n。
表达式值:
逗号表达式的值为表达式n的值。
结合性:
左结合
a=3*5,a*4a=3*5,a*4,a+5x=(a=4%3,a+1,a*10)
(1)优先级
当若干个运算符同时出现在表达式中时,优先级规定了运算的先后次序。
优先级有15级。
C语言把圆括号作为运算符,规定它的优先级最高(15级),从而保证优先运算圆括号内的式子,逗号运算符的级别最低,规定为1级。
(2)结合性
当若干个具有相同优先级的运算符相邻出现在表达式中时,结合性规定了运算的先后次序。
分为“从左到右”和“从右到左”两个结合方向。
大多数运算符的结合方向为“从左到右”;
单目运算符、赋值运算符和条件运算符的结合方向“从右到左”(单目运算符是指作用于一个操作对象的运算符)。
(3)双目运算符两边运算对象的类型必须一致。
3.4数据类型转换
转换原则整型、实型和字符型可以混合运算,一般类型数据先转换为标准型,不同类型的要先转换为相同类型
形式自动进行-------隐式转换强制进行-------显式转换
3.4.1不同数据类型的数据间的混合运算
(1)float型数据一律转换成double型数据。
(2)char和shortint型数据一律转换成int型数据
以上两条转换原则说明:
即使两个操作数类型相同,但只要它们同属char,shortint或float类型,则转换一定发生。
3.4.2强制类型转换
将指定表达式的值转换为指定类型.
形式:
(类型名)(表达式)
例如:
(double)(a+b)
(1)表达式应用括号括起
例如:
(int)(x+y);
(int)x+y;
(2)在强制类型转换时,得到一个所需类型的中间变量,原来变量类型未发生变化。
floatx=8.6;
inty;
y=(int)x;
3.5自增、自减运算符 (++、--)
作用:
使变量的值增加1或减1,如:
++i,--i(使用之前,先使i的值加(减)1)
i++,i--(使用之后,使i的值加(减)1)
++i 先执行i=i+1,再使用i的值
i++ 先使用i的值,再执行i=i+1
inta=1,b;
b=++a;
b=a++;
(1)++、--为单目运算符
(2)++、--只能用于变量,而不能用于常量或表达式。
(3)自增、自减运算符为右结合性(即自右至左)。
(4)单独作一个语句使用时,两种形式的结果一样。
(5)当出现在其它表达式中时,两种形式结果不同。
3.6位运算
位运算是针对二进制数的运算,通常只适用于整数数据。
C语言中提供的位运算符有:
~、<
、>
、&
、^、︱
1.按位取反运算符~
~A
把A的各位都取反,(即0变1,1变0)
2.按位与运算符&
A&
B
对A的各位与B的对应位进行比较,如果两者都为1,
A&
B对应位上的值为1,否则为0。
intA=179(二进制10110011)
intB=169(二进制10101001)
3.按位或运算符|
A|B
对A的各位与B的对应位进行比较,如果两者中有一个
为1,A|B对应位上的值为1,否则为0。
4.按位异或运算符^
A^B
对A的各位与B的对应位进行比较,如果两者不同,
A^B对应位上的值为1,否则为0。
5.左移运算符<
A<
n(其中n为一个大于0的整型表达式)
把A的值向左移动n位,右边空出的n位用0填补。
当左移时移走的高位中全都是0时,相当于对A作n次乘
以2的运算。
intA=27(二进制00011011)
6.右移运算符>
A>
n(其中n为一个大于0的整型表达式)
把A的值向右移动n位,左边空出的n位用0填补。
相当于对A作n次除以2的运算。
数据的输入和输出
数据输入输出的概念
输出:
从计算机向显示器、打印机等外部设备输出数据。
输入:
从标准输入设备键盘、鼠标等向计算机输入数据。
C语言不提供输入输出语句,输入输出操作是由C函数库中的函数实现。
调用输入输出函数时,要求在源文件中包含"
stdio.h"
头文件。
如:
#include<
stdio.h>
或#include"
4.1.1格式输出函数
1.函数的基本功能
格式:
printf(格式控制串,输出表列)
功能:
从标准输出设备上,按指定的格式输出对应的变量。
2.函数说明:
(1)格式控制串由双引号括起来,由“%”和格式符以及普通字符(即需要原样输出的字符组成)。
(2)输出表列是需要输出的一些数据,可以是常量、变量或表达式。
(3)输出的参数必须与格式控制符中的格式说明在类型、个数和位置上一一对应。
3.格式说明符
一般格式:
%[-][m][.][n][l]格式符
说明如下:
-当数据的宽度小于显示宽度时,数据左对齐,右方补空格.
m输出数据占m个字符位,不够右对齐,左边填空格。
n输出数据有n位小数
m.n输出数据占m列,n位小数
基本格式控制符:
d:
以十进制带符号形式输出整型数
o:
以八进制无符号形式输出整型数
x:
以十六进制无符号形式输出整型
u:
以十进制无符号形式输出整型数
f:
以小数形式输出单、双精度实型数
e:
以指数形式输出单、双精度实型数
c:
以字符形式输出一个字符
s:
以字符形式输出一个字符串
ld:
以十进制带符号形式输出长整型数
(1)d格式符:
输出十进制整数。
%d--按整型数据的实际长度输出。
%md--m为指定的输出字段的宽度.若数据的位数小于m,则左端补以空格;
若大于m,则按实际位数输出。
%ld--输出长整型数据.
(2)o格式符以八进制数形式输出整数。
将内存单元中的各位的值(0或1)按八进制形式输出,输出的数值不带符号,将符号也作为八进制数的一部分输出。
(3)x格式符,以十六进制数形式输出整数。
(4)u格式符,以十进制形式输出无符号型数据。
(5)c格式符输出一个字符。
(6)s格式符输出一个字符串。
(7)f格式符
以小数形式输出实数(包括单、双精度)。
1)%f,不指定字段宽度,由系统自动指定,使整数部分全部输出,并输出6位小数(输出双精度数据,也是6位,但误差降低)。
2)%m.nf,指定输出的数据共占m列,其中有n位小数.若数据长度小于m,则左端补空格。
(8)e格式以指数形式输出实数。
1)%e不指定输出数据所占的宽度和数字部分小数位数,由系统自动指定给出6位小数,指数部分占5位,其中“e”占一位