C语言教学之常用算法程序.pptx
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if (A[i]==1) // 未被筛出的元素必定是素数
printf("%d\n" , i);
}
6 常用算法程序
常用算法程序
【21.】用二分查找法在已排序好的数组中查找输入的数。如果找到了输 出该数的下标,否则输出“未找到”。(数组为: 1,2,13,24,25,44,57,63,66,78,90,100)。
if (m>n) t=m; else t=n;
while (1) {
if (t%m==0 && t%n==0) break ;
// 每次检查t能否整除m和n 如果是则找到最小公倍数
t++; }
printf("%d和%d的最小公倍数为%d\n",m,n,t) ;
}
6 常用算法程序
常用算法程序
【19.】编写一个函数IsP(int n),函数的功能是检查n是否为素数,如果是 函数返回“真”,否则返回“假”。在主函数中调用该函数,打印100~ 1000之间的全部素数。
课件封面
实验教学标题
输入、输出和选择结构程序
6 常用算法程序
常用算法程序
【18.】编写程序求两个整数的最大公约数和最小公倍数。
#include <stdio.h>
void main()
{
int m,n,t;
printf("输入两个数(用空格或者回车间隔)\n") ;
scanf("%d%d", &m,&n);
{m = (h+t)/2; // 计算当前查找区域的中间位置
if (f==a[m])
// 如果要找的数据与中间位置的数据相等表示找到了
{printf ("%d找到了,它是:A[%d]\n",f,m);
sign=1;
}
else if (f>a[m]) // 否则如果要找的数据比中间位置的数据大
h=m+1; // 则下一次的查找区域在右半部分
// 设t为m,n的最小数
if (m>n) t=n;
else t=m;
ห้องสมุดไป่ตู้
while (t>0) {
if (m%t==0 && n%t==0) break ; // 每次检查m和n能否整除t 如果是则找到最大公约数
t--; }
printf("%d和%d的最大公约数为%d\n",m,n,t) ; // 设t为m,n的最大数
#include <stdio.h>
#include <math.h>
void main()
{
int a[10]={1,3,5,7,9,11,13,15,17,19};
int h ;
// 查找区域开始位置
int t ;
// 查找区域结束位置
int m ;
// 查找区域中间位置
int sign=0 ; //为0表示未找到,为表示找到
else
t=m-1; // 否则下一次的查找区域在左半部分
}
}
if (sign==0)
printf ("在数组中%d没有找到\n",f);
}
6 常用算法程序
常用算法程序
【22.】编写一个函数sort(int A[],int n),函数的功能是用冒泡法对数组进 行由大到小的排序,其中n为数组A的元素个数。在主函数中输入10个数据, 调用函数排序,然后输出排序好的10个数据。(输入数据: 6,8,9,1,2,5,4,7,3,18)
#include <stdio.h>
void sort(int A[],int n)
{
int i , j ; int t ;
// 改进后的冒泡法排序
for(i=0; i<n-1 ; i++)
for (j=i+1 ; j<n ; j++)
if (A[i]<A[j])
// <为由大到小,>为由小到大,A[i]表示前面的数,A[j]表示后面的数
for (i=0;i<10;i++)
printf("%d ",A[i]);
}
6 常用算法程序
常用算法程序
【23.】编写一个函数sort(int A[],int n),函数的功能是用选择法对数组进 行由小到大的排序,其中n为数组A的元素个数。在主函数中输入10个数据, 调用函数排序,然后输出排序好的10个数据。(输入数据: 6,8,9,1,2,5,4,7,3,18)
continue; }
}
void main()
{
int A[100+1] ; // 下标需要从2到100,因此数组长度为100+1
int i;
// 将全部数组元素设为1表示未被筛出
for (i=2; i<=100; i++) A[i] = 1 ;
cal_prime(A,100);
for (i=2; i<=100; i++)
#include <stdio.h> int IsP(int n) //函数的功能是检查n是否为素数
{
int i ;
//分析:从2到n-1逐一检查能否整除n,只要有一个整
除则肯定不是素数,所有均不能整除则肯定是素数
for (i=2; i<n; i++)
if (n%i==0) return 0; // 只要有一个整除则不是素数
{t=A[i] , A[i]=A[j] , A[j]=t ;}
}
void main()
{
int A[10] ;
int i ;
printf("连续输入10个数据(用空格或者TAB或者回车间隔)\n") ;
for (i=0;i<10;i++)
scanf("%d",&A[i]);
sort(A,10);
// 输出排序后的数组
int f;
// 要查找的数据
printf ("请输入要查找的数据:");
scanf ("%d", &f);
h=0, t=9;
// 一开始将整个数组设为查找区域
if (!( f<a[0] || f>a[9] ))
{
// 如果要查找的数据比开始元素小或者比结束元素大,则肯定不在
查找区域中
while (!sign && h<=t)
void cal_prime(int A[], int n) //使用筛选法计算素数
{int i,j ;
for (i=2; i<=n; i++)
for (j=2; i*j<=n; j++)
{
//如果该数尚未筛选过,则标记该数选中
if (A[i*j]==1)
A[i*j] = 0 ;
else //如果已经筛选过,则跳出改次筛选,进入下次筛选
return 1 ;
}
void main()
{
int i ;
// 打印100~1000之间的全部素数
for(i=100 ; i<1000 ; i++)
if (IsP(i))
printf("%d\n",i);
}
6 常用算法程序
常用算法程序
【20.】用筛选法求100之内的素数。
#include <stdio.h>