黑马程序员————C语言——基本语法2

时间:2022-07-29 00:28:18

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

一、变量的内存分析

  1> 内存以“字节为单位”

黑马程序员————C语言——基本语法2

        0x表示的是十六进制

   2> 不同类型占用的字节是不一样的,数据越大,所需的字节数就越多

   2、变量的存储
   1> 所占用字节数跟类型有关,也跟编译器环境有关
 黑马程序员————C语言——基本语法2
   2> 变量实例
        int b = 10;
        int a = 20;
    内存由大到小寻址,优先分配内存地址较大的字节给变量。b的内存地址比a大, 每个变量都有地址:第一个字节的地址就是变量的地址。
   3> 查看内存地址:
        int a;
        printf("a的地址是:%p\n", &a);
    4> 注意
         在变量未经初始化之前,不要尝试使用变量的值
         int a;
         printf("a的值是:%d\n", a);
         上面的写法是不建议的

二、输入和输出函数

  1、输入printf()函数

        printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。

        printf()函数的调用格式为: printf("<格式化字符串>", <参量表>)。

        格式输出,它是c语言中产生格式化输出的函数(在 stdio.h 中定义)。用于向终端(显示器、控制台等)输出字符。格式控制由要输出的文字和数据格式说明组成。要输出的的文字除了可以使用字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。

         在Turbo C中格式字符串的一般形式为:
         [标志][输出最小宽度][.精度][长度]类型  其中方括号[]中的项为可选项。

各项的意义介绍如下:
     1)类型:类型字符用以表示输出数据的类型,其格式符和意义如下表所示

格式字符

           

d

以十进制形式输出带符号整数(正数不输出符号)

o

以八进制形式输出无符号整数(不输出前缀0)

x,X

以十六进制形式输出无符号整数(不输出前缀Ox)

u

以十进制形式输出无符号整数

f

以小数形式输出单、双精度实数

e,E

以指数形式输出单、双精度实数

g,G

%f%e中较短的输出宽度输出单、双精度实数

c

输出单个字符

s

输出字符串

      2)标志:标志字符为-、+、#、空格四种,其意义下表所示:



标 志

        

-

结果左对齐,右边填空格

+

输出符号(正号或负号)

空格

输出值为正时冠以空格,为负时冠以负号

#

c,s,d,u类无影响;对o,在输出时加前缀o;对x,在输出时加前缀0x;对e,g,f类当结果有小数时才给出小数点


         3)输出最小宽度:用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0。
         4)精度:精度格式符以“.”开头,后跟十进制整数。本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。
         5)长度:长度格式符为h,l两种,h表示按短整型量输出,l表示按长整型量输出。

#include <stdio.h>
int main()
{
  int a=15;
  float b=123.1234567;
  double c=12345678.1234567;
  char d='p';
  printf("a=%d,%5d,%o,%x\n",a,a,a,a);
  printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b);
  printf("c=%lf,%f,%8.4lf\n",c,c,c);
  printf("d=%c,%8c\n",d,d);
  return 0;
 } 


  2、输出scanf()函数

   1>与printf函数一样,都被定义在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。

   2>简单用法

        int age;
        scanf("%d", &age);
    scanf函数时,会等待用户的键盘输入,并不会往后执行代码。scanf的第1个参数是"%d",说明要求用户以10进制的形式输入一个整数。这里要注意,scanf的第2个参数传递的不是age变量,而是age变量的地址&age,&是C语言中的一个地址运算符,可以用来获取变量的地址。输入完毕后,敲一下回车键,目的是告诉scanf函数我们已经输入完毕了,scanf函数会将输入的值赋值给age变量。

   3>其他用法
   (1)用scanf函数接收3个数值,每个数值之间用中划线-隔开
        scanf("%d-%d-%d", &a, &b, &c);
        3个%d之间是用中划线-隔开的,因此我们在每输入一个整数后都必须加个中划线-,比如这样输入,不然在给变量赋值的时候会出问题
     注意:数值之间的分隔符是任意的,不一定要用中划线-,可以是逗号、空格、星号*、井号#等等,甚至是英文字母
        // 逗号,
          scanf("%d,%d,%d", &a, &b, &c); // 输入格式:10,14,20  
        // 井号#
          scanf("%d#%d#%d", &a, &b, &c); // 输入格式:10#14#20 
       // 字母x
          scanf("%dx%dx%d", &a, &b, &c); // 输入格式:10x14x20

  (2)用scanf函数接收3个数值,每个数值之间用空格隔开
       scanf("%d %d %d", &a, &b, &c);
       3个%d之间是用空格隔开的,我们在每输入一个整数后必须输入一个分隔符,分隔符可以是空格、tab、回车

三、算术运算

       C语言一共有34种运算符,包括了常见的加减乘除运算
     1. 加法运算+
     除开能做加法运算,还能表示正号:+5、+90
     2. 减法运算-
     除开能做减法运算,还能表示符号:-10、-29
     3. 乘法运算*
         注意符号,不是x,而是*
     4. 除法运算/
      注意符号,不是÷,也不是\,而是/
      整数除于整数,还是整数。1/2的值是0,这个并不是二分之一
     5. 取余运算%
     什么是取余:两个整数相除之后的余数
    %两侧只能是整数
    正负性取决于%左侧的数值
     6. 注意点
    1> 自动类型转换
         int a = 10.6;
         int b = 10.5 + 1.7;
         自动将大类型转换为了小类型,会丢失精度
    2> 自动类型提升
         int b = 10.5 + 10;
         将右边的10提升为了double类型
         double b = 1.0 / 2;
         解决除法的精度问题
    3> 强制类型转换
        double a = (double)1 / 2;
        double b = (double)(1 / 2);
    4> 运算顺序
     表达式
     结合性(结合方向):2+3+4
     优先级:5+4*8-3