| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 28706 人关注过本帖
标题://本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字 ...
只看楼主 加入收藏
agoni68
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2019-12-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
//本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。能帮我看下算法上哪里不对吗?
程序编译没有问题,但是运行结果不对,不好用语言表达,麻烦自己运行一下就知道了。请帮忙解释一下。
以下是程序:
#include <stdio.h>
int main()
{
    char a[10];
    int i;
    int letter=0;//英文字母
    int blank=0;//空格
    int digit=0;//数字
    int other=0;
    for(i=0;i<=9;i++)
    {
        scanf("%c",&a[i]);
    }
    for(i=0;i<=9;i++)
    {
        if((a[i]>='a'||a[i]<='z')&&(a[i]>='A'||a[i]<='Z'))
        {
            letter++;
        }
        else if(a[i]==' '&&a[i]=='\n')
        {
            blank++;
        }
        else if(a[i]<=0||a[i<=9])
        {
            digit++;
        }
        else
        {
            other= 10 - letter - digit - blank;
        }
        printf("letter = %c, blank = %d, digit = %d, other = %d\n",letter,blank,digit,other);
    }
    return 0;
}
搜索更多相关主题的帖子: letter 字符 blank digit int 
2019-12-18 20:12
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:10 
if((a[i]>='a'||a[i]<='z')&&(a[i]>='A'||a[i]<='Z'))
这个明显错误吧

else if(a[i]==' '&&a[i]=='\n')
这个也明显错误。结合你上一个错误,我怀疑你混淆了 && 和 ||

else if(a[i]<=0||a[i<=9])
一句话有三个错误,除了||应该是&&之外,哪来的0和9,是'0'和'9'吧,a[i<=9] 这个粗心是不应该的

other= 10 - letter - digit - blank;
不说为什么不老实的 ++other,你能保证更改了 letter、digi、blank 之后,它一定会被执行一次?

2019-12-18 20:40
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:10 
程序代码:
#include <stdio.h>

int main( void )
{
    unsigned letter = 0; // 英文字母
    unsigned blank  = 0; // 空格
    unsigned digit  = 0; // 数字
    unsigned other  = 0; // 其它
    for( size_t i=0; i!=10; ++i )
    {
        int ch = getchar();
        if( (ch>='A'&&ch<='Z') || (ch>='a'&&ch<='z') )
            ++letter;
        else if( ch==' ' || ch=='\n' )
            ++blank;
        else  if( ch>='0' && ch<='9' )
            ++digit;
        else
            ++other;
    }

    printf( "letter = %u, blank = %u, digit = %u, other = %u\n", letter, blank, digit, other );
}

2019-12-19 09:15
agoni68
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2019-12-10
收藏
得分:0 
回复 3楼 rjsp
蟹蟹了,确实是我的语法知识不扎实 ,以后会通过学习改进的。
2019-12-19 12:20
agoni68
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2019-12-10
收藏
得分:0 
回复 2楼 rjsp
我们老师也没具体的讲a++和++a的运用,我习惯于用a++所以就套用了
2019-12-19 12:22
该用户有点懒
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2020-5-18
收藏
得分:0 
#include <stdio.h>
int main()
{
    char a[10];
    int i;
    int letter=0;
    int blank=0;
    int digit=0;
    int other=0;
    for(i=0;i<=9;i++)
    {
        scanf("%c",&a[i]);
    }
    for(i=0;i<=9;i++)
    {
        if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
        {
            letter++;
        }
        else if(a[i]==' '||a[i]=='\n')
        {
            blank++;
        }
        else if(a[i]>='0'&&a[i]<='9')
        {
            digit++;
        }
        else
        {
            other++;
        }
    }
    printf("letter = %d, blank = %d, digit = %d, other = %d\n",letter,blank,digit,other);
    return 0;
}
2020-05-18 23:44
快速回复://本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数 ...
数据加载中...
 
   



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

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