| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 506 人关注过本帖
标题:疑难问题,哪位大侠帮忙解答下,感激不尽!
只看楼主 加入收藏
zfjstx
Rank: 2
等 级:论坛游民
帖 子:22
专家分:12
注 册:2009-9-16
结帖率:60%
收藏
已结贴  问题点数:20 回复次数:8 
疑难问题,哪位大侠帮忙解答下,感激不尽!
自己编了一个小程序,从键盘输入0至100中的任意一整数,要求顺序插入已排好序的数组。虽然程序不错,不过有个问题一直不明白,就是for嵌套循环中的第二个for循环我怎么都无法理解,哪位大侠可以帮忙解答下啊?
#include <stdio.h>
void main(){
int a[10]={14,23,45,65,67,87},i,j,s;
printf("please enter a number from 0 to 100!");
scanf("%d",&j);
for(i=0;i<6;i++)
if(j<a[i]){
for(s=i;s<i;s++)
a[s+1]=a[s];
break;}
a[i]=j;
 for(i=0;i<7;i++)
  printf("%d ",a[i]);
}
搜索更多相关主题的帖子: include please number 键盘 
2013-11-14 00:17
Red_stone
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:32
专家分:120
注 册:2013-3-11
收藏
得分:10 
我来回答你吧:
第二个for循环:
for(s=i;s<i;s++)
a[s+1]=a[s];实际上不满足判定条件,不进行任何操作,即可以将上述语句删除。删除后代码为:
#include <stdio.h>
void main(){
int a[10]={14,23,45,65,67,87},i,j,s;
printf("please enter a number from 0 to 100!");
scanf("%d",&j);
for(i=0;i<6;i++)
if(j<a[i]){
break;}
a[i]=j;
for(i=0;i<7;i++)
  printf("%d ",a[i]);
}
关键在break语句,例如你输入1,因为1<a[0],所以直接break跳出循环,执行a[i]=j;a[0]被1替换了。如果输入34,知道判断34<a[2],跳出循环,执行a[i]=j;语句。还有因为跳出循环了,所以i不自增了,所以是a[2]=34;而不是a[3]=34;就是这样了。
2013-11-14 09:14
zhangqidaxia
Rank: 2
等 级:论坛游民
帖 子:17
专家分:22
注 册:2013-10-16
收藏
得分:5 
题目要求的是“顺序插入已排好序的数组”,而楼主的程序是替换数组中比输入数值大的那个数,有些不符合题意
答案如下:
#include<stdio.h>
int main(void)
{
    int a[10]={14,23,45,65,67,87},i,j,s;
    printf("please enter a number from 0 to 100:");
    scanf("%d",&j);
    for(i=0;i<6;i++)
        if(j<a[i])
        {
            break;
        }
    for(s=8;s>=i;s--)
    {
        a[s+1]=a[s];
    }
    a[i]=j;
    for(i=0;i<7;i++)
        printf("%d ",a[i]);
    return 0;
}
2013-11-14 09:42
丶Super丶梦
Rank: 1
等 级:新手上路
帖 子:4
专家分:5
注 册:2013-11-14
收藏
得分:0 
    同上  我也想知道
2013-11-14 09:57
zfjstx
Rank: 2
等 级:论坛游民
帖 子:22
专家分:12
注 册:2009-9-16
收藏
得分:0 
回复 2楼 Red_stone
不对哎,题目的要求是插入之后仍然按顺序排列,大哥你的程序是变成替换了,不合提议哎
2013-11-14 12:22
zfjstx
Rank: 2
等 级:论坛游民
帖 子:22
专家分:12
注 册:2009-9-16
收藏
得分:0 
回复 3楼 zhangqidaxia
大哥,你的这种算法我理解,我所不理解的是我原来程序里的第二个for循环,少了那个for循环就会出错,如果不修改,程序是正确的,但是我无法理解第二个for循环的意思
2013-11-14 12:25
Belin
Rank: 2
等 级:论坛游民
帖 子:5
专家分:18
注 册:2013-11-14
收藏
得分:5 
程序没错!第二个for循环是将你插入位置后面的元素玩往后移,以空出位置插入数据。
例如:输入15;根据题目,‘15’将会插入到‘14’的后面,就要将‘{14,23,45,65,67,87}’中‘14’后面的元素往后移,再进行插入操作,最终数组为{14,15,23,45,65,67,87}

一万年不改变。。。
2013-11-14 13:05
Red_stone
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:32
专家分:120
注 册:2013-3-11
收藏
得分:0 
回复 5楼 zfjstx
你确定你贴的程序是对的?我改了一下可以出正确结果:
#include <stdio.h>
void main(){
int a[10]={14,23,45,65,67,87},i,j,s;
printf("please enter a number from 0 to 100!");
scanf("%d",&j);
for(i=0;i<6;i++)
if(j<a[i]){
for(s=6;s>=i;s--)
a[s+1]=a[s];
break;}
a[i]=j;
for(i=0;i<7;i++)
  printf("%d ",a[i]);
}

这样你看一下嵌套的for循环应该能看明白的。
2013-11-14 22:14
zfjstx
Rank: 2
等 级:论坛游民
帖 子:22
专家分:12
注 册:2009-9-16
收藏
得分:0 
仔细看了下,确实不对,非常感谢2楼大哥的耐心解答,分数给你吧
2013-11-15 13:04
快速回复:疑难问题,哪位大侠帮忙解答下,感激不尽!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017568 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved