1 / 20
文档名称:

非常全c语言常用算法.doc

格式:doc   大小:171KB   页数:20页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

非常全c语言常用算法.doc

上传人:3399846977 2018/11/3 文件大小:171 KB

下载得到文件列表

非常全c语言常用算法.doc

文档介绍

文档介绍:一、基本算法
(两量交换借助第三者)
例1、任意读入两个整数,将二者的值交换后输出。
main()
{int a,b,t;
scanf("%d%d",&a,&b);
printf("%d,%d\n",a,b);
t=a; a=b; b=t;
printf("%d,%d\n",a,b);}
【解析】程序中加粗部分为算法的核心,如同交换两个杯子里的饮料,必须借助第三个空杯子。
假设输入的值分别为3、7,则第一行输出为3,7;第二行输出为7,3。
其中t为中间变量,起到“空杯子”的作用。
注意:三句赋值语句赋值号左右的各量之间的关系!
【应用】
例2、任意读入三个整数,然后按从小到大的顺序输出。
main()
{int a,b,c,t;
scanf("%d%d%d",&a,&b,&c);
/*以下两个if语句使得a中存放的数最小*/
if(a>b){ t=a; a=b; b=t; }
if(a>c){ t=a; a=c; c=t; }
/*以下if语句使得b中存放的数次小*/
if(b>c) { t=b; b=c; c=t; }
printf("%d,%d,%d\n",a,b,c);}

累加算法的要领是形如“s=s+A”的累加式,此式必须出现在循环中才能被反复执行,从而实现累加功能。“A”通常是有规律变化的表达式,s在进入循环前必须获得合适的初值,通常为0。
例1、求1+2+3+……+100的和。
main()
{int i,s;
s=0; i=1;
while(i<=100)
{s=s+i; /*累加式*/
i=i+1; /*特殊的累加式*/
}
printf("1+2+3+...+100=%d\n",s);}
【解析】程序中加粗部分为累加式的典型形式,赋值号左右都出现的变量称为累加器,其中“i = i + 1”为特殊的累加式,每次累加的值为1,这样的累加器又称为计数器。

累乘算法的要领是形如“s=s*A”的累乘式,此式必须出现在循环中才能被反复执行,从而实现累乘功能。“A”通常是有规律变化的表达式,s在进入循环前必须获得合适的初值,通常为1。
例1、求10!
[分析]10!=1×2×3×……×10
main()
{int i; long c;
c=1; i=1;
while(i<=10)
{c=c*i; /*累乘式*/
i=i+1;
}
printf("1*2*3*...*10=%ld\n",c);}
二、非数值计算常用经典算法

也称为“枚举法”,即将可能出现的每一种情况一一测试,判断是否满足条件,一般采用循环来实现。
例1、用穷举法输出所有的水仙花数(即这样的三位正整数:其每位数位上的数字的立方和与该数相等,比如:13+53+33=153)。
[法一]
main()
{int x,g,s,b;
for(x=100;x<=999;x++)
{g=x%10; s=x/10%10; b=x/100;
if(b*b*b+s*s*s+g*g*g==x)printf("%d\n",x);}
}
【解析】此方法是将100到999所有的三位正整数一一考察,即将每一个三位正整数的个位数、十位数、百位数一一求出(各数位上的数字的提取算法见下面的“数字处理”),算出三者的立方和,一旦与原数相等就输出。共考虑了900个三位正整数。
[法二]
main()
{int g,s,b;
for(b=1;b<=9;b++)
for(s=0;s<=9;s++)
for(g=0;g<=9;g++)
if(b*b*b+s*s*s+g*g*g==b*100+s*10+g) printf("%d\n",b*100+s*10+g);
}
【解析】此方法是用1到9做百位数字、0到9做十位和个位数字,将组成的三位正整数与每一组的三个数的立方和进行比较,一旦相等就输出。共考虑了900个组合(外循环单独执行的次数为9,两个内循环单独执行的次数分别为10次,故if语句被执行的次数为9×10×10=900),即900个三位正整数。与法一判断的次数一样。

(1)冒泡排序(起泡排序)
假设要对含有n个数的序列进行升序排列,冒泡排序算法步骤是:
①从存放序列的数组中的第一个元素开始到最后一个元素,依次对相邻两数进行比较,若前者大后者小,则交换两数的位置;
②第①趟结束后,最大数就存放到数组的最后一个元素里了,然后从第一个元素开始到倒数第二个元素,依次对相邻两数进行比较,若前者大后者小,则交换两数的位置;
③重复步骤①n-1趟,每趟比前一

最近更新

2025年成语山明水秀的意思(通用5篇) 7页

植树问题两端都栽公开课获奖课件赛课一等奖课.. 29页

2025年慰问信息(共篇) 38页

跨境电商商业计划书 23页

护理安全防范知识集锦 133页

2025年感谢物业管理的信(集锦7篇) 14页

2025年感谢恩师散文作文(精选21篇) 29页

网优工程技术讲义 113页

2025年感恩老师高二作文800字(锦集29篇) 46页

2025年感恩父母作文800字:尽一份孝心(整理2.. 27页

2025年感恩母亲节的小报(共篇) 50页

2025年感恩教师节的日记200字(整理20篇) 18页

2025年感恩奉献励志的青春语录(共篇) 26页

2025年感动学校人物作文(共13篇) 31页

远离烟花爆竹低碳绿色出行公开课获奖课件赛课.. 26页

2025年感冒的小学作文300字(整理30篇) 21页

2025年感人人生随笔(共篇) 36页

2025年愚人节快乐作文800字(共20篇) 30页

2025年意外的惊喜作文400字 小学六年级作文(.. 14页

2025年愉快的一天小学生500字优秀作文(精选1.. 10页

2025年想象心理的运用在舞蹈学习中的作用论文.. 17页

2025年想想自己写人作文(集锦13篇) 14页

架桥机安全验收表标准化用表 2页

1000以内加减法混合计算带答案 20页

译林八年级下册英语书答案 4页

近五年高考化学试题解析(化学平衡) 10页

美国加州交通法规 5页

个人自我诊断SWOT表格 3页

战国货币考 十二篇 15页

窦毅-横戈原不为封侯-横戈原不为封侯 7页