第3章简单的C程序设计本章目标掌握标准输入输出函数的格式及使用。会编写简单C程序会使用常用数学函数3.1语句语句是程序最基本的执行单位,程序的功能就是通过对一系列语句的执行来实现的(1)控制语句,实现流程控制,如:分支语句实现分支控制过程:if(ab)x=a;elsex=b;(2)变量声明语句:如floatx,y,z;(3)表达式语句:表达式加分号“;”(4)复合语句:用一对“{}”,将若干语句顺序组合在一起就形成了一个程序段。(5)空语句。只有一个分号构成的语句,表示什么也不做。3.2标准文件输入输出函数一个C语言的源程序要有输入输出功能。C语言本身并没有提供专门的数据输入/输出语句,而是用C标准函数库中的函数来实现的,如scanf、printf等。在使用标准的输入/输出库函数时,需要使用预编译命令”#includestdio.h”C语言中从标准输入和输出设备中进行读写的四个标准函数是:格式输出函数printf、格式输入函数scanf、字符输入函数getchar和字符输出函数putchar3.2.1字符输入输出函数例3.1猜字母:输入某字母在字母表中的序号(从1开始),输出该字母(大写)#includestdio.hintmain(){charch;intindex;scanf(“%d”,&index);ch=‘A’+index-1;//或ch=64+index;printf(“%c”,ch);}putchar(ch);putchar()函数的其功能是向终端输出其括号内参数的内容,参数可以是字符变量、字符常量输出字符’a’:putchar(‘a’);输出一个回车符putchar(‘\n’);输出字符变量a的值:putchar(a);猜猜:putchar(65);输出什么?到VC中试试3.2.1字符输入输出函数例3.2小写字母变大写#includestdio.hintmain(){charch1,ch2;ch1=getchar();ch2=ch1-32;//小写字母比大写字母的ASCCI码大32;putchar(ch2);}getchar()函数没有参数,其功能是从终端读入一个字符,作为函数值返回小练习计算字母序号,输入一个字母(小写),输出该字母在字母表中的序号(1)读入字符ch;(2)计算序号index=ch-’a’+1;(3)输出整数indexcharch;intindex;ch=getchar();index=ch-’a’+1;printf(“%d\n”,index);3.2.2格式化输出函数printfprintf(%d,count);printf将一些信息按照指定的格式送到标准输出(显示器)count输出参数表:待输出的数据,可以是常量、变量或表达式格式:printf(“格式控制串”,输出参数表)%d格式字符串:指定数据的输出格式#includestdio.hintmain(){intcelsius,fahr;fahr=100;celsius=5*(fahr-32)/9;printf(“fahr=%d,celsius=%d\n,fahr,celsius);return0;}执行程序的输出结果为:fahr=100,celsius=37例3.3求华氏温度100F对应的摄氏温度引号内的fahr和引号外的fahr有区别吗?输出格式printf(“fahr=%d,celsius=%d\n,fahr,celsius);普通字符,原样输出%开头的是转换说明,对应与后面一个输出参数,对应参数将被转换成指定格式后在该位置输出输出结果:fahr=100,celsius=37输出参数列表‘\n’是转意字符,用来输出一个回车转换字符串printf(%d,count);%d转换字符串说明%d将参数按整数形式转换输出,对应参数应是int类型%ld将参数按长整数形式转换输出,对应参数是long型%c输出一个字符,对应参数应该是一个字符%s输出一个字符串,对应参数应该是一个字符串%f将参数按带小数点数形式输出,对应参数应是double类型,默认情况下精确到6位小数转换字符串%dintvisitor_count=150;printf(%d,visitor_count);输出结果:150转换字符串%mdintsalary=5500;printf(%10d,salary);输出结果:5500输出结果的左边显示了6个空格%10d转换字符串%ffloatcircumference=78.53;printf(%f,circumference);输出结果:78.530000默认情况下精确到六位小数9.4786789;9.478679转换字符串%m.nfdoublemercury_level=168.2251074;printf(%7.2f,mercury_level);输出结果:168.23宽度,表示所有的数字和小数点所占的位数。不够7位右对齐。%7.2f精度(精确到小数点后多少位)scanf(%d,&num);3.2.3scanf函数scanf函数从标准输入(键盘)读取信息,按照格式描述把读入的信息转换为指定数据类型的数据,并把这些数据赋给指定的程序变量。转换字符串&符号(附在读取的每个变量上)用于指明变量在内存中的位置变量的名称转换字符串参数变量的类型要求的实际输入%dint十进制数字序列%ffloat十进制数实数%lfdouble十进制数实数内存scanffloattax_rate;scanf(%f,&tax_rate);tax_rate•在内存中分配一块32位存储空间•存储空间使用名称“tax_rate”标识•提示用户输入一个值•输入的值存储在变量中(因为scanf提供此变量的地址)12.234内存scanfdoubletax_rate;scanf(%lf,&tax_rate);tax_rate•在内存中分配一块64位存储空间•存储空间使用名称“tax_rate”标识•提示用户输入一个值•输入的值存储在变量中(因为scanf提供此变量的地址)12.234约定:以后凡说要定义实型变量,都使用double#includestdio.hintmain(){doubleradius,high,vol;printf(请输入圆柱体底面积的半径和圆柱体的高:);scanf(%lf%lf,&radius,&high);vol=3.14*radius*radius*high;printf(radius=%f,high=%f,vol=%f\n,radius,high,vol);}例3.4计算圆柱体积内存radiushighvol510785请输入圆柱体底面积的半径和圆柱体的高:510小练习(1)编程,从键盘读入一个数圆的半径radius(实数),输出圆的面积,保留两位小数scanf函数使用注意scanf(格式字符串,地址列表)在格式字符串中若有普通字符,则输入时在对应位置也必须输入该普通字符,否则会因读入格式错误而终止程序。如果有scanf(“%d,%d”,&a,&b)输入的两个数直接必须有一个逗号3,5正确35错误如果有scanf(“a=%d,b=%d”,&a,&b)输入应该是:a=3,b=5,否则就会失败scanf的格式字符串中最好不加任何普通字符,只写%开头的格式转换符。如scanf(“%d%d”,&a,&b)不要给自己制造太多格式限制!数学函数的使用要包含头文件math.h:#includemath.h1、求绝对值求整数的绝对值,用abs:inti=-3,j;j=abs(i);求实数的绝对值,用fabs:doublea=-12.3,b;b=fabs(a);数学函数的使用2、求开方,用sqrtdoublea=2.3,b;b=sqrt(a);3、求幂xy,用powdoublex=2,y=3,z;z=pow(x,y)4、求ex,用expdoublex=2.3,b;y=exp(x);数学函数的使用5、求自然对数,用logdoublex=13,y;y=log(x);6、求以10为底的对数,用log10doublex=13,y;y=log10(x);数学函数的使用7、三角函数doublex=1.5,y;y=sin(x);y=cos(x);y=tan(x);更多数学函数见书本319页表D2例3.5:计算两点间距离编程:输入4个实数x1,y1,x2,y2,数据之间用空格隔开。表示两点坐标(x1,y1),(x2,y2),计算并输出两点间的距离。结果保留两位小数。(提示:sqrt(a)可以求a的开方)解题思路(1)用double定义x1,y1,x2,y2,dist(2)读入四个整数x1,y1,x2,y2(3)计算dist:dist=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))也可以写成两个语句:dist=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);dist=sqrt(dist);(4)输出dist,保留2为小数,用%.2f程序#includestdio.h#includemath.hintmain(){doublex1,y1,x2,y2,dist;scanf(%lf%lf%lf%lf,&x1,&y1,&x2,&y2);dist=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);dist=sqrt(dist);printf(%.2f,dist);return0;}例3.6求整数的位数输入一个整数,输出该整数的位数。提示:(1)求n的对数函数为:log10(n);(2)考虑一个整数的对数和位数的关系:对数取整加1即该数的位数(3)可用强制类型转换扔掉小数部分有以上3点可知,整数n的位数是:(int)log10(n)+1;类型转换(P32)1、不同级别的操作数运算时,精度低的自动想精度高的转换如:doublea=1/2;a的值是0.0doublea=1.0/2;a的值是0.52、赋值时类型转换如:doublea=1;//会把1.0赋给ainti=1.5;//会把1.5转换为整型得1,赋给i类型转换3、强制类型转换(类型名)操作数如:doublea=2.5;intn;n=(int)a;//将a的值转换为整型2,赋给n又如:求两整数的商,商为实数inta=2,b=3;doublec;c=(double)a/b;//强制类型转换或c=1.0*a/b;//不同类型运算时向精度高的转换先将a转换为实数,再除以b!强制转换优先级最高例3.6的程序#includestdio.h#includemath.hintmain(){intn,len;scanf(%d,&n);len=(int)log10(n)+1;//因为len是整型,写成len=log10(n)+1;也行printf(%d是%d位数\n,n,len);return0;}课下作业熟练默写本章6个例子,并上机调试。上机作业:1、实数的绝对值:输入一个实数,输出它的绝对值,结果保留两位小数。2、两点间距离:输入4个实数x1,y1,x2,y2,数据之间用空格隔开。表示两点坐标(x1,y1),(x2,y2),计算并输出两点间的距离。结果保留两位小数。3、编程,输入三角形的三边长(实数),输出三角形的面积,结果保留两位小数。(提示:用海伦公式)。4、编程,输入一元二次方程ax2+bx+c=0的系数a,b,c,假定满足b2-4ac0,输出方程的两个根。结果保留两位小数。5、输入一个大写字母,输出该字母在字母表中的序号(’A’的序号为1)6、输入3个字符,输出其中ASCII码最大的一个。(注意:用getchar()或%c读入时,空格和回车都是有效输入)7、输入一个整数,输出该整数的位数。8、水仙花数定义如下:如果一个三位数的各位数字的立方和等于自身,则称该数为水仙花数。编程,输入一个三位数,判断该数是否是水仙花数,如果是,输出”yes”,否则输出”no