C语言基本算法(简单级别)(2)
C语言常用算法
else low=mid+1; /*修改区间下界*/ mid=(high+low)/2; }
if(x==a[mid]) printf(\ else printf(\}
三、数值计算常用经典算法: 1.级数计算
级数计算的关键是“描述出通项”,而通项的描述法有两种:一为直接法、二为间接法又称递推法。
直接法的要领是:利用项次直接写出通项式;递推法的要领是:利用前一个(或多个)通项写出后一个通项。
可以用直接法描述通项的级数计算例子有: (1)1+2+3+4+5+??
(2)1+1/2+1/3+1/4+1/5+??等等。
可以用间接法描述通项的级数计算例子有: (1)1+1/2+2/3+3/5+5/8+8/13+??
(2)1+1/2!+1/3!+1/4! +1/5!+??等等。 (1)直接法求通项
例1、求1+1/2+1/3+1/4+1/5+??+1/100的和。
main()
{float s; int i; s=0.0;
for(i=1;i<=100;i++) s=s+1.0/i ;
printf(\}
【解析】程序中加粗部分就是利用项次i的倒数直接描述出每一项,并进行累加。注意:因为i是整数,故分子必须写成1.0的形式! (2)间接法求通项(即递推法)
例2、计算下列式子前20项的和:1+1/2+2/3+3/5+5/8+8/13+??。 [分析]此题后项的分子是前项的分母,后项的分母是前项分子分母之和。
main()
{float s,fz,fm,t,fz1; int i;
s=1; /*先将第一项的值赋给累加器s*/ fz=1;fm=2;
t=fz/fm; /*将待加的第二项存入t中*/ for(i=2;i<=20;i++) {s=s+t;
/*以下求下一项的分子分母*/
fz1=fz; /*将前项分子值保存到fz1中*/ fz=fm; /*后项分子等于前项分母*/
fm=fz1+fm; /*后项分母等于前项分子、分母之和*/
C语言常用算法
t=fz/fm;}
printf(\}
下面举一个通项的一部分用直接法描述,另一部分用递推法描述的级数计算的例子: 例3、计算级数
2n?1?x????n?0n!?2??n的值,当通项的绝对值小于eps时计算停止。
#include
float g(float x,float eps); main()
{float x,eps;
scanf(\
printf(\}
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.迭代法
其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都从旧值的基础上递推出新值,并由新值代替旧值。
例如,猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。编程求第一天共摘多少桃子。
main()
{int day,peach; peach=1;
for(day=9;day>=1;day--) peach=(peach+1)*2; printf(\2.进制转换
(1)十进制数转换为其他进制数
一个十进制正整数m转换成r进制数的思路是,将m不断除以r取余数,直到商为0时止,以反序输出余数序列即得到结果。
注意,转换得到的不是数值,而是数字字符串或数字串。
例如,任意读入一个十进制正整数,将其转换成二至十六任意进制的字符串。
C语言常用算法
void tran(int m,int r,char str[],int *n)
{char sb[]=\ int i=0,g; do{g=m%r; str[i]=sb[g]; m=m/r; i++;
}while(m!=0); *n=i; }
main()
{int x,r0; /*r0为进制基数*/
int i,n; /*n中存放生成序列的元素个数*/ char a[50];
scanf(\ if(x>0&&r0>=2&&r0<=16) {tran(x,r0,a,&n);
for(i=n-1;i>=0;i--) printf(\ printf(\ else exit(0); }
(2)其他进制数转换为十进制数
其他进制整数转换为十进制整数的要领是:“按权展开”,例如,有二进制数101011,则其十进制形式为1×25+0×24+1×23+0×22+1×21+1×20=43。若r进制数an……a2a1(n位数)转换成十进制数,方法是an×r n-1+……a2×r1+a1×r0。
注意:其他进制数只能以字符串形式输入。 例1、任意读入一个二至十六进制数(字符串),转换成十进制数后输出。 #include \#include \main()
{char x[20]; int r,d;
gets(x); /*输入一个r进制整数序列*/ scanf(\ /*输入待处理的进制基数2-16*/ d=Tran(x,r);
printf(\}
int Tran(char *p,int r) {int d,i,cr; char fh,c; d=0; fh=*p; if(fh=='-')p++;
for(i=0;i if(toupper(c)>='A') cr=toupper(c)-'A'+10; C语言常用算法 else cr=c-'0'; d=d*r+cr; } if(fh=='-') d=-d; return(d); } 4.字符处理 (1)字符统计:对字符串中各种字符出现的次数的统计。 典型例题:任意读入一个只含小写字母的字符串,统计其中每个字母的个数。 #include \stdio.h \ main() {char a[100]; int n[26]={0}; int i; /*定义26个计数器并置初值0*/ gets(a); for(i=0;a[i]!= '\\0' ;i++) /*n[0]中存放’a’的个数,n[1] 中存放’b’的个数……*/ n[a[i]-'a' ]++; /*各字符的ASCII码值减去’a’的ASCII码值,正好得到对应计数器下标*/ for(i=0;i<26;i++) if(n[i]!=0) printf(\%c :%d\\n \, i+'a', n[i]); } (2)字符加密 例如、对任意一个只含有英文字母的字符串,将每一个字母用其后的第三个字母替代后输出(字母X后的第三个字母为A,字母Y后的第三个字母为B,字母Z后的第三个字母为C。) #include \ #include \main() {char a[80]= \; int i; for(i=0; i if(a[i]>='x'&&a[i]<='z'||a[i]>='X'&&a[i]<='Z') a[i]= a[i]-26+3; else a[i]= a[i]+3; puts(a);} 5.整数各数位上数字的获取 算法核心是利用“任何正整数整除10的余数即得该数个位上的数字”的特点,用循环从低位到高位依次取出整数的每一数位上的数字。 例1、任意读入一个5位整数,输出其符号位及从高位到低位上的数字。 main() {long x; int w,q,b,s,g; scanf(\ if(x<0) {printf(\ w=x/10000; /*求万位上的数字*/ q=x/1000; /*求千位上的数字*/ b=x/100; /*求百位上的数字*/ s=x/10; /*求十位上的数字*/ C语言常用算法 g=x; /*求个位上的数字*/ printf(\ 例2、任意读入一个整数,依次输出其符号位及从低位到高位上的数字。 [分析]此题读入的整数不知道是几位数,但可以用以下示例的方法完成此题: 例如读入的整数为3796,存放在x中,执行x后得余数为6并输出;将x/10得379后赋值给x。再执行x后得余数为9并输出;将x/10得37后赋值给x??直到商x为0时终止。 main() {long x; scanf(\ if(x<0) {printf(\ \ do /*为了能正确处理0,要用do_while循环*/ {printf(\ \x); x=x/10; }while(x!=0)
…… 此处隐藏:2247字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [互联网资料]2022年厦门大学机电工程系824机械设计
- [互联网资料]东南大学2022年硕士研究生拟录取名单公
- [互联网资料]能源调研报告(精选多篇)
- [互联网资料]初三英语下学期 中考英语 语法填空训练
- [互联网资料]2022内蒙古选调生行测常识备考:新事物
- [互联网资料]自驾必备!在新西兰租什么样的车自驾游
- [互联网资料]佛教素食菜谱44页未完
- [互联网资料]盈利能力分析外文翻译
- [互联网资料]2022年南昌航空大学音乐学院736马克思
- [互联网资料]优选外贸跟单实习报告总结(精品版)
- [互联网资料]银行新员工培训总结
- [互联网资料]2_year_visa_new_guidance_190316
- [互联网资料]天津市五校宝坻一中静海一中杨村一中芦
- [互联网资料]2007--2008学年第一学期高三数学宁波市
- [互联网资料]Chromatic framework for vision in ba
- [互联网资料]幼儿园大班上学期美术教案《心愿树》含
- [互联网资料]2022年华中农业大学信息学院820微型计
- [互联网资料]硬盘坏道的表现 __硬盘使用久了
- [互联网资料]江苏省2016年会计从业资格考试《会计基
- [互联网资料]公共场所卫生监督试卷全解
- 高级英语第一册所有修辞方法及例子总结
- 综合交通枢纽规划与城市发展
- 沃尔玛的企业文化案例分析
- 美国Thanksgiving Day 感恩节 介绍
- PEP六年级英语上册Unit6How do you fee
- 最齐全的中国大型商场购物中心名单
- 数据结构实验报告八—哈夫曼编译码
- 杭州市余杭区人民政府(通知)
- 七年级语文成语运用专项训练
- 微观经济学第三章 消费者行为 课后习题
- 对_钱学森之问_的思考
- Excel_三级联动_下拉菜单
- 办公用品需求计划申请表
- 对外汉语教材必须要知道的发展史
- 挑战杯大学生学术科技作品竞赛作品申报
- 举办民办教育培训机构应具备下列条件
- 太阳能路灯项目设计方案
- 2013年八年级上最新人教版新教材Unit3I
- 【历史】 6-4 《近代科学之父牛顿》 课
- 高中生物《第四章 第二节 探讨加酶洗衣




