吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 771|回复: 0
收起左侧

[讨论] C语言 常用语法@2(求指教)

[复制链接]
permotcat 发表于 2021-11-30 17:27
#include<stdio.h>
//#define n 10
//#define m 6
//#define n 4
int main()
{

/***
        冒泡排序(起泡排序)
假设要对含有n个数的序列进行升序排列,冒泡排序算法步骤是:
①从存放序列的数组中的第一个元素开始到最后一个元素,依次对相邻两数进行比较,若前者大后者小,则交换两数的位置;
②第①趟结束后,最大数就存放到数组的最后一个元素里了,然后从第一个元素开始到倒数第二个元素,依次对相邻两数进行比较,若前者大后者小,则交换两数的位置;
③重复步骤①n-1趟,每趟比前一趟少比较一次,即可完成所求。
        ***/
/*
        //任意读入10个整数,将其用冒泡法按升序排列后输出。
        int arr[10];
        int i,j,n;
        printf("请输入10个数\n");
        for(i=0;i<10;i++)
        {
                scanf("%d",&arr[i]);
        }
        printf("\n");
        for(j=0;j<9;j++)
        {
                for(i=0;i<9-j;i++)
                {
                        if(arr[i]>arr[i+1])
                        {
                                n=arr[i];
                                arr[i]=arr[i+1];
                                arr[i+1]=n;
                        }
                }
       
        }
                for(i=0;i<10;i++)
                {
                        printf("%d->",arr[i]);
                }       
*/
       
/***
                选择法排序
选择法排序是相对好理解的排序算法。假设要对含有n个数的序列进行升序排列,算法步骤是:
①从数组存放的n个数中找出最小数的下标(算法见下面的“求最值”),然后将最小数与第1个数交换位置;
②除第1个数以外,再从其余n-1个数中找出最小数(即n个数中的次小数)的下标,将此数与第2个数交换位置;
③重复步骤①n-1趟,即可完成所求。
***/

/*
        //任意读入10个整数,将其用选择法按升序排列后输出
        int a[10];
        int i,j,k,t;
        for(i=0;i<10;i++)
                scanf("%d",&a[i]);
        for(i=0;i<10;i++)         //处理n-1趟
        {
                k = i;                                  //总是假设此趟处理的第一个(即全部数的第i个)数最小,k记录其下标
    for(j=i+1;j<10;j++)
                if(a[j] < a[k])  
                        k = j;
                if (k != i)
                {
                        t = a[i];
                        a[i] = a[k];
                        a[k] = t;
                }
        }
        printf("\n");
        for(i=0;i<10;i++)
                printf("%d ",a[i]);

  */
/*       
        //将任意读入的整数x插入一升序数列后,数列仍按升序排列
        int a[10]={-1,3,6,9,13,22,27,32,49},x,j,k;  //注意留一个空间给待插数
        scanf("%d",&x);
        if(x>a[8])
                a[9]=x;                                                                        //比最后一个数还大就往最后一个元素中存放
        else                                                                                //查找待插位置
        {
                j=0;
                while( j<=8 && x>a[j])
                        j++;
                                                                                                //从最后一个数开始直到待插位置上的数依次后移一位
                for(k=8; k>=j; k--)  
                        a[k+1]=a[k];
                a[j]=x;                                                                        //插入待插数
        }
        for(j=0;j<=9;j++)  printf("%d \n",a[j]);



*/
//----->  有逻辑错误
        /*
        //在上面宏定义#definne n 10
        //任意读入10个整数,将其用插入法按降序排列后输出。
        int a[n],i,j,k,x;
        scanf("%d",&a[0]);                                                //读入第一个数,直接存到a[0]中
        for(j=1;j<n;j++)                                                //将第2至第10个数一一有序插入到数组a中
        {
                scanf("%d",&a[j]);
                if(x<a[j-1])
                        a[j]=x;                                                        //比原数列最后一个数还小就往最后一个元素之后存放新读的数
                else                                                                //以下查找待插位置
                {
                        i=0;
                        while(x<a[j-1] && i<=j-1)
                                i++;                                                                       
                        for(k=j-1;k>=i;k--)                                //以下for循环从原最后一个数开始直到待插位置上的数依次后移一位
                                a[k+1]=a[k];
                        a[j]=x;                                                        //插入待插数
                }
        }
        for(i=0;i<n;i++)  
                printf("%d\n",a);
               
                  */
/*
//----->  有逻辑错误
//宏定义#define m 6   #define n 4
//有一个含有6个数据的升序序列和一个含有4个数据的升序序列,将二者合并成一个含有10个数据的升序序列
int a[m]={-3,6,19,26,68,100} ,b[n]={8,10,12,22};
int i,j,k,c[m+n];
i=j=k=0;
while(i<m && j<n) //将a、b数组中的较小数依次存放到c数组中
{
        if(a[0] < b[j])
        {
                c[k]=a[0];
                i++;
        }
        else
        {
                c[k]=b[j];
                j++;
        }
        k++;
}
while(i>=m && j<n) //若a中数据全部存放完毕,将b中余下的数全部存放到c中
{
        c[k]=b[j];
        k++;
        j++;
}
while(j>=n && i<m) //若b中数据全部存放完毕,将a中余下的数全部存放到c中
{
        c[k]=a[i];
        k++;
        i++;
}
for(i=0;i<m+n;i++)  
printf("%d  ",c);
}
*/

/*
//任意读入10个数存放到数组a中,然后读入待查找数值,存放到x中,判断a中有无与x等值的数
int a[10],i,x;
for(i=0;i<10;i++)
scanf("%d",&a);
printf("------------\n");                                                                                //以下读入待查找数值
scanf("%d",&x);
for(i=0;i<10;i++)       
{
        if(a==x)
        printf("Found!\n");
        break;
}                                                                                                       
if(a!=x)
printf("Not found!\n");
}
*/


/***
        折半查找(即二分法)
顺序查找的效率较低,当数据很多时,用二分法查找可以提高效率。使用二分法查找的前提是数列必须有序。
二分法查找的思路是:要查找的关键值同数组的中间一个元素比较,若相同则查找成功,结束;
否则判别关键值落在数组的哪半部分,就在这半部分中按上述方法继续比较,直到找到或数组中没有这样的元素值为止。
  ***/
/*
//任意读入一个整数x,在升序数组a中查找是否有与x等值的元素

int a[10]={2,4,7,9,12,25,36,50,77,90};
int x,high,low,mid;                                             //x为关键值
scanf("%d",&x);
high=9;
low=0;
mid=(high+low)/2;
while(a[mid]!=x&&low<high)
{
        if(x<a[mid])
                high=mid-1;                                
        else low=mid+1;                               
        mid=(high+low)/2;
}
if(x==a[mid])
printf("Found %d,%d\n",x,mid+1);
else printf("Not found\n");

}

*/

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 18:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表