C语言重要程序算法实例整理精品资料.doc

上传人:封****n 文档编号:96697410 上传时间:2024-03-10 格式:DOC 页数:58 大小:252KB
返回 下载 相关 举报
C语言重要程序算法实例整理精品资料.doc_第1页
第1页 / 共58页
C语言重要程序算法实例整理精品资料.doc_第2页
第2页 / 共58页
点击查看更多>>
资源描述

《C语言重要程序算法实例整理精品资料.doc》由会员分享,可在线阅读,更多相关《C语言重要程序算法实例整理精品资料.doc(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、/*C语言重要程序算法实例整理*/递归练习:阶乘#includestdio.hfloat fac(int x);void main()int n;puts(Input the number:);scanf(%d,&n);float f;f=fac(n);printf(%d!=%2.f,n,f);float fac(int x)int f=x;if(x0)return(fs);elseSUM(n-1);void main()int x;int fsum;printf(please input the number:n);scanf(%d,&x);fsum=SUM(x);printf(SUM=%d

2、n,fsum);/*=*/动态分配内存应用:删除字符#includestdio.h#includestdlib.hvoid main()int n,i;printf(Please input n:);scanf(%d,&n);printf(Please input the string:);char *p;p=(char *)malloc(sizeof(char);for(i=0;in+1;i+)scanf(%c,p+i);*(p+i)=0;/puts(p);printf(Please input the k and the m: );static int k,m;scanf(%d,%d,&k

3、,&m);char *q;q=(char *)calloc(n,sizeof(char);int b;for(i=0;im;i+)b=i+k+m;*(q+i)=*(p+b);*(q+i)=0;/puts(q);*(p+k)=0;/puts(p);for(i=0;im;i+,k+)*(p+k)=*(q+i);/*(p+k)=0;printf(*After Delete*n);puts(p);/free(p);/free(q);/*=*/数据类型计算函数#includestdio.hvoid main()int a;long b;float f;double d;char c;printf(nin

4、t:%dnlong:%dnfloat:%dndouble:%dnchar:%dn,sizeof(a),sizeof(b),sizeof(f),sizeof(d),sizeof(c);/*=*/基础练习:矩阵转置#includestdio.hvoid main()int a33=1,2,3,4,5,6,7,8,9,i,j,b33,t;for(i=0;i3;i+)for(j=0;j3;j+)if(i!=j)bji=aij;elsebij=aij;for(i=0;i3;i+)for(j=0;j3;j+)printf(%d,bij);printf(n);/=/基础练习:运算符#includestdio

5、.hvoid main()int a=12,b=7;printf(%d,%d,a%b,a/b);/(%)取余数,(/)取商数/=/递归法整数转换字符串#includestdio.hvoid fun2(int x,int n,char s)if(x0)printf(x0,data error!n);fun2;elseif(x0)n+;a=a/10;strn=0;fun2(x,n-1,str);puts(str);/=/整数转换字符串2#includestdio.h#includemath.hvoid fun1(int x,char s)int i,n,t,y;n=0;y=x;while(x0)n

6、+;x=x/10;for(i=0;y0;i+)t=y/(int)pow(10,n-1);si=0+t;y=y%(int)pow(10,n-1);n-;si=0;void main()int a;char str20;scanf(%d,&a);fun1(a,str);puts(str);/=/基础练习:自增自减的前后区分#includestdio.hvoid main()int i=8;printf(+i=%dn,+i);printf(i=%dn,i);printf(-i=%dn,-i);printf(i=%dn,i);/先进行加1或减1,再输出i的值printf(i+=%dn,i+);prin

7、tf(i=%dn,i);printf(i-=%dn,i-);printf(i=%dn,i);/先输出i值,再进行加1或减1printf(-i+=%dn,-i+);printf(i=%dn,i);/先输出-i,在加1printf(-i-=%dn,-i-);printf(i=%dn,i);/先输出-i,再减1/=/*链表建立的算法(p1指向新结点,p2指向表尾)S1 定义三个结点类型(struct node)的指针变量:head,p1,p2,head=NULLS2 调用malloc(#includestdlib.h)函数产生一个新结点,令p1,p2都指向该结点,并输入其数据成员S3 判断新节点的学

8、号是否为0,若学号不为0,则执行 S4,否则执行 S7S4 判断头指针(*head)是否为NULL。若head为NULL,则令头指针指向表头的结点,即,head=p1;若head不为NULL,则责令当前表尾结点的指针成员指向新结点,即,p2-next=p1;S5 令指针变量p2指向新的表尾结点:p2=p1;S6 调用malloc函数产生一个新结点,令p1指向新结点,并输入数据成员,然后执行S3;S7 表尾结点的指针成员赋空值,即,p2-next=NULL;S8 释放p1所指向的结点空间,即,free(p1);S9 返回链表的头指针即,return head;(思考:数据存在哪了?被调函数不是会

9、将内存擦去吗)链表输出的算法S1 判断链表的头指针是否为NULL,若head为NULL,则输出“链表为空”,然后结束;若链表不为空,则执行S2S2 另一个指针变量p赋值为headS3 判断p是否为NULL,若p不为NULL,则执行S4,否则结束循环S4 输出p数据成员的值,然后使p指向下一个结点,即,p=p-next。在执行S3链表删除的算法例如*/#includestdio.h#includestdlib.hstruct sal_nodeint num;char nam20;float salary;struct sal_node *next;#define L sizeof(struct

10、sal_node)struct sal_node *creat()struct sal_node *p,*q,*head=NULL;printf(Please input the worders informations:nnumbertnametsalaryn);p=q=(struct sal_node *)malloc(L);scanf(%d%s%f,&p-num,&p-nam,&p-salary);while(p-num!=0)if(head=NULL)head=p;elseq-next=p;q=p;p=(struct sal_node *)malloc(L);scanf(%d%s%f,

11、&p-num,&p-nam,&p-salary);q-next=NULL;free(p);return head;void list(struct sal_node *head)struct sal_node *r;if(head=NULL)printf(Empty!n);elseprintf(Salary informations:nnnumbertnametsalaryn);r=head;while(r!=NULL)printf(%dt%st%.2fn,r-num,r-nam,r-salary);r=r-next;void main()struct sal_node *head;head=

12、creat();list(head);/=/链表应用:职工工资动态信息#includestdio.h#includestdlib.hstruct salary_nodeint num;char nam20;float sal;struct salary_node *next;#define L sizeof(struct salary_node)struct salary_node *creat()struct salary_node *p,*q,*h=NULL;p=q=(struct salary_node *)malloc(L);printf(请输入职工信息:n编号t姓名t工资n);sca

13、nf(%d%s%f,&p-num,&p-nam,&p-sal);while(p-num!=0)if(h=NULL)h=p;elseq-next=p;q=p;p=(struct salary_node *)malloc(L);scanf(%d%s%f,&p-num,&p-nam,&p-sal);q-next=NULL;free(p);return h;void list(struct salary_node *h)struct salary_node *p;p=h;if(h=NULL)printf(无职工工资信息!);elseprintf(n编号t姓名t工资n);while(p!=NULL)pr

14、intf(%dt%st%.2fn,p-num,p-nam,p-sal);p=p-next;float ave(struct salary_node *h)int n=0;float s=0,a;struct salary_node *p;p=h;while(p!=NULL)s+=p-sal;p=p-next;n+;a=s/n;return a;void above(float x,struct salary_node *h)struct salary_node *p;p=h;while(p!=NULL)if(p-salx)printf(%sn,p-nam);p=p-next;void main

15、()float Ave;struct salary_node *h;h=creat();list(h);Ave=ave(h);printf(n职工工资平均水平:%.2fn,Ave);printf(高于职工工资平均水平的职工姓名是:n);above(Ave,h);/=/结构体应用:日期计算器#includestdio.hstruct dateint y;int m;int d;int Cal_day(int k,int m,int d)int i;int a212=31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,

16、30,31;for(i=0;im-1;i+)d+=aki;return d;void main()int i,k,d2,sd;struct date day2,*p,*q;q=p=day;for(i=0;iy,&p-m,&p-d);k=(p-y%4=0&p-y%100!=0)|(p-y%400=0);di=Cal_day(k,p-m,p-d);p+;p-;int u=p-y-q-y,v=q-y-p-y;if(u0)/向文件中写入字符串的循环条件是:字符串长度大于0fputs(s,f);/fputs:写入文件字符串,语法fputs(str,f)fputs(n,f);/敲击键盘的回车键对于计算机而

17、言是结束输入字符串,而程序员是换行,故须要加换行符rewind(f);/复位函数,避免多次打开文件,语法rewind(f)char cN;while(fgets(c,N,f)!=NULL)/若循环条件是fgets(c,N,f)!=NULL,则循环体中不需要读取字符串,否则文件中的字符串不能全部显示在屏幕上/循环条件不能是!feof(f),否则,屏幕上会所显示一行字符串/fgets:读取文件字符串,语法fgets(s,n,f)printf(%s,c);/另外,fgets(c,N,f)应经将文件中的字符串赋值给c,不需要另赋值rewind(f);char qN;FILE *g;puts(input

18、 no.2 path);gets(q);/必须赋值!if(g=fopen(q,w+)=NULL)printf(Havent Found the File!);exit(0);char b;dob=getchar();fputc(b,g);/fputc(char,g)/你已经打开另一个文件了!while(b!=n);/fputc只能输入一行字符串char a;rewind(g);/此处必须加复位函数!while(!feof(g)/此处是g!a=fgetc(g);printf(%c,a);fclose(f);fclose(g);/*总结:函数语法作用fopen(p,mode)打开文件fclose(

19、f)关闭文件fputc(char,f)向文件中写入一个字符fgetc(f)从文件中读取一个字符fputs(s,f)向文件中写入一个字符串fgets(s,n,f)从文件中读取一个含有n个字符的字符串*/=/文件操作:输出文本文档的行号#includestdio.h#includestdlib.h#define N 500void main()FILE *f;char nameN,c,strN;printf(Please input the filepath(name):);scanf(%s,name);getchar();int i=0;if(f=fopen(name,a+)=NULL)prin

20、tf(Havent Found %sn,name);exit(0);int n=1;printf(%d,n);doc=fgetc(f);putchar(c);if(c=n)n+;printf(%d,n);while(!feof(f);fclose(f);/=/指针练习:二维数组的指针表示#includestdio.hvoid main()int a35=76,0,21,53,15,368,0,97,12,0,86,96,24;int i,j;/下标表示for(i=0;i3;i+)for(j=0;j5;j+)printf(%4d,aij);printf(n);/行标增加,换行printf(nn)

21、;/行指针表示for(i=0;i3;i+)for(j=0;j5;j+)printf(%4d,*(ai+j);printf(n);printf(nn);/列指针表示for(i=0;i3;i+)for(j=0;j5;j+)printf(%4d,(*(a+i)j);printf(n);printf(nn);/二级指针表示for(i=0;i3;i+)for(j=0;j5;j+)printf(%4d,*(*(a+i)+j);/*(*(a+i)+j)是二级地址printf(n);printf(nn);/指针变量表示(双层循环)int *p;p=a0;/a0&a00*a (*a是一级地址)for(i=0;i

22、3;i+)for(j=0;j5;j+,p+)/地址也需要增加printf(%4d,*p);/直接输出*pprintf(n);printf(nn);/指针变量表示(单层循环)for(p=a0;pa0+15;p+)/妙,以地址作为循环条件if(p-a0)%4=0)printf(n);printf(%4,*p);/=/指针练习:行指针变量#includestdio.hvoid main()int a34=16,9862,8073,16,50,0,6,778,16,9;/数组的地址是连续的int (*p)4;/定义行指针变量int i,j;p=a;/p指向二维数组的首地址for(i=0;i3;i+)f

23、or(j=0;jy)return x;elsereturn y;void main()int a,b,q;int (*p)(int x,int y);/必须标明参数类型p=max;scanf(%d,%d,&a,&b);q=(*p)(a,b);printf(nmaximum=%dn,q);/注:在主函数中定义的仍是指针变量,致使该指针变量指向函数的地址,间接访问函数/=/指针练习:指针函数#includestdio.hint *max(int a,int b)/定义指针函数if(ab)return &a;elsereturn &b;/返回的是地址void main()int m,n,*p;pri

24、ntf(Please input the two numbers:);scanf(%d,%d,&m,&n);p=max(m,n);printf(nmax=%dn,*p);/=/指针练习:指针与一位数组#includestdio.hint max(int *x);int *max2(int *x);/指针函数的声明void main()int a10,*p,i,maxi,*maxi2;p=&a0;for(i=0;i10;i+)scanf(%d,p+i);maxi=max(p);printf(Maximum=%dn,maxi);maxi2=max2(p);/引用时不用加*printf(Maximu

25、m=%dn,maxi);int max(int *x)int j,Max;Max=*x;for(j=0;jMax)Max=*(x+j);return Max;int *max2(int *x)/指针函数的定义int j,Max;Max=*x;for(j=0;jMax)Max=*(x+j);return &Max;/返回地址/=/指针练习:指针与字符#includestdio.hvoid main()char str=hellon,*p=str;int i;printf(1:n);/直接输出puts(p);/pstrprintf(2:n);/输出字符串printf(%s,p);printf(3:

26、n);/输出字符,i控制循环圈数for(i=0;*(p+i)!=0;i+)printf(%c,*(p+i);printf(4:n);/地址也进行自增for(i=0;*(p+i)!=0;i+,p+)printf(%c,*p);/=/指针练习:输出N个数中的最大值和次最大值#includestdio.h#define N 5int max(int *x);int lessmax(int *x);void main()int aN,*p,i,MAX,LESSMAX;p=&a0;printf(Please input %d numbers:,N);for(i=0;iN;i+)scanf(%d,p+i);MAX=max(p);printf(Maximum=%dn,MAX);LESSMAX=lessmax(p);printf(Less Maximum=%dn,LESSMAX);int max(int *x)int i,Max=*x;for(i=0;iMax)Max=*(x+i);return (Max);int lessmax(int *x)int i,Max=*x,t;for(i=0;iMax)t=Max;Max=*(x+i);return (t);/=/指针应用:计算围成一圈的相邻三个数的和#includestdi

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

当前位置:首页 > 期刊短文 > 互联网

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁