| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 685 人关注过本帖
标题:初学者求解。先谢过了!
只看楼主 加入收藏
zengyifan
Rank: 1
等 级:新手上路
帖 子:17
专家分:2
注 册:2010-3-30
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:9 
初学者求解。先谢过了!
一个判断是否是整数的程序,(如下)。是老是叫用这种方法些的,里面好像有个什么状态转换表的,就是ST[5][4]={{}.{},{},{},{}}这个东西,上课老师听见老师讲什么转换表的东西,但是都不理解,望指教。(详细点哦!)

#include<stdio.h>
int main(void)
{
    int state=0,input_type;
    int ST[5][4]={{1,2,4,4},{4,4,3,4},{2,2,3,4},{4,4,4,4},{4,4,4,4}};

    char ch;

    printf("请输入整数\n");

    while(1)
    {
        ch=getchar();
        if(ch=='0')
            input_type=0;
        else if((ch>='1')&&(ch<='9'))
            input_type=1;
        else if(ch='\n')
            input_type=2;
        else
            input_type=3;

        state=ST[state][input_type];   
        if(input_type==2)
            break;
    }
    if(state==3)
        printf("是整数\n");
    else
        printf("不是整数\n");
        getchar();

   
    return 0;
搜索更多相关主题的帖子: 求解 
2010-07-07 00:24
平凡の嫩嫩鼻
Rank: 2
来 自:郑州
等 级:论坛游民
帖 子:20
专家分:17
注 册:2010-6-8
收藏
得分:0 
看不懂。。。
2010-07-07 00:29
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
回复 楼主 zengyifan
没看懂你要干什么?
能详细说明你要实现的功能吗?

南国利剑
2010-07-07 00:45
zengyifan
Rank: 1
等 级:新手上路
帖 子:17
专家分:2
注 册:2010-3-30
收藏
得分:0 
回复 3楼 南国利剑
老师经常跟我们说很大部分的程序都基于一个状态转换表,所以每次一要写程序老师就叫我们先画状态转换表。这个程序就是基于一个状态转换表些出来的,主要用于判断输入的是否是整数。我就是不太懂,你懂吗?那你一般写程序的时候都是先怎么做啊?
2010-07-07 23:30
husiwen
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:227
专家分:1125
注 册:2010-5-23
收藏
得分:0 
真看不懂
2010-07-08 00:18
rainbow1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:277
专家分:839
注 册:2010-5-19
收藏
得分:0 
那就把状态转换表给贴出来,让大家看一下。
2010-07-08 00:24
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:10 
解答之一如下:
输入有4种:
0: 代表 字符'0',
1: 代表 数字 '1'-'9'
2: 代表 '\n'
3: 代表 其他
状态有5种:0,1,2,3,4其中0是开始状态,3和4 是结束状态
ST[5][4]是根据状态转换图而得来的转换表:上的0,1,2,3分别表示输入.左边的0,1,2,3,4表示状态
图片附件: 游客没有浏览图片的权限,请 登录注册

举个几个例子:
例子1:键盘输入0:因为会按回车 所以键盘输入会带'\n',因此
程序实际接受为'0' '\n':
当接受到'0'时,从上图对照可以查出(0,0)的数据是1,这个1表示状态1,所以跳到状态1.
接着在状态1接受'\n'.从上图对照可以查出(1,2)的数据是3,这个3表示状态3.程序判断状态3为整数,0确实是整数.
例子2:键盘输入01:程序实际接受为'0' '1' '\n':
当接受到'0'时,从上图对照可以查出(0,0)的数据是1,这个1表示状态1,所以跳到状态1.
接着在状态1接受'1'.从上图对照可以查出(1,1)的数据是4,这个4表示状态4.所以跳到状态4.
又在状态4接受'\n',从上图对照可以查出(4,2)的数据是4,这个4表是状态4.程序判断为非整数,01确实不是整数

有了状态图 再转换成表 用程序实现是很容易的.优点是代码短,缺点是耗内存.

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2010-07-08 12:01
zengyifan
Rank: 1
等 级:新手上路
帖 子:17
专家分:2
注 册:2010-3-30
收藏
得分:0 
回复 7楼 do8do8do8
对对对,就是有个这样的矩阵表,都是根据状态转换图弄出来的,可我就是理解不了,一开始的状态图我也画不出来,还忘多多指教啊。谢了!
2010-07-08 13:01
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:10 
图片附件: 游客没有浏览图片的权限,请 登录注册

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2010-07-08 13:36
zengyifan
Rank: 1
等 级:新手上路
帖 子:17
专家分:2
注 册:2010-3-30
收藏
得分:0 
这个对写程序真的很有用哦,谢谢了!就是要画这个的时候感觉无从下手。
2010-07-08 21:34
快速回复:初学者求解。先谢过了!
数据加载中...
 
   



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

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