1 / 20
文档名称:

非常全的C语言常用算法.doc

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

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

分享

预览

非常全的C语言常用算法.doc

上传人:164922429 2018/12/1 文件大小:170 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趟,每趟比前一

最近更新

高一语文学习计划(13篇) 38页

论述销售人员忠诚度管理 21页

超音速等离子体炬的磁流体动力学数值研究 3页

负面网络口碑对品牌忠诚影响因素的实证研究 3页

试析热工计量自动检定技术的应用 3页

议题设置推动智库国际化发展的实证研究 3页

规范房屋“养老金”管理实践——以平顶山市为.. 3页

补料工艺对三孢布拉霉菌合成β-胡萝卜素的影响.. 3页

表达能力的重要性 32页

2025年度个人租房合同协议书模板(含租赁房屋.. 7页

2025平安福保险合同电子版健康管理系统合作协.. 9页

脉搏血氧仪的开短路的在线检测应用设计 3页

螺纹环换热器总体介绍 35页

绿色、智能及节能技术在建筑中的应用分析 3页

管道防腐层的检查及分析技术探讨 3页

竹芯模盒现浇混凝土空心楼盖施工技术研究 3页

韶关市“广东技工”职业技能大赛计算机网络应.. 7页

私募股权投资中对赌协议的研究 4页

磁浮轴承及其应用 3页

砒砂岩重塑土力学特性及本构模型试验研究 3页

荧光偏振免疫分析 14页

色谱概论和经典液相色谱法 27页

2025年龙猫电影观后感350字 6页

2025年龙年春节男宝宝名字 5页

2025年龙宝宝有福气的乳名女孩 7页

2025年鲁滨孙漂流记读后感50字 6页

2025年高考生心理焦虑疏导 4页

2025年高考模拟填报志愿注意事项 4页

2025年属鼠2025年有大喜缠身 6页

小学语文新部编版一年级下册第二单元语文园地.. 35页