已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式系统的开发与应用实习任务书一、实习目的:通过一个参数个数不固定函数的设计和调试,练习嵌入式系统C程序的设计方法。二、实习内容编写一个简化的仿scanf函数,名为myscanf函数,实现从键盘中输入十进制整数和小数型实数的功能。该函数格式如下int myscanf(char *formatstr,.)在VC平台上开发。三、实习具体要求1 第一个参数是格式字符串,格式只识别%d和%f这两种格式,分别表示十进制int型数据(32位有符号整数)和小数格式的double型数据。在格式字符串中,如果发现%后有其它字符(非d和非f),认为有错,停止处理,并打印出错信息,返回-1。2 当然输入的整数数据超出范围时,按出错处理,停止处理,并打印出错信息,返回-1。由于小数格式double类型的整数部分最多可以到达三百多位,因此我们不处理超出数据范围的错误。3 在格式的其他字符匹配中,只要有不匹配的字符,按出错处理,停止处理,并打印出错信息,返回-1。4 该函数只处理一行数据,不处理跨行数据。5 当处理正确完成后,返回值就是输入的整数和实数的总个数。6 可以使用C语言本身所带的gets函数。五、实习报告要求1所提交内容包括程序设计书和程序清单两部分2所做程序必须保证程序的健壮性。在完成基本功能的同时,能处理各种错误 处理以及意外事件。3提交的程序设计书应该包含各个过程的功能、参数说明。并用流程图表示该 过程的算法。4所提交的程序必须结构清晰,层次分明。程序应该有比较好的可读性。程 序清单中至少30%是注解。/ test.cpp : Defines the entry point for the console application./#include stdafx.h#include #include #include #define MAX_LEN 200#define MAX_POSINTSTR 2147483647 /最大整数字符串#define MAX_NEGINTSTR 2147483648 /最小整数绝对值字符串/*判断一个整数字符串是否越界如果越界则返回1-,否则返回0intstr:用于判断的整数字符串*/int defineoverflow(char *intstr)int n1,i,n2;char standstr15;if(intstr0=-)/如果是负数,则用最小整数绝对值进行判断strcpy(standstr, MAX_NEGINTSTR);intstr+; /越过负号else/如果是负数,则用最小整数绝对值进行判断strcpy(standstr, MAX_POSINTSTR);if(intstr0=+)intstr+; /越过正符号n1 = strlen(intstr);n2 = strlen(standstr);/整数字符串位数过长,则定越界,返回-1if(n1 n2)return -1;/整数字符串位数较短,则肯定不越界,返回0if(n1 n2)return 0;/如果位数一样,从最高位开始比较for(i = 0; i n1;i+)if(intstri standstri)return -1;/如果刚好是极限值return 0;/*从整型字符串得到整数值intstr:整形字符串返回值是所得到的整数*/int getintvalue(char *intstr)int sgn; /符号变量,表示该整数的正负int v = 0;char *p = intstr;if(intstr0=-)sgn = -1;p+; elsesgn = 1;if(intstr0=+)p+;while(*p!=0)v = v*10 + (*p - 0);p+;v = v * sgn;return v;/*从实型字符串得到double值doublestr:整形字符串返回值是所得到的实数值*/double getdoublevalue(char *doublestr)int sgn; /符号变量,表示该整数的正负double v = 0;char *p = doublestr;double k = 10; /小数的比例因子if(doublestr0=-)sgn = -1;p+; elsesgn = 1;if(doublestr0=+)p+;while(*p!=0 & *p!=.)v = v*10 + (*p - 0);p+;if(*p=.)p+;while(*p!=0)v += (*p - 0)/k;k = k* 10;p+;v = v * sgn;return v;/*匹配普通字符串,要求输入字符串中指定位置之处存在一个完全匹配的子串ppf :一个二维指针,它所指向的指针值就是格式字符串中的开始匹配的位置,当匹配结束后,它所指向的指针值应该是下一个匹配的起始位置,传回给调用函数ppin:一个二维指针,它所指向的指针值就是输入字符串中的开始匹配的位置,当匹配结束后,它所指向的指针值应该是下一个匹配的起始位置,传回给调用函数成功返回0,否则返回-1。#include stdafx.h#include #include #include #define MAX_LEN 200#define MAX_POSINTSTR 2147483647 /最大整数字符串#define MAX_NEGINTSTR 2147483648 /最小整数绝对值字符串/*判断一个整数字符串是否越界如果越界则返回1-,否则返回0intstr:用于判断的整数字符串*/int defineoverflow(char *intstr)int n1,i,n2;char standstr15;if(intstr0=-)/如果是负数,则用最小整数绝对值进行判断strcpy(standstr, MAX_NEGINTSTR);intstr+; /越过负号else/如果是负数,则用最小整数绝对值进行判断strcpy(standstr, MAX_POSINTSTR);if(intstr0=+)intstr+; /越过正符号n1 = strlen(intstr);n2 = strlen(standstr);/整数字符串位数过长,则定越界,返回-1if(n1 n2)return -1;/整数字符串位数较短,则肯定不越界,返回0if(n1 n2)return 0;/如果位数一样,从最高位开始比较for(i = 0; i n1;i+)if(intstri standstri)return -1;/如果刚好是极限值return 0;/*从整型字符串得到整数值intstr:整形字符串返回值是所得到的整数*/int getintvalue(char *intstr)int sgn; /符号变量,表示该整数的正负int v = 0;char *p = intstr;if(intstr0=-)sgn = -1;p+; elsesgn = 1;if(intstr0=+)p+;while(*p!=0)v = v*10 + (*p - 0);p+;v = v * sgn;return v;/*从实型字符串得到double值doublestr:整形字符串返回值是所得到的实数值*/double getdoublevalue(char *doublestr)int sgn; /符号变量,表示该整数的正负double v = 0;char *p = doublestr;double k = 10; /小数的比例因子if(doublestr0=-)sgn = -1;p+; elsesgn = 1;if(doublestr0=+)p+;while(*p!=0 & *p!=.)v = v*10 + (*p - 0);p+;if(*p=.)p+;while(*p!=0)v += (*p - 0)/k;k = k* 10;p+;v = v * sgn;return v;/*匹配普通字符串,要求输入字符串中指定位置之处存在一个完全匹配的子串ppf :一个二维指针,它所指向的指针值就是格式字符串中的开始匹配的位置,当匹配结束后,它所指向的指针值应该是下一个匹配的起始位置,传回给调用函数ppin:一个二维指针,它所指向的指针值就是输入字符串中的开始匹配的位置,当匹配结束后,它所指向的指针值应该是下一个匹配的起始位置,传回给调用函数成功返回0,否则返回-1。*/int matchstr(char *ppf, char *ppin)char *pf = *ppf;char *pin = *ppin;while(*pf!=0 & *pf!=%)if(*pf!=*pin)*ppf = pf;*ppin = pin;return -1;pf+;pin+;*ppf = pf;*ppin = pin;return 0;/*匹配整数,要求输入字符串中指定位置之处提取一个整数intstr :存放所提取的整数字符串ppin:一个二维指针,它所指向的指针值就是输入字符串中的开始匹配的位置,当匹配结束后,它所指向的指针值应该是下一个匹配的起始位置,传回给调用函数成功返回0,否则返回-1。*/int matchint(char *intstr, char *ppin)char *pin = *ppin;int i = 0;int j;/略去所有空格while(*pin= )pin+;if(*pin=-)intstri+ = *pin+;else if(*pin=+)intstri+ = *pin+;j = i;while(*pin= 0 & *pin= 0 & *pin= 0 & *pin= 9)doublestrj+ = *pin+;if(i = j)return -1;doublestrj = 0;*ppin = pin;return 0;int myscanf(char *formatstr,.)char inputstrMAX_LEN; /存放从键盘输入的字符串char *pin;char *pf;char intstrMAX_LEN;char doublestrMAX_LEN;va_list marker;int *d; /存放整数参数的地址double *r; /存放实数参数的地址/参数列表初始化va_start(marker, formatstr);gets(inputstr);pin = inputstr;pf = formatstr;while(*pf!=0)if(*pf=%)pf+;if(*pf=d)/匹配整数if(matchint(intstr, &pin)=-1)va_end(marker);return -1;if(defineoverflow(intstr)=-1)va_end(marker);return -1;d = va_arg(marker, int* );*d = getintvalue(intstr);pf+;else if(*pf=f)/匹配实数if(matchdouble(doublestr, &pin)=-1)va_end(marker);return -1;r = va_arg(marker, double* );*r = getdoublevalue
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026 年护理带教考核评价体系优化实践
- 2026年子宫腺肌病个案护理分享
- 2026 年护理不良事件根因分析与闭环管控
- 2026 年 1 例重症脑卒中合并多重并发症护理个案分享
- 2026年内分泌科重症糖尿病临床护理查房
- Python异常处理试题及答案
- 双减政策背景下小学语文家庭作业困境的解决策略
- 2026年安全工程师考试危化品泄漏应急处置流程资料题目及答案
- 教师心理测评试题及答案呈现
- 2026年度重庆市农业技术人员职称考试农机专业真题精讲解析卷
- 校外培训机构风险分级分类管控方案
- 2026下半年上海杨浦区卫健系统事业单位公开招聘93名专业技术人员笔试参考题库及答案详解
- ×××信息化项目验收报告
- 宁德市福安市2026学年数学三年级下学期期末综合测试试题(含答案)
- GA/T 1043-2025智能交通管理系统前端设备运行维护规范
- 2025年中国陶粒支撑剂市场调查研究报告
- 2026-2030中国无缝钛管行业现状规模与前景趋势研究报告
- 2026贵州航天医院助理全科医生(西医)培训招录25人备考题库及答案详解(基础+提升)
- 2026年茶艺师知识试题及答案
- 2026年仪表工高级技师答辩试题及答案
- 期末综合模拟卷-2025-2026学年五年级数学下册(人教版)含答案
评论
0/150
提交评论