- 什么是C语言
什么是C语言 计算机语言;计算机语言是什么?
人和计算机交流的语言:c、c++,Java,python
语言的发展:二进制语言;
硬件-电 -正电(1)-负电(0)
国际标准
ANSIC-C89/C90
C99/C11并不流行不少编译器不支持
-
第一个C语言程序
写c代码:1.创建工程
2.创建文件:添加源文件test.c
c代码:.c-源文件,.h头文件head
#include<stdio.h>
//包含一个叫stdio.h的文件
//std-标准 standard intput output
//int 是整型的意思
//main前面的int表示main函数调用返回一个整型值
//这里完成任务
//在屏幕上输出hello world
//函数printf-function-printf-打印函数
//库函数-C语言本身提供给我们使用的函数
//别人的东西-打招呼
int main()//主函数-程序的入口main函数有且仅有一个(fn+f10进行监视)
{
printf("hello world\n");
return 0;
}//点击键盘f5运行
怎么查看上述代码运行结果
数据类型
char //字符数据类型
short //短整型
int //整型
long //长整型
long long//更长的整型
float //单精度浮点数
double //双精度浮点数
//char
int main()
{
//char ch='A';//内存
//printf("%c\n",ch);//%c---打印字符格式的数据
//20
//short int ---短整型
//int ---整型
//long--长整型
//float---单精度浮点型
int age=20;
printf("%d\n",age);//%d---打印整型十进制数据
retrurn 0;
}
%d--打印整型
%c--打印字符
%f--打印浮点型数字--小数
%p--以地址的形式打印
%x--以16进制数字打印
- 为什么出现这么多的类型?
- 每种类型的大小是多少?
int main()
{
printf("%d\n",sizeof(char));//1
printf("%d\n",sizeof(short));//2
printf("%d\n",sizeof(int));//4
printf("%d\n",sizeof(long));//4
printf("%d\n",sizeof(long long));//8
printf("%d\n",sizeof(float));//4
printf("%d\n",sizeof(double));//8
return 0;
}
字节:计算机中的单位:bit--比特位;byte--字节。一个字节=八个比特位大小
#include<stdio.h>
int main()
{
//年龄
//20
short age=20;//向内存申请2个字节=16bit位,用来存放20
float weight=95.6f;//向内存申请4个字节存放小数
return 0;
}
常量变量
生活中的有些值是不变的(比如:圆周率,性别())
有些值是可以改变的
定义变量的方式
全局变量和局部变量
int num2=20;//全局变量定义在代码块({})之外的变量
int main()
{
int num1=10;//局部变量
return 0;
}
#include<sdtio.h>
int a=100;
int main()
{
//int a=10;
//局部变量和全局变量的名字建议不要相同-容易误会,产生bug
//当局部变量和全局变量的名字重复时,局部变量优先
printf("%d\n".a);
return 0;
}
变量的使用
例子:两个数相加
#include<stdio.h>
int main()
{
//计算2个数的和
int num1=0;
int num2=0;
int sum=0;
//输入数据--使用输入函数scanf
scanf("%d%d",&num1,&num2);//取地址符号
//C语言语法规定,变量要定义在当前代码块的最前面
sum=num1+num2;
printf("sum=%d\n",sum);
return 0;
}
变量的作用域和生命周期
作用域:1.局部变量的作用域是变量所在的局部范围
2.全局变量的作用域是整个工程
生命周期:变量的生命周期是指变量的创建到变量销毁之间的一个时间段
1.局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束
2.全局变量的生命周期是:整个程序的生命周期
#define _CRT_SECURE_NO_WARNINGS
//加在源文件的下面
scanf是C语言提供的
scanf_s不是标准C语言提供的,是VS编译器提供的
跨平台性/可移植性//scanf strcpy strlen strcat 不安全,VS都会要求加_s
常量
C语言中的常量和变量的定义的形式有所差异
C语言中的常量分为一下几种:
- 字面常量
- const 修饰的常变量
- #define 定义的标识符常量
- 枚举常量
#include<stdio.h>
int main()
{
//const---常属性
const int n=10;//n是变量,但是又有常属性,所以我们说n是常变量
//int arr[n]={0};
n=20;
//const修饰的常变量
//const int num=4;
// printf("%d\n",num);
// num=8;
// printf("%d\n",num);
//3;//字面常量
//100;
//3.14;//
}
#include<sdtio.h>
// 3. #define 定义的标识符常量
#define MAX 10
int main()
{
int arr[MAX]={0};
printf("%d\n",MAX);
return 0;
}
//4.枚举常量
//枚举--一一列举
//性别:男 女 保密
//三原色:红 黄 蓝
//星期:1 2 3 4 5 6 7
#include<stdio.h>
//枚举关键字--enum
enum Sex
{
MALE;
FEMEALE;
SECRET
};
//MALE FEMALE SECRET--枚举常量
int main()
{
//enum Sex s=FEMALE;
printf("%d\n",MALE); //默认为0
printf("%d\n",FEMALE); //1
printf("%d\n",SECRET); //2
return 0;
}
字符串+转义字符+注释
字符串
"hello world"这种由双引号(double quote)引起来的一串字符称为字符串字面值(string literal)或者简称字符串。
注:字符串的结束标志的一个\0的转义字符。在计算字符串长度的时候\0的结束标志,不算做字符串内容
#include<stdio.h>
//数据在计算机上存储的时候,存储的是二进制
//a-97
//A-65
//......
//ASCII表
int main()
{
char arr1[]="abc";//数组
//"abc"---'a''b''c''\0'-----'\0'字符串的结束标识
char arr2[]={'a','b','c'};
//char arr2[]={'a','b','c','\0'};//后面添加一个0则输出成功
printf("%s\n",arr1);
printf("%s\n",arr2);
return 0;
}
运行结果:
int main()
{
char arr1[]={"abc"};
char arr2[]={'a','b','c'};
printf("%d\n",strlen(arr1));//strlen--string length计算字符串长度
printf("%d\n",strlen(arr2));20
}
运行结果:
arr2直到找到\0才会停止,因此arr1输出3,arr2输出随机值。
转义字符:转变原来的意思
int main()
{
printf("abcn");
printf("abc\n");
return 0;
}
.....
\后面之间跟数字表示8进制数字
\后面加x再加数字表示16进制数字(包含\算一个字符)
//根据上表转义
int main()
{
//printf("c:\\test\\test.c");
//printf("%c\n",'\'');
return 0;
}
#include<sdtio.h>
#include<string.h>
int main()
{
printf("%d\n",strlen("c:\test\32\test.c"));//13
// \t是一个字符,\32也是一个转义字符
//32----32是两个八进制数字
//32作为八进制代表的那个十进制数字作为ASCII码
return 0;
}
#include<stdio.h>
int main()
{
printf("%c\n",'\x61');//转义字符
//61->a;
//printf("%c\n",'\132');
//32---32是2个8进制数字
//32作为8进制代表那个十进制数字,作为ASCII码值,对应的字符
//32--》10进制 26->ASCII码值代表的字符
return 0;
}
注释
1.代码中有不需要的代码可以直接删除,也可以注释掉
2.代码中有些代码比较难懂,可以加一下注释文字
注释的风格有两种:
- C语言风格的注释/*xxxxxxxx*/
- 缺陷:不能嵌套注释(只要遇到*/就会结束)
- 注释选中行crtl+k,crtl+c
- 取消注释crtl+k,crtl+u
- C++风格的注释//xxxxxxxx
- 可以注释一行也可以注释多行
选择语句
if语句
int main()
{
int input
printf("加入学习\n");
printf("你要好好学习吗?(1/0)>:")
scanf("%d",&input);//1/0
if(input==1)
printf("好工作");
else
printf("失业");
return 0;
}
循环语句:
whlie语句
for语句
do....while语句
int main()
{
int line=0;
printf("加入学习\n");
while(line<20000)
{
printf("敲一行代码 %d",line);
line++;
}
if(line>=20000)
printf("好工作");
return 0;
}
函数
例如之前的两个数相加利用函数
#include<stdio.h>
//ADD就是自定义函数
ADD(int x,int y)//ADD函数名下面为函数体
{
int z=x+y;
return z;
}
int main()
{
int num1=10;
int num2=20;
int sum=0
int a=100;
int b=200;
sum=ADD(num1,num2);
sum=ADD(a,b)
printf("sum=%d\n",sum);
return 0;
}
数组
C语言中给了数组的定义:一组相同类型元素的集合
#include<sdtio.h>
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};//定义一个存放10个整数数字的数组
//0-9
int i=0;
while(i<10)//利用循环遍历数组
{
printf("%d ",arr[i]);
i++;
}
//printf("%d",arr[4]);//下标的方式访问元素
//char ch[20];
//float arr[5]
return 0;
}
数组有对应的下标默认是从0开始