实验二 算法设计
实验二 算法设计
一、实验目的和要求:
掌握算法设计方法,熟悉简单的C程序设计方法。
二、实验内容:
1. 求1+2+3+...+100的值。要求:用N-S流程图设计算法,用C语言实现算法并运行出结果。
2. 求5!。要求:用N-S流程图设计算法,用C语言实现算法并运行出结果。
3. 求1*3*5*7*9的值。要求:用N-S流程图设计算法,用C语言实现算法并运行出结果。
4. 判定2000—2500年中的每一年是否闰年,并将结果输出。要求:用N-S流程图设计算法,用C语言实现算法并运行出结果。
5. 依次将10个数输入,要求输出其中最大的数。要求:用结构化流程图表示算法。
6. 判断一个数n能否同时被3和5整除。要求:用伪代码设计算法。
7. 将100~200之间的素数输出。要求:用结构化流程图或N-S流程图表示算法。
8. 求两个数m和n的最大公约数。要求:用N-S流程图设计算法。
三、实验步骤与结果
1.求1+2+3+...+100的值。
(1)设计思路
累加跳出
(2)程序源码(加注释)
#include<stdio.h>
int main()
{
int i,sum;
sum=0;
for(i=1;i<=100;i++)
sum+=i;
printf("\nsum=%d",sum);
}
(3)运行结果与分析
2.求5!。要求:用N-S流程图设计算法,用C语言实现算法并运行出结果。
(1)设计思路
累乘跳出
(2)程序源码(加注释)
#include<stdio.h>
int main()
{
int i=1,mul=1;
printf("5!=");
do
{
mul=mul*i;
i++;
}
while(i<=5);
printf("%d\n",mul);
return 0;
}
(3)运行结果与分析
- 求1*3*5*7*9的值。要求:用N-S流程图设计算法,用C语言实现算法并运行出结果。
(1)设计思路
while循环累加累乘
(2)程序源码(加注释)
#include<stdio.h>
void main()
{
int a = 1;
int s = 1;
while (a <=11)
{
s = s * a;
a = a + 2;
}
printf("s=%d", s);
}
(3)运行结果与分析
- 判定2000—2500年中的每一年是否闰年,并将结果输出。要求:用N-S流程图设计算法,用C语言实现算法并运行出结果。
(1)设计思路
数据判断
(2)程序源码(加注释)
#include <stdio.h>
#include <stdlib.h>
void input_year(int y[], int n, int sy);
void leap_year(int y[], int n);
int main()
{
int year[501]; // 定义数组 ,因为运行需要501才能满足跳出循环.
input_year(year, 501, 2000);
leap_year(year, 501);
system("pause");
return 0;
}
void input_year(int y[], int n, int sy)
{
int i;
for(i=0; i<n; i++)
y[i]=sy++;
}
void leap_year(int y[], int n)
{
int i;
for(i=0; i<n; i++){
if ((y[i]%4==0&&y[i]%100!=0)||y[i]%400==0)
printf("%d 是闰年!\n", y[i]);
else
printf("%d 不是闰年!\n", y[i]);
}
}
(3)运行结果与分析
5. 依次将10个数输入,要求输出其中最大的数。要求:用结构化流程图表示算法。
(1)设计思路
利用起泡法
(2)程序源码(加注释)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num[10], i, j, temp;
for (i=0; i<10; i++)
scanf("%d", &num[i]);
for (i=0, j=i+1; j<10; j++)
if(num[i]<num[j]){
temp=num[i];
num[i]=num[j];
num[j]=temp;
}
printf("Max=%d\n", num[0]);
system("pause");
return 0;
}
(3)运行结果与分析
6. 判断一个数n能否同时被3和5整除。要求:用伪代码设计算法。
(1)设计思路
取模判断
(2)程序源码(加注释)
begin
输入一个数n
if (n%3==0&&n%5==0)
Printf n
else
printf n
end
//只需要输入的数字满足以下条件
if (n%3==0&&n%5==0),就能被3和5同时整除
(3)运行结果与分析
- 将100~200之间的素数输出。要求:用结构化流程图或N-S流程图表示算法。
(1)设计思路
取模判断
(2)程序源码(加注释)
#include<stdio.h>
int main()
{
int count=0;
int i=0;
for(i=100;i<=200;i++)
{
int j;
for(j=2;j<i;j++)//用i去对除了1和它本身以外的数求余
{
if(i%j==0)
break;
}
if(j==i)
{
count++;
printf("%d\n",i);
}
}
printf("\n");
printf("素数个数为:%d\n",count);
return 0;
}(3)运行结果与分析
- 求两个数m和n的最大公约数。要求:用N-S流程图设计算法。
(1)设计思路
分解质因数法
(2)程序源码(加注释)
#include<stdio.h>
int main()
{
int count=0;
int i=0;
for(i=100;i<=200;i++)
{
int j;
for(j=2;j<i;j++)//用i去对除了1和它本身以外的数求余
{
if(i%j==0)
break;
#include <stdio.h>
#include <math.h>
// 输入两个数的最大公因数
int main() {
int m,n,s,i;
scanf("%d,%d",&m,&s);
printf("%d,%d 的最大公约数是:",m,s);
n=(m>s)?s:m;
for(i=n;i>0;i--){
if((m%i!=0)||(s%i!=0))continue;
printf("%2d\n",i);
printf("最小公倍数%5d",m*s/i);
return 0;
}
return 0;
}
}(3)运行结果与分析
四、实验总结与心得
总结:
还是需要有自己的思路才能更快的写出代码
画图要画标准,不要花里胡俏的,表达的意思到位就行
画N-S流程图是对整个程序的一个最初的构思
心得:
代码写错了,就是无非就是粗心