C 语言教程 在线

1805c-exercise-example40

参考方法:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int i,num,a[10]={0,1,2,3,4,5,6,7,8};
    for(i=8;i>=0;i--){
        printf("%d ",a[i]);
    }
    return 0;
}

1804c-exercise-example39

参考方法:

#include <stdlib.h>
#include <time.h>
#include <stdio.h>

void rank(int *numArray, int arrayLen);//排序函数声明
void insert(int *numArray, int num, int arrayLen);//插入函数声明

int main()
{
    srand((int)time(NULL));
    int *numArray = NULL, i, *InsertNumArray = NULL, len, insertN, max, min;
    printf("输入数组元素个数:");
    scanf("%d", &len);
    printf("数组元素取值范围:");
    scanf("%d %d", &min, &max);
    //为原始数组分配适当空间
    numArray = (int*)realloc(numArray, len*sizeof(int));
    for (i = 0; i < len; ++i)//初始化随机数数组
        numArray[i] = rand() % (max - min + 1) + min;//min-max之间随机数
    rank(numArray, len);//将原始数组元素从小到大排序
    printf("原始数组是:\n");//输出一遍原始数组
    for (i = 0; i < len; ++i)
        printf("%-6d", numArray[i]);
    printf("\n要插入的元素个数:");
    scanf("%d", &insertN);
    printf("输入要插入的%d个新数字:", insertN);
        InsertNumArray = (int*)realloc(InsertNumArray, insertN*sizeof(int));//分配适当空间给插入的数字组成的数组InsertNumArray
    numArray = (int*)realloc(numArray, (len + insertN)*sizeof(int));//重新增添insertN个int空间给numArray以存放新增元素

    for (i = 0; i < insertN; ++i)//将新元素挨个插入原始数组
    {
        scanf("%d", &InsertNumArray[i]);//输入第i个元素
        insert(numArray, InsertNumArray[i], len + i);//调用函数insert插入第i个元素InsertNumArray[i],数组numArray总长度len+i随i变化
    }
    printf("新数组是:\n");//输出新数组
    for (i = 0; i < len + insertN; ++i)
        printf("%-6d", numArray[i]);
    printf("\n");
    return 0;
}

void rank(int *numArray, int arrayLen)//排序函数,numArray为数组,arrayLen为数组长度
{
    int i, j;
    for (i = 0; i < arrayLen; ++i)
        for (j = i + 1; j < arrayLen; ++j)
        if (numArray[i] > numArray[j])//小的元素排在前面,大的元素换到后面
        {
            numArray[i] += numArray[j];
            numArray[j] = numArray[i] - numArray[j];
            numArray[i] = numArray[i] - numArray[j];
        }
}

void insert(int *numArray, int insertNum, int arrayLen)//插入操作函数,numArray为数组,insertNum为要插入的数,arrayLen为数组长度
{
    int i, j, *p1 = numArray, *p2 = numArray;
    p1 += arrayLen - 1;//指针置于最末尾元素
    p2 += arrayLen;//末尾置于最末尾元素后一位
    for (i = 0; i < arrayLen; ++i)//加上insertNum共arraylen + 1个数组元素,从小到大遍历前arrayLen个元素
    {
        if (insertNum < numArray[i])//如果第i位上的数组元素大于insertNum,则该位及其以后的数全部 往后移动一位,腾出第i位用于存放num
        {
            for (j = 1; j <= (arrayLen - i); ++j)//用指针实现挨个移位操作,共需要移动strlen - i位(strlen是数组长度,i是首个大于insertNum的数组元素在数组numArray上的索引位i)
                *p2-- = *p1--;
            *p2 = insertNum;//最后p2指向第i位,将num插入第i位
            break;
        }

        if (i == arrayLen - 1)//已循环到了最后一个元素但还没有找到插入位置,说明此时最大元素就是insertNum,直接将insertNum放到numArray数组最后
        {
            *p2 = insertNum;//此时p2指向数组numArray最末位置
            break;
        }
    }
}

执行输出结果为:

输入数组元素个数:5
数组元素取值范围:23 45
原始数组是:
25    30    32    39    40    
要插入的元素个数:1
输入要插入的1个新数字:23
新数组是:
23    25    30    32    39    40    

1803c-exercise-example39

参考方法:

#include <stdio.h>

int main(){
    int a[11]={1,4,6,9,13,16,19,28,40,100};
    int i,num;
    printf("原始数组:");
    for(i=0;i<10;i++)
        printf("%4d ",a[i]);
    printf("\n输入一个数,插入原数组:");
    scanf("%d",&num);
    if(a[0]<a[9]){  //原数组为升序排列
        if(num>a[9])
            a[10]=num;
        else{
            for(i=9;i>=0;i--){
                if(num<a[i])
                    a[i+1]=a[i];
                else{
                    a[i+1]=num;
                    break;
                }
            }
            if(i==0)    //当num比a[0]还小时
                a[0]=num;
        }
    }
    if(a[0]>a[9]){  //原数组为降序排列
        if(num<a[9])
            a[10]=num;
        else{
            for(i=9;i>=0;i--){
                if(num>a[i])
                    a[i+1]=a[i];
                else{
                    a[i+1]=num;
                    break;
                }
            }
            if(i==0)    //当num比a[0]还大时
                a[0]=num;
        }
    }
    for(i=0;i<11;i++)
        printf("%4d",a[i]);
    printf("\n");
    return 0;
}

1802c-exercise-example39

参考方法:

#include<stdio.h>
#define N 100
void insert_sort(int a[],int *length,int x);
int main(void)
{
    int a[N] = {0},j = 0,x,n;
    printf("输入数组长度:\n");
    scanf("%d",&n);
    printf("原始数组是:\n");
    for(;j < n; j++)
        scanf("%d",&a[j]);
    printf("插入一个新的数字:");
    scanf("%d",&x);
    insert_sort(a,&n,x);
    for(int i = 0;i < n; i++)
        printf("%4d",a[i]);
    return 0;
}

void insert_sort(int a[],int *length,int x)
{
    int i = 0,j;
    while(x > a[i]) //找到待插入位置
        i++;

    for(j = *length - 1; j >= i; j--)
        a[j + 1] = a[j];
    a[j + 1] = x;
    (*length)++;
}

1801c-exercise-example39

这样最简单了,一次循环全部搞定

C99:

#include <stdio.h>
#include <stdbool.h> // C99

int main()
{
    int a[11] = { 1,4,6,9,13,16,19,28,40,100 };
    int c=0, temp=0;

    bool z = false;
    printf("插入一个新的数字: ");
    scanf("%d", &c);
    for (int b = 0; b < 10; b++)
    {
        if (!z && c > a[b] && c <= a[b + 1])
        {

            z = true;
        }
        if (z)
        {
            temp = a[b + 1];
            a[b + 1] = c;
            c = temp;
        }
        printf("%-3d,", a[b]);

    }
    printf("%-3d,", a[10]);
    return 0;
}

C89 没有定义布尔类型:

#include <stdio.h>

int main()
{
    int a[11] = { 1,4,6,9,13,16,19,28,40,100 };
    int c=0, temp=0;
    typedef enum
    {
        true=1, false=0
    }bool;
    bool z = false;
    printf("插入一个新的数字: ");
    scanf("%d", &c);
    for (int b = 0; b < 10; b++)
    {
        if (!z && c > a[b] && c <= a[b + 1])
        {

            z = true;
        }
        if (z)
        {
            temp = a[b + 1];
            a[b + 1] = c;
            c = temp;
        }
        printf("%-3d,", a[b]);

    }
    printf("%-3d,", a[10]);
    return 0;
}