讲解视频:
P3-1.【结构化程序设计】第一节——知识要点:算法、顺序结构程序设计、if语句的语法结构及各种用法
知识要点:算法、顺序结构程序设计、if语句的语法结构及各种用法
一、算法、顺序结构程序设计任务分析
知识要点:算法、顺序结构程序设计
输入两个整数,求它们的商和余数。
1.可以程序运行时从键盘输入任意两个整数,也可以直接赋值;
2.根据C语言的语法规则两个整数相除的商是整数,事实上两个数相除的结果可能是实数,我们可以通过类型转换使其结果为实数。
本任务经过输入数据、计算、输出结果三步操作可以实现,这也是一个程序通常的执行过程。前一个项目中我们已经学习了C语言的输入和输出函数。对于简单的任务,输入数据,经过计算之后可以直接输出计算结果,但对于复杂的任务,往往需要先画出流程图,然后再编写程序。
二、必备知识与理论
1.算法
(1)算法概述
算法(Algorithm)一词源于算术(Alogrism)。简单说算术方法是一个由已知推求未知的运算过程。后来人们引申开来,把进行某一工作的方法和步骤称为算法。因此,算法反映了计算机的执行过程,是对解决特定问题操作步骤的一种描述。
【例3.1】求1×2×3×4×5(即5!)
步骤S1:先求1×2,得到结果2。
步骤S2:将步骤1得到的结果2乘以3,得到结果6。
步骤S3:将6再乘以4,得24。
步骤S4:将24再乘以5,得结果120。
这样的算法虽然正确,但太繁琐。改进的算法如下:
S1:使t=1;
S2:使i=2;
S3:使t×i,乘积仍然放在变量t中,可表示为:t×i→t;
S4:使i的值加1,即i+1→i;
S5:如果i≤5,则返回重新执行S3、S4和S5;否则,算法结束。
如果计算100!,只需将S5中的i≤5改成i≤100即可。
该算法对于计算机来说,是较好的方法,因为计算机的运算速度快,最适合做重复的工作。
算法的特性
①有穷性
②确定性
③有效性
④有零个或多个输入
⑤有一个或多个输出
(2)算法的表示
①用自然语言表示
②用传统流程图
用流程图表示的算法直观形象,比较清楚地显示出各个框之间的逻辑关系,因此得到广泛使用。下面给出3种基本结构及其对应的流程图。
③用N-S结构图表示
N-S结构图取消了流程线,不允许有随意的控制流,全部算法写在一个矩形框内,该矩形框以3种基本结构(顺序、选择、循环)描述符号为基础复合而成。
④用伪代码表示
用传统流程图、N-S图表示算法,直观易懂,但绘制比较麻烦。在设计一个算法时,可能要反复修改,而修改流程图是比较麻烦的,因此,流程图适合表示算法,但在设计过程中使用不是很理想。为了设计算法方便,常使用伪代码。
(3)结构化程序设计方法
“自顶向下,逐步细化”是对问题的解决过程逐步具体化的一种思想方法。例如:要在一组数中找出其中的最大数,首先,可以把问题的解决过程描述为:
①输入一组数。
②找出其中的最大数。
③输出最大数。
以上三条中,第①、③两步比较简单,对第②步可以进一步细化:
1)任取一数,假设它就是最大数。
2)将该数与其余各数逐一比较。
3)若发现有其他数大于假设的最大数,则取而代之。
现在对以上过程进一步具体化,得到如下算法:
①输入一组组数。
②设max =第一个数。
③将第二个数到最后一个数依次取出放入x。
④比较x与max的大小,如果x>max,则使max=x。
⑤输出 max。
2.C语句
C语句主要包括控制语句、表达式语句、赋值语句、函数调用语句、复合语句、空语句等,其中存在包含关系。
(1)控制语句
控制语句用于控制程序的流程,以实现程序中的各种结构。它们由特定的语句定义符组成 。C语言有9种控制语句,如下表所示。
(2)表达式语句
表达式语句由表达式加上分号“;”组成。其一般形式为:
表达式;
执行表达式语句就是计算表达式的值。表达式语句可分赋值语句、函数调用语句和空语句3种基本类型。
①赋值语句
赋值语句是由赋值表达式加上分号构成的表达式语句。其一般形式为:
变量=表达式;如:y=(a+b)/2;
②函数调用语句
函数调用语句的一般格式为:函数名(实际参数表);
如:printf(“This is a C program.”);
③空语句
只有分号组成的语句称为空语句。
(3)复合语句
把多个语句用花括号{}括起来组成的语句称为复合语句。在程序中可以把复合语句看成一条语句。如下面的语句实现交换两个数的值。
{ t=a; a=b; b=t;}
三、任务实施
现在我们来完成开头提出的任务:输入两个整数,求它们的商和余数。
本任务比较简单,有基本的三个操作步骤:
(1)数据输入:用数据输入函数scanf()来完成给两个整型变量的赋值。
(2)计算:使用除(/)运算计算商(注意类型转换)、求余(%)运算计算余数。
(3)数据输出:用输出函数printf(),并使用合适的格式控制使输出结果保留2位小数。
程序代码如下:
#include <stdio.h>
main()
{ int a,b,c;
float d;
scanf("%d,%d",&a,&b);
c=a%b;
d=(float)a/b; /* 将a转换为实型,以便得出实数商 */
printf("c=%d,d=%5.2f\n",c,d);
}
运行结果为:
-8,6↙
c=-1,d=-1.33
四、深入训练
1.输入某学生的三门课程考试成绩,计算出该学生的总成绩和平均成绩。试编写程序,并画出算法的N-S流程图。要求输出时平均成绩保留一位小数。
提示:设三门课程的成绩分别为n1,n2,n3,总成绩为sum,平均成绩为avg,可将这些变量均定义为float,输出结果保留一位小数。
五、知识要点:if语句的语法结构及各种用法任务分析
对于任意输入的3个数a,b,c,要按由小到大的顺序输出,需要对这3个数进行排序,也就是进行比较大小的操作,根据比较的结果而执行不同的操作,用前面所学知识显然不能满足需要,C语言的选择结构程序设计体现了程序的判断能力。
六、必备知识与理论
1.基本if 语句
if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)执行给出的两种操作之一。它的简单形式为:if(表达式) 语句;
例如:if(x>y) printf("%d",x);
如果表达式的值为真(非0),则执行其后所跟的语句;如果表达式的值为假,直接转到下一条语句继续执行。这种形式的if语句又被称为单分支语句。
【例3.2】输入x,输出x的绝对值。代码如下:
#include <stdio.h>
main()
{ int n;printf("please input a number:");scanf("%d",&n);if(n<0)n=-n;printf("the absolute value of the number is:%d\n",n);
}
2.if…else语句
if语句更常用的形式是双分支语句,其格式如下:
if(表达式) 语句1;
else 语句2;
程序执行时,若x的值大于y的值,则会在屏幕上显示x的值,否则显示y的值。
【例3.3】将输入的小写字母转换成大写字母输出,大写字母原样输出。
#include <stdio.h>
main()
{ char ch;printf("please input a letter:");scanf("%c",&ch);if(ch>='a' && ch<='z'){ ch=ch-32; /* 小写字母的ASCII值-32即为大写字母*/printf("the large letter is:%c\n",ch); }elseprintf("the letter is:%c\n",ch);
}
3.条件运算符
若if语句中,在表达式为“真”和“假”时,且都只执行一个赋值语句给同一个变量赋值时,可以用简单的条件运算符来处理。
条件运算符的一般格式:表达式1 ? 表达式2 :表达式3
条件运算符是C语言中唯一的一个三目运算符。
七、任务实施
输入任意3个数a,b,c,按由小到大的顺序输出。
基本思想:先确定a中存放最小的数,c中放最大的数,b中放中间的数。
(1)首先找出最小的数放到a中。a分别与b和c比较,若存在比a小的数,就交换变量的值,使a中的数总是最小。
(2)将剩余的两个数b与c比较一次,如果b大于c,则交换变量的值,那么c中的数最大,b中的就是中间数,排序完成。
(3)使用中间变量t存放临时数据。
程序代码如下:
#include <stdio.h>
main()
{ float a,b,c,t;printf("please input three number:");scanf("%f,%f,%f",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;} if(b>c){t=b;b=c;c=t;} printf("from samll to large:%.2f,%.2f,%.2f\n",a,b,c);
}
注意:{ }内的最后一个语句要有分号,{ }外没有分号。
八、深入训练
1.输入任一年份,判断是否为闰年。
提示:以变量leap代表是否闰年的信息。若闰年,令leap=1,非闰年,leap=0。最后判断leap是否为1(真),若是,则输出闰年信息。
2.输入任意一个整数,判断它的奇偶性并输出判断结果。
提示:设m为任一整数,if(m%2==0) 则m为偶数否则为奇数。