C语言基本算法(简单级别-).doc

上传人:一*** 文档编号:808895 上传时间:2019-07-16 格式:DOC 页数:14 大小:96KB
返回 下载 相关 举报
C语言基本算法(简单级别-).doc_第1页
第1页 / 共14页
C语言基本算法(简单级别-).doc_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《C语言基本算法(简单级别-).doc》由会员分享,可在线阅读,更多相关《C语言基本算法(简单级别-).doc(14页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、一、基本一、基本 1交换(两量交换借助第三者)交换(两量交换借助第三者)例 1、任意读入两个整数,将二者的值交换后输出。main() int a,b,t;scanf(“%d%d“,printf(“%d,%dn“,a,b);t=a; a=b; b=t;printf(“%d,%dn“,a,b); 【解析】程序中加粗加粗部分为算法的核心,如同交换两个杯子里的饮料,必须借助第三个空杯子。 假设输入的值分别为 3、7,则第一行输出为 3,7;第二行输出为 7,3。 其中 t 为中间变量,起到“空杯子”的作用。 注意注意:三句赋值语句赋值号左右的各量之间的关系! 【应用】 例 2、任意读入三个整数,然后按

2、从小到大的顺序输出。 main() int a,b,c,t;scanf(“%d%d%d“,/*以下两个 if 语句使得 a 中存放的数最小*/if(ab) t=a; a=b; b=t; if(ac) t=a; a=c; c=t; /*以下 if 语句使得 b 中存放的数次小*/if(bc) t=b; b=c; c=t; printf(“%d,%d,%dn“,a,b,c);2累加累加累加算法的要领累加算法的要领是形如“s=s+A”的累加式,此式必须出现在循环中才能被反复执行,从而实现累加功能。 “A”通常是有规律变化的表达式,s 在进入循环前必须获得合适的初值,通常为 0。 例 1、求 1+2+

3、3+100 的和。 main() int i,s;s=0; i=1;while(iai+1)t=ai;ai=ai+1;ai+1=t;for(i=0;ian-2) an-1=x ; /*比最后一个数还大就往最后一个元素中存放*/else /*查找待插位置*/j=0;while( jaj) j+;/*从最后一个数开始直到待插位置上的数依次后移一位*/for(k=n-2; k=j; k- -) ak+1=ak;aj=x; /*插入待插数*/ for(j=0;j=i;k-) ak+1=ak;ai=x; /*插入待插数*/for(i=0;i=m main() float x,eps;scanf(“%f%

4、f“,printf(“n%f,%fn“,x,g(x,eps); float g(float x,float eps) int n=1;float s,t;s=1; t=1;do t=t*x/(2*n);s=s+(n*n+1)*t; /*加波浪线的部分为直接法描述部分,t 为递推法描述部分*/n+; while(fabs(t)eps);return s; 四、其他常见算法四、其他常见算法1迭代法迭代法其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都从旧值的基础 上递推出新值,并由新值代替旧值。 例如,猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一

5、个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一 半零一个。到第 10 天早上想再吃时,就只剩一个桃子了。编程求第一天共摘多少桃子。 main() int day,peach;peach=1;for(day=9;day=1;day-) peach=(peach+1)*2;printf(“The first day:%dn“,peach);2进制转换进制转换(1)十进制数转换为其他进制数)十进制数转换为其他进制数 一个十进制正整数 m 转换成 r 进制数的思路是,将 m 不断除以 r 取余数,直到商为 0 时止, 以反序输出余数序列即得到结果。 注意,转换得到

6、的不是数值,而是数字字符串或数字串。 例如,任意读入一个十进制正整数,将其转换成二至十六任意进制的字符串。 void tran(int m,int r,char str,int *n) char sb=“0123456789ABCDEF“; int i=0,g;dog=m%r;stri=sbg;m=m/r;i+;while(m!=0);*n=i; main() int x,r0; /*r0 为进制基数*/int i,n; /*n 中存放生成序列的元素个数*/char a50;scanf(“%d%d“,if(x0i-) printf(“%c“,ai);printf(“n“); else exit

7、(0); (2)其他进制数转换为十进制数)其他进制数转换为十进制数 其他进制整数转换为十进制整数的要领要领是:“按权展开” ,例如,有二进制数 101011,则其十进制形式为 125+024+123+022+121+120=43。若 r 进制数 ana2a1(n 位数)转换 成十进制数,方法是 anr n-1+a2r1+a1r0。 注意注意:其他进制数只能以字符串形式输入。 例 1、任意读入一个二至十六进制数(字符串) ,转换成十进制数后输出。 #include “string.h“ #include “ctype.h“ main() char x20; int r,d;gets(x); /*

8、输入一个 r 进制整数序列*/scanf(“%d“, /*输入待处理的进制基数 2-16*/d=Tran(x,r);printf(“%s=%dn“,x,d); int Tran(char *p,int r) int d,i,cr; char fh,c;d=0; fh=*p;if(fh=-)p+;for(i=0;i=A) cr=toupper(c)-A+10;else cr=c-0;d=d*r+cr;if(fh=-) d=-d;return(d); 4字符处理字符处理 (1)字符统计:对字符串中各种字符出现的次数的统计。 典型例题:任意读入一个只含小写字母的字符串,统计其中每个字母的个数。#in

9、clude “stdio.h “ main() char a100; int n26=0; int i; /*定义 26 个计数器并置初值 0*/gets(a);for(i=0;ai!= 0 ;i+) /*n0中存放a的个数,n1 中存放b的个数*/nai-a +; /*各字符的 ASCII 码值减去a的 ASCII 码值,正好得到对应计数器下标*/for(i=0;i=xj-)printf(“%d “,aj);printf(“n“); 6辗转相除法求两个正整数的最大公约数辗转相除法求两个正整数的最大公约数该算法的要领算法的要领是:假设两个正整数为 a 和 b,先求出前者除以后者的余数,存放到变

10、量 r 中, 若 r 不为 0,则将 b 的值得赋给 a,将 r 的值得赋给 b;再求出 a 除以 b 的余数,仍然存放到变量 r 中如此反复,直至 r 为 0 时终止,此时 b 中存放的即为原来两数的最大公约数。 例 1、任意读入两个正整数,求出它们的最大公约数。 法一:用 while 循环时,最大公约数存放于 b 中 main()int a,b,r;do scanf(“%d%d“,while(amax) max=ai;else if(ai#include main( )int k,j,a101;clrscr(); /*清屏函数*/for(k=2;k101;k+)ak=k;for(k=2;k

11、sqrt(101);k+)for(j=k+1;j101;j+)if(ak!=0for(k=2;k101;k+) if(ak!=0)printf(“%5d“,ak); 9数组元素的插入、删除数组元素的插入、删除(1)数组元素的插入)数组元素的插入 此算法一般是在已经有序的数组中再插入一个数据,使数组中的数列依然有序。算法要领算法要领是: 假设待插数据为 x,数组 a 中数据为升序序列。 先将 x 与 a 数组当前最后一个元素进行比较,若比最后一个元素还大,就将 x 放入其后一个元 素中;否则进行以下步骤; 先查找到待插位置。从数组 a 的第 1 个元素开始找到不比 x 小的第一个元素,设其下标为

12、 i ; 将数组 a 中原最后一个元素至第 i 个元素依次一一后移一位,让出待插数据的位置,即下标为 i 的位置; 将 x 存放到 a(i)中。 例题参见前面“排序排序中插入法排序的例中插入法排序的例 1” 。(2)数组元素的删除)数组元素的删除 此算法的要领算法的要领是:首先要找到(也可能找不到)待删除元素在数组中的位置(即下标) ,然 后将待删元素后的每一个元素向前移动一位,最后将数组元素的个数减 1。 例 1、数组 a 中有若干不同考试分数,任意读入一个分数,若与数组 a 中某一元素值相等,就将 该元素删除。#define N 6main() int fsN=69,90,85,56,44,80,x; int i,j,n;n=N;scanf(“%d“, /*任意读入一个分数值*/*以下查找待删分数的位置,即元素下标*/for(i=0;in;i+)if(fsi=x)break;if(i=n) printf(“Not found!n“);else /*将待删位置之后的所有元素一一前移*/for(j=i+1;jn;j+) fsj-1=fsj;n=n-1; /*元素个数减 1*/for(i=0;in;i+)printf(“%d “,fsi);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com