第0章C语言基本语法一共80学时,分两部分:C、数据结构。
其中C大概32学时,数据结构48学时。
0.1C编译环境C语言一般可使用两种编程环境:1、Turbo C2.0版本,重要的三个热键:1)编译:F92)运行:Ctrl+F53)观察结果:Alt+F5Alt+F7光标指向前一个错误处Alt+F8光标指向下一个错误处Alt+F9不进行日期和时间检查的编译,生成.obj文件Ctrl+F2终止调试操作Ctrl+F9编译、连接并运行程序Alt+C打开Compile菜单Alt+D打开Debug菜单2、Visual C++6.0版本:只适合在Windows操作系统下,是微软开发出来的,在这个环境下进行C、C++、Visual C++进行编程非常方便。
在VC++6.0看来,每个程序都应该以“Project”(工程、项目)的形式来进行。
而每个Project又应该包含在一个WorkSpace(工作区)之中。
当然,一个Workspace中可以有多个Project。
因此,我们每创建一个程序,都应该首先创建一个工程,这个工程就是一个整体,经过编译连接等操作,这个工程最终就能够变成一个在Windows下可执行的程序。
在VC6.0中的Project有以下几种常用类型:1)Win32Console Application:Win32控制台应用程序,适合所有的C程序,由它创建出来的应用程序一般没有独立的窗口。
这种程序的入口函数为main函数。
2)Win32Application: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化为原码二进制形式:00000000011110112)最高位取1,其它位按位取反:1111111110000100,得到的是反码。
3)末尾加1:1111111110000101显然,16位所能表示的数据,最大的那个是:0111111111111111=215-1,最小的那个数:1000000000000000=-215,而1111111111111111=-1int short int long int charTurbo C2B,-215~215-12B,-215~215-14B,-231~231-11B,-128~127 Visual C++4B,-231~231-12B,-215~215-14B,-231~231-1ASCII:1BUnicode:2B unsigne d:无符号,也就是没有负数,全部是正数。
如unsigned int所以,如果对于int来说,1111111111111111=-1,而对于unsigned int来说,1111111111111111=216-1另外还有一个关键字:signed,代表有符号,如signed int实际上就是int。
long int可以简写为long,而short int可简写为short3、浮点数:float、double,float称为单精度浮点数,由4B表示,它只有6个有效数字。
能表示的数据范围:0及1.2X10-38~3.4X1038double称为双精度浮点数,由8B表示,它有15个有效数字。
能表示:0及2.3X10-308~3.4X10308long double长双精度浮点数,一般不太使用,它一般可以有有16B。
注意一个细节:不准确,可能有些数明明是有限小数,但在计算机中无法表示,将表示成无限的近似的数,如0.1,所以,我们有两点要注意的:1)不要用浮点数来控制循环次数。
float f;for(f=0;f<1;f+=0.1){……}2)不要直接比较两个浮点数是否相等。
如:double a=0.1,b=0.11if(a==b)真正要做的比较应该为:if(fabs(a-b)<=1e-7)4、字符:char,包括:(可参照ASCII码表进行)1)字母:大写、小写2)数字:0~93)专门符号:29个,!@#$4)空格符:空格、水平制表符5)不能显示出来的字符:null,可以以'\八进制代码'表示出来,如回车换行符'\007',还可以以'\代号'表示,如'\n'\n:回车换行\f:换页\b:退一格\r:回车,不换行,就是回到这一行的最前面开始\0:空字符,\\:反斜杠本身字符必须包含在一对单引号中,如:'a','\035','\n'等5、字符串:包含在一对双引号中的任意个(1个或多个)字符,但是一个字符串中至少有一个字符\0,如:"China"、char str[]="\123abc\n\\",可以使用strlen(str)来求字符串str中有多少个字符,此处得到6.可以使用sizeof(str)来求字符串str占了多少个字节的空间,此处得到7.注意:1)双引号本身应该在英文状态下2)字符串中可以有中文,一个中文点两个字节0.3.2运算符+-*/%除:规定如果参加运算的两个数都是整数的话,则结果也是整数;而如果只有有任意一个数据为float或double,则结果为double,如:double c;int a=-10,b=4;//方法一:强制转换某个数为double或floatc=(double)a/b;//c=2.5c=a/(double)b;printf("c=%lf\n",c);//方法二:将数字前面乘以1.0,从而该数变为doublec=1.0*a/b;//c=2.5;printf("c=%lf\n",c);陷阱: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=-2int d=a/b;//d=-6如果int a=20,b=-3;int c=a%b;//c=2int d=a/b;//d=-60.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=223、逗号表达式的问题,规定,取最后一个数的值,如:int a=10,b;a+=(b=3*4,c=(5,10,15));//b=12,c=15,a=254、混合运算类型的转换问题:1)有些转换是自动完成的,其一般原则为:char->int->long->double如:double f;int a,b;float t;char c;f=(t=a+c);2)如果不满意,可以强制类型转换a=(int)(f+t);由doube或float强制向int转换方式,是直接将小数点后面的所有的数据摸掉,不会自动进行四舍五入。
如:double d=12.89;int a;a=(int)d;//a=12如果我们想要四舍五入,得用技巧,加0.5后再取整。
如:double e=12.89,f=34.46;int a=(int)(e+0.5);//a=13int b=(int)(f+0.5);//b=34;这个小技巧可以扩展:精确到小数点后几位,如:double d=12.345678;现在,要想精确到小数点后3位,应该得到:12.346,方法为先乘以1000,再加0.5,再取整,再除以1000.0:d=(int)(d*1000+0.5)/1000.0;0.3.4自增和自减++、――,形式有两种:a++,++a,a++规定,先取a的值在本表达式中进行计算应用,再将a加一,只影响后面的语句,如:int a=4;int b=a++;//b=4,a=5int c=++a;//a=5,c=5a=4;int d=(a++)+(a++)+(a++);在VC中,相当于四条语句:d=a+a+a;a++;a++;a++;其结果,a=7,d=12;++a规定:先将a的值加一,再应用a的值,并影响这条语句。
如:int a=4;int b=++a;//a=b=5;int a=4;int c=(++a)+(++a)+(++a);在Turbo C中,相当于四条语句:++a;++a;++a;c=a+a+a;其结果,a=7,c=21;0.3.5数据的输入与输出1、输出:printf、putchar、puts等注意:1)特殊字符的输出:\n、\b2)输出各种字符的方式:整型%d,字符%c,字符串%s,小数形式的浮点数%f,指数形式的浮点数:%e,长整型%ld,double型%lf,后面的指针类型(地址)%lp3)对于整型宽度问题:%5d,这个数字点5个位置,多出的位置用前置空格被齐,被在数字的前面。
如果%-5d,空格被在数字的后面。
如果这个数字的长度大于5,则将该数字完整的打印出来。
4)对于浮点数,用%f打印小数,用%e打印指数。
5)可以指定小数点后几位,如%.3f,或%10.3f,意思是说,小数点后占3位,一共占10位(包括小数点位,因此,只有9位数字)6)对于整数,输出八进制数:%o,输出十六进制数:%x或%X7)输出无符号整数:%u,如果该数实际上已经是有符号的数,按%u输出后,负数会变成正数。