m0_70327432 2022-06-01 11:01 采纳率: 60%
浏览 112
已结题

动态调试,记录j的每一次循环后数组的变化,为什么

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

main(){
int i,j,t,a[10];
printf("输入三个数:\n"); scanf("%d",&a[0]);

for (i=1;i<=9;i++){
srand((unsigned int)time(NULL));
a[i]=rand() % (200-i);
}

printf(" source data: ");  for (i=0;i<=9;i++) printf("%d ,",a[i]); printf(" \n");

for (j=1;j<=9;j++) { //动态调试,记录j的每一次循环后数组的变化,为什么
t=a[j];
for (i=j-1;i>=0;i--)
if ( a[i] < t ) break;
else a[i+1]=a[i];
a[i+1]=t;
}
}

img


116,63,73,83,93,103,113,123,133,143
116,155,69,182,99,18,133,55,171,96
116,15,129,46,161,81,3,120,45,163
116,130,47,163,83,5,123,48,167,95

  • 写回答

3条回答 默认 最新

  • 关注

    你的疑惑应该在最下面那个排序那里。
    在最后的双层for循环中,外层for循环遍历数组,内层for循环用来判断 j 位置之前的数据是否比a[j]小,
    如果a[j]之前的某个数据比a[j]小,那么就把a[j]插入到a[i]数据的后面。
    如果 j 之前的都比a[j]大,就把a[j]放在最前面,

    也就是保证数据从小到大排列。

    img

    完整代码:

    #include <time.h>
    #include <stdlib.h>
    #include <stdio.h>
    int main() {
        int i, j, t, a[10];
        int k;
        srand((unsigned int)time(NULL)); //srand调用1次即可,不需要在for循环中重复调用
        printf("输入三个数:\n"); 
        scanf("%d", &a[0]); //这里只输入了1个数???
    
        //随机生成9个数
        for (i = 1; i <= 9; i++) {
            
            a[i] = rand() % (200 - i);
        }
    
        printf(" source data: ");  
        for (i = 0; i <= 9; i++) 
            printf("%d ,", a[i]); printf(" \n");
        for (j = 1; j <= 9; j++) { //动态调试,记录j的每一次循环后数组的变化,为什么
            t = a[j]; //记录j位置的数值
            for (i = j - 1; i >= 0; i--) //这个for循环查找0到j-1位置上,比a[j]这个值小的数
                if (a[i] < t) //如果比a[i] 比a[j]小,就把大数放在a[i]的后面,也就是从小到大排序
                    break;
                else 
                    a[i + 1] = a[i];
            a[i + 1] = t;
    
            //输出
            for (k = 0; k < 10; k++)
            {
                if (k < 9)
                    printf("%d,", a[k]);
                else
                    printf("%d\n", a[k]);
            }
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月9日
  • 已采纳回答 6月1日
  • 修改了问题 6月1日
  • 修改了问题 6月1日
  • 展开全部

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?