黑马程序员-03.C 语言中基础知识点的总结

时间:2023-02-17 09:44:04
                           ------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

1.C语言中的变量

1)变量的定义

变量类型 变量名;

int score;

只要有不确定的数据,就应该定义变量来保存

2)变量的赋值(也叫做变量的初始化)

score = 100;

score = a;

score = b = 100;

3)变量的输出

 int a = 200;

 printf("%i", a);

4)常用格式符(占位符):

1> %d\%i 整数(int)

2> %f  小数,默认是6位小数(float、double)

3> %c  字符(char)

5)变量的作用域(作用范围)

 从定义变量的那一行代码开始,一直到所在的代码块结束。

6)代码块的作用

 及时回收不再使用的变量,为了提升性能

7)交换变量的值的三种方法

(1).利用第三方变量 

 int temp = a;

 a = b;

 b = temp;(使用temp中间变量)

(2).不利用第三方变量 

 a = b - a;

 b = b - a;

 a = b + a;

(3).利用运算符

 a = a ^ b;

 b = a ^ b;

 a = a^ b;

8)变量的内存分析

1>内存寻址由大到小,优先分配内存地址比较大的字节给变量

2>变量越先定义,内存地址就越大

3>取得变量的地址:&变量名

 printf("a的地址是:%p\n", &a);

4>输出地址符:%p

 printf("b的地址是:%p\n", &b);

5>变量一定要先进性初始化才可以使用

2.scanf函数的基本使用

scanf函数只接受变量的地址

scanf函数是一个阻塞式的函数,等待用户输入

用户输入完毕后,就会将用户输入的值赋值给number变量

scanf("%d", &number);

Scanf的注意的几点

1>输入字符

char c;

scanf("%c", &c);

printf("输入的字符是%c\n", c);

2>一次性输入多个数值,并且以某些符号隔开

int num1, num2;
scanf("%d#%d", &num1, &num2);
printf("num1=%d, num2=%d\n", num1, num2);

3>如果scanf参数中以空格隔开,实际输入可以以空格、tab、回车作为分隔符

 

   int num1, num2;
    scanf("%d %d", &num1, &num2);
    printf("num1=%d, num2=%d\n", num1, num2);

4>scanf中不能写\n

int a;

scanf("%d\n", &a); // 错误写法

printf("a的值是%d\n", a);

3.算数运算符

1)算数运算符的基本使用

    int a = 10 + 1 + 2 - 3 + 5;

    int b = -10;

    int c = 10 * b;

    int d = 10 / 2;

 2)取余运算(模运算)

    %两边都是整数

    %取余结果的正负性只跟%左边的数值有关

    int e = 10 % -3;

    printf("%d\n", e);

3)自动类型转换(double->int)

    int a = 10.8;

4)强制类型转换(double->int)

    int b = (int) 10.5;

    printf("%d\n", a);

5) 自动类型提升(int->double)

6)赋值运算符

复合赋值运算符

    a += 5; // a = a + 5;

    

    a *= 5; // a = a * 5;

    

    a += 5 + 6 + 4; // a = a + (5 + 6 + 4);

7)举例说明自增和自减运算符

 

#include 
int main(int argc,const char * argv[])
{
    int b;
    int a = 5;
    b = (++a) + (a++);
    
    printf("b=%d, a=%d\n", b, a);
    return 0;
}

 

 本体打印的结果是 b=12 a=7

 1.程序首先从main函数开始,声明二个int型的变量a和b,在内存中各分配4个字节给a和b,并且把b的值初始化为5.

 2.无论是++a或者是a++都是把a的值分别加1所以a的值是7.

 3.++a是在没有进行任何运算之前加1,经过++a以后,现在a的值是6,此时的运算表达式相当于“b=6+(a++)”.

 4.a++是让参加运算以后再加1所以此时的运算表达式是“b=6+6=12”

 5.然后a再加1现在a的结果是7

4.sizeof

不要把sizeof当成函数,也不要看作一元操作符,把他当成一个特殊的编译预处理

  sizeof有两种用法:
  

1)sizeof(object)
    也就是对对象使用sizeof,也可以写成sizeof object 的形式

   int size = sizeof(10);

   int size = sizeof 10.9;

   int a = 10;

   int size = sizeof(a);

   int size = sizeof a;

2)sizeof(typename)
    也就是对类型使用sizeof 

    int size = sizeof(char);

    int size = sizeof char;  错误的

5.关系运算

C语言规定,任何数值都有真假性,任何非0值都为“真”,只有0才为“假”。
关系运算优先级
1) C语言关系运算符==、!=的优先级相等,>、<、>=、<=的优先级相等,且前者的优先级低于后者的优先级

2) 关系运算符优先级相同时,运算顺序“从左至右”

3) 关系运算符的优先级低于算术运算符

6.逻辑运算

C语言规定:任何非0值都为“真”,只有0才为“假”,因此逻辑运算也适用于数值。

1) 逻辑运算符与: && 

条件A&& 条件B  条件全部成立才为真!当左边条件为假时,右边条件不再运算。

逻辑与的结合方向是“自左至右”

2) 逻辑运算符或: ||  

条件A || 条件B  其中一个条件成立或全部成立为真!条件都不成立才为假。当左边条件为假时,右边条件不再运算。

逻辑与的结合方向是“自左至右”

3) 逻辑非: !

 !条件A    对条件A逻辑取反,条件成立即假,条件不成立即真。

逻辑非的结合方向是“自右至左”

逻辑运算 ! 可以多次连续使用。


4) 逻辑运算符的优先级顺序为: 小括号() > 负号 - > ! > 算术运算符 > 关系运算符 > && > ||

5)三目运算

条件?值1:值2;   如果条件成立,返回值1;不成立返回值2,三目运算一定有返回值 

C语言规定:任何非0值都为“真”,只有0才为“假”,因此逻辑运算也适用于数值。

 

#include 
int main()
{
/* 计算2个整数之间的最大值
    int a = 10;
    int b = 99;
    int c = a>b ? a : b;
    printf("c is %d\n", c);
    */
    // 计算3个整数之间的最大值
    int a = 10;
    int b = 999999;
    int c = 1000;
    
     // 求出a、b的最大值
    int abMax = (a > b) ? a : b;
    // 求出最终的最大值
    int d = (abMax > c) ? abMax : c;
    
//int d = (((a > b) ? a : b) > c) ? ((a > b) ? a : b) : c;
    printf("d is %d\n", d);
    return 0;
}




                      ------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------