| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 760 人关注过本帖
标题:数组问题,我写的程序运行出的结果不对?
只看楼主 加入收藏
jiawan007
Rank: 1
等 级:新手上路
帖 子:45
专家分:2
注 册:2009-8-1
结帖率:90.91%
收藏
已结贴  问题点数:10 回复次数:9 
数组问题,我写的程序运行出的结果不对?
题目要求输入以回车符结束的字符串(少于80个字符),统计其中大写的辅音字母(除了AEIOU这5个字母的辅音字母)。
我写的程序如下:
#include<stdio.h>
int main(void)
{
    int count=0,i=0,j=0;
    char str[80];
    char a[6]={'A','E','I','O','U','\0'};
    printf("Enter a string:");
    while((str[i]=getchar())!='\n')
        i++;
    str[i]='\0';
    for(i=0;str[i]!='\0';i++)
    for(j=0;a[j]!='\0';j++)
        if(str[i]>='A'&&str[i]<='Z'&&str[i]!=a[j])
            count++;
        printf("count=%d\n",count);
        return 0;
}
但是却运行不出正确结果,比如我输入AEIOU,count应该为0,但结果却是20,请问一下哪里错了,谢谢!
搜索更多相关主题的帖子: 运行 结果 
2009-12-23 13:52
hnliji1107
Rank: 4
等 级:业余侠客
帖 子:53
专家分:216
注 册:2009-10-23
收藏
得分:0 
感觉你写的好乱啊,而且与题意不符,你看看是不是这样的...

[ 本帖最后由 hnliji1107 于 2009-12-23 19:35 编辑 ]
2009-12-23 14:46
hnliji1107
Rank: 4
等 级:业余侠客
帖 子:53
专家分:216
注 册:2009-10-23
收藏
得分:0 

程序代码:
#include "stdio.h"
int main(void)
{
    int i,count=0;
    char str[80];
    i=0;
    printf("input the string:\n");
    while((str[i++]=getchar())!='\n')
        str[i]='\0';
    i=0;
    while(str[i]!='\n')
    {
        if(str[i]=='A'||str[i]=='E'||str[i]=='I'||str[i]=='O'||str[i]=='U')
            count++;
        i++;
    }
    printf("count=%d\n",count);
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 hnliji1107 于 2009-12-23 19:35 编辑 ]
2009-12-23 14:50
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:2 
看题,AEIOUaeiouAEIOU的count值也应是0。
按我的理解改成下面这样:
程序代码:
#include<stdio.h>
int main(void)
{
    int count=0,i=0,j=0;
    char str[80];
    char a[6]={'A','E','I','O','U','\0'};
    printf("Enter a string:");
    while((str[i]=getchar())!='\n')
        i++;
    str[i]='\0';
    for(i=0;str[i]!='\0';i++)
      {
        if(str[i]>='A'&&str[i]<='Z')
        for(j=0;a[j]!='\0';j++)
          {
            if(str[i]==a[j])
              break;
          }
        if(j==5) count++;
      }
    printf("count=%d\n",count);
    return 0;
}



[ 本帖最后由 UserYuH 于 2009-12-23 15:16 编辑 ]

努力—前进—变老—退休—入土
2009-12-23 14:58
小J
Rank: 8Rank: 8
等 级:等待验证会员
威 望:1
帖 子:282
专家分:704
注 册:2009-6-18
收藏
得分:1 
#include<stdio.h>
int main(void)
{
    int count=0,i=0,j=0,k=0,m=0;
    char str[80];
    char a[6]={'A','E','I','O','U','\0'};
    printf("Enter a string:");
    while(str[i-1]!='\n')
    {
        scanf("%c",&str[i]);
        i++;
    }
    k=i/2;
    printf("count=%d\n",k);
    str[i]='\0';
    for(i=0;str[i]!='\0';i++)
    {
        printf("%-2c",str[i]);
    }
    printf("\n");
    for(i=0;str[i]!='\0';i++)
    {
        if(str[i]>='A' && str[i]<='Z')
        {
            for(j=0;a[j]!='\0';j++)
            {
                if(str[i]==a[j])
                {
                    m++;
                }   
            }
            
        }
    }
    count=k-m;
    /*for(i=0;str[i]!='\0';i++)
    {
        for(j=0;a[j]!='\0';j++)
        {
            if(str[i]>='A' && str[i]<='Z' && str[i]==a[j])
                count++;
        }
    }*/
        printf("count=%d\n",count);        
        return 0;
}
在你的基础上改的!有什么不懂的在问我,我在线!如果按我的程序,输入的时候必须要每输入一个字符就要输入一个空格!

[ 本帖最后由 小J 于 2009-12-23 15:43 编辑 ]
2009-12-23 15:35
liangwenbc
Rank: 3Rank: 3
来 自:广州
等 级:论坛游侠
帖 子:168
专家分:174
注 册:2008-6-11
收藏
得分:5 
按照你的改成这样
#include<stdio.h>
int main(void)
{
    int count=0,i=0,j=0;
    char str[80];
    char a[6]={'A','E','I','O','U','\0'};
    printf("Enter a string:");
    while((str[i]=getchar())!='\n')
        i++;
    str[i]='\0';
    for(i=0;str[i]!='\0';i++)
     {for(j=0;a[j]!='\0';j++)
       if(str[i]>='A'&&str[i]<='Z'&&str[i]==a[j]) break;/*当str[i]与数组a中的任意一个字符相等时退出循环,以后都不用比较了*/
       if (j==5)count++;/*如果比到最后一个字符仍然没有找到相同的即加1*/
     }
        printf("count=%d\n",count);
        getch();
        return 0;
}


[ 本帖最后由 liangwenbc 于 2009-12-23 15:46 编辑 ]

qq7434391
2009-12-23 15:36
jiawan007
Rank: 1
等 级:新手上路
帖 子:45
专家分:2
注 册:2009-8-1
收藏
得分:0 
回复 6楼 liangwenbc
请问一下最后的那个getch()有什么用?
2009-12-23 21:51
cyber1000
Rank: 2
等 级:论坛游民
帖 子:3
专家分:12
注 册:2009-12-21
收藏
得分:2 
其实出错在这句代码上面:
for(j=0;a[j]!='\0';j++)
        if(str[i]>='A'&&str[i]<='Z'&&str[i]!=a[j])
            count++;
你自己分析下首先输入“A”,j=0时if条件为假,count不会自加,但for循环不会终止,j=1,2,3,4时条件都为真,所以此时count就自加了4次,值为4
按你输入的5个字母,很容易就知道最后运行的结果是20了
2009-12-23 23:24
liangwenbc
Rank: 3Rank: 3
来 自:广州
等 级:论坛游侠
帖 子:168
专家分:174
注 册:2008-6-11
收藏
得分:0 
以下是引用jiawan007在2009-12-23 21:51:11的发言:

请问一下最后的那个getch()有什么用?
加getch();编译运行输出结果时可以观察得到,不加闪一下就关了

qq7434391
2009-12-23 23:28
jiawan007
Rank: 1
等 级:新手上路
帖 子:45
专家分:2
注 册:2009-8-1
收藏
得分:0 
回复 6楼 liangwenbc
这个程序还是有问题,并没有排除小写字母。
我在你的基础上又修改了一下,已经可以运行出正确结果了。
程序如下:
#include<stdio.h>
int main(void)
{
    int count=0,i=0,j=0;
    char str[80];
    char a[6]={'A','E','I','O','U','\0'};
    printf("Enter a string:");
    while((str[i]=getchar())!='\n')
        i++;
    str[i]='\0';
    for(i=0;str[i]!='\0';i++){
    for(j=0;a[j]!='\0';j++)
        if(str[i]>='A'&&str[i]<='Z'&&str[i]==a[j]) break;
        if(str[i]>='A'&&str[i]<='Z'&&j==5) count++;
    }
        printf("count=%d\n",count);
        return 0;
}
非常感谢你给我启发!
2009-12-24 18:09
快速回复:数组问题,我写的程序运行出的结果不对?
数据加载中...
 
   



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

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