文章目录
初识C语言(一)
什么是C语言 ?
C语言是一门通用计算机编程语言,广泛应用于底层开发。
操作系统以及下称为底层或下层,往上是上层或应用层。C语言擅长操作系统及以下的开发。
计算机语言的发展
C语言是低级向高级发展的。
(10001001)机器语言—>(ADD SUB)助记符–汇编语言—>B语言—>C语言
C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。
C语言是一门结构化程序设计语言,主要包括顺序结构,选择结构以及循坏结构。
可以简单理解为:
第一个程序
xxx.c —— 源文件
**xxx.h **—— 头文件
//第一个小程序
#include <stdio.h> //头文件
int main() //main(主函数)
{
printf("Hello C!\n"); //使用printf函数,打印出Hello C! \n 转义字符(换行符)
return 0; //0为正常返回
}
运行结果为:
C语言程序区分大小写,在写程序中一定要注意。
main函数是程序的入口,有且只有一个
使用printf函数要包含头文件<stddio.h>
程序实现:编译+链接+运行
数据类型
char //字符数据类型
short //短整型
int //整形
long //长整型
long long //更长的整形
float //单精度浮点数
double //双精度浮点数
计算机处理的数据为二进制数据
进制
进制目前有二进制,八进制,十进制,十六进制
换算单位
bit —>Byte—> KB—>MB—>GB—>TB—>PB
1B=8b
1KB = 1024 B
1MB = 1024 KB
1GB = 1024 MB
1TB = 1024 GB
1PB = 1024 TB
数据类型长度
#include <stdio.h>
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
printf("%d\n", sizeof(long double)); //8
return 0;
}
sizeof计算结果单位是:字节Byte
%d 表示打印一个十进制的整数
变量和常量
常量:不会变,比如:性别,身份证号,血型等等
变量:会变,比如:身高,年龄,体重等等
变量
变量定义
int age = 150;
float weight = 45.5f;
char ch = 'w';
变量命名
只能由字母(包括大写和小写)、数字和下划线( _ )组成。
不能以数字开头。
长度不能超过63个字符。
变量名中区分大小写。
变量名不能使用关键字。
变量分类
局部变量和全局变量
#include <stdio.h>
int global = 2022;//全局变量
int main()
{
int global = 2020;//局部变量
printf("global = %d\n", global);
return 0;
}
运行结果:
当局部变量和全局变量同名的时候,局部变量优先使用。
一般情况下,全局变量和局部变量不会同名。
变量使用
//输入两个整数并输出计算结果
#include <stdio.h>
int main()
{
//初始化
int num1 = 0;
int num2 = 0;
int sum = 0;
printf("输入两个操作数:>");
scanf("%d %d", &num1, &num2); //scanf输入函数
sum = num1 + num2;
printf("sum = %d\n", sum);
return 0;
}
运行结果:
在这里特别要注意scanf输入格式
变量的作用域和生命周期
### 常量
字面常量
const 修饰的常变量
#define 定义的标识符常量
枚举常量
字面常量
整型常量:1,23,456,7890…
浮点型常量:3.14,0.25,9.87,6.0…
字符常量:‘a’,’b’ ,‘3’,‘}’ 【单引号内只能有一个字符】
字符串常量:“abcd” 【用双引号围起来的叫字符串,双引号内可有多种字符】
const 修饰的常变量
接下来用两段代码更深刻去了解一下const修饰的常变量
//const 未修饰
#include <stdio.h>
int main()
{
int num1 = 100;
printf("num1 = %d\n", num1);
return 0;
}
输出结果为:
#include <stdio.h>
int main()
{
const int num2 = 100; //这里的 num2 是const修饰的常变量
num2 = 200; //是不能直接修改的!
printf("num2 = %d\n", num2);
return 0;
}
运行时编译器报错:
上面例子上的 num2 被称为 const 修饰的常变量, const 修饰的常变量在C语言中只是在语法层面限制了,变量 num2 不能直接被改变,但 num2 本质上还是一个变量的,所以叫常变量。
#define 定义的标识符常量
#include <stdio.h>
#define MAX 305
int main()
{
printf("%d\n", MAX);
return 0;
}
运行结果:
#define 定义的标识符常量,可方便修改值
枚举常量
枚举:一一列举
在C语言中,要想创建枚举常量还需要 enum 关键字
例如:
include <stdio.h>
enum Sex
{
//枚举常量
MALE,FEMALE,SECRET
};
int main()
{
printf("%d %d %d\n", MALE,FEMALE,SECRET);
return 0;
}
运行结果:
初始值是可以改,例如:
字符串
"Hello C!\n"
这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。
注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
#include <stdio.h>
int main()
{
char arr1[] = "bit"; //"\0"隐藏的
char arr2[] = { 'b', 'i', 't' };
char arr3[] = { 'b', 'i', 't', '\0' };
printf("%s\n", arr1);
printf("%s\n", arr2);
printf("%s\n", arr3);
return 0;
}
运行结果:
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "bit";
char arr2[] = { 'b', 'i', 't' };
char arr3[] = { 'b', 'i', 't', '\0' };
printf("%d\n", strlen(arr1));
printf("%d\n", strlen(arr2));
printf("%d\n", strlen(arr3));
return 0;
}
运行结果:
在这里要格外说一个库函数 strlen,strlen功能是求字符串长度,使用此库函数需要添加头文件 <string.h>。它仅仅统计\0之前的字符串长度。
数组arr2是因为没有结束标志,所以系统默认往后延伸,一直找到 \0 为止。
ASCII码表
转义字符
转义可以理解为转变意义,比如:n 只是一个普通字符,在 n 前面加上一个 \ ,就成了 \n 随之 n 的意义也改变了,成了换行的意思。转义字符不管有多少个字符都看做成一个字符。
#include <stdio.h>
int main()
{
printf("abc\ndef");
printf("bit\0mn");
return 0;
}
运行结果:
除此之外,我们还有这些转义字符
在屏幕上打印一个单引号’
在屏幕上打印一个字符串,字符串的内容是一个双引号“
#include <stdio.h>
int main()
{
printf("%c\n", '\'');
printf("%s\n", "\"");
return 0;
}
运行结果:
如果我们要在屏幕上打印一个目录: c:\code\test.c 该怎么做呢?
如果我们这样一定是行不通
#include <stdio.h>
int main()
{
printf("c:\code\test.c");
return 0;
}
运行结果:
#include <stdio.h>
int main()
{
printf("c:\\code\\test.c");
return 0;
}
运行结果:
进制转换
这里的 \ddd 不是代表后面有三个d,而是代表1~3个八进制数字,范围在(0-7)
例如:\130,\105,\65 等等
\xdd 同理,两位十六进制数字,且范围在(0-9,A-F)
例如:\x8F,\x6D 等等
那我们如何将二进制,八进制,十六进制转换成十进制呢?
看下面代码,输出的值应该是多少呢?
#include <stdio.h>
#include <string.h>
int main()
{
printf("%d", strlen("c:\test\628\test.c"));
return 0;
}
运行结果:
这14 是如何来的呢?
注释
代码中有不需要的代码可以直接删除,也可以注释
也有些代码比较难懂,可以加一下注释文字标记
//注释举例
#include <stdio.h> //头文件
int main() //main(主函数)一个程序中main函数有且仅有一个,程序是从主函数开始执行的
{
printf("Hello C!\n"); //使用printf函数,打印出Hello C! \n 转义字符(换行符)
/*
printf("Hello C!\n");
printf("Hello C!\n");
printf("Hello C!\n");
*/
return 0; //main()执行完毕后返回值
}
行注释
//
每次注释一行
多行注释
/* */
以/* 开头, */结束,可注释一行或多行
选择语句
在接下来的语句中,要注意以下几点:
表达式可以是任何类型
语句可以是一条简单的语句,也可以使用{ }括起来的复合语句,被括起来的复合语句将被认作一条语句执行
在C语言中,零表示假,非零为真。
if 语句:
if(表达式) { 语句; }
if…else 语句:
//非嵌套 if(表达式) { 语句1; } else { 语句2; } //嵌套 if(表达式1) { 语句1; } else if(表达式2) { 语句2; } else { 语句3; }
switch(多分支)语句:
switch(表达式) { case 常量表达式1 : 语句1; case 常量表达式2 : 语句2; case 常量表达式3 : 语句3; default: 语句4; ( break ;)//可有可无 }
if语句实例应用
if 语句先对表达式求值,结果非0(为真)即可执行语句,否则跳过不执行。
写代码将三个整数数按从大到小输出。
例如:输入:
2 3 1
输出:
3 2 1
代码:
#include <stdio.h>
int main()
{
int a = 0, b = 0, c = 0, t = 0;
scanf("%d %d %d", &a, &b, &c);
if (a < b)
{
t = b;
b = a;
a = t;
}
if (a < c)
{
t = c;
c = a;
a = t;
}
if (b < c)
{
t = c;
c = b;
b = t;
}
printf("%d %d %d", a, b, c);
return 0;
}
运行结果:
if…else 语句实例应用
如果满足if(表达式)中的表达式,就执行语句1,否则执行语句2。
if…else语句可以嵌套多个if语句,else语句总是和它最近的if语句匹配,且else不能单独出现。
有一个函数,编写程序,输入x的值,输出y相应的值
代码:
#include <stdio.h>
int main()
{
int x = 0, y = 0;
scanf("%d", &x);
if (x < 1)
{
y = x;
}
else if(x>=1&&x<10)
{
y = 2 * x - 1;
}
else
{
y = 3 * x - 11;
}
printf("y = %d",y);
return 0;
}
运行结果:
switch(多分支)语句实例应用
switch(表达式)中的表达式可以是字符型表达式也可以是整型表达式
switch语句中的default子句可以放在任意位置,每个switch语句中只能出现一条default子句
break,是跳出,日后会详细补充
switch语句也是一种分支语句。 常常用于多分支的情况。
输入数字几,输出相对应的周几
代码:
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期日\n");
break;
}
return 0;
}
运行结果: