递归,数组,初识别JSON,XML
来源:互联网 发布:淘宝家居椅子 编辑:程序博客网 时间:2024/05/22 04:51
- - - - - - - - - - - - - - - 触控未来的日子–Day 34- - - - - - - - - - - - - -
昨天没有交作业,因为我不会用递归,只会用循环(其实用循环也费了老大的功夫)。知之为知之,不知为不知!我不想交一个与题目要求不符的答案上去,尽管这样说有解释之嫌。不过话说回来,相比其他同学,我这班长当的很惭愧!
听说几次不及格就要延迟就业,我觉得这样其实很合理,基础不扎实就上岗也是对用人单位的不负责。我不怕被延迟,我只是不能接受落后于人,毕竟我从来都没有觉得自己比别人智商低。
输入二进制数,输出与之对应的十进制
(思路:因为暂时找不到直接让计算机将我输入的数字当做二进制数,所以只能输入一个伪二进制的十进制数,比如10101,然后一位一位的拆解,同时给它们换座位(本来是乘十的就成2,乘100的就乘4,依次类推….最后再加起来。
整个的步骤可以总结为:除权拆解,加权重组。)
# include <stdio.h>#include <math.h> void main(){ int k = 1,m = 1,n = 1, i = 1,x = 1,y = 1,j = 1,sum = 0; printf("任意输入一位二进制数: "); scanf("%d",&i); getchar(); for( n = 0;i/k >0;n++){ k *= 10; } printf("\n您输入的二进制数总共有: %d位",n); for(j = n - 1;j >= 0;j--){ x = pow(2,j); y = pow(10,j); sum += (i/y)*x; i = i%y; } printf("\n\n它对应的十进制数是: %d",sum); getchar();}
待优化的部分:
当输入的数字不是二进制类型时要求重新输入。
这都不是关键,关键是我还是不会用递归做……算法我知道,边界我也清楚,调用自身我也会,就是不知道返回值的部分如何写。
———–懵与懂的分界线———–
首先感谢李涛同学的代码提示,让我对递归的疑惑瞬间解开,先附上昨晚家庭作作业第一题的递归做法
//输入一个数,输出它的十进制数,递归做法#include <stdio.h>#include <math.h> void main(){ int i = 1,n; int exchange(int n); printf("输入一个二进制数:\n"); scanf("%d",&n); getchar(); printf("\n它的十进制数是: %d",exchange(n)); getchar(); exchange(n);}int exchange(int x){ if(x/10 == 0){ return 1; }else{ return exchange(x/10)*2+x%10; } }
思路:二转十,就是要把二进制数的每一个数都乘以2的N次方,N代表它所在的位置顺序(低位往高位数,从0开始)
算法解释:
比如输入n = 1111
n/10= 111 //干掉最后一位,再作为传参调用。
因为末尾的数已经不能再继续乘2,换句话说末位的加权动作本来就是1*2^0,这一步中已经完成了,所以要把它分离出去,如下:
n%10= 1 //这样最后一位就拆解来了,并且已经完成十进制的转换。
然后返回的值是exchange(n/10)*2+x%10,我自己给这种情况起了一个名字叫“半返回状态”,因为返回值里面有一部分是需要继续实现功能的函数,所以此时数字部分要在这里等候,直到函数正式退出以后再一起返回。这样就可以实现二进制从低往高的每一位都乘以相应的2的幂后再加上被干掉的末尾数。这么说可能很绕。
大概是之前给别人培训做多了,哥最喜欢做的事,就是把复杂的问题讲的形象生动,下面是我的演示:
如果我以后当师傅了,这样讲学生还听不懂,我可能会把他打死!
假设递归调用的函数时t: 输入二进制数a: 111111 //(对应的十进制应该是63) 第一次进入函数: (a /10)去余 =11111 (作为传参调用) (a%10)取余 = 1 此时的返回值:t(11111)*2+1 为半返回状态,1不输出,在此等候。 递归模式开启1: 第二次的返回值(a(1111)*2+1)*2+1=a(1111)*4 + 3 递归未结束,为半返回状态,3不输出,在此等候。 第三次的返回值(a(111)*2+1)*4+2+1=a(111)*8 + 7 递归未结束,为半返回状态,7不输出在此等候。 第四次的返回值(a(11)*2+1)*16+4+2+1=a(11)*16 +15 递归未结束,为半返回状态,15不输出,在此等候。 第五次的返回值(a(1)*2+1)*32+16+4+2+1=a(1)*32 +31 = 1*32 + 31 = 63 递归结束,完全返回状态,输出63,走你☞
其实这道题还有别的算法,类似于我自己刚开始的循环算法,也是可以的,不过本人觉得这个算法比较叼,感觉脑洞被撬开了几个,再次感谢李涛。
.
.
来吧,“帝龟”,我要一个打十个!!!
今日课堂内容:
1),数组
概念:同一类型的多个元素的集合——数组
结构: int array [5] = {0,1,2,3,4} //[]内数字代表数组的长度
类型 变量名 [大小] = 初始化
两种定义形式:int array[] = {1,2,3,4},int array[4] = {1,2,3,4}.
2),数组初始化,两种方式:
a,直接进行初始化
int array [5] = {0,1,2,3,4}
可以对全部元素赋值,此时可以不用指定数组的长度(还是写上的好,反正不费多大力气)。
上面的代码可以写成:int array[] = {0,1,2,3,4}
如果只给部分元素赋值,则其余元素都为当前类型的默认值:
0(int型) 0.000000(float型) 空(char型);
如果要全部赋值为零,可以写成:int array[] = {0}
b,生僻知识 –下标初始化
array[0] = 1
(前提是已经声明)
一维数组的声明 datatype arrayName [size]
类型说明符 标识符 大小
3),数组的取值
核心:下标取值(下标就是数组元素的顺序,参考JS)
数组是一大片连续的内存空间。
4)不合法定义
5)不能超过数组的边界,否则程序会崩溃。
—-穿插知识点 —
常量定义时define与const的区别:
http://blog.csdn.net/feng200950080206/article/details/7601988
C语言数组冒泡排序法:
好大一个坑,C语言的数组不能像JS那样直接打印整个数组(至少目前为止是这样),而是需要逐个数组循环打印。千万不能偷懒把打印的动作放在第一个循环里面(虽然它的循环次数正式我们要的),因为这时冒泡还没有结束,会出错,会出错,会出错。
一旦运气不好糊弄过去了,就掉的大。比如下面两个数组,用之前错误的方法进行冒泡排序,a可以糊弄过去,b就会发现问题。
a = [1,2,9,4,7,3,12,34,17,22]
b = [11,1,4,56,34,32,434,57,3,12]
#include<stdio.h>void main(){ int i = 0,j = 0; int a[10] = {11,1,4,56,34,32,434,57,3,12}; printf("升序排列:\n"); for(i = 0;i <10;i++){ for(j = 1;j<10;j++){ if(a[j] < a[j-1]){ a[j] = a[j] + a[j-1]; a[j-1] = a[j] - a[j-1]; a[j] = a[j] - a[j-1]; } } } for(i = 0;i <10;i++ ){ printf("%d\t",a[i]); getchar(); } }
遗留问题:输入5个数,形成数组,再输入一个数,判断数组中是否有元素与之相同,利用函数,返回是或否。
JSON 与XML:
两者的共同优点是都是文本表示的数据格式,可以跨平台、跨系统交换数据。
可读性和可扩展性:,JSON和XML不相上下。
编码难度:JSON略比XML简单,要写好XML最好还是借助XML编辑器,标签的嵌套和配对手动输入来说容易出错。因此,从代码的可维护性角度而言,JSON优于XML。
内容解析:JSON在客户端只要使用eval()便可完成解析,在服务器端有包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等语言的解析支持,非常简单;而XML则相对复杂,不管在服务器端还是在客户端都需要花费大量的代码来实现解析。
数据表示和传输性能:JSON明显比XML简洁,格式简单,占用带宽少。
安全性:由于大部分Javascript库都是使用eval()来解析数据,存在执行恶意JSON数据的安全漏洞;当然可以使用专门的JSON解析器来避免这个问题。相比,XML更安全一些。
XML
优点:
1. 格式统一, 符合标准
2. 容易与其他系统进行远程交互, 数据共享比较方便
3.调用将 XML 用作传输的现有服务。
4.使用 XSLT 可以动态转换 XML。这是企业服务总线 (ESB) 方案中的理想功能。
缺点:
1. XML文件格式文件庞大, 格式复杂, 传输占用带宽
2. 服务器端和客户端都需要花费大量代码来解析XML, 不论服务器端和客户端代码变的异常复杂和不容易维护
3. 客户端不同浏览器之间解析XML的方式不一致, 需要重复编写很多代码 4. 服务器端和客户端解析XML花费资源和时间
JSON
优点:
1. 数据格式比较简单, 易于读写, 格式都是压缩的, 占用带宽小,浏览器解析快
2. 易于解析这种语言, 客户端JavaScript可以简单的通过eval()进行JSON数据的读取
3. 构造友好,支持多种语言, 包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等语言服务器端语言, 便于服务器端的解析
4. 在PHP世界, 已经有PHP-JSON和JSON-PHP出现了, 便于PHP序列化后的程序直接调用. PHP服务器端的对象、数组等能够直接生JSON格式, 便于客户端的访问提取.
5. 因为JSON格式能够直接为服务器端代码使用, 大大简化了服务器端和客户端的代码开发量, 但是完成的任务不变, 且易于维护 6.相当稳定。JSON 的附加内容将成为超集。
缺点:
1. 没有XML格式这么推广的深入人心和使用广泛, 没有XML
那么通用性
2. JSON格式目前在Web Service中推广还属于初级阶段。
- 递归,数组,初识别JSON,XML
- 初识别
- SpringMVC纯注解配置web.xml、json、静态资源、thymeleaf,递归json数组
- 判断xml,json,数组
- PHP数组转XML 递归
- java对象转json、json数组 、xml
- Dom4j递归遍历XML,返回对象(json)
- 通过递归实现java xml转json
- xml TO json(非递归实现)
- 初识别输入输出
- 初识别node.js1
- 初识递归
- 2.4 XML解析与JSON解析与初识NSURLSession
- 初识JSON
- 初识JSON
- 初识JSON
- 初识JSON
- 初识JSON
- 代理模式
- 数据结构上机测试1:顺序表的应用
- C/C++字符串学习
- 排序并比较排序时间
- 适配器模式
- 递归,数组,初识别JSON,XML
- java final关键字
- Sort the Array
- 观察者模式
- POJ Children of the Candy Corn3083(dfs+bfs)
- 开发工具Eclipse IDE的安装与配置
- c语言学习----选择结构程序设计
- Tachyon:Spark生态系统中的分布式内存文件系统
- C++重载、重写、重定义区别