赞
踩
# include<stdio.h> 头文件包含,一定要有
每一个c语言的程序有且只有一个main函数,这是整个程序的开始位置
使用printf函数输出括号里面的字符串
C语言中()、[]、{}、“”、’’、都必须成对出现,必须是英文符号
C语言中语句要以分号结束。
//为注释
定义变量的语法结构:类型 变量名;
拓展:变量名属于标识符,标识符(变量名、函数名、重命名和取别名)有命名规则
标识符的命名规则:标识符只能以数字、字母和下划线命名、首字母不能是数字、不能与关键字相同
1、char 字符型 ,用char定义的变量是字符型变量,占1个字节
有符号:-2^7 ~ 2^7-1
无符号:0 ~ 2^8-1
2、short 短整型 ,使用short 定义的变量是短整型变量,占2个字节
有符号:-2^15 ~ 2^15-1
无符号:0 ~ 2^16-1
3、int 整型 ,用int定义的变量是整型变量,在32位以上的系统下占4个字节
有符号:-2^31 ~ 2^31-1
无符号:0 ~ 2^32 - 1
4、long 长整型 用long 定义的变量是长整型的,在32位系统下占4个字节,在64位系统下占8个字节
5、 float 单浮点型 (实数),用float定义的变量是单浮点型的实数,占4个字节
6、double 双浮点型 (实数),用double定义的变量是双浮点型的实数,占8个字节
7、struct 这个关键字是与结构体类型相关的关键字,可以用它来定义结构体类型
8、 union 这个关键字是与共用体(联合体)相关的关键字,以后再讲9、 enum 与枚举类型相关的关键字 以后再讲
10、signed 有符号(正负)的意思
在定义char 、整型(short 、int、long)数据的时候用signed修饰,代表咱们定义的数据是有符号的,可以保存正数,也可以保存负数
注意:默认情况下 signed 可以省略 即 int a=-10;//默认a就是有符号类型的数据
11、unsigned 无符号的意思
在定义char 、整型(short 、int、long)数据的时候用unsigned修饰,代表咱们定义的数据是无符号类型的数据
无符号类型的变量只能保存正数和0。
12、void 空类型的关键字
char、int 、float 都可以定义变量
void 不能定义变量,没有void类型的变量
void 是用来修饰函数的参数或者返回值,代表函数没有参数或没有返回值
基本数据类型的所占内存大小
- #include <stdio.h>
-
- //测试基本数据类型的所占内存大小
-
- int main(int argc, char *argv[])
- {
- char a;
- short b;
- int c;
- long d;
- float e;
- double f;
-
- //sizeof:是一个运算符,可以获取数据类型所占内存的大小
- printf("%d\n", sizeof(a)); // 1
- printf("%d\n", sizeof(b)); // 2
- printf("%d\n", sizeof(c)); // 4
- printf("%d\n", sizeof(d)); // 4
- printf("%d\n", sizeof(e)); // 4
- printf("%d\n", sizeof(f)); // 8
-
- return 0;
- }
typedef 定义方式:1、用想起名的类型定义一个变量short int a;2、用新的类型名替代变量名short int INT16;3、在最前面加typedeftypedef short int INT16;4:就可以用新的类型名定义变量了INT16 b 和 short int b 是一个效果
- #include <stdio.h>
-
- //基本数据类型的学习和使用
- //char short int long float double
-
- int main(int argc, char *argv[])
- {
- //定义一个char类型的变量并赋值,输出字符使用%c
- char a = 'w';
- printf("a = %c\n", a);
-
- //定义一个short类型的变量并赋值
- short b = 100;
- printf("b = %d\n", b);
-
- //定义一个int类型的变量并赋值,输出int类型变量的值使用%d
- int c = 9999;
- printf("c = %d\n", c);
-
- //定义一个long类型的变量并赋值,输出long类型变量的值使用%ld
- long d = 34536453;
- printf("d = %ld\n", d);
-
- //定义一个float类型的变量并赋值,输出float类型变量的值使用%f
- //默认保留小数点后六位,并且可以四舍五入
- float e = 3.1415926;
- printf("e = %f\n", e);
-
- //定义一个double类型的变量并赋值,输出double类型变量的值使用%lf
- double f = 3452.2345324523452;
- printf("f = %lf\n", f);
-
- return 0;
- }
执行结果:
a = w
b = 100
c = 9999
d = 34536453
e = 3.141593
f = 3452.234532
常量的分类:整型 100,125,-100,0实型 3.14 ,0.125f,-3.789字符型 ‘a’,‘b’,‘2’字符串 “a”,“ab”,“1232”
- #include <stdio.h>
-
- int main(int argc, char *argv[])
- {
- //注意在使用字符类型的数据时,如果用%c输出就是输出字符,如果用%d就是输出字符的ascii值
- char ch1 = 'w';
- printf("ch1 = %c %d\n", ch1, ch1);
-
- char ch2 = 97;
- printf("ch2 = %c %d\n", ch2, ch2);
-
- return 0;
- }
输出结果:
ch1 = w 119
ch2 = a 97
变量在定义的时候要满足标识符的命名规则(1)只能由字母、数字和下划线组成(2)首字母不能是数字(3)不能关键字相同
注:char a;a = 'x';a变量中存放的是字符'x'的ASCII :120即a=120跟a='x'在本质上是一致的.
%d 十进制有符号整数%ld 十进制long有符号整数%u 十进制无符号整数%o 以八进制表示的整数%x 以十六进制表示的整数%f float型浮点数%lf double型浮点数%e 指数形式的浮点数%c 单个字符%s 字符串%p 指针的值
- #include <stdio.h>
-
- //格式化输出字符的使用
-
- int main(int argc, char *argv[])
- {
- //输出整数
- int a = 100;
- //输出十进制数,用%d
- printf("a = %d\n", a);
- //输出八进制数,用%o
- //printf("a = %o\n", a);
- //使用%#o,可以输出八进制数的前导符
- printf("a = %#o\n", a);
- //输出十六进制数
- // 使用%#x,可以输出十六进制数的前导符
- printf("a = %#x\n", a);
-
- //输出浮点型数据,float使用%f,double使用%lf
- //默认小数点后保留六位,并且可以四舍五入,如果不够六位自动补0
- float b = 3.1415926;
- double c = 2345.2345;
- printf("b = %f\n", b);
- printf("c = %lf\n", c);
- //输出字符,使用%c输出字符,使用%d可以输出字符的ascii码值
- char d = 'y';
- printf("d = %c %d\n", d, d);
-
- //输出字符串,使用%s
- //没有专门的变量保存字符串,一般使用数组来保存
- char e[] = "hello world";
- printf("e = %s\n", e);
-
- //输出地址,使用%p
- int f = 999;
- //&:取一个变量的地址,一般地址用十六进制数表示
- printf("&f = %p\n", &f);
-
- return 0;
- }
输出结果:
a = 100
a = 0144
a = 0x64
b = 3.141593
c = 2345.234500
d = y 121
e = hello world
&f = 0060FE7C
- #include <stdio.h>
-
- //格式化输出字符的使用
-
- int main(int argc, char *argv[])
- {
- int m = 456;
- printf("%d%d\n", m, m);
- //%5d:输出的宽度为5,右对齐,如果实际数据的宽度小于5,则左边位置补空格,如果大于5,则没有用
- printf("%5d%5d\n", m, m);
- //%05d:输出的宽度为5,右对齐,如果实际数据的宽度小于5,则左边位置补0,如果大于,则没有用
- printf("%05d%05d\n", m ,m);
- //%‐5d:输出的宽度为5,左对齐,如果实际数据的宽度小于5,则右边补空格,如果大于5,则没有用
- printf("%‐5d%‐5d\n", m, m);
-
- float n = 3.678;
- printf("n = %f\n", n);
- //%.2f:小数点后保留两位并且可以四舍五入
- printf("n = %.2f\n", n);
-
- return 0;
- }
输出结果:
456456
456 456
0045600456
456 456
n = 3.678000
n = 3.68
- #include <stdio.h>
-
- int main(int argc, char *argv[])
- {
- //***************强制类型转换之自动转换******************
- //参加运算的成员全部变成int类型的参加运算,结果也是int类型的
- printf("%d\n",5/2);
-
- //当表达式中出现了带小数点的实数,参加运算的成员全部变成double类型
- //参加运算,结果也是double型
- printf("%lf\n",5.0/2);
-
- //当表达式中有有符号数 也有无符号数,参加运算的成员变成无符号数参
- //加运算结果也是无符号数.(表达式中无实数)
- int a = -8;
- unsigned int b=7;
- if(a + b > 0)
- {
- printf("a+b>0\n");
- }
- else
- {
- printf("a+b<=0\n");
- }
-
- //在赋值语句中等号右边的类型自动转换为等号左边的类型
- int m;
- float n=5.8f;//5.8后面加f代表5.8是float类型,不加的话,认为是double类型
- m = n;
- printf("m = %d\n",m);
- printf("n = %f\n", n); //注意自动类型转换都是在运算的过程中进行临时性的转换,并不会影响自动类型转换的变量的值和其类型
-
- //*************强制类型转换之强制转换************
- int x = 10;
- int y = 4;
- float w;
- w = (float)x / (float)y;
- printf("w = %f\n", w);
-
- return 0;
- }
执行结果:
2
2.500000
a+b>0
m = 5
n = 5.800000
w = 2.500000
- #include <stdio.h>
-
- int main(int argc, char *argv[])
- {
- int a = 40;
- int b = 6;
- printf("%d + %d = %d\n", a, b, a + b);
- printf("%d - %d = %d\n", a, b, a - b);
- printf("%d * %d = %d\n", a, b, a * b);
- printf("%d / %d = %d\n", a, b, a / b);
- //printf如果要输出%,则需要使用%%
- printf("%d %% %d = %d\n", a, b, a % b);
-
- float m = 10.32;
- float n = 4.5;
- printf("%.4f + %.4f = %.4f\n", m, n, m + n);
- printf("%.4f - %.4f = %.4f\n", m, n, m - n);
- printf("%.4f * %.4f = %.4f\n", m, n, m * n);
- printf("%.4f / %.4f = %.4f\n", m, n, m / n);
- //注意:只有整数才能够取余,浮点型数据不能取余
- //printf("%.4f %% %.4f = %.4f\n", m, n, m % n);
-
- return 0;
- }
输出结果:
40 + 6 = 46
40 - 6 = 34
40 * 6 = 240
40 / 6 = 6
40 % 6 = 4
10.3200 + 4.5000 = 14.8200
10.3200 - 4.5000 = 5.8200
10.3200 * 4.5000 = 46.4400
10.3200 / 4.5000 = 2.2933
- #include <stdio.h>
-
- int main(int argc, char *argv[])
- {
- //关系运算符连接的表达式的最终结果只有两个,真和假
- //一般返回的结果使用int保存,如果为假则为0,为真则为非0
- //非0即为真
- int a = 10 > 5;
- int b = 10 < 5;
- printf("a = %d, b = %d\n", a, b);
-
- return 0;
- }
执行结果:
a = 1, b = 0
注意:关系运算符中==用于判断左右两边是否相等,不能使用=,=用于赋值,将右值赋给左值
- #include <stdio.h>
-
- int main(int argc, char *argv[])
- {
- int a = 20;
- //逻辑与两边的表达式都为真,整体才为真,否则为假
- int ret = a > 10 && a < 19;
- printf("ret = %d\n", ret);
-
- //逻辑或两边的表达式只要有一个为真,则整理为真,否则都为假才为假
- ret = a > 10 || a < 19;
- printf("ret = %d\n", ret);
-
- //逻辑与的短路原则:如果第一个表达式的结果为假,则整体表达式为假,则后面所有的表达式都不会执行
- int b = 100;
- ret = (a < 19) && (b += 10);
- printf("b = %d\n", b);
-
- //逻辑或的短路原则:如果第一个表达式的结果为真,则整体表达式为真,所有后面所有的表达式都不会执行
- ret = (a > 19) || (b += 10);
- printf("b = %d\n", b);
- }
执行结果:
ret = 0
ret = 1
b = 100
b = 100
总结 右移:1、逻辑右移 高位补0,低位溢出注:无论是有符号数还是无符号数都是高位补0,低位溢出2、算数右移 高位补符号位,低位溢出 (有符号数)注:对无符号数来说,高位补0,低位溢出对有符号数来说,高位补符号位,低位溢出
- #include <stdio.h>
-
- int main(int argc, char *argv[])
- {
- int a = 10, b = 20;
- int c;
- c = (a > b) ? (a += 10) : (b += 10);
- printf("c = %d\n", c);
- printf("a = %d, b = %d\n", a, b);
-
- return 0;
- }
执行结果:
c = 30
a = 10, b = 30
- #include <stdio.h>
-
- int main(int argc, char *argv[])
- {
- int a = 10, b = 20;
- int c;
- //如果要使用逗号运算符,必须要加括号,如果不加,则会歧义
- c = (a += 10, b += 10, a += b);
- printf("a = %d, b = %d, c = %d\n", a, b, c);
-
- return 0;
- }
执行结果:
a = 50, b = 30, c = 50
- #include <stdio.h>
-
- int main(int argc, char *argv[])
- {
- //将++或者‐‐放在变量的后面
- //先使用,后自增或者自减
- int a = 100;
- int b;
- b = a++;
- printf("a = %d, b = %d\n", a, b);
-
- return 0;
- }
执行结果:
a = 101, b = 100
将++或者--放在变量的前面
- #include <stdio.h>
-
- int main(int argc, char *argv[])
- {
- //将++或者‐‐放在变量的前面
- //先自增或者自减,后使用
- int a = 100;
- int b;
- b = ++a;
- printf("a = %d, b = %d\n", a, b);
-
- return 0;
- }
执行结果:
a = 101, b = 101
if(条件表达式){//复合语句,若干条语句的集合语句1;语句2;}
if(条件表达式){语句块1}else{语句块2}
if(条件表达式1){语句块1}else if(条件表达式2){语句块2}else if(条件表达式3){语句块3}...else{语句块n}
- #include <stdio.h>
-
- int main(int argc, char *argv[])
- {
- int n = 40;
-
- //形式1:只有if
- //首先 判断if后面括号里面的表达式是否为真,
- //如果为真,则执行大括号里面的语句
- //如果为假,则不执行
- if(n >= 50)
- {
- printf("%d >= 50\n", n);
- }
-
- //形式2:有if和else
- //先判断if后面的表达式,如果为真,则执行if后大括号里面的语句
- //如果为假,则执行else后面大括号里面的语句
- //注意:如果if和else后面只有一条语句,则可以不加大括号
- //但是如果有多条语句,必须加大括号,否则else找不到与之最近的if,编译会报错
- if(n >= 50)
- {
- printf("%d >= 50\n", n);
- }
- else
- {
- printf("%d < 50\n", n);
- }
-
- //形式3:if...else if...else
- if(n > 50)
- {
- printf("%d > 50\n", n);
- }
- else if(n == 50)
- {
- printf("%d = 50\n", n);
- }
- else
- {
- printf("%d < 50\n", n);
- }
-
- return 0;
- }
switch(表达式) // 表达式只能是字符型或整型的(short int int long int){case 常量表达式1:语句1;break;case 常量表达式2:语句2;break;...default:语句3;break;}
- #include <stdio.h>
-
- int main(int argc, char *argv[])
- {
- int num = 2;
-
- switch(num)
- {
- case 1:
- printf("111111111111\n");
- //如果不加break,当要执行当前case语句时,执行完毕后悔接着下一个
- //case后的语句执行,直到遇到break为止,否则会一直执行
- break;
- case 2:
- printf("222222222222\n");
- break;
- case 3:
- printf("333333333333\n");
- break;
- default:
- printf("hahahahahaha\n");
- break;
- }
-
- return 0;
- }
for(表达式1;表达式2;表达式3){//复合语句,循环体语句块}
- #include <stdio.h>
-
- int main(int argc, char *argv[])
- {
- int i = 1;
- int sum = 0;
-
- for(i = 1; i <= 100; i++)
- {
- sum += i;
- }
-
- printf("1 + 2 + 3 + ... + 100 = %d\n", sum);
-
- return 0;
- }
while(条件表达式){//循环体,复合语句语句块}
- #include <stdio.h>
-
- int main(int argc, char *argv[])
- {
- int i = 1;
- int sum = 0;
-
- while(i <= 100)
- {
- sum += i;
- i++;
- }
-
- printf("1 + 2 + 3 + ... + 100 = %d\n", sum);
-
- return 0;
- }
do{//循环体语句块}while(条件表达式);
- #include <stdio.h>
-
- int main(int argc, char *argv[])
- {
- int i = 1;
- int sum = 0;
-
- JOOP:
- sum += i;
- i++;
-
- if(i <= 100)
- {
- goto JOOP;
- }
- printf("1 + 2 + 3 + ... + 100 = %d\n", sum);
-
- return 0;
- }
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。