permotcat 发表于 2021-11-30 17:27

C语言 常用语法@2(求指教)

#include<stdio.h>
//#define n 10
//#define m 6
//#define n 4
int main()
{

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

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

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



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

/*
//任意读入10个数存放到数组a中,然后读入待查找数值,存放到x中,判断a中有无与x等值的数
int a,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={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!=x&&low<high)
{
        if(x<a)
                high=mid-1;                              
        else low=mid+1;                               
        mid=(high+low)/2;
}
if(x==a)
printf("Found %d,%d\n",x,mid+1);
else printf("Not found\n");

}

*/
页: [1]
查看完整版本: C语言 常用语法@2(求指教)