C程序设计教程(第2版)高等学校计算机基础教育教材精选崔武子赵重敏李青编著课程要求课前请做好预习保持课堂安静,头脑清醒,思维活跃认真、独立、按时完成并提交作业重视上机实践,有效利用宝贵的上机时间第1章C语言基础知识1.1C语言概述1.2简单C程序与上机步骤1.3数据类型1.4常量与变量1.5运算符和表达式1.1.1什么是C语言1.1.2C程序形式和程序执行过程1.1C语言概述返回C语言是由附录A(P316)中列出的32个关键字再加上语法规则构成的。e1.c编辑编译e1.obj连接e1.exe运行输出结果1.1.1什么是C语言1.1.2C程序形式和程序执行过程【例1.1】C语言程序示例程序如下:#includestdio.h#includemath.hintmysum(intm,intn);main(){inta,b,x;doublec,y,z;c=4.0;y=sqrt(c);a=10;b=20;x=mysum(a,b);z=x+y;printf(z=%lf\n,z);}intmysum(intm,intn){intk;k=m+n;returnk;}程序的运行结果是:z=32.000000……c=4.0;y=sqrt(c);a=10;b=20;x=mysum(a,b);z=x+y;……main函数……sqrt函数……其它函数文件math.h②③⑤……mysum函数⑦④⑨⑥⑧①格式特点•习惯用小写字母,大小写敏感•不使用行号,无程序行概念•可使用空行和空格•常用锯齿形书写格式main(){……………….…………………………..…………..……………….………………………….……………….………………..}#includestdio.hmain(){inti,j,sum;sum=0;for(i=1;i10;i++){for(j=1;j10;j++)sum+=i*j;}printf(“%d\n”,sum);}优秀程序员的素质之一:使用TAB缩进{}对齐有足够的注释有合适的空行结构特点•函数与主函数•程序由一个或多个函数组成•必须有且只能有一个主函数main()•程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。•程序语句•C程序由语句组成•用“;”作为语句终止符•注释•/**/为注释,不能嵌套,多行注释•//单行注释•不产生编译代码•编译预处理命令组成要素程序主要目的是处理数据•数据的输入•数据处理•数据输出•数据必须先定义后使用对数据的处理是通过流程控制语句进行的1.3数据类型【例1.4】运行程序,观察sum和ave的值#includestdio.hmain(){inta,b,sum;floatave;a=5;b=6;sum=a+b;ave=sum/2;printf(“%d,%f\n”,sum,ave);}sum=11?ave=?5.5?5运行结果:11,5.000000保留六位输出整型输出实型返回说明常用数据类型:整型、实型、字符型、数组、结构体类型、指针类型等一定要选择合适的数据类型使用正确的输出格式说明符1.4常量与变量1.4.1常量与变量的概念1.4.2整型常量与变量1.4.3实型常量与变量返回1.4.1常量与变量的概念【例1.5】编写输出1000和100的和与差的程序。#includestdio.h#defineFIRST1000main(){ints;s=FIRST+100;printf(s=%d\n,s);s=FIRST-100;printf(s=%d\n,s);}都是常量变量s=1100s=900将用FIRST代替1000变量的命名规则由a~z、A~Z、0~9、_组成变量名的第一个字符不能是数字关键字不能作为变量名注意:区分大小写main(){inta,b;a=5;b=6;intsum;sum=a+b;printf(“%d\n”,sum);}下面程序是错误的。变量必须先定义后使用变量名要简单明了、见名知意定义变量inta;制造容器a变量的定义、多次赋值以及输出的全过程不定值a=5;5a=6;6printf(“a=%d”,a);输出a=6注意:a代表存储单元6是存储单元中的内容1.4.2整型常量与变量1.整型常量整型常量不能带小数点%d——十进制形式输出2.整型变量整型变量中只能存放整型数据整型变量的常用类型:基本型int(一般占2个字节)长整型long(一般占4个字节)在VC++环境都占4个字节注意:数据溢出3.变量初始化在定义变量的同时给变量赋值inta=5;inta;a=5;inta=5,b=6;inta,b;a=5;b=6;不能,b没有定义能否改成“;”1.4.3实型常量与变量1.实型常量【例1.9】写出下面程序的运行结果。#includestdio.hmain(){printf(%f\n,123451234512345.1);printf(%e\n,12345.6788885);}123451234512345.090000按小数形式输出1.实型常量【例1.9】写出下面程序的运行结果。#includestdio.hmain(){printf(%f\n,123451234512345.1);printf(%e\n,12345.6788885);}123451234512345.0940001.234568e+004按指数形式输出P121.4.3实型常量与变量2.实型变量实型变量中只能存放实型数据单精度型float占4个字节双精度型double占8个字节在VC中,单双精度的实型都保证6位有效数字。实型变量无法精确地存放数据,会有误差1.字符型常量#includestdio.hmain(){printf(%c---%d,%c---%d\n,'a','a','A','A');printf(%c---%c\n,'\1','\x1');printf(Iam\OK\\n);}1.4.3字符型常量与变量2.字符型变量字符型变量中只能存放字符型数据存放ASCII字符集中的任何一个字符在内存中占一个字节例:各种类型变量的使用bianliang.c2.3输入输出语句2.3.1格式输入输出函数2.3.2字符输入输出函数在输入输出函数后面加一个分号返回P41格式化输出printf(格式串,[输出项列表]);输出项列表=参数1,参数2,参数3,……一.格式串1.原样输出的普通字符2.转义字符3.格式控制字符格式化输入scanf(“格式串”,输入项列表);2.3.1格式输入输出函数【例2.5】格式输入输出函数示例。#includestdio.hmain(){inta=0,b=0,sum=0;printf(data:\n);scanf(%d%d,&a,&b);sum=a+b;printf(%d+%d=%d\n,a,b,sum);}data:35若改为%d,%d3,5若改为a=%d,%da=3,5运行结果是:3+5=8注意:&a,&bP41演示:调试例2.5程序2.3.2字符输入输出函数字符型变量charcharch=’a’;用scanf和printf输入输出时%c还可使用getchar、putchar等函数P45【例2.6】字符输入输出函数示例。#includestdio.hmain(){charch='\0';printf(data:\n);ch=getchar();putchar(ch);putchar(’\n’);putchar(getchar());}data:ABAA_A_ABB可输入多个字符1.5运算符和表达式1.5.1算术运算符和表达式1.5.2赋值运算符和表达式1.5.3逗号运算符和表达式1.5.4自加、自减运算符返回1.5.1算术运算符和表达式+(加)-(减)*(乘)/(除)%(求余)-(求负)表达式2+3.5的值?5.5表达式1/2的值?00.5表达式1/2.0的值?表达式5%2的值?1表达式2%5的值?22.0%5()注意:说明:“%”:两侧运算量必须是整型其它:若运算量都是整型,则按整型计算结果为整型若至少有一个为实型,则先转化为双精度型后计算结果为双精度型数据类型的转换规则如下:floatintlongdoublechar转换方向charfloat2.算术表达式假设a的值为5,写出表达式a*((6+sqrt(9.0))/2)的求解过程求平方根函数第一步:5*((6+3.0)/2)第二步:5*(9.0/2)第三步:5*4.5第四步:22.5表达式的值注意:数学中的“[]”、“{}”用多层“()”代替应防止发生数据溢出现象【例1.14】将代数式改写成C语言算术表达式。bar23.14159*(r*r)/(a+b)不能用1.5.2赋值运算符和表达式1.赋值运算符=+=-=*=/=%=简单赋值运算符复合赋值运算符2.赋值表达式i=3*2是赋值表达式3×2=6赋值表达式的一般形式是:变量=表达式i变量必须是变量名任何合法表达式表达式赋值表达式的值:b=5b=b+257得到75b7表达式b=b+2的值为7注意:赋值运算符的两边数据类型不一致时:例如,inta;a=(int)4.5;4赋给a例如,inta;a=4.5;系统可自动转换:可人为地转换:自动转换成44赋给a表达式的值为4强制类型转换1.5.3逗号运算符和表达式expr1,expr2,……,exprn逗号表达式的执行过程:先计算expr1的值,再计算expr2的值,然后是expr3的值,最后计算exprn的值,整个逗号表达式的值是exprn的值。【例】逗号表达式的应用#includestdio.hmain(){inta=2,b=4,c=6,x,y;y=((x=a+b),(x+c));printf(x=%dy=%d\n,x,y);}1.5.4自加、自减运算符作用:使变量值加1或减1x++x=x+1x--x=x-1种类:前置++i,--i(先执行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再执行i+1或i-1)例j=3;k=++j;j=3;k=j++;j=3;printf(“%d”,++j);j=3;printf(“%d”,j++);a=3;b=5;c=(++a)*b;a=3;b=5;c=(a++)*b;本次课的讲授内容是:1.常量与变量的概念;变量的命名规则。2.整型、实型常量和变量。3.变量初始化。4.算术、赋值运算符。5.格式输入输出。教学总结