C语言:二进制模5

输入一串字符,若是二进制则求其模五的值

要求:1、若输入的字符包含除0、1以外的值,则输出:invalid

2、若输入的为二进制字符串,则输出所计算的其模五的值

3、若其输入字符均为0、1,但是第一个输入的字符为0则输出:irregular

 

思路:可以参照所学的形式语言与自动机理论里面的自动机思想来做题:通过对输入的字符进行一个个的判断,从而输出所求的值,根据相应的状态再进行输出。

根据题意可以判断出非0、1外的输入都是invalid,所以可以根据这个特点设定它的开始状态state=invalid,后面根据输入字符判断,建议在做题目前可以先画自动机状态图,这样有助于理清思路,避免写的时候出现思绪混乱。另外值得注意的是输入的字符串可能一开始是0、1组成,后面就是其他字符再加0、1组成的字符串的情况,这个时候是invalid状态,若像我这样写的就一定要注意跳到break了,不然会导致判断错误,所以一定要注意到这个情况。

这个题也可以用if...else  if...else...等语句嵌套,也可以不用宏定义每个状态值,直接用1、2、3、4.。。。等等数字作为状态,只要语法无错误都可。

 

 1 #include
 2 #define x0 0
 3 #define x1 1
 4 #define x2 2
 5 #define x3 3
 6 #define x4 4
 7 #define x5 5
 8 #define invalid 6
 9 #define irregular 7
10 int FA(int state,char input);
11 int main()
12 {
13    char a[10000];
14    int state,i=0;
15    gets(a);
16    state=invalid;
17    while(a[i]!='\0')
18    {
19        state = FA(state,a[i]);
20        i++;
21        if (state==invalid)
22            break;
23    }
24    if (state==x0 || state==5)
25        printf("0\n");
26    else if (state==x1)
27        printf("1\n");
28    else if (state==x2)
29        printf("2\n");
30    else if (state==x3)
31        printf("3\n");
32    else if (state==x4)
33        printf("4\n");
34    else if (state==6)
35        printf("invalid\n");
36    else if (state==7 )
37        printf("irregular\n");
38    return 0;
39 }
40 int FA(int state, char input)
41 {
42 switch(state)
43 {
44 case invalid:
45     if(input == '1') state=x1;
46     else if(input == '0') state=x5;
47     else state=invalid;
48     break;
49 case x0:
50     if(input == '1') state=x1;
51     else if(input == '0') state=x0;
52     break;
53 case x1:
54     if(input == '1') state=x3;
55     else if(input == '0') state=x2;
56     else state=invalid;
57     break;
58 case x2:
59     if(input == '1') state=x0;
60     else if(input == '0') state=x4;
61     else state=invalid;
62     break;
63 case x3:
64     if(input == '1') state=x2;
65     else if(input == '0') state=x1;
66     else state=invalid;
67     break;
68 case x4:
69     if(input == '1') state=x4;
70     else if(input == '0') state=x3;
71     else state=invalid;
72     break;
73 case x5:
74     if(input == '0' || input == '1') state=irregular;
75     else state=invalid;
76     break;
77 case irregular:
78     if(input == '0' || input == '1') state=irregular;
79     else state=invalid;
80     break;
81     }
82     return state;
83     }

 

你可能感兴趣的:(C语言:二进制模5)