C语言程序设计中国计量学院信息工程分院主讲:吴向平电话:13588848418邮件:xiangpingwu@cjlu.edu.cn办公室:赛博南楼306-1学习要点•课前浏览预习,不需看的太细;•课中认真听讲,抓住重点,了解扩充知识;•课后多看例程,多上机练习,在编写程序中复习知识点。程序=数据结构+算法机器语言汇编语言高级语言CPU指令系统,由0、1序列构成的指令码组成如:10000000加10010000减用助记符号描述的指令系统如ADDA,B计算机程序与语言高级语言:跟自然语言和数学语言更接近(C,C++,Java,Pascal,Delphi…)#includestdio.hvoidmain(){printf(“welcometoC”);}C语言发展历史•产生过程–时间:1972~1973–地点:美国贝尔实验室–设计人:DennisRitchie•C标准–K&R(BrianKernighan,DennisRitchie)合著了《TheCProgrammingLanguage》第一版,(1978),K&RC/经典C–ANSI/ISOC,C89/C90/ANSIC»MicrosoftC(MSC)»BolandTurboC(TurboC)–C99(1994)C程序格式和结构特点#includestdio.hmain(){printf(“Hello,World!”);}编译预处理主函数语句例:第一个程序在屏幕上输出:Hello,World!输出结果:Hello,World!C程序的运行过程编辑链接编译执行程序代码的录入,生成源程序*.c语法分析查错,翻译生成目标程序*.obj与其它目标程序或库链接装配,生成可执行程序*.exe开始编辑编译连接执行有错?结果正确?结束有源程序file.c目标程序file.obj库函数和其它目标程序可执行目标程序无正确不正确/*example1.2calculatethesumofaandbThisprogramiswrittenbyxiangpingwu,in2009*/#includestdio.hvoidmain(){inta,b,sum;intadd(int,int);a=10;b=24;sum=add(a,b);//functioncallprintf(“sum=%d\n”,sum);}//Thisfunctioncalculatesthesumofxandyintadd(intx,inty){intz;z=x+y;return(z);}运行结果:sum=34函数语句预处理命令注释–C结构特点•函数与主函数–程序由一个或多个函数组成–必须有且只能有一个主函数main()–程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。•程序语句–C程序由语句组成–用“;”作为语句终止符•注释–不产生编译代码–/**/为注释,不能嵌套•预处理命令例:/*Thisisthemain/*ofexample1.1*/*/非法–C书写格式特点main(){……………….…………………………..…………..……………….………………………….……………….………………..}main(){inti,j,sum;sum=0;for(i=1;i10;i++){for(j=1;j10;j++){sum+=i*j;}}printf(“%d\n”,sum);}优秀程序员的素质之一:Ø{}各占一行,并对齐Ø一行一句,内层语句向右,缩递使用TAB缩进Ø有合适的空行Ø区分大小写,常量用大写命名Ø有足够的注释第二章基本数据类型和常用库函数•数据类型•常量与变量•库函数2.1字符集与标识符–C语言的字符集:•包括标识符、运算符、常量,标点符等•注意:都是在英文状态下的输入。–标识符定义:用来标识变量、字符常量、函数名、数组名、结构体名、文件名的字符序列–标识符组成•只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线•大小写敏感•不能使用关键字–标识符命名原则•见名知意•不宜混淆如l与I,o与0•min-length&max-information关键字(保留字)32个关键字:(由系统定义,不能重作其它定义)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhileC数据类型基本类型构造类型指针类型空类型void字符类型char整型实型单精度型float双精度型double数组结构体struct共用体union短整型short长整型long整型int数据类型决定:1.数据占内存字节数2.数据取值范围3.允许的操作枚举类型enum2.2基本数据类型类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)int32-2147483648~2147483647(signed)short16-32768~32767(signed)long32-2147483648~214748364732unsignedint0~4294967295320~4294967295unsignedlongunsignedshort160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127无unsignedchar80~2552.3常量和变量常量定义:程序运行时其值不能改变的量(即常数)。常量类型:整数,浮点数,字符,转义字符,符号常量,符号常量:用标识符代表常量定义格式:#define符号常量常量一般用大写字母是宏定义预处理命令常量(续)整型常量十进制整数:由数字0~9和正负号表示八进制整数:由数字0开头,后跟数字0~7表示十六进制整数:由0x开头,后跟0~9,a~f,A~F表示实型常量十进制数形式:(必须有小数点)如0.123,.123,123.0,0.0,123.指数形式:(e或E之前必须有数字;指数必须为整数)如12.3e3,123E2,1.23e4,e-5,1.2E-3.5数值常量后缀L或l长整型;U或u无符号数;F或f浮点数字符常量用单引号括起来的单个普通字符或转义字符,如‘a’,‘A’,‘\n’,‘\12’,‘\xa’变量•变量概念:其值可以改变的量,有名称有值,还得规定其确定的数据类型。•变量定义的格式:inta;charc1,c2;•变量初始化:定义的同时赋值;inta=10;floatm=1.2,n=1.3;•变量的使用:先定义,后使用,一般放在函数开头格式:putchar(c)参数:c为字符常量、变量或表达式功能:把字符c输出到显示器上2.4数据输入与输出5C语言无I/O语句,I/O操作由库函数实现5#includestdio.h一、数据输出–单个字符输出函数#includestdio.hmain(){intc;chara;c=65;a='B';putchar(c);putchar('\n');putchar(a);}例AB运行结果:格式:printf(“格式控制符串”,输出表)功能:按指定格式向显示器输出数据–格式输出函数printfv输出表:要输出的数据(可以没有,多个时以“,”分隔)v格式控制符串:包含两种信息l格式说明:%格式控制字符,用于指定输出格式l普通字符或转义序列:原样输出d或Ix,Xoucse,Efg%%十六进制无符号整数不带符号十进制整数十进制整数指数形式浮点小数单一字符字符串八进制无符号整数小数形式浮点小数e和f中较短一种百分号本身inta=567;printf(“%d”,a);inta=255;printf(“%x”,a);inta=65;printf(“%o”,a);inta=567;printf(“%u”,a);chara=65;printf(“%c”,a);printf(“%s”,“ABC”);floata=567.789;printf(“%e”,a);floata=567.789;printf(“%f”,a);floata=567.789;printf(“%g”,a);printf(“%%”);567ff101567AABC5.677890e+02567.789000567.789%l说明u格式字符与输出项个数应相同,按先后顺序一一对应u格式字符与输出项类型应一致,例#includestdio.hmain(){inta=3;doubleb=1.456;charr=‘A’;printf(“%d\n”,a);printf(“%f\n”,b);printf(“%d%f\n”,a,b);printf(“a=%d,b=%f\n”,a,b);printf(“%d\n”,10);printf(“%c\n”,r);printf(“%c,%d,%c”,r,r,97);printf(“%d”,b);}31.45600031.456000a=3,b=410AA,65,a-1477468750运行结果:•printf函数的附加格式说明符(修饰符).n对实数,指定小数点后位数(四舍五入)对字符串,指定实际输出位数修饰符功能m输出数据域宽,数据长度m,左补空格;否则按实际输出输出数据在域内左对齐(缺省右对齐)-指定在有符号数的正数前显示正号(+)+输出数值时指定左面不使用的空位置自动填00在八进制和十六进制数前显示前导0,0x#在d,o,x,u,e,f,g前,指定输出精度为long型或double型L或lH或h在d,o,x,u前,指定输出精度为short型#includestdio.hmain(){inta=1234;floatf=123.479;charch=‘a’;printf(“%8d,%2d\n”,a,a);printf(“%f,%8f,%8.1f,%.2f,%.2e\n”,f,f,f,f,f);printf(“%-12f,%-12.1f%-.2f\n”,f,f,f);printf(“%3c\n”,ch);}####1234,1234123.479000,123.479000,###123.5,123.48,1.23e+02123.456000##,123.5#######123.48########a//注:此处以#代表空格格式:getchar()功能:从键盘读一字符二、数据输入–字符输入函数#includestdio.hmain(){intc;printf(Enteracharacter:);c=getchar();printf(%c---hex%x\n,c,c);}Enteracharacter:AA---hex41运行结果–格式输入函数scanf格式:scanf(“格式控制串”,地址表)功能:按指定格式从键盘读入数据,存入地址表指定的存储单元中,并按回车键结束v地址表:变量的地址,常用取地址运算符&v格式字符:d,i,o,x,u,c,s,f,e例#includestdio.hmain(){inta;scanf(“%d”,&a);}输入:10则a=10例inta;scanf(“%x”,&a);输入:11则a=17•附加格式说明符(修饰符)l修饰符功能hm*用于d,o,x前,指定输入为short型整数用于d,o,x前,指定输入为long型整数用于e,f前,指定输入为double型实数指定输入数据宽度抑制符,指定输入项读入后不赋给变量注意:输入long型整数、double型实数时必须在相应的格式控制符前前缀:l•输入分隔符的指定–一般以空格、TAB或回车键作为分隔符–其它字符做分隔符:格式串中两个格式符间字符例scanf(“%d%o%x”,&a,&b,&c);printf(“a=%d,b=%d,c=%d\n”,a,b,c);输入123123123输出a=123,b=83,c=2