重拾C,一天一点点_7
标准库,atof()函数包含在头文件<stdlib.h>中
/******把字符串s转换为相应的双精度浮点数*******/
- #include <stdio.h>
- #include <ctype.h>
- double atof(char s[]);
- main(){
- printf("%f\n", atof("109.999")); //109.999000
- printf("%f\n", atof("0.2350000")); //0.235000
- printf("%f\n", atof(" 1.2350 5")); //1.235000
- printf("%f\n", atof("-1.235")); //-1.235000
- }
- /******把字符串s转换为相应的双精度浮点数*******/
- double atof(char s[]){
- double val, power;
- int i, sign;
- for(i=0; isspace(s[i]); i++){
- ;
- }
- sign = s[i] == '-' ? -1 : 1;
- if('+' == s[i] || '-' == s[i]){
- i++;
- }
- for(val=0.0; isdigit(s[i]); i++){
- val = 10.0 * val + (s[i] - '0');
- }
- if('.' == s[i]){
- i++;
- }
- //把小数部分跟整数一样处理,记录位数,再除位数得值
- for(power=1.0; isdigit(s[i]); i++){
- val = 10.0 * val + (s[i] - '0');
- power *= 10.0;
- }
- return sign * val / power;
- }
C语言不允许在一个函数定义其他函数。不像JS,可以这样。
- <script>
- function test(){
- var i = 1, j = 2;
- function test2(){
- i += 2;
- return i + j;
- }
- return test2();
- }
- console.log(test()); //5
- </script>
外部变量(全局变量):永久存在。
默认情况下,外部变量与函数具有下列性质:通过同一个名字对外部变量的所有引用(即使这种引用来自于单独编译的不同函数)实际上都是引用同一个对象(标准中这一性质称为外部链接)
内部变量(局部变量):函数内有效。
逆波兰表示法:
(1 - 2) * (4 + 5) 可表示为:1 2 – 4 5 + *
静态变量:
外部的static声明通常多用于变量,也可用于声明函数。
通常情况下,函数是可全局访问的,但声明为static类型函数,仅对该函数所在的文件可见,其他文件无法访问。
static也可声明局部变量,与普通局部变量不同的是,它的值一直存在。
- #include <stdio.h>
- static int i = 0;
- main(){
- int j;
- for(j=0; j<10; j++){
- i++;
- }
- printf("%d\n",i); //10
- }
寄存器变量
register变量放在机器的寄存器中,这样可以使程序更小、执行速度更快。但编译器可以忽略此选项。
register int x;
register char c;
register声明只适用于自动变量以及函数的形式参数。
f(register unsigned m, register long n){
register int i;
….
}
实际使用时,底层硬件环境对寄存器变量的使用会有一些限制。每个函数中只有很少的变量可以保存在寄存器中,且只允许某些类型的变量。但是,过量的寄存器声明并没有什么害处,因为编译器可以忽略过量的或不支持的寄存器变量声明。另外,无论寄存器变量实际上是不是存放在寄存器中,它的地址都是不能访问的。在不同的机器中,对寄存器变量的数量和类型的具体限制也不同。
初始化:在不进行显式初始化的情况下,外部变量和静态变量都被初始化为0,而自动变量和寄存器变量的初值没有定义(即初值为无用的信息)。
- #include <stdio.h>
- int i;
- static long l;
- main(){
- int j;
- register int k;
- printf("%d\n",i); //0
- printf("%d\n",l); //0
- printf("%d\n",j); //2130567168无效值
- printf("%d\n",k); //4199260无效值
- }
全局变量与静态变量,初始化表达式必须是常量表达式,且只初始化一次。
局部变量与寄存器变量,初始化可以包含在此表达式之前已定义的值,包括函数调用。
定义数组
int months[] = {1,2,3,4,5,6,7,8,9,10,11,12}; //12
当不指定数组长度时,编译器把花括号初始化表达式的个数作为数组长度。
如果初始化表达式的个数比数组元素少,则对全局变量、静态变量和局部变量来说,没有初始化表达式的元素的值为0。反之,则是错误的。不能一次将一个初始化表达式指定给多个数组元素。
- #include <stdio.h>
- main(){
- int months[15] = {1,2,3,4,5,6,7,8,9,10,11,12};
- //int arr[3] = {1,2,3,4}; //error
- printf("%d\n", months[12]); //0
- months[12] = 13;
- printf("%d\n", months[12]); //13
- months[14] = 15;
- months[13] = 14;
- printf("%d\n", months[14]); //15
- }
字符数组初始化
char s[] = “abcd”;
char s[] = {‘a’, ‘b’, ‘c’, ‘d’};
char s[] = {"abcd"};
附:
1、有一个人在一个森林里迷路了,他想看一下时间,可是又发现自己没带表。恰好他看到前面有两个小女孩在玩耍,于是他决定过去打听一下。更不幸的是这两个小女孩有一个毛病,姐姐上午说真话,下午就说假话,而妹妹与姐姐恰好相反。但他还是走近去他问她们:“你们谁是姐姐?”胖的说:“我是。”瘦的也说:“我是。”他又问:现在是什么时候?胖的说:“上午。”“不对”,瘦的说:“应该是下午。”这下他迷糊了,到底他们说的话是真是假?
2、有一个外地人路过一个小镇,此时天色已晚,于是他便去投宿。当他来到一个十字路口时,他知道肯定有一条路是通向宾馆的,可是路口却没有任何标记,只有三个小木牌。第一个木牌上写着:这条路上有宾馆。第二个木牌上写着:这条路上没有宾馆。第三个木牌上写着:那两个木牌有一个写的是事实,另一个是假的。相信我,我的话不会有错。假设你是这个投宿的人,按照第三个木牌的话为依据,你觉得你会找到宾馆吗?如果可以,那条路上有宾馆哪条路上有宾馆?
原文博客地址:http://www.cnblogs.com/lltong/
重拾C,一天一点点_7的更多相关文章
- 重拾C,一天一点点_2
类型转换一般来说,如果二元运算符的两个操作数具有不同的类型,较低的类型提升为较高类型,结果为较高类型.表达式由float类型的操作数不会自动转换为double类型.使用float类型主要是为了在使用较 ...
- 重拾C,一天一点点
数据类型及长度 char 字符型,占用一个字节 int 整型,通常代表特定机器中整数的自然长度 short 16位 int 16位或32位 ...
- 重拾C
重拾C,一天一点点_10 来博客园今天刚好两年了,两年前开始学编程. 忙碌近两个月,项目昨天上线了,真心不容易,也不敢懈怠,接下来的问题会更多.这两天调试服务器,遇到不少麻烦. 刚出去溜达了一下,晚上 ...
- CSS魔法堂:重拾Border之——更广阔的遐想
前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...
- CSS魔法堂:重拾Border之——不仅仅是圆角
前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...
- CSS魔法堂:重拾Border之——图片作边框
前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...
- CSS魔法堂:重拾Border之——解构Border
前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...
- 重拾Blog
上个月是我入职现在的公司三周年的月份,所以又续订了五年的合同,最近有一些思考,也不知道这个五年能否还会一直在这个公司工作. 一切随缘吧. 闲适有毒,忙碌的时光总是过的很快,自从加入这个公司以来,日常的 ...
- [linux]重拾linux
起因 因为想重拾起linux,同时需要用docker起几个镜像,用来学习网络知识.本来想直接去阿里云上买,后来一想自己机器上,起一个linux是个不错的选择,毕竟不花钱! 还可以用来做本地测试,学习使 ...
随机推荐
- java代码求奖金。要求从键盘输入利润
总结:看似文字描述很多, package com.ai; import java.util.Scanner; import com.b.Scaner; //v企业发放的奖金根据利润提成.利润(I)低于 ...
- 转: SQL中的where条件,在数据库中提取与应用浅析
SQL中的where条件,在数据库中提取与应用浅析 http://hedengcheng.com/?p=577 1问题描述 一条SQL,在数据库中是如何执行的呢?相信很多人都会对这个问题比较感兴趣.当 ...
- VS2017自定义代码片段, 实现快捷输入
点击VS2017的工具→代码片段管理器, 下图: 语言选择C#, 路径定位到 Visual C#, 然后复制这个路径在电脑中打开 这里以增加 crk 快捷方式输出 Console.ReadKey()来 ...
- 关于 object-c的@protocol的理解
从java角度来理解 @protocol 相当于 java 的接口定义,用法也一样 下面是试验例子 @protocol mytestClass <NSObject> - (void) ca ...
- Java微信公众平台开发【番外篇】(七)--公众平台测试帐号的申请
转自:http://www.cuiyongzhi.com/post/45.html 前面几篇一直都在写一些比较基础接口的使用,在这个过程中一直使用的都是我个人微博认证的一个个人账号,原本准备这篇是写[ ...
- java core 正则 "\\PL+"的意义
java core第十版中的第一章中出现了一个正则"\\PL+",根据注释(Split into words:noletters are delimiters)提示,这个正则的意思 ...
- Eclipse使用hibernate插件反向生成实体类和映射文件
一般dao层的开发是这样的,先进行数据库的设计,什么E-R图之类的那些,然后选择一款数据库产品,建好表.最后反向生成Java实体和映射文件,这样可以保证一致性和便捷性. 如果用myeclipse,逆向 ...
- grep家族
grep家族由命令grep.egrep和fgrep组成. grep:在文件中全局查找指定的正则表达式,并且打印所有包含该表达式的行.egrep和fgrep是grep的变体.egrep:grep的扩展, ...
- 2018 Spring Single Training B (uva 572,HihoCoder 1632,POJ 2387,POJ 2236,UVA 10054,HDU 2141)
这场比赛可以说是灰常的水了,涨信心场?? 今下午义务劳动,去拿着锄头发了将近一小时呆,发现自己实在是干不了什么,就跑到实验室打比赛了~ 之前的比赛补题补了这么久连一场完整的都没补完,结果这场比完后一小 ...
- 【总结整理】面试pm常见的问题---摘自《人人都是产品经理》
求职路上,“怼”来“怼”去的面试问题 人人都是产品经理社区 发布于 2018-10-29 19:53:06 举报 阅读数:1418 在求职路上,面对那些被“怼”到过的面试问题,应该如何处理? 一个 ...