文章目录
前言
内容来自千锋教育公开教程,
个人学习笔记,如有错误,望指正。
`
一、第一个C语言程序
#include <stdio.h> //头文件
int main(int argc, char *argv[]) //主函数,一个C语言程序有且只有一个main函数
{
printf("Hello World!\n"); // 输出内容 Hello World!
return 0;
}
运行结果:
#include <> 头文件包含
main()主函数,在一个C语言程序中有且只有一个main函数
每一句语句需要以 ; 结尾
//两个斜杠以后的内容为注释, 或者/* 这里的内容也是注释 */
二、关键字
关键字就是c语言已经定义好的名字,直接可以拿过来使用。
2.1 数据类型相关的关键字
用于定义变量或者类型
定义变量的语法结构:
类型 变量名;
拓展:变量名属于标识符,标识符(变量名、函数名、重命名和取别名)有命名规则
标识符的命名规则:
标识符只能以数字、字母和下划线命名
首字母不能是数字
不能与关键字相同
char 、short、int 、long 、 float、double、
struct、union、enum 、signed、unsigned、void
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));
printf("%d\n", sizeof(b));
printf("%d\n", sizeof(c));
printf("%d\n", sizeof(d));
printf("%d\n", sizeof(e));
printf("%d\n", sizeof(f));
return 0;
}
执行结果:
2.2存储相关关键字
register、static、const、auto、extern
1、register是寄存器的意思,用register修饰的变量是寄存器变量,
即:在编译的时候告诉编译器这个变量是寄存器变量,尽量将其存储空间分配在寄存器
中。
注意:
(1):定义的变量不一定真的存放在寄存器中。
(2):cpu取数据的时候去寄存器中拿数据比去内存中拿数据要快
(3):因为寄存器比较宝贵,所以不能定义寄存器数组
(4):register只能修饰 字符型及整型的,不能修饰浮点型
(5):因为register修饰的变量可能存放在寄存器中不存放在内存中,所以
不能对寄存器变量取地址。因为只有存放在内存中的数据才有地址
2、static 是静态的意思
static可以修饰全局变量、局部变量、函数
使用static修饰的变量,此变量保存在内存的静态区空间中
3、const
const 是常量的意思
用const修饰的变量是只读的,不能修改它的值
const int a=101;//在定义a的时候用const修饰,并赋初值为101
从此以后,就不能再给a赋值了
a=111;//错误的
4、auto
auto int a和int a是等价的,auto关键字现在基本不用
5、extern
是外部的意思,一般用于函数和全局变量的声明
2.3 控制语句相关的关键字
if 、else 、break、continue、for 、while、do、switch case
goto、default
条件控制语句:
if语句: if else
switch语句: switch case default
循环控制语句:
for while do goto
辅助控制语句:
break continue
2.4 其他关键字
sizeof、typedef
1、sizeof
测变量、数组的占用空间的字节数大小
int a = 1;
int mum;
num = sizeof(a);
printf("num = %d ",num);
2、typedef 重命名关键字
关键字 ,作用是给一个已有的类型,重新起个类型名,并没有创造一个新的类型
typedef 定义方式:
1、用想起名的类型定义一个变量
short int a;
2、用新的类型名替代变量名
short int INT16;
3、在最前面加typedef
typedef short int INT16;
4:就可以用新的类型名定义变量了
INT16 b 和 short int b 是一个效果
三、数据类型
3.1基本数据类型
char 、short 、int、long、float、double
#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;
}
执行结果
3.2 构造类型
由若干个相同或者不同类型数据结构构成的集合,称为构造类型
例如: int a[10];
数组,结构体,共用体,枚举
3.3 常量和变量
3.3.1 常量
在程序运行中,不可以改变它的值的量。
例如:100,‘a’ ,‘Hello,world!’
常量的分类:
整型:100,111,222,0, -100
实型:3.1415,0.12f,-3.14
字符型:‘a’,‘z’,‘0’
字符串: “abcdefg”,“12345”
ASCII 码表:对于计算机而言,只能识别二进制数,也就是数字,对于非数值型数据,如果
要使用,就需要将其用一个数值型数据进行标识,就称之为ASCII码表
#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;
}
执行结果:
3.3.2 变量
变量: 值可以改变的量称为变量
定义变量:
存储类型 数据类型 变量名; auto int a ;
存储类型 数据类型 变量名 = 变量或者常量;auto int a = 10 ;
定义变量标识符命名规则:
(1)只能由字母,数组,下划线 组成
(2)首字母不可以是数字
(3)不能和关键字重名
3.3.3 格式化输出字符
3.3.3.1 普通字符
%d 十进制有符号整数
%ld 十进制long有符号整数
%u 十进制无符号整数
%o 以八进制表示的整数
%x 以十六进制表示的整数
%f float型浮点数
%lf double型浮点数
%e 指数形式的浮点数
%c 单个字符
%s 字符串
%p 指针的值
3.3.3.2 特殊应用
%3d %03d %-3d %5.2f
%3d 要求宽度为3位,如果不足3位,前面空格补齐;如果足够3位,此语句无效
%03d 要求宽度为3位,如果不足3位,前面0补齐;如果足够3位,此语句无效
%-3d 要求宽度为3位,如果不足3位,后面空格补齐;如果足够3位,此语句无效
%.2f 小数点后只保留2位
#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);
//输出十六进制数
//printf("a = %x\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);
printf("********************\n");
int m = 456;
printf("%d%d\n", m, m);
//%5d:输出的宽度为5,右对齐,如果实际数据的宽度小于5,则左边位置补空格,如果大于5,则没有用
printf("%5d%5d\n", m, m);
//%05d:输出的宽度为5,右对齐,如果实际数据的宽度小于5,则左边位置补0,如果大于5,则没有用
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;
}
执行结果:
3.4 类型转化
数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题.
转换的方法有两种:
自动转换:
遵循一定的规则,由编译系统自动完成.
强制类型转换:
把表达式的运算结果强制转换成所需的数据类型
3.4.1 自动转化
自动转换原则
1、占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精
度不降低.
3.4.2 强制转化
通过类型转换运算来实现
(类型说明符) (表达式)
功能:
把表达式的运算结果强制转换成类型说明符所表示的类型
例如:
(float)a; // 把a的值转换为实型
(int)(x+y); // 把x+y的结果值转换为整型
注意:
类型说明符必须加括号
#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;
}
总结
以上就是今天要讲的内容,本文仅仅简单介绍了C语言的基础 第一个程序,关键字,数据类型等。
如有错误,还望指正。