C语言入门笔记.docx
《C语言入门笔记.docx》由会员分享,可在线阅读,更多相关《C语言入门笔记.docx(67页珍藏版)》请在冰豆网上搜索。
C语言入门笔记
C语言入门笔记
C语言入门学习笔记
-----GoLonny.------allenboo@gmail.
录目
第1章C语言概论
第2章数据类型与表达式
第3章顺序结构设计
第4章选择与循环结构程序设计
第5章数组
第6章函数与编译预处理第7章指针
第8章结构体与共用体第9章位运算
第10章文件
真的不掉线
吗,,、,,,,,,,,,,,,
第1章
C语言概论
1.1简介
C语言是一门计算机语言。
重点在语言两个字~犹如我们学英语一样~我们要去了解它的规则及表达方法~并且~很多东西就是那个东西~没有为什么~比方~你问~that的意思为什么是那个,答案是~就是那个~没有原因。
C语言是在20世纪70年代问世的。
1978年美国电话电报,AT&T,贝尔实验室正式发表了C语言。
与此同时~B.W.Kernighan和
D.M.Ritchit合著的《TheCProgramming
Language》,强烈推荐,一书~该书并没有定义一个完整的标准C语言~后来由美国国家标准协会,ANSI)在吃基础上制定了一个C语言标准~与1983年发表~通常称之为ANSIC。
C语言的特点:
1.语言简洁、紧凑~使用方便、灵活。
2.运算符丰富。
3.丰富的数据类型。
4.具有结构化的控制语句。
5.语法限制不严格~程序设计自由度大。
6.允许直接访问物理地址。
7.生成目标代码质量高~程序执行效率高。
C语言一般是从上往下看,执行,的~好比你去外婆家~虽然可能中途遇到同学停顿说说话~或者遇到沟垮了过去~再或者绕到去朋友家玩玩~但总体~你还是一直朝外婆的家去的。
C语言分三种结构:
顺序结构、选择结构、循环结构。
例1.编写显示字符串:
Hello,World!
的程序。
main()
{
printf("Hello,World!
\n");
}
本程序的作用是输入一下一行信息:
Hello~World:
其中~
真的不掉线
吗,,、,,,,,,,,,,,,
其中~main是主函数名~每一个C语言程序都必须有一个main函数~其后的括号是函数的标志。
且所有的C程序~都是从main函数开始执行的。
Printf是C语言中的输出函数~双引号内的而字符串原样输出。
\n是换行符~即在输出Hello~World:
后回车换行~语句最后有一个分号。
C语言常见特性:
1.C程序是由函数构成的。
一个C原程序至少包含一个main()函数。
2.书写格式自由~一行内可以写几个语句~一个语句可以分写在多行上。
3.每个语句和数据定义的最后必须有一个分号
4.可以用/*注释*/对C程序中的任何部分作注释。
5.一个C程序总是从main函数开始执行的~而不论main()函数在整个程序中的位臵如何。
1.2算法
算法~就是为解决一个问题而采取的方法和步骤。
著名计算机科学家NikiklausWorth提出了程序定义的著名公式:
程序=数据结构+算法
一个好的算法一般应具有以下特点:
1.有穷性
2.确定性
3.有输入
4.有输出
5.可行性
算法的描述有自然语言、传统流程图、结构
化流程图等。
流程图是用一些图框来表示各种操作的。
C语言字符集、标识符与关键字
真的不掉线
吗,,、,,,,,,,,,,,,C语言基本字符:
字母:
26个小写字
符az与26个大写字母AZ
数字:
0-9共10个字符
空白符:
空格符、制表符、换行符等统称空白符,只在字符常量和字符串常量中起作用~其他地方出现~只起间隔作用
标点和特殊字符~如逗号、分号等。
标识符命名规则:
以字母或下划线开头
C语言区别大小写
C语言中~要求所有用到的标识符“先定义后使用”
关键字:
指C语言中含有特定含义的标识符~由c语言集成环境定义和使用的~用户不能更改~只能使用~用户自己定义的标识符不能与之重名。
auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、int、long、register、short、signed、sizeof、static、struct、switch、typedef、union、unsigned、void、volatile、while。
所谓程序~就是一组计算机能识别和执行的指令
用高级语言编写的程序称为“源程序”,sourceprogram,
为了计算机能执行高级语言程序~必须先用一种称为“编译程序”的软件~把源程序翻译成二进制形式的“目标程序”~然后将该目标程序与系统的函数库和其他目标程序连接起来~形成可执行的目标程序。
真的不掉线
吗,,、,,,,,,,,,,,,
第2章
数据类型与表达式
2.1c语言数据类型
从数据类型的应用角度出发,数据类型的基本含义:
A.数据类型规定了该类型中的数据取值范围,
B.数据类型定义了一个运算集~不同的类型的数据拥有不同的运算关系,
C.数据类型定义了数据在计算机内的存储形式以及在书写中的表示方式。
C语言规定~任何数据都必须有明确的数据类型
整型
基本类型字符型
实型单精度实型
双精度实型
枚举型
数据类型数组
构造类型结构体
联合
指针类型
空类型
C语言中数据有常量与变量之分~他们分别
属于这些类型
2.2常量与变量
1.常量
其值不能被改变的量
整型常量~如15,实型常量~如5.2,字符常量~如'h',有字符串常量~如"chinea"
常量不占用内存~在程序运行时它作为操作对象直接出现在运算器的各种寄存器中~使用时可以不需要类型说明。
2.符号常量
用一个标识符~来代表一个常量~称为符号常量~起一般形式为:
#define符号常量名常量
例子:
#include#definePI3.14main()
{
floatr,s,v;
scanf("%f",&r);
真的不掉线
吗,,、,,,,,,,,,,,,
s=PI*r*r;
v=4.0/3*PI*r*r;
printf("s=%f,v=%f\n",s,v);
}
符号常量的命名规则遵循标识符命名规则~但习惯上符号常量名用大写~变量名用小写~以区别。
符号常量不同于变量~它的值在其作用域内不能改变~也不能再被赋值。
2.变量
其值可以改变的量称为变量
变量有两个基本要素:
变量名变量类型~其类型决定了变量在内存中要占据的若干字节的存储单元。
C中~变量一定要先定义~后使用。
类型变量名表
如inti,j,num;
说明:
A.变量名可以是c语言中的合法标识符~定义时应遵循:
见名知意的原则~以便程序的维护
B.每个变量都必须进行类型说明
C.当一个变量被指定为某一确定类型时~将为它分配若干相应字节的内存空间~如char为1个字节~int2~float4~double8.不同的系统可能会有差异。
2.3.整型数据
2.3.1.整型常量的表示方法
C中~数值型常量都带有符号~整型常量只区别整型和长整形两种形式~而没有无符号值型常量。
整型常量通常有以下3种形式表示:
1.十进制整型常量~如124~0~
2.八进制整型常量~以0开头的八进制数字串~如015~表示13~
3.十六进制整型常量~以0x或0X开头的数字串~串中只能含有0-9~a-f
2.3.2整型变量
数据在内存中式以二进制形式存放的。
存放的是补码
正数的补码和其原码相同~
负数的补码:
将该数的绝对值的二进制形
式~按位取反再加1
整数的16位中~最左面的一位表示符号位~
0正1付
整型变量的分类
整型变量的基本类型int~分基本整型~
短整型short~长整型long
基本整型:
int
-32768--32767-2de15---(2de15-1)
短整型:
shortint或short
真的不掉线
吗,,、,,,,,,,,,,,,
长整型:
longint或long
unsigned无符号数~signed有符号数~缺
省隐含为有符号数,signed,
有符号基本整型[signed]int
有符号短整型[signed]short[int]
有符号长整型[signed]long[int]
无符号基本整型unsignedint
0--65535
无符号短整型unsignedshort[int]
无符号长整型unsignedlong[int]
一个无符号整型变量中可以放的整数的范围比一般整型变量中的正数范围扩大一倍,其中除long型为4字节外~均为2字节
C语言规定在程序中要用到的变量都必须先定义~对变量的定义一般都放在函数开始部分的声明部分
例子
#include
voidmain()
{
inta,b,longc;
unsignede;
a=-1;b=523;c=623789;e=89;
printf("a=%d,b=%d,c=%ld,e=%u\n",a,b,
c,e);
}
整型变量初始化
inta=3,
inta~b~c=3,
inta=3~b=4,
溢出
2.4实型数据
整型常量是精确的量~而实型常量是具有一定精度的量。
C语言中~实数又称为浮点数~有两种表现形式
十进制小数形式
如34.1~0.034~0.0~123.0
指数形式
如3.4e1~123e0~12.3e1~1.23e2,规范化的指数形式~即字母e或E之前的小数部分中~小数点左边应有一位且只能有一位非零的数字,
存放形式:
不管是小数形式还是指数形式~都以指数形式存放
真的不掉线
吗,,、,,,,,,,,,,,,
实型变量分类:
单精度型float4字节6-7位有效数
字10de-38---10de38
双精度型double8字节15-1610de-308----10de308
长双精度型longdouble16位18-1910de-4932---10de4932
floatx;
x=4615.123456;
由于float变量只能接受7位有效数字~x的值只有4815.123是有效的~改为double型则能完全接受上述10位数字并存储在变量x中
2.5字符型数据
字符常量
用单引号括起来的一个字符~如'a','A',
\开头的字符序列~特殊的字符常量
\n换行~将当前位臵移到下一行开头
ASCII代码10
\t水平制表
9
\b退格~将当前位臵移到前一列
8
\r回车~将当前位臵移到本行开头13
\f换页~将当前位臵移到以下开头
12
\\反斜杠字符\
92
\'单引号字符
39
\''双引号字符
347
\ddd1到3位八进制数所代表的字符
\xhh1到2位十六进制所代表的字符
以上列出的支付称为转义字符~意思是将\后面的字符转换成别的意思。
内存中~每个字符常量占用一个字节~具体
存放的是对应的ASCII代码值。
字符变量
定义形式:
charc1~c2='B',
#includevoidmain()
{
charc1,c2;
真的不掉线
吗,,、,,,,,,,,,,,,
c1='a';c2='b';
c1=c1-32;c2=c2-32;
printf("%c%c\n",c1,c2);
printf("%d%d\n",c1,c2);
}
ASCII码中每一个小写字母比它相应的大
写字母的码大32
字符串常量
"CHINA","Iamastudent.",
存储方式:
字符串中的每一个字符以其
ASCII码值的二进制形式存储在内存中~系统自
动在该字符串的末尾加一个"字符串结束标识
\0"~
"puter"实际上在内存中的是
computer\0
它的长度是8而不是9~最后的\0在输出时
并不输出~仅仅作为处理时的结束标识。
C语言没有专门的字符串变量~如果想吧一个字符串放到变量中保存起来~必须使用字符数组~数组中每一个元素存放一个字符。
2.6运算符和表达式
运算符
C语言提供了多种运算符~把除了控制语句合输入输出以外的几乎所有的基本操作都作为运算符处理~按功能:
算术运算符、关系运算符、逻辑运算符、逗号运算符、位运算符、赋值运算符。
要求不同的操作数及优先级
表达式不管表达式多么复杂~都有一个值
算术运算符和算术表达式
+加法运算符
-减法运算符
*乘法运算符以上三个~操作数可以是整型或实型的常量、变量和函数
/除法运算符5/2.0=2.5,5/2=2,
向零取整~
%求余运算符两边必须是整数~后面不能为零~3%2=1
算术运算符的结合方向全部都是“右向性”~
自增自减运算符
++k与k++
--k与k--
真的不掉线
吗,,、,,,,,,,,,,,,
使变量增1或减1
前臵时~整个表达式的值为变化后的值~
后臵时~整个表达式的值为变化前的值
只能用用于变量~不能用于常量或者表达式~左向性~
这两个运算符经常用在循环语句中~对循环变量增1减1~用来控制循环的执行次数。
赋值运算符和赋值表达式
=+=-=*=/=%=<<=>>=&=
^=|=
x+=3,等价于x=x+3
赋值表达式
由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。
其一般形式为:
变量赋值运算符表达式
如果赋值运算符两侧的变量和表达式的类型不同时~系统将自动进行类型转换~以左边的类型为准。
右结合性~即从右向左进行运算。
逗号运算符和逗号表达式表达式1~表达式2~表达式n
整个表达式的值为n的值
逗号表达式用的地方不多~一般式在for语句中给循环变量赋初值时才用到。
程序中并不是所有的逗号都要看成逗号运算符~尤其是在函数调用时~各个参数是用逗号隔开的。
条件运算符表达式1?
表达式2:
表达式3
先求表达式1的值~非零求2的值~零求3
的值~并把它作为整个表达式的值。
右结合性
2.7不同类型数据间的混合运算
不同类型的数据放在一起运算时~需要转换
为相同的数据类型。
两种方法:
自动转换,隐式
转换,~强制转换,显示转换,。
1.自动转换高double《《float
long
unsigned
低int
char《《short~
横向的必定转换~当遇到short、char时~系统一律转换为int参与运算
2.赋值类型的自动转换
以赋值表达式左边的为准
3.强制类型转换
类型名,(表达式,
如inta,
double,a,/*将a转换为double类型*/
真的不掉线
吗,,、,,,,,,,,,,,,
在强制类型转换时~得到一个所需的中间变量~原来的类型未变~a仍是int型
第3章
顺序结构设计
3.1c语言基本语句
一个实际的程序师一系列语句的集合~每条语句是一条完整的计算机指令~是用来完成一定任务的~并且带有某种必需的标点。
C语言中~语句结束处用一个分号标识
legs=4是一个表达式
legs=4,是一个语句
声明部分的内容不用称为语句~如inta,这不是一个条c语句~只是对变量的定义~因为它没有对数据进行操作~亦即语句说明是一种行为。
C语句分类:
1,控制语句:
用来完成一定的控制功能。
C语言中有9种控制语句
if()...else...条件语句
for()...循环语句
while()...循环语句
do...while();循环语句
continue结束本次循环语句
break中止执行switch或循环语句
switch多分支语句
goto转向语句
return从函数返回语句
2,函数调用语句:
由一次函数调用加一个分号构成一条语句如printf,,,
3,表达式语句一个表达式加一个分号
4,空语句,
5,复合语句{t=a;a=b;b=t;}
最后的分号不能省略。
C语言程序写法灵活~既允许一行写多条语句~也允许一条语句拆开写在几行上。
真的不掉线
吗,,、,,,,,,,,,,,,
3.2数据输入与输出
C语言没有定义任何处理输入输出的关键字~而是用库函数完成输入输出。
C语言的输入输出系统包含许多函数~位于一个名为
stdio.h(标注输入输出库,的头文件里~因此~每一个
C语言程序的开始都要用到预编译命令
#include或#include"stdio.h"
getchar()putchar()
分别从键盘读一个字符或向显示屏写一个字符
getchar()先将输入字符放到缓冲区里~等待回车键~当敲入回车键后才获取所输入的字符并把结果显示到显示屏上intgetchar,void,
putchar()把传入的字符写在显示屏的当前
光标处intputchar(intch)
charc;
c=getchar();
putchar(c);
*getchar,,一次只能接收一个字符~
putchar,,亦然
*getchar,,接收到的字符可以赋给inthuochar~也可以不赋值~而直接作为表达式的一部分。
上例中putchar(getchar());
getch()getche()位于conio.h
直接从键盘接收输入的字符~不需要等待回车确认
getch()读入的字符不回显~getche,,要显示
格式化输入与输出
printf,,scanf,,stdio.h
printf(control-string,item1,item2~...);
contro-string控制字符串~是用双引号括起来的字符串~是一个描述项目如何打印的字符串~有两种信息:
显示到显示屏上的普通字符~原样输出的,格式说明符,formatspecifier,~
用于定义相应变量的打印格式~格式说明符由百分号%开始~然后紧随格式字符
%c一个字符
%d有符号十进制数
%e浮点数~e计数法
%E浮点数~E计数法
%f浮点数~十进制计数法
%g根据数值不同自动选择%f或%e~%e在指数<-4或>=精度时使用
%G%f%E%E
%i有符号十进制整数与%d相同%o无符号八进制整数
%p指针
%s字符串
%u无符号十进制整数
%x使用十六进制数字0f的无符号十六
进制整数
%X0F
%%打印一个百分号
真的不掉线
吗,,、,,,,,,,,,,,,
prinf,,修饰符
digit字段宽度最小值
.digit精度
h和整数格式说明符一起使用~表示一
个shortint或unsignedshortint
l
longlong
L和浮点数格式说明符一起使用~表示
一个longdouble类型数值
标志
—左对齐
+有符号数若为正数~则显示加好~负号亦然
空格,有符号数若为正数~带前导空格~负号加显示负号
#使用格式说明的可选形式~若为%o~则以0开始~对于浮点数形式~#保证了即使不跟任何数字~也打印一个小数点字符。
0对于所有的数字格式~用前导零填充字符宽度。
出现—或指定了精度忽略
scanf,,函数的功能是:
从标准输入设备,键盘,读取输入的信息~其参数列表里使用的
是指向变量的指针。
scanf,"%d",&a);
修饰符补充:
*本项读入后略去如scanf,"%2d%*3d%2d",&a,&b);输入1234567回车~则系统将12给a~345略去~67给b
digit最大字段宽度~在达到最大字段宽度或遇到第一个空格字符时停止对输入项的读取
l用于输入longint整型%ld%lo%lx以及double型数%lf~%le
h用于输入shortint型数。
*如果在字符控制串中除了格式说明符以外还有其他字符~则在输入数据时应输入与这些字符相同的支付~如
;输入时用右边scanf,"%d,%d",&a,&b,
形式:
3~4回车
*用%c格式输入字符时~空格和转义字符都作为有效字符输入
*输入数据时~遇到以下情况认为当前数据输入结束:
遇到空格字符~或回车~或TAB键
遇到满足最大字段宽度时认为结束~如%2d~只取两位数
遇到非法输入时~
当使用多个scanf函数连续给多个字符型变量赋值是~注意输入的方法~如
scanf("%c",&c1);
scanf("%c",&c2);
要使c1为'A',c2为'B',应输入AB回车
程序举例:
*从键盘输入一个大写字母~改用小写字母输出
#include
#include
voidmain()
真的不掉线
吗,,、,,,,,,,,,,,,
{
charc1,c2;
c1=getch();
c2=c1+32;
printf("\n%c,%d\n",c1,c1);
printf("\n%c,%d\n",c2,c2);
}
*输入三角形的三边~用海伦公式求三角形
面积
#include#include#includevoidmain()
{
floata,b,c,p,area;
printf("Entera,b,c:
");
scanf("%f,%f,%f",&a,&b,&c);
p=(a+b+c)/2.0;
area=sqrt(p*(p-a)*(p-b)*(p-c));
printf("a=%7.2fb=%7.2fc=%7.2f
p=%7.2f\n",a,b,c,p);
printf("area=%7.2f\n",area);
getch();
}
真的不掉线
吗,,、,,,,,,,,,,,,
第4章
选择与循环结构程序设计
4.1选择结构,分支结构,程序
关系运算符与关系表达式
><>=<===!
=其结果是一个逻辑值~即真1假0
c语言中~真是任意非0的值~假就是0
5>3结果为1
2*5==3结果为0
逻辑运算符与逻辑表达式
逻辑运算符额可以将多个表达式或逻辑量
连接起来~构成逻辑表达式
c语言提供三种逻辑运算符!
&&||非与或~优先级从左到右
!
算术运算符