算法
一个程序主要包括以下两个方面的信息:
(1)对数据的描述。在程序中要指定用哪些数据以及这些数据的类型和数据的组织形式。这就是数据结构
(2)对操作的描述。即要求计算机进行操作的步骤,也就是算法。
数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。
算法+数据结构=程序
算法是灵魂,数据结构是加工对象,语言是工具,编程需要采用合适的方法。
算法是解决“做什么”和“怎么做”的问题。程序中的操作语句,实际上就是算法的体现。
什么是算法
算法:为解决一个问题而采取的方法和步骤
计算机算法可分为两大类别:数值运算算法和非数值运算算法。
数值运算的目的是求数值解
非数值运算包括的面十分广泛,最常见的是用于事务管理领域
简单的算法举例
求1*2*3*4*5
#include<stdio.h>
//求1*2*3*4*5
int main(void)
{
int mul = 1;
for (int i = 2; i < 6; i++)
mul *= i;
printf("1*2*3*4*5=%d", mul);
return 0;
}
运行结果:
求1*3*5*7*9*11
#include<stdio.h>
//求1*3*5*7*9*11
int main(void)
{
int mul = 1;
for (int i = 3; i < 12; i += 2)
mul *= i;
printf("1*3*5*7*9*11=%d", mul);
return 0;
}
运行结果:
有10个学生,要求输出成绩在80分以上的学生的学号和成绩
#include <stdio.h>
int main(void)
{
int sg[10] = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
int sn[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (int i = 0; i < sizeof(sg) / sizeof(int); i++)
{
if (sg[i] < 80)
continue;
printf("%d\t", sn[i]);
}
return 0;
}
运行结果:
判定2000-2500中的每一年是否为闰年,并将结果输出
//判定2000-2500中的每一年是否为闰年,并将结果输出
//1、能被4整除,但是不能被100整除
//2、能被400整除
#include <stdio.h>
int main(void)
{
int i = 0;
for (int year = 2000; year < 2501; year++)
{
if ((0 == (year % 4)) && (0 != (year % 100)))
printf("%d是闰年\t", year);
else if (0 == (year % 400))
printf("%d是闰年\t", year);
else
printf("%d不是闰年\t", year);
i++;
if (5 == i)
{
printf("\n");
i = 0;
}
}
return 0;
}
运行结果:
求1-1/2+1/3-1/4+...+1/99-1/100
//求1-1/2+1/3-1/4+...+1/99-1/100
#include <stdio.h>
int main(void)
{
double sum = 0;
for (int i = 1; i < 101; i++)
sum += (-1) * ((0 == (i % 2)) ? 1 : (-1)) / (double)i;
printf("%lf", sum);
return 0;
}
运行结果:
给出一个大于或等于3的正整数,判断它是不是一个素数
//给出一个大于或等于3的正整数,判断它是不是一个素数
#include <stdio.h>
int main(void)
{
int a = 0;
scanf("%d", &a);
for (int i = 2; i < a; i++)
{
if (0 == (a % i))
{
printf("%d不是素数", a);
return 0;
}
}
printf("%d是素数", a);
return 0;
}
运行结果:
在VS编译器内会报C4996错误,解决见下文:
算法的特性
- 有穷性
- 确定性
- 有0个或者多个输入
- 有一个或者多个输出
- 有效性
怎样表示一个算法
- 自然语言
- 传统流程图
- 结构化流程图
- 伪代码
三种基本结构
- 顺序结构
- 选择结构
- 循环结构
- 当(while)型循环结构
- 直到(until)型循环结构
三种基本结构有以下特点:
- 只有一个入口
- 只有一个出口
- 结构内的每一部分都有机会被执行到
- 结构内不存在“死循环”(无终止循环)
结构化程序设计方法
- 自顶向下
- 逐步细化
- 模块化设计
- 结构化编码
本文来自博客园,作者:EricsT,转载请注明原文链接:https://www.cnblogs.com/EricsT/p/18457567