一.常量和变量
1.常量和变量:
1.字符串常量:
“ab”
“hello world”
字符串末尾都有一个用来标识字符串结尾的 \0字符
'a'和"a"区别:
'a':字符常量,只有一个字符a
"a":字符串常量,有2个字符'a' + '\0'
"ab\0" 4
"ab\\\123ab" 7
#include <stdio.h>
int main(void)
{
"ab";
"hello world";
printf("%ld\n", sizeof("hello world"));
return 0;
}
2.标识常量
#define N 5
宏只是代码的替换,中间不进行任何数据计算的操作
宏名一般都是大写,用来和变量区分
#include <stdio.h>
#define N 50
#define M N + N
#define LARGEN_FACTOR 1.5
int main(void)
{
int Num;
Num = M * M;
printf("Num = %d\n", Num);
Num = Num * LARGEN_FACTOR;
return 0;
}
3.变量:
数据类型 变量名;
int Num1, Num2, Num3;
#include <stdio.h>
int main(void)
{
int Num1 = 100, Num2 = 200;
printf("Num1 = %d\n", Num1);
printf("Num2 = %d\n", Num2);
return 0;
}
初始化:
定义变量的时候对变量赋初值
赋值:
定义变量后,对变量的赋值
初始化 != 赋值
注意:
1.未经初始化的变量值为随机值
2.定义变量时最好对变量初始化
#include <stdio.h>
int main(void)
{
unsigned int a = 5;
if (a - 10 > 0)
{
printf("Yes!\n");
}
else
{
printf("No!\n");
}
return 0;
}
二.类型转换
1.显示类型转换(强制类型转换)
只会转换一次
(int)3.1415;
(int)3.78;
(double)100;
int Num1;
(double)Num1;
#include <stdio.h>
int main(void)
{
int Num = 2;
int Ret = 0;
50 + 3;
10 - 5;
2 - 5;
5.3 - 2;
10 / Num;
Ret = Num + Num;
printf("Ret = %d\n", Ret);
return 0;
}
2.隐式类型转换
表达式:一个多个变量和常量组成的式子
表达式一定有值
表达式一定有类型
低精度转换成高精度
浮点型精度 > 整形精度
同种类型所占内存空间越大精度范围越高
无符号精度 > 有符号精度
float类型进行数据运算和数据处理时会转换为double类型
short、char类型进行数据运算和数据处理时会转换为int类型
char + char == int
char + short == int
float + float == double
float + double == double
float + int == double
3.14 - 5
三.运算符
1.算数运算符:
+
-
*
/ : 不能除以0
% : 不能对浮点数操作
++ 自增运算符
– 自减运算符
练习:
定义两个变量可以是整形或者浮点数类型,对这两个变量赋值,
并计算这两个数四则运算的结果并打印在终端
#include <stdio.h>
int main(void)
{
double Num1 = 0;
double Num2 = 0;
double Ret = 0;
Num1 = 83;
Num2 = 32;
Ret = Num1 + Num2;
printf("ADD:%f\n", Ret);
Ret = Num1 - Num2;
printf("SUB:%f\n", Ret);
Ret = Num1 * Num2;
printf("MUL:%f\n", Ret);
Ret = Num1 / Num2;
printf("DIV:%f\n", Ret);
#if 0
int Num1 = 0;
int Num2 = 0;
int Ret = 0;
Num1 = 83;
Num2 = 32;
Ret = Num1 + Num2;
printf("ADD:%d\n", Ret);
Ret = Num1 - Num2;
printf("SUB:%d\n", Ret);
Ret = Num1 * Num2;
printf("MUL:%d\n", Ret);
Ret = Num1 / Num2;
printf("DIV:%d\n", Ret);
#endif
return 0;
}
i++; 先用再加
++i; 先加再用
i--;
--i;
#include <stdio.h>
int main(void)
{
int i = 1;
int n = 0;
// n = ++i - 2;
n = ++i + i++;
printf("n = %d\n", n);
printf("i = %d\n", i);
return 0;
}
2.赋值运算符:
=
+=
-=
*=
/=
%=
#include <stdio.h>
int main(void)
{
short a = 0;
int b = 123456789;
a = b;
printf("%d\n", a);
#if 0
short a = -1;
int b = 0;
b = a;
printf("b = %d\n", b);
#endif
#if 0
unsigned int Num = 0;
Num = -5;
printf("Num = %u\n", Num);
#endif
#if 0
double Num = 0;
Num = 3;
printf("Num = %lf\n", Num);
#endif
#if 0
int Num = 0;
Num = 3.14;
printf("Num = %d\n", Num);
#endif
return 0;
}
#include <stdio.h>
int main(void)
{
char ch = 130;
printf("ch = %d\n", ch);
#if 0
int a = 10;
a *= 2 + 3;
printf("a = %d\n", a);
#endif
return 0;
}
左值:允许放在赋值运算符左边的值
变量
常量、表达式均不能作为左值
右值:允许放在赋值运算符右边的值
常量、变量、常量变量组成的表达式
左值为浮点数类型,右值为整形,会将值扩展精度
左值为整数类型,右值为浮点数类型,会舍弃精度
左右两边均为整形:将右值直接拷贝到左值空间中
小数据放入大空间:数据扩展,有符号数高位补符号位,无符号高位补0
大数据放入小空间:直接截取数据低位放入小空间
char ch = 300;
printf("ch = %d\n", ch); //44
char ch = 130;
printf("ch = %d\n", ch); //-126
3.三目运算符(特殊运算符)
表达式 ? 表达式1 : 表达式2
#include <stdio.h>
int main(void)
{
int Num1 = 100;
int Num2 = 200;
int MaxNum = 0;
MaxNum = Num1 > Num2 ? Num1 : Num2;
printf("MaxNum = %d\n", MaxNum);
return 0;
}
练习:定义三个变量,并对变量赋值,
通过三目运算符获得3个数中的最大值并打印
#include <stdio.h>
int main(void)
{
int Num1 = 10;
int Num2 = 20;
int Num3 = 30;
int Tmp = 0;
int MaxNum = 0;
Tmp = Num1 > Num2 ? Num1 : Num2;
MaxNum = Tmp > Num3 ? Tmp : Num3;
printf("MaxNum = %d\n", MaxNum);
return 0;
}
结合方向:自右至左
x > y ? x : (y > z ? y : z)
4.逗号运算符
从左到右依次执行表达式,并将最后一个逗号表达式的结果作为整体逗号表达式的结果
#include <stdio.h>
int main(void)
{
int a = 0;
int b = 1;
int c = 0;
c = (a+b, b+c, a++, b++, a+2);
printf("a = %d\n", a);
printf("b = %d\n", b);
printf("c = %d\n", c);
return 0;
}
5.sizeof运算符
sizeof (数据类型/变量名) 获得数据类型/变量在内存中所占的字节数
四.常用输入输出函数
1.C语言中常用的输入输出函数:
1.getchar putchar
2.scanf printf
3.gets puts
1.putchar
功能:在终端打印一个字符
示例:
putchar('a');
char ch = 'A';
putchar(ch);
putchar(ch + 32);
#include <stdio.h>
int main(void)
{
char ch = 0;
int Num = 97;
ch = 'A';
putchar('a');
putchar(ch);
putchar(ch + 32);
putchar(97);
putchar(Num);
putchar('\n');
return 0;
}
注意:
1.putchar只能打印一个字符,想打印多个字符需要多次调用putchar
2.putchar只能打印字符
练习:
利用putchar在屏幕上打印 Hello World!
#include <stdio.h>
int main(void)
{
putchar('H');
putchar('e');
putchar('l');
putchar('l');
putchar('o');
putchar(' ');
putchar('W');
putchar('o');
putchar('r');
putchar('l');
putchar('d');
putchar('!');
putchar('\n');
putchar(27);
putchar('\0');
return 0;
}
2.getchar
功能: 从终端接收一个字符
示例:
#include <stdio.h>
int main(void)
{
char ch = 0;
ch = getchar();
printf("ch = %c\n", ch);
return 0;
}
注意:
1.getchar会将程序阻塞,直到用户输入数据,程序才能继续向下执行
2.getchar只能接收 一个字符,想要接收多个字符需要多次调用
3.getchar只能接收字符