上次作业中的问题 数据类型声明(定义)不正确 float a,b,h, s sum? scant语句格式不正确 scanf(%f%f%f", &a, &b, &h: ■输入数据时一定要按照上面的格式输入数据 scanf(%f, %f, %f", &a, &b, &h): 缺少符号或多了符号或者符号写得有错 误
1 上次作业中的问题 ▪ 数据类型声明(定义)不正确 ▪ float a,b,h,s; ▪ sum? ▪ scanf()语句格式不正确 ▪ scanf(“%f%f%f” ,&a,&b,&h); ▪ 输入数据时一定要按照上面的格式输入数据 ▪ scanf(“%f,%f,%f” ,&a,&b,&h); ▪ 缺少符号或多了符号或者符号写得有错 误
第3讲 简单C程序设计之二 多函数程序设计
第3讲 ▪简单C程序设计之二 ▪多函数程序设计
编写求梯形7·若abh分别是12,3,结 # include<stdo.h》 若全部数据类型都是f|oat s=1/2*(a+b)h的结果又会 void maino 怎样? ·s=0.000000 int a.b. h: 因为1/2中的两个常数都是 整数,结果仍是整数,为0, float s, 再继续进行运算,结果仍为 printf( please inp 0。 scanf(od %d 要想得到正确结果,要 s=(a+b)2: s=(fo)1/2(a+b)h(强行 将1转换成 float类型)或 printf"s=%f\n s=1.0/2*(a+b)h因为第 个数据是实数类型,其他 的运算结果一律自动转换成 double类型)
3 编写求梯形面积的程序 #include void main() { int a,b,h; float s; printf(" please input a,b,h: "); scanf("%d%d%d", &a, &b, &h); s= (a+b)*h/2; printf(" s=%f\n", s); } • 若a,b,h分别是1,2,3,结 果会怎样? • s=4.000000 • 为什么? • 因为右边的数据都是整型数, 所以计算结果也是整型了。 • 要想得到正确结果就需要将 所有数据改为float类型。 • 若全部数据类型都是float, s=1/2*(a+b)*h的结果又会 怎样? • s=0.000000 • 因为1/2中的两个常数都是 整数,结果仍是整数,为0, 再继续进行运算,结果仍为 0。 • 要想得到正确结果,要 s=(float)1/2*(a+b)*h(强行 将1转换成float类型)或 s=1.0/2*(a+b)*h(因为第 一个数据是实数类型,其他 的运算结果一律自动转换成 double类型)
涉及到的语法知识 数据类型的自动转换和强制转换 当表达式中的数据类型不一致时 数据类型的自动转换 方向:char+int7t 数据类型 值得注意的是: 不要让这种转换导致计算上的错误 s 呢? 娅值叮1A∠转的问题 to ]: upper=lower -32: int a=4.5
4 涉及到的语法知识 -数据类型的自动转换和强制转换 ▪ 当表达式中的数据类型不一致时 ▪ 数据类型的自动转换 ▪ 方向:char→int→float→double ▪ 数据类型的强制转换 ▪ 在表达式前加(数据类型) ▪ 例:s=(float)1/2*(a+b)*h ▪ s=(float)(1/2)*(a+b)*h的结果呢? ▪ 赋值时也存在类型转换的问题 ▪ 例:upper=lower-32; int a=4.5; 值得注意的是: 不要让这种转换导致计算上的错误!
再例:把从键盘上输入的小 之丹掀成+之社输 源代码如下: include void maino char lower, upper; printf(" please input an lowercase: " scanf(“‰%c”,& klower) uper= :lower-32:/char与int数据间可进行算术 运算 printf(“lwer:%d→ upper:%d\n", lower, upper)
5 再例:把从键盘上输入的小 写字母换成大写字母并输出。 ▪ 如何转换? ▪ 将小写字母的ASCII码减32即得大写字母 的ASCII码。 ▪ 算法: ▪ 输入小写字母lower ▪ 计算其对应的大写字母upper ▪ 输出upper. 源代码如下: #include void main() { char lower,upper; printf(“please input an lowercase:”); scanf(“%c”, &lower); upper=lower-32; /* char与int数据间可进行算术 运算*/ printf(“lower:%c→upper:%c\n", lower,upper); } printf(“lower:%d→upper:%d\n", lower,upper);
三例:求两个整数的商与余数 include void maino inta,b;/定义两个整型变量*/ int quotient, remains:/定义两个变量存放结果*/ printf("please input two integer:") scanf(“%d%d”,&a,&b) quotient=a/b: remains=a‰b:求模运算符*/ printf("%d/%d=%d.yd\n, a, b quotient, remains):/显示运算结果*/
6 三例:求两个整数的商与余数 ▪ 算法: ▪ 输入两个整数a,b ▪ 计算整数的quotient,remains ▪ 输出结果quotient,remains #include void main() { int a,b; /* 定义两个整型变量 */ int quotient,remains; /* 定义两个变量存放结果*/ printf(“please input two integer:”); scanf(“%d%d”, &a,&b); quotient=a/b;remains=a%b; /*求模运算符*/ printf(“%d/%d=%d…%d\n",a,b, quotient,remains); /* 显示运算结果 */ }
数据类型与内存空间 不同的编译器可能有 sIze(3)和sef(30)的结 用 sizeof0求 果又是什么呢? 分别是int和doub|e类型的所 #include maino 占内存的字节数,在Vc上是 4和8, printf( Data type Number of bytes \n") printf( printf("char %d\n", sizeof(char)) printf("int %d\n", sizeof (int)) printf("short int %d\n", sizeof(short)) printf("long int %d\n" sizeof(long ) printf( float %dn", sizeof( float↑) printf( do ouble %d\n",sizeof(double):
7 数据类型与内存空间 ▪ 不同的编译器可能有不同的结果 ▪ 用sizeof()求得,不要靠经验。 #include main() { printf("Data type Number of bytes\n"); printf("------------ ---------------------\n"); printf("char %d\n", sizeof(char)); printf("int %d\n", sizeof(int)); printf("short int %d\n", sizeof(short)); printf("long int %d\n", sizeof(long)); printf("float %d\n", sizeof(float)); printf("double %d\n", sizeof(double)); } • sizeof(3)和sizeof(3.0)的结 果又是什么呢? • 分别是int和double类型的所 占内存的字节数,在VC上是 4和8
涉及到的语法知识 运算符的优先级和结合性 我们学过的运算符有: 0& sizeof*/%+-= 单目运算符双目运算符 优先级:出现多种运算符时谁先运算 0高于& sizeof(,然后是*/%,+-次之,最后是 结合性:出现多个同级运算符时从哪边开始运算 ·一般从左向左【例加。管术坛篁)。也有一些从右向应 还有一些运算符,用到时再讲
8 涉及到的语法知识 -运算符的优先级和结合性 ▪ 我们学过的运算符有: ▪ () & sizeof() * / % + - = 单目运算符 双目运算符 ▪优先级:出现多种运算符时谁先运算 ▪()高于& sizeof(),然后是* / %,+ -次之,最后是= ▪结合性:出现多个同级运算符时从哪边开始运算 ▪一般从左向右(例如:算术运算符),也有一些从右向左 (例如:赋值运算符 a=b=3;)。 还有一些运算符,用到时再讲
复杂的数学计算如何实现? 直接调用C语言的库函数即可。 别忘了加# nclude 请记住几个常用的函数 「函数名 功能 函数名 功能 sqrt(x)计算x的平方根,x应大于等于0exp(x)计算ex的值 fabs(x)|计算x的绝对值 pow(x,Y)计算xY的值 1g(x)计算nx的值 sin(x)|计算snx的值,x为弧度值 10q10(x)计算lox的值 cos(x)计算cosx的值,x为弧度值
9 复杂的数学计算如何实现? ▪ 直接调用C语言的库函数即可。 ▪ 别忘了加#include ▪ 请记住几个常用的函数: 函数名 功 能 函数名 功 能 sqrt(x) 计算x的平方根,x应大于等于0 exp(x) 计算e x的值 fabs(x) 计算x的绝对值 pow(x,y) 计算xy的值 log(x) 计算lnx的值 sin(x) 计算sinx的值,x为弧度值 log10(x) 计算lgx的值 cos(x) 计算cosx的值,x为弧度值
改装以前的程序 问题仍是:计算梯形的面积 将该问题放在一个函数里解决,即编写 个函数s(a,bh) 有几个参数,数据类型是什么? (float a, float b, float h 结果又是什么类型? float s(float a, float b, float h 10
10 改装以前的程序 ▪ 问题仍是:计算梯形的面积 ▪ 将该问题放在一个函数里解决,即编写 一个函数s(a,b,h). ▪ 有几个参数,数据类型是什么? ▪ (float a,float b, float h) ▪ 结果又是什么类型? ▪ float s(float a,float b, float h)