发布时间 : 星期日 文章第0章 C语言基本语法3更新完毕开始阅读9dee2b8a02d276a200292eed
第0章 C语言基本语法
一共80学时,分两部分:C、数据结构。其中C大概32学时,数据结构48学时。
0.1 C编译环境
C语言一般可使用两种编程环境:
1、Turbo C 2.0版本,重要的三个热键: 1)编译:F9
2)运行:Ctrl+F5 3)观察结果:Alt+F5
2、Visual C++ 6.0版本:只适合在Windows操作系统下,是微软开发出来的,在这个环境下进行C、C++、Visual C++进行编程非常方便。
在VC++6.0看来,每个程序都应该以“Project”(工程、项目)的形式来进行。而每个Project又应该包含在一个WorkSpace(工作区) 之中。当然,一个Workspace中可以有多个Project。因此,我们每创建一个程序,都应该首先创建一个工程,这个工程就是一个整体,经过编译连接等操作,这个工程最终就能够变成一个在Windows下可执行的程序。
在VC6.0中的Project有以下几种常用类型:
1)Win32 Console Application:Win32控制台应用程序,适合所有的C程序,由它创建出来的应用程序一般没有独立的窗口。这种程序的入口函数为main函数。
2)Win32 Application:Win32应用程序,适合C/C++程序,这个与上面的区别在于,可以创建出有独立窗口的应用程序,特别地,它可以使用Win API函数库。入口函数不是main函数,而是tmain或WinMain等。
3)MFC AppWizard(.exe):适合使用Visual C++语言进行编程,可以方便地创建出普通的Windows窗口,能够方便地进行窗口编程。在这种程序中,连main或WinMain函数都找不到。
0.2 熟悉Visual C++ 6.0编程环境
每一个程序都以“工程(Project)”的形式出现,在VC中,又将一个或多个工程包装成一个“工作区(WorkSpace)”,所以,我们在每个程序编程时都需要创建一个工程,再在这个工程中创建文件(.cpp、.h文件等)。
编译微型条
0.3 顺序程序设计 0.3.1 数据类型
1、基本类型(整型、浮点型、字符型),枚举类型、复合类型(数组、指针、结构体、共用体)。
2、整型:int、short int、long int,都是使用补码的形式来表示。 如要将-123表示成16位(2B)的补码
1)先将123化为原码二进制形式:0000 0000 0111 1011
2)最高位取1,其它位按位取反:1111 1111 1000 0100,得到的是反码。 3)末尾加1:1111 1111 1000 0101
显然,16位所能表示的数据,最大的那个是:0111 1111 1111 1111=215-1,最小的那个数:1000 0000 0000 0000=-215,而1111 1111 1111 1111=-1 int short int long int char Turbo C 2B,-215~215-1 2B,-215~215-1 4B, -231~231-1 1B,-128~127 Visual C++ 4B, -231~231-1 2B,-215~215-1 4B, -231~231-1 ASCII:1B Unicode:2B unsigned:无符号,也就是没有负数,全部是正数。如unsigned int 所以,如果对于int来说,1111 1111 1111 1111=-1,而对于unsigned int来说,1111 1111 1111 1111=216-1
另外还有一个关键字:signed,代表有符号,如signed int实际上就是int。 long int可以简写为long,而short int可简写为short 3、浮点数:float、double,
float称为单精度浮点数,由4B表示,它只有6个有效数字。能表示的数据范围:0及1.2X10-38~3.4X1038
double称为双精度浮点数,由8B表示,它有15个有效数字。能表示:0
-308308
及2.3 X10~3.4X10
long double长双精度浮点数,一般不太使用,它一般可以有有16B。 注意一个细节:不准确,可能有些数明明是有限小数,但在计算机中无法表示,将表示成无限的近似的数,如0.1,所以,我们有两点要注意的:
1)不要用浮点数来控制循环次数。 float f;
for( f=0; f<1;f+=0.1) { ?? }
2)不要直接比较两个浮点数是否相等。如: double a=0.1, b=0.11 if( a==b)
真正要做的比较应该为: if( fabs( a-b )<= 1e-7 ) 4、字符:char,包括:(可参照ASCII码表进行) 1)字母:大写、小写 2)数字:0~9
3)专门符号:29个,!@#$ 4)空格符:空格、水平制表符
5)不能显示出来的字符:null,可以以'\\八进制代码'表示出来,如回车换行符'\\007',还可以以'\\代号'表示,如'\\n'
\\n:回车换行 \\f:换页 \\b:退一格
\\r:回车,不换行,就是回到这一行的最前面开始 \\0:空字符, \\\\:反斜杠本身
字符必须包含在一对单引号中,如:'a','\\035','\\n'等
5、字符串:包含在一对双引号中的任意个(1个或多个)字符,但是一个字符串中至少有一个字符\\0,如:
\、
char str[ ]=\,
可以使用strlen( str )来求字符串str中有多少个字符,此处得到6.
可以使用sizeof( str )来求字符串 str占了多少个字节的空间,此处得到7. 注意:
1)双引号本身应该在英文状态下
2)字符串中可以有中文,一个中文点两个字节
0.3.2运算符
+ - * / %
除:规定如果参加运算的两个数都是整数的话,则结果也是整数;而如果只有有任意一个数据为float或double,则结果为double,如: double c;
int a=-10, b=4;
//方法一:强制转换某个数为double或float c=(double)a/b; //c=2.5 c=a/(double)b;
printf(\
//方法二:将数字前面乘以1.0,从而该数变为double c=1.0*a/b; //c=2.5;
printf(\陷阱:
int a=-10, b=4; float c=2.5, d=5.2; double e; e=c*d+a/b;
取余%:规定参加运算的两个数必须是整型(包括int、short、long、char),不得为浮点数,其结果为被除数除以除数所得到的余数,其符号与被除数相同。如:
int a=-20, b=3;
int c=a%b; //c=-2 int d=a/b; //d=-6 如果
int a=20, b=-3;
int c=a%b; //c=2 int d=a/b; //d=-6
0.3.3赋值
在C中,赋值运算符包括:=、+=、-=、*=、/=、%=及后面的位运算的&=、|=、^=等。
注意问题:
1、复合赋值:+=、-=、*=、/=、%=,如: int b=5; b+=7; //相当于b=b+7;
其计算顺序为从右向左计算,如: int a=10;
a+=a-=a*=a/=2; //结果a=0
可以分解为:a/=2; a*=a; a-=a; a+=a; 2、括号的问题: int a=10, b, c; a+=(b=3*4); //b=12, a=22
3、逗号表达式的问题,规定,取最后一个数的值,如: int a=10, b;
a+=(b=3*4, c=(5, 10, 15)); //b=12, c=15, a=25 4、混合运算类型的转换问题:
1)有些转换是自动完成的,其一般原则为:char->int->long->double如: double f; int a, b; float t; char c; f=(t= a+c );
2)如果不满意,可以强制类型转换 a=(int)( f + t);