主题:[讨论]这段代码有什么问题?
夜月凄冷
[专家分:0] 发布于 2010-05-17 23:01:00
#include<stdio.h>
#include<string.h>
void main()
{char name[10][12],head[12];
int i,j,k;
printf("请输入10个国家的名称!\n");
for(i=0;i<10;i++)
scanf("%s",name[i]);
for(j=0;j<10;j++)
{ for(k=0;k<10-j;k++)
{
if(strcmp(name[k],name[k+1])>0)
strcpy(head,name[k+1]);
strcpy(name[k+1],name[k]);
strcpy(name[k],head);
else
;
}
}
printf("结果是:\n");
for(i=0;i<10;i++)
printf("%s\n",name[i]);
}
代码是要实现输入10个国家的名称,然后按照从小到大的顺序输出的,这样写错误在哪里?怎样用指针配合函数实现?有人可以帮帮忙看下吗?谢谢![em4][em3]
回复列表 (共9个回复)
沙发
k1458 [专家分:350] 发布于 2010-05-17 23:12:00
Modifyed, please find the different
#include<stdio.h>
#include<string.h>
void main()
{char name[10][12],head[12];
int i,j,k;
printf("请输入10个国家的名称!\n");
for(i=0;i<10;i++)
scanf("%s",&name[i]);
for(j=0;j<10;j++)
{ for(k=0;k<10-j;k++)
{
if(strcmp(name[k],name[k+1])>0)
{
strcpy(head,name[k+1]);
strcpy(name[k+1],name[k]);
strcpy(name[k],head);
}
// else
;
}
}
printf("结果是:\n");
for(i=0;i<10;i++)
printf("%s\n",name[i]);
getch();
}
板凳
雪光风剑 [专家分:27190] 发布于 2010-05-17 23:45:00
[quote]Modifyed, please find the different
#include<stdio.h>
#include<string.h>
void main()
{char name[10][12],head[12];
int i,j,k;
printf("请输入10个国家的名称!\n");
for(i=0;i<10;i++)
scanf("%s",&name[i]);
for(j=0;j<10;j++)
{ for(k=0;k<10-j;k++)
{
if(strcmp(name[k],name[k+1])>0)
{
strcpy(head,name[k+1]);
strcpy(name[k+1],name[k]);
strcpy(name[k],head);
}
// else
;
}
}
printf("结果是:\n");
for(i=0;i<10;i++)
printf("%s\n",name[i]);
getch();
}[/quote]
这个修改是错误的……尝试修改scanf里的格式为" %s"吧,这样可以滤掉多余的回车符
3 楼
夜月凄冷 [专家分:0] 发布于 2010-05-18 21:39:00
貌似你什么都没改啊,没任何意义啊![em8]
4 楼
夜月凄冷 [专家分:0] 发布于 2010-05-18 21:40:00
什么意思?你还是没有说明白啊??[em18]问题也没有解决啊![em17]
5 楼
雪光风剑 [专家分:27190] 发布于 2010-05-18 22:37:00
for(k=0;k<10-j;k++)
总觉得这个内层比较别扭,个人更习惯用k=j+1;k<10;k++做内圈
不过lz你也没跟我们说现在这个代码你发现错在哪里啊?让我们自己给你设计用例去测试么……
6 楼
newalice [专家分:0] 发布于 2010-05-18 23:09:00
MARK 没看出来这个代码有什么问题哦!
7 楼
sxm227 [专家分:10] 发布于 2010-05-19 17:06:00
深圳市华信群英科技有限公司与知名通信软件公司正式签订定向输送人才的合作协议
针对想进入IT软件行业的有志人士提供专业的企业内训
实训课程采用“2+3”分段教学模式,分为2个月理论强化和3个月项目实训两个阶段
实训前就签订就业安置协议,岗前实训后入职
不仅学费优惠而且是企业定向培训定向招聘,百分百保证就业
有意向请登录www.szctt.com,或加QQ:1179397962做详细咨询
8 楼
mo_0820 [专家分:50] 发布于 2010-05-19 20:19:00
#include<stdio.h>
#include<string.h>
void main()
{char name[10][12],head[12];
int i,j,k;
printf("请输入10个国家的名称!\n");
for(i=0;i<10;i++)
scanf("%s",name[i]);
for(j=0;j<10;j++)
for(k=0;k<10-j;k++)
if(strcmp(name[k],name[9-j])>0)
{
strcpy(head,name[k]);
strcpy(name[k],name[9-j]);
strcpy(name[9-j],head);
}
printf("结果是:\n");
for(i=0;i<10;i++)
printf("%s\n",name[i]);
}
你要注意下算法,我用的应该叫冒泡法。
9 楼
mo_0820 [专家分:50] 发布于 2010-05-19 20:26:00
#include<stdio.h>
#include<string.h>
void main()
{char name[10][12],head[12];
int i,j,k;
printf("请输入10个国家的名称!\n");
for(i=0;i<10;i++)
scanf("%s",name[i]);
for(j=0;j<10;j++)
{ for(k=0;k<10-j;k++)
{
if(strcmp(name[k],name[k+1])>0)
{strcpy(head,name[k+1]);
strcpy(name[k+1],name[k]);
strcpy(name[k],head); }
}
}
printf("结果是:\n");
for(i=0;i<10;i++)
printf("%s\n",name[i]);
}
楼主算法没错的,就是if语句下面要加{}
我来回复