c语言常见编程算法实例

c语言常见编程算法实例

ID:20740261

大小:122.50 KB

页数:19页

时间:2018-10-15

上传者:U-8898
c语言常见编程算法实例_第1页
c语言常见编程算法实例_第2页
c语言常见编程算法实例_第3页
c语言常见编程算法实例_第4页
c语言常见编程算法实例_第5页
资源描述:

《c语言常见编程算法实例》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

常见编程算法实例一、关于数字上的一些编程算法1.输出9*9口诀乘法表。分析:分行与列考虑,共9行9列,i控制行,j控制列。#include"stdio.h"main(){inti,j,result;printf(" ");for(i=1;i<10;i++){for(j=1;j<=i;j++){result=i*j;printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/}printf(" ");/*每一行后换行*/}}2.求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。分析:关键是计算出每一项的值。main(){inta,n,count=1;longintsn=0,tn=0;printf("pleaseinputaandn ");scanf("%d,%d",&a,&n);printf("a=%d,n=%d ",a,n);while(count<=n){tn=tn+a;sn=sn+tn;a=a*10;++count;}printf("a+aa+...=%ld ",sn);}3.公式∏/4=1-1/3+1/5-1/7+...+1/n,求∏ 的近似值,直到最后一项1/n的绝对值小于0.000001。#include#includemain(){intf=1;doublepi=0,t=1,v=1;while(fabs(t)>1e-6){pi=pi+t;v+=2;f=-f;t=f/v;}pi*=4;printf("∏=%f ",pi);}1.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。规律:分子是前一项分子分母之和,分母是前一项的分子。main(){intn,t,number=20;floata=2,b=1,s=0;for(n=1;n<=number;n++){s=s+a/b;t=a;a=a+b;b=t;/*序列规律的实现*/}printf("sumis%9.6f ",s);}2.判断11<=x<=10000中的数那些是回文数,统计回文数个数,回文数每行输出10个。分析:(1)让x重新构成新的数t,如果x==t则是回文数.(2)分解出x的各位,进行首尾比较,如果都相等则是回文数。fun1()//算法一{longx,i,t=0,s=10,cnt=0;for(x=11;x<10000;x++) {i=x;while(i!=0)//构成新的数{t=t*s+i%10;i=i/10;}if(t==x){printf("%5d",x);cnt++;if(cnt%10==0)printf(" ");}t=0;}printf(" cnt=%5d",cnt);}fun2()//算法二{longx,i,t=0,j=0,s=10,x1,cnt=0;inta[10];for(x=11;x<10000;x++){x1=x;while(x1!=0)//分解出各位{a[j]=x1%10;x1=x1/10;j++;}i=0;j--;while(i=j){printf("%5d",x);cnt++;if(cnt%10==0)printf(" ");}j=0;}printf(" cnt=%5d",cnt);}main(){fun1();}1.求1+2!+3!+...+20!的和。main() {floatn,s=0,t=1;for(n=1;n<=20;n++){t*=n;//实现阶乘s+=t;//将阶乘累加}printf("1+2!+3!...+20!=%e ",s);//%e为科学计数法输出}1.输入一个年份判断它是否是闰年,满足下面条件之一就称为闰年:(1).能被4整除而不能被100整除。(2).能被100整除也能被400整除。#includemain(){longintyear;printf("inputyear:");scanf("%d",&year);if(year%4==0&&year%100!=0||year%100==0&&year%400==0)printf("yes");elseprintf("No");}2.将十进制数转换成任意进制。分析:将输入的数循环除以基数取余直到商为0,然后逆序输出。#includevoidmain()//idec为十进制数,ibase为要转换成数的基{intidec,i,idr,p=0,ibase;charstrdr[20],t;printf("输入要转换的十进制数idec=");scanf("%d",&idec);printf(" 输入要转换成的进制基数(如:八进制则输入8)ibase=");scanf("%d",&ibase);while(idec!=0)//循环除以基数取余直到商为0{idr=idec%ibase; if(idr>=10)strdr[p++]=idr-10+65;//将16进制的10,11,12,13,14,15与A,B,C,D,E,F对应elsestrdr[p++]=idr+48;//将数字转换为数字字符idec/=ibase;//得到商,把这个商的值重新赋值给idec}//下面for循环的目的是将取余的各数逆序存放,for(i=0;i

#includemain(){inti,j,cnt=0;for(i=3;i<=1000;i++){for(j=2;j<=sqrt(i);j++)//i能被j整除说明不是素数,数学上已经证明只需要判断{if(i%j==0)break;}//j<=sqrt(i),i都不能被j整除就能证明i为素数。if(j>sqrt(i)){printf("%4d",i);cnt++;if(cnt%5==0)printf(" ");//控制每行输出5个数}}}2.判断整数x(0main(){longintx,y,i=10;intflag=0;for(x=1;x<100;x++){y=x*x;while(y/i!=0)//利用循环取余的方法进行判断{//先让y对10取余,判断是否是同构数if(y%i==x)//再对100取余判断,直到y/i为0{flag=1;break;}i=i*10;}if(flag==1)printf(" %d是%d的同构数!",x,y);flag=0;i=10;}}1.一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3。编程找出1000以内的所有完数。main(){staticintk[11];inti,j,n,s;for(j=2;j<1000;j++){n=-1;s=j;for(i=1;i1;j--){n=i*i+j*j;m=x*x;if(m==n){flag=1;break;}}if(flag==1){printf(" 弦数为%d%d*%d+%d*%d=%d*%d",x,i,i,j,j,x,x);flag=0;break;}}}1.打印出杨辉三角形(要求打印出10行如下图)        1      1 1      1 2 1      1 3 3 1      1 4 6 4 1      1 5 10 10 5 1 main(){inti,j,a[10][10];printf(" ");for(i=0;i<10;i++){a[i][0]=1;a[i][i]=1;}for(i=2;i<10;i++)for(j=1;jmain(){inta,b,num1,num2,temp;printf("pleaseinputtwonumbers: ");scanf("%d,%d",&num1,&num2);if(num1!=0){temp=num1;num1=num2;num2=temp;}a=num1;b=num2;while(b!=0)/*利用辗除法,直到b为0为止*/{temp=a%b;a=b;b=temp;}printf("gongyueshu:%d ",a);printf("gongbeishu:%d ",num1*num2/a);}2.给一个正整数,要求:一、求它是几位数,二、逆序打印出各位数字。x先对10取余,然后x=x/10取整main(){longa=0,x;printf("inputanumber:");scanf("%ld",&x);printf("x的各位为:");while(x!=0){printf("%d,",x%10);//输出个位x/=10; a++;//统计位数}printf(" 你输入的是%d位数",a);}1.将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n, 重复执行第一步。(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。#includemain(){intn,i;printf(" pleaseinputanumber: ");scanf("%d",&n);printf("%d=",n);for(i=2;i<=n;i++){while(n!=i){if(n%i==0){printf("%d*",i);n=n/i;}elsebreak;}}printf("%d",n);}2.自然数对:两个自然数的和与差都是平方数。如:8和17的和8+17=25与其差17-8=9,25和9都是平方数,则(8和17)就是自然数对在100以内有多少个自然数对列举出两个数的所有组合判断是否满足条件。#include#includemain() {intx,i,j,y;for(i=100;i>1;i--)for(j=1;j<100;j++){x=i+j;y=i-j;if(y<0)break;//目的剔除重复的自然数对//用sqrt函数开方,如果是平方数开放后取整的乘积应该相等if(x==(int)sqrt(x)*(int)sqrt(x)&&y==(int)sqrt(y)*(int)sqrt(y)&&i!=j)printf("自然数对:(%d,%d) ",i,j);}}1.有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数move(array,n,m)intn,m,array[20];{int*p,array_end;array_end=*(array+n-1);for(p=array+n-1;p>array;p--)*p=*(p-1);*array=array_end;m--;if(m>0)move(array,n,m);}main(){intnumber[20],n,m,i;printf("thetotalnumbersis:");scanf("%d",&n);printf(" input%dnmuber",n);for(i=0;iintfun(char*str,longint*num){inti=0,flag=0,wz=1,n=0,k=0;chartemp[50];do{while(str[i]>='0'&&str[i]<='9'){temp[k++]=str[i];flag=1;i++;}if(flag==1){while(--k>=0){num[n]=(temp[k]-'0')*wz+num[n];wz*=10;}k=0;n++;flag=0;wz=1;}}while(str[i++]);returnn;}main(){charstr[50];longintnum[10]={0};inttotal=0;printf("inputstring: ");gets(str);total=fun(str,num);printf("total=%d",total);while(total>0){printf(" %ld",num[--total]);}}一、排序查找编程算法 1.输入5个整数存到数组中并用插入法排序。插入法:每一步将一个待排序元素按其关键字值的大小插入到已排序序列的适当位置上,直到待排序元素插入完为止。#includefun(inta[],intn){intk,j,t;for(j=1;j=0&&t>a[k])//在已排序列找插入位置,并将以排序中的{a[k+1]=a[k];k--;}//值顺序后移动直到移动到插入点a[k+1]=t;//k+1的值就为插入点}}main(){inta[5],i;for(i=0;i<5;i++){printf(" inputa[%d]=",i);scanf("%d",&a[i]);}fun(a,5);for(i=0;i<5;i++)printf("%4d",a[i]);}2.用冒泡法对数组进行排序(升序)。冒泡法排序:两两比较待排序序列中的元素,并交换不满足顺序要求的各对元素,直到全部满足顺序要求为止#includevoidsort(inta[],intn){inti,j,t;for(i=0;ia[j+1])//两两比较{t=a[j];a[j]=a[j+1];a[j+1]=t;}//交换不满足升序条件的数对}voidmain(){inta[5]={5,10,-7,3,7},i,t,j;sort(a,5);for(i=0;i<=4;i++)printf("%5d",a[i]);}1.输入10个整数,并对10个数进行排序(升序)。选择法:即从10个数中(待排序数),选择一个最小的与第一个元素交换,下次类推,即在后9个数中选择一个最小值第二个元素进行交换。#defineN10main(){inti,j,min,tem,a[N];printf("pleaseinputtennum: ");for(i=0;ia[j])min=j;//找到一个更小的数tem=a[i];//下面的语句将每次找到最小的数与第i个数交换a[i]=a[min];a[min]=tem;}printf("Aftersorted ");for(i=0;imain(){inta[10]={3,56,56,9,9,12,34,46,67,44},i,x,cnt=0;printf("inputx=");scanf("%d",&x);for(i=0;i<10;i++)if(x==a[i])//顺序查找cnt++;if(cnt>0)printf(" Find,cnt=%d",cnt);elseprintf("NotFind");}2.有10个数按升序放在一个数组中,输入一个数,要求用折半查找该数是数组中的第几个元素。折半查找法:设数组长度为n,则将输入的数m与a[n/2]比较,若m[n/2],则将a[n/2]到a[n]的数继续折半进行查找。#includemain(){inta[10]={12,32,45,62,71,76,80,85,90,95};intnum,bott,top,mid;printf("inputanumber: ");scanf("%d",&num);bott=0;top=9; while(bott<=top){mid=(bott+top)/2;if(num==a[mid]){printf("%disthe%dnumber ",num,mid+1);break;}elseif(numtop)printf("No ");}一、字符串编程算法1.字符数组s1,s2把s2在s1中出现的字符全部删除。如s1[]="adeaabfce";s2[]="efd";删除后s1中的值为:aaabc#includemain(){chars1[50],s2[10],*p1,*p2;inti,j;p1=s1;p2=s2;printf("inputs1:");scanf("%s",p1);printf("inputs2");scanf("%s",p2);while(*p2){for(i=0,j=0;p1[i]!='';i++)if(p1[i]!=*p2)//对p1重新赋值达到删除目的p1[j++]=p1[i];p1[j]='';//新字符串没有''需要给它赋值一个p2++;}puts(p1);}2.将b字符串连接到a后面,编写函数实现此功能#includevoidfun(char*a,char*b){while(*a++);//找''的位置a--;//a已经指向''后面所以要自减while(*b)*a++=*b++;*a='';}main(){chara[100],b[50];printf("inputstringa:"); scanf("%s",a);printf("inputstringb:");scanf("%s",b);fun(a,b);printf(" stringa:%s ",a);}1.将b字符串复制到a中,编写函数实现此功能#includevoidfun(char*a,char*b){while(*b)*a++=*b++;*a='';}main(){chara[50],b[50];printf("inputstringb:");gets(b);fun(a,b);printf(" stringa:%s ",a);}2.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。分析:利用while语句,条件为输入的字符不为' '。#include"stdio.h"main(){charc;intletters=0,space=0,digit=0,others=0;printf("pleaseinputsomecharacters ");while((c=getchar())!=' '){if(c>='a'&&c<='z'||c>='A'&&c<='Z')letters++;elseif(c=='')space++;elseif(c>='0'&&c<='9')digit++;elseothers++;}printf("allinall:char=%dspace=%ddigit=%dothers=%d ",letters,space,digit,others);}3.打印出如下图形:************* main(){intx,i,j,n=3;//上三角形,空格个数递减,*号递增。for(i=0;i<3;i++){for(j=n--;j>0;j--)printf("");for(x=0;x<2*i+1;x++)printf("*");printf(" ");}//下三角形,空格个数递增,*号递减。n=1;for(i=3;i>0;i--){for(j=0;j<=n;j++)printf("");for(x=2*(i-1)-1;x>0;x--)printf("*");n++;printf(" ");}1.把数组s2中的所有字符插入到s1的第n个字符后面。分析:先要把从n个字符后面的字符都顺序后移,再进行字符插入操作。#include#include#includechar*insert(char*s1,char*s2,intn){char*p1;inti,len1,len2;len1=strlen(s1);len2=strlen(s2);p1=s1;for(i=strlen(s1)-1;i>n;i--)*(s1+i+len2)=*(s1+i);while(*s2){*(s1+i)=*s2;i++;s2++;}*(p1+len1+len2)=''; returnp1;}main(){chars1[50],s2[10],*p;intn;printf(" inputs1");scanf("%s",s1);printf(" inputs2");scanf("%s",s2);printf(" inputn");scanf("%d",&n);if(nstrlen(s1)");exit(0);}puts(p);}

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭