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],tempi,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  数的组合
1234四个数字组成互不相同且无重复的数字的三位数,求出有多少这样的数,并每行输出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小时内删除。