首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

初学者有关问题

2012-02-25 
菜鸟问题#include stdio.h#include string.hint Sum(char a[],int n){int k,j,sum0for (j0jnj++

菜鸟问题
#include <stdio.h>
#include <string.h>
int Sum(char a[],int n)
{
int k,j,sum=0;
for (j=0;j<n;j++)
{
for (k=j+1;k<n;k++)
{
  if (a[j]>a[k]) sum++;
  }
}
return sum;
}
int main(int argc, char *argv[])
{
int n,m;
int i,j,t;
char a[50][110],c[110];
int b[50];
scanf("%d%d",&n,&m);
for (i=0;i<m;i++)
{
scanf("%s",a[i]);  
b[i]=Sum(a[i],n); //求b[i]的值 
}
//冒泡 
for (i=0;i<n-1;i++)
for (j=0;j<n-1-i;j++) 
  {
  if(b[j]>b[j+1])
  {
  t=b[j]; strcpy(c,a[j]);
  b[j]=b[j+1]; strcpy(a[j],a[j+1]);  
  b[j+1]=t; strcpy(a[j+1],c); //若前个b[i]大的话就交换 连同字符窜一起交换 
  }
  }
  for (i=0;i<m;i++)
  printf("%s\n",a[i]);
return 0;
}

输入的数据 
10 6
AACATGAAGG
TTTTGGCCAA
TTTGGCCAAA
GATCAGATTT
CCCGGGGGGA
ATCGATGCAT
为什么会有一个显示不出来 把数组c的大小改成10就可以了
谢谢大家

[解决办法]

C/C++ code
//冒泡  for (i=0;i<n-1;i++)for (j=0;j<n-1-i;j++)    {      if(b[j]>b[j+1])      {      t=b[j]; strcpy(c,a[j]);      b[j]=b[j+1]; strcpy(a[j],a[j+1]);         b[j+1]=t; strcpy(a[j+1],c); //若前个b[i]大的话就交换 连同字符窜一起交换        }  }
[解决办法]
1.不是很清楚,你m和n到底分别来控制什么的,假如说m控制的是输入字符串的个数,可是最后输入数据的个数却是6个,
[解决办法]
假如说n是输入字符串的个数,可是你在求Sum的时候传入的又是n。。。。求解释
[解决办法]
C/C++ code
        for (i=0;i<m-1;i++)//排序的这个地方要用m,不是n    {        for (j=0;j<m-1-i;j++)          {            if(b[j]>b[j+1])            {                t=b[j]; strcpy(c,a[j]);                b[j]=b[j+1]; strcpy(a[j],a[j+1]);                   b[j+1]=t; strcpy(a[j+1],c);             }        }    }
[解决办法]
//冒泡
for (i=0;i <n-1;i++)
{
for (j=0;j <n-1-i;j++)
{
if(b[j]> b[j+1])
{

[color=#FF0000]t=b[j]; strcpy(c,a[j]);
b[j]=b[j+1]; strcpy(a[j],a[j+1]);
b[j+1]=t; strcpy(a[j+1],c); //若[/color]前个b[i]大的话就交换 连同字符窜一起交换
}
}
printf( "a0=%s\n ",a[0]);
}


看红色那,当i=0时,j可能为8,可能会出现strcpy(a[j],a[j+1];即:strcpy(a[8],a[9]),哪来的a[8],a[9],
不知道你在做什么,具体原因自己看吧

热点排行