2顺序结构程序设计(教材第三章和第四章)学习方法:课前按照授课计划上指明的进度预习上课认真听讲,课件可下载作为笔记课下参照教材理解课件上所讲的内容和相关知识点完成作业&上机调试作业要求编程题(写作文)编程过程:写算法--再编程--上机调试要求:上交.c文件,程序功能和重点语句加注释读程序题(阅读理解)完成过程:本人读懂程序,给出结果上机对比验证要求:以注释形式写出程序的功能和输出结果例1:读程序#includestdio.hintmain(){inta=135,b=246,temp;temp=a;a=b;b=temp;printf(“a=%d,b=%d”,a,b);return(0);}/*程序功能:交换两个变量的值*//*语义:在内存申请三个空间,用于存储整型变量a,b,temp的值,同时为a,b赋初值135,246*/例1中涉及的知识点数据有常量与变量之分不同的变量要用不同的变量名加以区分。另外,要存储变量,就必须提前申请内存空间,由于不同的数据类型的编码方式和所占空间不同,所以在申请时要提供变量的数据类型。在C语言中,有三种基本数据类型:整数类型(int)、实数类型(float和double)、字符类型(char),分别用对应的词表示。=称为赋值运算符,不是等号,即将右边的值赋给左边的变量。例1中涉及的知识点inta=135,b=246,temp;变量声明(变量定义)语句该语句的语义是:向计算机系统申请三个int类型的内存空间(每个空间占4个字节),它们分别被命名为a,b,temp(变量名),用来存储相应变量的值,这三个内存空间分别都对应不同的内存地址。我们根据变量名使用变量,计算机系统则根据内存地址对数据进行读写。内存地址0FFF09800FFF09810FFF09820FFF09830FFF09900FFF09910FFF09920FFF09930FFF09980FFF09990FFF099A0FFF099B135的32位补码变量a变量b变量temp………………246的32位补码例2:求圆的周长和面积编写C程序计算圆的周长和面积,并输出。问题的分析用户:请给我计算一下圆的周长和面积。计算机:请问半径是多少?用户:5.3。计算机:圆的周长=2*π*5.3=33.3;圆的面积=π*5.3*5.3=88.25算法1.要求用户输入半径2.计算周长和面积3.输出计算结果要求用户输入半径计算周长和面积输出计算结果开始结束请同学课下复习教材第2章中的“怎样表示一个算法”1、要求用户输入半径-分析输入的数据存放在哪?内存本例中需要申请几个什么类型的空间呢?本例中需要申请三个空间,分别存储半径、周长和面积。他们均应该是实数类型float。如何申请呢?floatr,cir,area;该语句的含义是?内存地址0FFF09800FFF09810FFF09820FFF09830FFF09900FFF09910FFF09920FFF09930FFF09980FFF09990FFF099A0FFF099B变量r变量cir变量area………………floatr,cir,area;•语义:向计算机系统申请三个float类型的内存空间(每个空间占4个字节),它们分别被命名为r,cir,area(变量名),用来存储相应变量的浮点数表示,这三个内存空间分别都对应不同的内存地址。我们根据变量名使用变量,计算机系统则根据内存地址对数据进行读写。1、要求用户输入半径-分析如何实现输入呢?用库函数scanf()具体格式为:scanf(“%f”,&r);其语义为:从键盘上输入一个实数,存入变量r所对应的内存地址。•使用scanf()函数,前边要加上#includestdio.h•“”内表示输入数据的格式.一般只有格式说明符。•&是地址运算符。•输入多个数据时,应提供多个%开头的格式说明符和多个变量的地址(个数与类型应一致)。2、计算周长和面积-分析cir=2*3.14159*r;area=3.14159*r*r;上述两个算术表达式分别计算周长和面积;C语言的算术表达式与数学的算术表达式既相似,又有很大区别,例如:无π.常用的算术运算符分别表示为+,-,*,/2和3.14159都是常量,但类型不同,前者为整型常量,后者为double类型的常量3、输出结果printf(area=%f\n,area);printf(circumference=%f\n,cir);或printf(area=%f\ncircumference=%f\n,area,cir);•printf()中的多个参数之间用逗号分隔;•“”内表示输入数据的格式.其中有三种类型的符号:•直接按原样输出的普通字符,如:area=•以\开头的转义字符,如:\n表示回车•格式说明符,如%d,%c,%f等,格式说明符的个数应该与变量的个数和类型一致•注意:()里的两个area含义不同。问题解决:#includestdio.h/*程序功能:根据输入的半径,输出圆的面积和周长*/voidmain(){floatr,area,cir;/*定义实数变量*/scanf(“%f”,&r);/*从键盘输入变量r的值*/cir=2*3.14*r;/*计算周长*/area=3.14*r*r;/*计算面积*/printf(area=%f\ncircumference=%f\n,area,cir);/*输出面积和周长*/}更完善的程序:#includestdio.h#definePI3.14159/*程序功能:根据输入的半径,输出圆的面积和周长*/voidmain(){floatr,area,cir;/*定义实数变量*/printf(“Pleaseinputr:”);scanf(“%f”,&r);/*从键盘输入变量r的值*/cir=2*PI*r;/*计算周长*/area=PI*r*r;/*计算面积*/printf(area=%f\ncircumference=%f\n,area,cir);/*输出面积和周长*/}•另一种编译预处理命令,称为宏替换,或宏定义)•定义一个符号常量,则在编译前,将下边所有“”以外的PI替换成3.14159•习惯:常量名大写显示提示信息,实现更好的人机交互练习:求两个整数的商与余数算法:输入两个整数a,b计算整数的quotient,remains输出结果quotient,remains#includestdio.hvoidmain(){inta,b;/*定义两个整型变量*/intquotient,remains;/*定义两个变量存放结果*/printf(“pleaseinputtwointeger:”);scanf(“%d%d”,&a,&b);quotient=a/b;/*求商*/remains=a%b;/*求余数*/printf(“%d/%d=%d…%d\n,a,b,quotient,remains);}•输入多个变量时,要用多个格式说明符,格式说明符与变量的类型与个数应一致•多个格式说明符中间用什么符号分隔,输入数据时就用什么符号分隔你要输入的数据•如果没有分隔符,则默认可以使用回车、空格或Tab键分隔数据。整数运算的结果仍为整数%是求模运算符,只能用于整数之间的运算,其结果的符号永远与被除数相同VC中的调试技巧-如何查找逻辑错误?观察程序的执行顺序和变量的变化:编译并连接后,点击工具栏上的“小手”工具,设置断点。选择build-debug-go,进入调试状态,此时,程序运行停止在设置断点的那一行(可见行的最左端有一黄色箭头,表明程序运行的当前位置),与此同时,可以看到下边的窗口显示当前状态涉及到的变量的值。点击build-stepover,则程序执行当前这条语句,下边变量的值可能会随程序的运行而改变,多次单击stepover,则程序按顺序单步执行,可以观察整个程序的执行顺序和变量的变化过程,如果想中途退出,请选择build-debug-stopdebugging。二者结合可以帮你定位逻辑错误:当执行完一条语句后,当前变量的值并没有得到正确结果,则说明刚才那条语句的语义导致了错误。改正后,重新调试。例3:大小写转换(P87例4.11)如何转换?将小写字母的ASCII码减32即得大写字母的ASCII码。算法:输入小写字母lower计算其对应的大写字母upper输出upper.输入计算输出开始结束#includestdio.hvoidmain(){charlower,upper;printf(“pleaseinputanlowercase:”);scanf(“%c”,&lower);upper=lower-32;/*char与int数据间可进行算术运算*/printf(“lower:%cupper:%c\n,lower,upper);}printf(“lower:%dupper:%d\n,lower,upper);数据类型的自动转换和强制转换当表达式中的数据类型不一致时数据类型的自动转换方向:charintfloatdouble数据类型的强制转换在表达式前加(数据类型)例:s=(float)1/2s=(float)(1/2)的结果呢?赋值时也存在类型的强制转换的问题例:upper=lower-32;inta=4.5;当赋值号的右边的数据类型的数据范围大于左边数据类型的范围时,会有警告-“可能会丢失数据”关键是:不要让这种转换导致计算上的错误!另外两个库函数:字符输入/输出函数#includestdio.hvoidmain(){charlower,upper;printf(“pleaseinputanlowercase:”);lower=getchar();/*从键盘上输入一个字符,并赋值给lower*/upper=lower-32;printf(“aftertransform,itis”);putchar(upper);/*将upper输出*/}一般用法:字符型变量=getchar();含义是从键盘上敲入一个字符,然后把它赋给字符型变量。另一种用法:getchar();功能相当于“按任意健继续”,一般用于程序最后,以便查看前边的结果。格式:putchar(字符);功能:向终端输出一个字符。参数可以是字符型常(变)量或整型常(变)量。例如:putchar(c);putchar(‘a’);putchar(‘\n’);putchar(97);练习:根据三边长求三角形的面积计算公式为:c)/2b(ascsbsassarea其中,))()((输入计算输出开始结束练习题答案#includestdio.h#includemath.h/*要用数据函数sqrt,此处必须包含与之相对应的头文件*//*程序功能:根据三边长求三角形的面积*/voidmain(){floata,b,c,s,area;/*定义实数变量*/printf(“Pleaseinputa,b,c:”);scanf(“%f,%f,%f”,&a,&b,&c);/*从键盘输入变量的值*/s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));/*计算面积*/printf(area=%f\n,area);/*输出面积*/}复杂的数学计算如何实现?直接调用C语言的库函数即可。别忘了加#includemath.h请记住几个常用的函数:函数名功能函数名功能sqrt(x)计算x的平方根,x应大于等于0exp(x)计算ex的值fabs(x)计算x的绝对值pow(x,y)计算xy的值log(x)计算lnx的值sin(x)计算sinx的值,x为弧度值log10(x)计算lgx的值cos(x)计算cosx的值,x为弧度值本讲要求要求学会与例题难度相仿的简单程序设计要求读懂简单程序的功能,并能够正确读出程序的输出结果掌握涉