算法 = 数据结构 + 程序
一个程序主要包括以下两方面的信息:
一个程序设计人员应具备算法、数据结构、程序设计方法以及语言工具四个方面的知识,其中算法是灵魂,数据结构是加工对象,语言是工具,编程需要采用合适的方法。
#include<stdio.h>
int main(){
int num,temp = 1;
printf("请输入num数值:");
scanf("%d",&num);
if(num>=0){
for(int i = 1;i <= num;i++){
temp *= i;
}
printf("%d的阶乘值为:%d\n",num,temp);
}else{
printf("请重新输入num数值!");
}
return 0;
}
#include<stdio.h>
int main(){
int num,temp = 1;
printf("请输入num数值:");
scanf("%d",&num);
if(num>=0){
for(int i = 2;i <= num;i += 2){
temp *= i;
}
printf("%d以内偶数的阶乘值为:%d\n",num,temp);
}else{
printf("请重新输入num数值!");
}
return 0;
}
#include<stdio.h>
int main(){
int num,temp = 1;
printf("请输入num数值:");
scanf("%d",&num);
if(num>=0){
for(int i = 1;i <= num;i += 2){
temp *= i;
}
printf("%d以内奇数的阶乘值为:%d\n",num,temp);
}else{
printf("请重新输入num数值!");
}
return 0;
}
#include<stdio.h>
int main(){
int num,temp = 1;
printf("请输入num数值:");
scanf("%d",&num);
if(num>=0){
for(int i = 1;i <= num;i++){
if(i%2==0){
temp *= i;
}
}
printf("%d以内偶数的阶乘值为:%d\n",num,temp);
}else{
printf("请重新输入num数值!");
}
return 0;
}
判断是否为闰年的条件:
#include <stdio.h>
int main(){
printf("2000年~2500年中的闰年年份包括:\n");
for(int a = 2000;a <= 2500;a++){
if((a%4==0&&a%100!=0)||(a%400==0)){
printf("%d\n",a);
}
}
return 0;
}
#include<stdio.h>
int main(){
int num;
double result = 0.0;
printf("请输入num值:");
scanf("%d",&num);
if(num>=0){
for (int i = 1; i <= num; i++) {
if(i%2==1){
result += 1.0/i;
}else{
result -= 1.0/i;
}
}
printf("最终结果为:%f\n",result);
}else{
printf("请重新输入num值!\n");
}
return 0;
}
所谓素数,是指除了1和该数本身之外,不能被其他任何整数整除的数,因此判断一个数(数n,n>=3)是否为素数的方法就是:将2~n-1各个整数先后作为除数,如果都不能被整除,则n为素数。
#include<stdio.h>
int main(){
int i,j=2,flag=true;
printf("请输入一个数字:");
scanf("%d",&i);
for (; j<i; j++) {
if(i%j==0){
flag = !flag;
break;
}
}
if(flag){
printf("%d是一个素数\n",i);
}else{
printf("%d不是一个素数\n",i);
}
return 0;
}
#include<stdio.h>
int main(){
int i,j=2,flag=true;
printf("请输入一个数字:");
scanf("%d",&i);
for (; j<i/2; j++) {
if(i%j==0){
flag = !flag;
break;
}
}
if(flag){
printf("%d是一个素数\n",i);
}else{
printf("%d不是一个素数\n",i);
}
return 0;
}
一个有效的算法应该包含应该具有以下几个特点:
自然语言就是人们日常使用的语言,可以是汉语、英语或其他语言,用自然语言通俗易懂,但文字冗长,容易出现歧义。
流程图示用一些图框来表示各种操作,用图形表示算法,直观形象,易于理解。
例题2.5的流程图如下所示:
传统的流程图用流程线指出各框的执行顺序,对流程线的使用没有严格限制。因此,使用者可以不受限制地使流程随意地转来转去,使流程图变得毫无规律,阅读时要花很大精力去追踪流程,使人难以理解算法的逻辑。
三种基本结构:
A
和B
两个框是顺序执行的,即:在执行完A
框所指定的操作之后,必然接着执行B
框所指定的操作,顺序结构是最简单的一种基本结构。p
是否成立而选择执行A
框或B
框。【注】:无论p
条件是否成立,只能执行A
框或B
框之一,不可能既执行A
框又执行B
框,无论走哪一条路径,在执行完A
或B
后,都经过b
点,然后脱离本选择结构,A
或B
两个框中可以有一个是空的,即不执行任何操作,如图所示:
while
型)循环结构:当给定的条件p1
成立时,执行A
框操作,执行完A
后,再判断条件p1
是否成立,如果仍然成立,再执行A
框,如此反复执行A
框,直到某一次p1
条件不成立为止,此时不执行A
框,而从b
点脱离循环结构;until
型)循环结构:先执行A
框,然后判断给定的p2
条件是否成立,如果p2
条件不成立,则再执行A
,然后再对p2
条件作判断,如果p2
条件仍然不成立,又执行A
......如此反复执行,直到给定的p2
条件成立为止,此时不再执行A
,从b
点脱离本循环结构;由以上3种基本结构顺序组成的算法结构,可以解决任何复杂的问题。由基本结构所构成的算法属于“结构化”的算法,它不存在无规律的转向,只在基本结构内才允许存在分支和向前或向后的跳转。
既然用基本结构的顺序组合可以表示任何复杂的算法结构,那么,基本结构之间的流程线就属多余的了。将全部算法写在一个矩形框内,在该框内还可以包含其他从属于他的框,或者说,由一些基本的框组成一个大的框,这种流程图又称N-S结构化流程图,其符号如图所示:(由左至右依次为:顺序结构、选择结构、当型循环结构、直到型循环结构)
伪代码是介于自然语言和计算机语言之间的文字和符号来描述算法,用伪代码写算法并无固定的、严格的语法规则,可以用英文,也可以中英文混用,只要把意思表达清楚,便于书写和阅读即可,书写的格式要写成清晰易读的形式。
begin(算法开始)
1=>t
2=>i
while i<=5
{
t*i=>t
i+1=>t
}
print t
end(算法结束)
要完成一项工作,包括设计算法和实现算法两个部分,只有用计算机编程语言编写的程序写才能被计算机执行,用计算机语言表示算法必须严格遵循所用的语言的语法规则。
一个结构化程序就是用计算机语言表示的结构化算法,用3种基本结构组成的程序必然是结构化的程序,这种程序便于编写、阅读、修改和维护,这就减少了程序出错的机会,提高了程序的可靠性,保证了程序的质量。
结构化程序设计方法的基本思路是:把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都在人们容易理解和处理的范围内,具体来说,采取以下方法来保证得到结构化的程序: