- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
全国计算机二级C常考算法编程指导
1.变量交换
void swap(int *x, int *y)
{? int temp;
?? temp=*x; *x=*y; *y=temp;
}
2.累加
用C语言实现1+2+3+4+5+…+n的累加。
【方法1】while循环实现
int add(int n)
{? int i,sum;
?? sum=0; i=1;
?? while(i=n)
?? {? sum=sum+i; i=i+1; }
?? return sum;
}
main()
{? int s,n;
??? printf(\nInput n:\n);
??? scanf(%d,n);
??? s=add(n);????????????? /*函数调用*/
??? printf(1+2+...+%d=%d\n,n,s);
}
【方法2】for循环实现(main函数同上)
int add(int n)
{? int i,sum=0;
?? for(i=1;i=n;i++) sum=sum+i;?
?? return sum;
}
do-while循环也可以实现累加,请读者自己完成。
3.累乘
用C语言求n的阶乘:n! = 1′2′3′4′…′n (n≥1)
int product (int n)
{?? int i,p=1;
??? for(i=2;i=n;i++) p=p*i;
??? return p;
?}
如果n的值比较大,函数返回值和存放乘积的变量p应定义为long或者double型。
4.排序
(1)冒泡排序? (主函数main参考教材181-182页)
void BubbleSort(int a[],int n)
{? int i,j, tmp;
?? for(i=0;in-1;i++)?????????????????? /*排序趟次*/
?? {? for(j=0; jn-1-i; j++)?????????? ???/*从前往后比*/
????? ??if(a[j]a[j+1])???????????? ???/*从小到大,升序*/
? ??{ tmp=a[j]; a[j]=a[j+1]; a[j+1]=tmp;}/*交换a[j]与a[j+1],大数后移*/
?? }
}
(2)选择排序?
void SelectSort(int a[],int n)
{? int i,j,min,tmp;
? ?for(i=0; in-1; i++)
? ?{ ??min=i;???????????????? ???/*假设第一个数最小,记录其下标*/
? ?????for(j=i+1; jn; j++)
?????? ???if(a[j]a[min])? min=j;/*找最小的数,将最小数的下标记录下来*/
?? ????if(i!=min)
????? { tmp=a[i]; a[i]=a[min]; a[min]=tmp; } /*将最小的数与第一个数进行交换*/
?? }
}
(3)插入排序?
void InsertSort(int a[],int n)
{? int i,j,tmp;?
?? for(i=1; in; i++)
?? {? tmp=a[i];???????????????????? /* 空出a[i]单元 */
?? ???for(j=i-1; j=0 a[j]tmp; j--)
??? ?????a[j+1]=a[j];?????????????? /* 大于tmp的数向后移位 */
?? ???a[j+1]=tmp;???? ??????????????/* tmp归位 */
?? }
}
5.归并(合并)
将两个有序数组A、B合并成另一个有序的数组C(升序或降序)。升序合并步骤如下:
① 先在A、B数组中各取第一个元素进行比较,将小的元素放入C中。
② 取小的元素所在数组的下一个元素与另一个数组中上次比较后较大的元素进行比较。
③ 重复上述比较过程,直到某个数组被先排完。
④ 将另一个数组剩余元素抄入C中,合并排序完成。
void merge(int a[],int m,int b[n],int n,int c[])
{? int ia=0,ib=0,ic=0;
?? while(iam ibn)
???{? ?if (a[ia]b[ib]) ????/*小的元素放入C中*/
?????? { c[ic]=a[ia];ia++; }?
????? ?else? { c[ic]=b[ib];ib++; }
????? ?ic++;
???}
while(iam) { c[ic]=a[ia];ia++;ic++; }?? /*a中剩余元素抄入c中*/
while(ibn) { c[ic
您可能关注的文档
最近下载
- AP化学 2012年真题 (选择题+问答题) AP Chemistry 2012 Released Exam and Answers (MCQ+FRQ).pdf VIP
- 第六章 教会法.ppt
- 城镇供水厂运行维护及安全技术规程-详版.pptx
- 无铬厚膜底漆、厚膜预涂板和制备方法.pdf VIP
- 教师道德与法治新课标考试试题三套及答案.docx
- CMA考试 P2试题500道含解析.pdf VIP
- 新型锂电池电解液添加剂技改扩能项目环境影响报告书.pdf
- 2025年广东省中山市华辰实验中学九年级中考数学一模试题(原卷版+解析版).docx VIP
- 历史逻辑 理论逻辑 实践逻辑的必然结果.docx VIP
- 2024年05月江苏无锡市梁溪区机关事业单位招考聘用编外工作人员20人笔试历年高频考点(难、易错点)附带答案详解.docx VIP
文档评论(0)