大计基作业中有这么一道题:

答案是D项。
那么如何实现这个图灵机的功能呢?
首先想到需要创建一个不定长度的数组。实际上,如果让用户输入字符串的长度,再输入字符串,就没有什么意义了,所以才想到找个办法根据用户输入的字符串长度创建数组。时间所限,还没有好好研究,现在贴下有关的链接:
https://bbs.csdn.net/topics/391041428
那么我们先做个固定长度的,比如8个的,也就是输入00001111,输出XXXXYYYY,按照所给图灵机的步骤。
经过多次修改后,最终代码如下:

#include<stdio.h>
#include<stdlib.h>
#define N 8char a[N];
int i;
char X, Y;
void Input();
void Change();
int main()
{for (i = 0; i < N; i++)a[i] = 0;Input();Change();printf("The array that you want is:");for (i = 0; i<N; i++)printf("%c", a[i]);printf("\n");return 0;
}void Input()
{int sign1 = 0, sign2 = 0, sign3 = 0;printf("Please input a binary array.\n");while (1){for (i = 0; i<N; i++){a[i] = getchar();//可改为scanf("%c",&a[i]);if (a[i] == 0)break;}for (i = 0; i<N; i++){if (a[i] == 48)sign1++;if (a[i] == 49)sign2++;if (a[i] == 48 && a[i + 1] == 49)sign3++;}if ((sign1 == sign2) && (sign3 == 1) && (a[0] == 48))break;printf("FORMAT ERROR!TYR AGAIN.\n");fflush(stdin);}printf("\nThe array is:");for (i = 0; i<N; i++)printf("%c", a[i]);printf("\n");
}
void Change()
{char *ptr;ptr = a;while (*ptr == '0'){*ptr = 'X';ptr++;while ((*ptr == '0') || (*ptr == 'Y')){ptr++;}*ptr = 'Y';ptr--;while ((*ptr == '0') || (*ptr == 'Y'))ptr--;ptr++;}ptr++;while (*ptr == 'Y')ptr++;
}

注意的点:

  • 1和0在本例中是字符型常量,所以Input函数中的判断程序判断的是1和0是否等于ASCII码。而Change函数中直接使用的’0’,避免了这一问题,但是千万不要忘了单引号;
  • 判断的双等号不要漏!小问题检查了很多遍才检查出来,因为IDE不会提示(因为合法);
  • while循环是为了输错之后能继续输入,注意要清除缓存区。

    依旧存在的问题就是无法对任意长度的数组实现操作。实际上小于8的字符串都能实现,但是要多敲几下回车,为了给后面的几个空字符赋值。

C语言实现大计基作业之某种图灵机相关推荐

  1. 大计基作业记录(1)

    第六周作业记录 学了c语言一段时间了,临近期末再回头看做过的题,还是充满感慨的,就浅记一下这学期做过的练习吧.(编程新手,如有错误还请指出(✿◡‿◡)) 1.编写程序完成对应数的输出 代码示例: // ...

  2. 大计基作业记录(3)

    第八周作业记录 记录一下第八周作业. 1.统计整数个数 代码示例 /*输入若干个整数,其值在0至4的范围内,用-1作为输入结束的标志,统计每个整数的个数.输入:[0,4]内的整数组成的序列,最后是-1 ...

  3. 大计基作业记录(2)

    第七周作业记录 记录一下第七周作业吧 1.输出平方根 代码示例: /*从键盘输入一个整数x,输出其平方根(为整数).若输入数大于1000或小于等于0,则输出0,并继续接受下一个输入直至小于等于1000 ...

  4. 大计基作业记录(4)

    第九周作业记录 q(≧▽≦q). 1.判断一个正整数是否为回文数 代码示例 /*编写一个函数来判断一个正整数是否为回文数,若是则返回1,否则返回0.所谓回文数是指各位数字左右对称的数,例如1221.3 ...

  5. 大计基作业记录(5)

    第十周作业记录 (._.) 1.数组循环移动 代码示例 /*设数组A中存有n(n>0)个整数,在不允许使用另外数组的前提下,将A中的每个整数循环右移m(m>=0)个位置.即:将A中的数据由 ...

  6. XJTU大计基作业-1(第7周)

    -11.请输入一个不含0的8位的十进制整数,编写程序取出该整数的中间4位数,分别输出取出的这4位数以及该4位数加上1024的得数. 输入:一个整数. 输出:两个整数,用空格分隔. #define _C ...

  7. XJTU大计基作业-5(第11周)

    //设数组A中存有n(n > 0)个整数, // 在不允许使用另外数组的前提下, // 将A中的每个整数循环右移m(m >= 0)个位置. // 即:将A中的数据由(A0A1--An - ...

  8. XJTU大计基作业第13周

    //编写一个程序,读入n个用户姓名和电话号码, // 按姓名的字典顺序排列后, // 输出用户的姓名和电话号码,n从键盘输入. // //样例: // //输入: // //3 // //张 122 ...

  9. XJTU大计基第九周编程作业

    第四次大计基作业 题目描述: 编写程序将4个字符构成的字符串用替换加密法编码为密文,其中加密规则是:将原来的字母用字母表中其后的第3个字母替换.注意,最后3个字符用前3个替换,如x用a替换. 输入输出 ...

最新文章

  1. TeamTalk源码分析之login_server
  2. 趣链 BitXHub跨链平台 (10)跨链自治
  3. Nginx详细安装部署教程
  4. 【小白学习keras教程】六、基于CIFAR-10数据集训练CNN-RNN神经网络模型
  5. 2013\National _C_C++_A\4.约数倍数选卡片
  6. python中函数定义_Python中函数的定义与使用
  7. Survival analysis
  8. MFC在其他类中访问主窗体的成员
  9. Redis master和slave是如何实现数据同步的
  10. 分布式链路追踪工具skywalking 介绍
  11. 如何在Eclipse配置PyDev插件
  12. Head First Java ——我的Java入门书
  13. 电力系统微型计算机继电保护试题及答案,2011年4月全国自学考试电力系统微型计算机继电保护试题答案...
  14. 哔哩哔哩缓存视频无声音,使用python合成音频与视频
  15. matlab凑数求和,凑数求和算法 C语言问题 C语言求和算法
  16. STM32C8T6 CAN常见波特率配置表
  17. 只有一个程序员开发和运营,BuiltWith网站年入1400万美元是怎么做到的?
  18. 七大管理工具:SWOT、PDCA、6W2H、SMART、WBS、时间管理、二八原则!
  19. Log4net自定义信息(变量或属性或字段)存入数据库
  20. zend optimizer php5.5,zend guard5.5版本下载-zend guard php5.5v5.5 免费版 - 极光下载站

热门文章

  1. 大学生吸烟现象调查报告
  2. 管理经济分析01:博弈论与经济学
  3. python 给QQ好友发信息
  4. 蓝牙2.0和4.0 android,蓝牙适配器2.0和4.0区别,蓝牙标准的发展历程
  5. pythoncad二次开发视频_pycad学习笔记(一)
  6. Android SDK 2.1 下载与安装教程
  7. 【微信小程序】 微信小程序连接本地接口
  8. 服务器查询IPV6地址
  9. 机器人兴趣班奖状_拼音兴趣班奖状导师寄语
  10. 蓝桥杯python试题 基础练习 Fibonacci数列