当前位置: 代码迷 >> C语言 >> [求助]看一下错在哪
  详细解决方案

[求助]看一下错在哪

热度:380   发布时间:2006-12-22 22:16:19.0
[求助]看一下错在哪
编写一个程序,输入n个人的姓名,然后统计其中有多少个以“z”字母开头的名字,并把所有以“z”字母开头的名字和以“z”字母开头的最长的名字显示出来。

# include <stdio.h>
# include <string.h>
# define N 10
main()
{
int i,t,p,max=0;
char name[N][20];
printf("输入姓名:");
for(i=0;i<N;i++)
gets(name[i]);
printf("以z字母开头的姓名有:");
for(i=0;i<N;i++)
if(name[i][0]=='z')
puts(name[i]);
printf("以z字母开头的姓名最长的是:");
for(i=0;i<N;i++)
{
if(name[i][0]=='z')
{
p=strlen(name[i]);
if(p>max)
{
t=p;
p=max;
max=t;
}
max=i;
}
}
puts(name[max]);
}
输出结果是出现错误,高手帮忙看下错在哪?
搜索更多相关的解决方案: 名字  姓名  统计  

----------------解决方案--------------------------------------------------------
以下是引用我是一只小菜鸟在2006-12-22 22:16:19的发言:
编写一个程序,输入n个人的姓名,然后统计其中有多少个以“z”字母开头的名字,并把所有以“z”字母开头的名字和以“z”字母开头的最长的名字显示出来。

# include <stdio.h>
# include <string.h>
# define N 10
main()
{
int i,t,p,max=0;
char name[N][20];
printf("输入姓名:");
for(i=0;i<N;i++)
gets(name[i]);
printf("以z字母开头的姓名有:");
for(i=0;i<N;i++)
if(name[i][0]=='z')
puts(name[i]);
printf("以z字母开头的姓名最长的是:");
for(i=0;i<N;i++)
{
if(name[i][0]=='z')
{
p=strlen(name[i]);
if(p>max)
{
t=p;
p=max;
max=t;
}
max=i;
}
}
puts(name[max]);
}
输出结果是出现错误,高手帮忙看下错在哪?

二维数组用的有问题


----------------解决方案--------------------------------------------------------
楼上的可以把正确的发出来吗?
----------------解决方案--------------------------------------------------------

/*编写一个程序,输入n个人的姓名,然后统计其中有多少个以“z”字母开头的名字,并把所有以“z”字母开头的名字和以“z”字母开头的最长的名字显示出来。
*/


# include <stdio.h>
# include <string.h>
# define N 10

void fun(char (*p)[20])
{ int length=0,j=0,i,maxi,max=0;
for(i=0;i<N;i++)
{j=0;
while(*(*(p+i)+j++)!='\n')
length++;
{if(max<length)
{max=length;
maxi=i;
}
length=0;
}
}
printf ("\nthe longest name which begins with 'z'\n");
j=0;
while(*(*(p+maxi)+j)!='\n')
printf("%c", *(*(p+maxi)+j++));
}


main()
{
int i,j=0,t,p,max=0;
char name[N][20];
printf("input the names\n");
for(i=0;i<N;i++)
{while((name[i][j++]=getchar())!='\n')
;
j=0;
}
printf("names which begin with 'z'\n");
j=0;
for(i=0;i<N;i++)
{j=0;
{if(name[i][0]=='z')
while(name[i][j]!='\n')
{printf("%c",name[i][j]);
j++;
}
printf("\n");
}
}
fun(name);
getch();

}

[此贴子已经被作者于2006-12-23 13:34:16编辑过]


----------------解决方案--------------------------------------------------------
根据你的程序改的。。。思路还是你的思路
----------------解决方案--------------------------------------------------------

main()
{
int i,x,j=0,t,p,max=0;
char name[N][20];
int a[N];
printf("input the names\n");
for(i=0;i<N;i++)
{while((name[i][j++]=getchar())!='\n')
;
j=0;
}
printf("names which begin with 'z'\n");
j=0;
for(i=0;i<N;i++)
{j=0;
{ if(name[i][0]=='z')
{ while(name[i][j]!='\n')
{ printf("%c",name[i][j]);
j++;
}
printf("\n");
if(j>max)
{ max=j;
        x=i;  /*顺便记录并判断是Z开头的数组的最大长度*/
       }
}
}
}
printf("\nthe longest name which begins with 'z'\n");
for(i=0;i<max;i++)
{printf("%c",name[x][i]);

}
}

本人是在"海蓝啸"的基础上在修改的,这题用指针有点大才小用啊,会把题目复杂化.

[此贴子已经被作者于2006-12-24 1:31:31编辑过]


----------------解决方案--------------------------------------------------------
楼上的算法比我的好。。。学习一下。。呵呵
----------------解决方案--------------------------------------------------------
不用strlen()和printf("%s");简直是一种浪费.
----------------解决方案--------------------------------------------------------
[CODE]

#include <stdio.h>
#include <string.h>

int main(void)
{
int n, i, num, length, k;

while(scanf("%d", &n) != EOF)
{
num = length = 0;
getchar();

char str[n][16];
char temp[16];

for(i = 0;i < n;i ++)
{
scanf("%s", str[i]);
}
for(i = 0;i < n;i ++)
{
if(str[i][0] == 'z')
{
k = strlen(str[i]);
if(k > length)
{
length = k;
strcpy(temp, str[i]);
}
num ++;
printf("%-18s", str[i]);
}
}
if(num == 0)
printf("no person's name is beginned with 'z'.\n");
else
{
printf("\n%d\n", num);
printf("%s\n", temp);
}
}
return 0;
}

[/CODE]
----------------解决方案--------------------------------------------------------

#include <stdio.h>
#include <string.h>
#define N 5
void main()
{
int i,t=0,s,m;
char name[N][20];
printf("输入姓名:\n");
for(i=0;i<N;i++)
gets(name[i]);
printf("以'z'字母开头的名字:\n");
for(i=0;i<N;i++)
if(name[i][0]=='z')
{
puts(name[i]);
{
s=strlen(name[i]);
if(t<s)
{
m=i;t=(t>s)?t:s;
}
}

}
printf("以'z'字母开头的最长的名字:\n");
puts(name[m]);
}


我的,呵呵


----------------解决方案--------------------------------------------------------
  相关解决方案