C语言经典例子
例 1 选择法排序
选择法:通过比较及交换,将符合要求的最小的数,放在前头,每轮确定一个数;在剩下的数中,依次解决,N个数需要N-1轮方能排定最后的次序。第一轮要比较N-1次,第二轮要比较N-2次,依次类推,第K轮要比较N-K次。所以要用两层循环,一个控制轮数,一个控制次数。
#include "stdio.h"
void main()
{
int a[10],i,j,k;
printf("Please input ten numbers at your will:\n"); // 给要排序的数组赋值
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++) // 外层循环控制轮数
{
for(j=i+1;j<10;j++) // 内层循环控制次数
if(a[j]<a[i]) // 通过交换将大数沉底
{
k=a[i];
a[i]=a[j];
a[j]=k;
}
}
printf("Output this numbers in a new way:\n"); // 用循环语句将排好序的数组输出
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
运行:
例 2 冒泡法排序
冒泡法:将两两相邻的元素进行比较,如果前一个元素大于后一个元素,就交换这两个元素。N个数按顺序排列进行N-1轮排序,且第K轮排序要进行N-K次排序。用两层循环,外层控制轮数,内层控制次数
#include "stdio.h"
void main()
{
float a[10],temp,i,j;
printf("请输入10个数:\n");
for (j=0;j<10;j++)
scanf("%d",&a[j]);
for(i=0;i<9;i++)
{
for(j=0;j<9-i;j++)
if(a[j]>a[j+1]) /*前一个元素大于后一个元素,就交互这两个数的值*/
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=c编程网站temp;
}
}
printf("排序后的10个数:\n"); // 排好序后输出
for(j=0;j<10;j++)
printf("%d ",a[j]);
}
运行:
例 3 折半法查
基本思路:将有序数组中的N个数大致分成两半,取a[n/2]与欲的数x进行比较,如果相等,则到了,算法终止。如果x大,则在数组的左半部继续搜索(假设数组按升序排列),如果x小,则在数组的右半部继续搜索。
#include "stdio.h"
void main()
{
int l=0,low,high,mid,a[10]={0,1,2,3,4,5,6,7,8,9},x;
printf("请输入待查的数值:\n");
scanf("%d",&x);
low=0;
high=9;
while(low<=high) /*使用循环语句开始查*/
{
mid=(low+high)/2; /*令中间值*/
if (x==a[mid])
{
printf("a[%d]=%d",mid,x); /*到了就结束循环*/
break;
}
else if (a[mid]<x)
low=mid+1; /*在大于中间值部分查*/
else
high=mid-1; /*在小于中间值部分查*/
}
if(low>high)
printf("没有到你需要的数!");
}
运行
输入 8
例 4 数的组合
用1、2、3、4四个数字组成互不相同且无重复的数字的三位数,求出有多少这样的数,并每行输出5个数。
需要用三层循环,通过条件判断使三个数不相等,使用计数器(通过for语句),当所计的数为5的倍数是,输出一个回车换行,就可以使得每行输出5个数。
#include "stdio.h"
void main()
{
int i,j,k,l=0;
for(i=1;i<5;i++) /*三重循环*/
for(j=1;j<5;j++)
for(k=1;k<5;k++)
{
if(i!=k&&i!=j&&k!=j) /*使这三个数不相等*/
{ printf("%d%d%d ",i,j,k);
l++; /*计数器*/
if(l%5==0) /*每行输出5个数*/
printf("\n");
}
}
printf("\n");
printf("共有%d个三位数",l); /*输出得到的个数
}
运行结果:
例 5 进制转化
进制间转化采用辗转相除法。由用户输入十进制的数以及要转换的进制,然后将转换的结果储存在一维数组中。
#include "stdio.h"
void main()
{
int i=0,base,num[32]; // base 为要转化的进制
long int n,j;
char c; // 十六进制时要用到字符
printf("Please input a number that you want to converse :\n");
scanf("%ld",&n);
printf("Please input base:\n");
scanf("%d",&base);
do{ //辗转相除法
i++;
num[i]=n%base;
n=n/base;
}while(n!=0);
printf("转化为%d进制为:\n",base);
for (j=i;j>=1;j--) // 输出转化后的结果,倒过来输出
{ // 十六进制时判断是否要输出字符
if(num[j]>=10)
{
c=num[j]+55;
printf("%c",c);
continue;
}
printf("%d",num[j]);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论