• 重拾C,一天一点点_7


    标准库,atof()函数包含在头文件<stdlib.h>中

    /******把字符串s转换为相应的双精度浮点数*******/

     1 #include <stdio.h>
     2 #include <ctype.h>
     3 double atof(char s[]);
     4 
     5 main(){
     6     printf("%f
    ", atof("109.999"));        //109.999000
     7     printf("%f
    ", atof("0.2350000"));        //0.235000
     8     printf("%f
    ", atof("       1.2350       5"));        //1.235000
     9     printf("%f
    ", atof("-1.235"));        //-1.235000
    10 }
    11 /******把字符串s转换为相应的双精度浮点数*******/
    12 double atof(char s[]){
    13     double val, power;
    14     int i, sign;
    15     for(i=0; isspace(s[i]); i++){
    16         ;
    17     }
    18     sign = s[i] == '-' ? -1 : 1;
    19     if('+' == s[i] || '-' == s[i]){
    20         i++;
    21     }
    22     for(val=0.0; isdigit(s[i]); i++){
    23         val = 10.0 * val + (s[i] - '0');    
    24     }
    25     if('.' == s[i]){
    26         i++;
    27     }
    28     
    29     //把小数部分跟整数一样处理,记录位数,再除位数得值 
    30     for(power=1.0; isdigit(s[i]); i++){
    31         val = 10.0 * val + (s[i] - '0');
    32         power *= 10.0;
    33     }
    34 
    35     return sign * val / power;
    36 }

    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
    ",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
    ",i);		//0
    	printf("%d
    ",l);		//0
    	printf("%d
    ",j);		//2130567168无效值 
    	printf("%d
    ",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
    ", months[12]);		//0
    	months[12] = 13;
    	printf("%d
    ", months[12]);		//13
    	months[14] = 15;
    	months[13] = 14;
    	printf("%d
    ", months[14]);		//15
    }
    

    字符数组初始化
        char s[] = “abcd”;
        char s[] = {‘a’, ‘b’, ‘c’, ‘d’};

     char s[] = {"abcd"};

    附:

    1、有一个人在一个森林里迷路了,他想看一下时间,可是又发现自己没带表。恰好他看到前面有两个小女孩在玩耍,于是他决定过去打听一下。更不幸的是这两个小女孩有一个毛病,姐姐上午说真话,下午就说假话,而妹妹与姐姐恰好相反。但他还是走近去他问她们:“你们谁是姐姐?”胖的说:“我是。”瘦的也说:“我是。”他又问:现在是什么时候?胖的说:“上午。”“不对”,瘦的说:“应该是下午。”这下他迷糊了,到底他们说的话是真是假?

    2、有一个外地人路过一个小镇,此时天色已晚,于是他便去投宿。当他来到一个十字路口时,他知道肯定有一条路是通向宾馆的,可是路口却没有任何标记,只有三个小木牌。第一个木牌上写着:这条路上有宾馆。第二个木牌上写着:这条路上没有宾馆。第三个木牌上写着:那两个木牌有一个写的是事实,另一个是假的。相信我,我的话不会有错。假设你是这个投宿的人,按照第三个木牌的话为依据,你觉得你会找到宾馆吗?如果可以,那条路上有宾馆哪条路上有宾馆?

    原文博客地址:http://www.cnblogs.com/lltong/

  • 相关阅读:
    土木工程材料0732
    07 具有无关项的逻辑函数及其化简
    06 逻辑函数化简法
    AD中板子挖孔开槽
    电容式触摸按键原理
    LTspice
    三相电
    7、简单电阻容元件模型的创建
    cadence17.4在笔记本下设置菜单显示不全的解决办法
    36. 二叉搜索树与双向链表
  • 原文地址:https://www.cnblogs.com/lltong/p/3381709.html
Copyright © 2020-2023  润新知