目录
1.1 认识C语言
1.C语言的构成
(1)源程序由函数构成,每个函数完成相对独立的功能。
(2)"#"号开始的命令行:
预处理命令以#开头的语句,常用#include,后面使用双引号或者尖括号括住文件名,表示包含此文件,结尾无分号,例如#include<stdio.h>或者#include "stdio.h",表示包含标准输入/输出的头文件。
(3)main()主函数:
main表示主函数名,C语言中每个源程序必须有且只能有一个主函数,不论main函数放在程序中的任何位置,C语言的程序总是从主函数开始执行。(void表示函数无返回值)
(4)分号:
每个语句都必须用分号结束,分号是语句的一部分,不是分隔符,注意预处理命令、函数头之后不能加分号。
(5)注释:
c语言程序中的注释部分是不被编译的,作用是方便读者理解程序。注释有两种表达方式:
单行注释:需要单行注释的代码前加“//”;
多行注释:需要多行注释的代码用“/*”开始,“*/”结束;
(注释成功颜色会变化的哦!)
(6)函数体:
函数体是在函数后边用一对大括号"{ }"括住的部分,大括号经常用于复合语句、循环语句以及选择语句中。
(7)区分大小写:
C语言区分大小写,小写字母多用于变量、函数和数组,大写字母,大写字母常用于宏定义上。
这种区分大小写的特性在编写C程序时需要被严格遵守,否则可能导致编译错误或程序行为不符合预期。(例如,main 和 Main 被认为是两个不同的标识符。)
2.C语言的过程概要
(1)c语言的运行过程:首先源程序文件通过编译汇编成目标文件,再通过连接生成可执行文件。
(2)C语言源代码文件,通常以 .c 为扩展名,目标程序以.obj为扩展名,可执行程序以.exe为扩展名。
//认识C语言代码
#include <stdio.h>
int main(){
printf("Hello world\n");
}
//你好呀
/*你好呀*/
标识符、常量、变量和数据类型
1.标识符
命名规则:
●以字母或者下划线开头,由字母、数字、下划线组成。(注意:一定不能以数字开头)
●要避开C语言程序中的关键字,不能与关键字同名,他们有着固定的含义,不能更改。
正确的标识符:a、area、_1234_、Main、int_1
错误的标识符:2_int、3amax、long
2.常量
概念:指程序执行期间它的值不能被修改的数据。
常量类型:整型常量、实型常量、字符常量、字符串常量以及符号常量。
①整型常量(Integer Constants):
表示整数值,可以是十进制、八进制或十六进制的数字。例如:123, 017, 0x1A。
十进制:基本数字范围为0~9;
八进制:以0开头。基本数字范围0~7;
十六进制:以0x开头,基本数字范围0~15,其中9后边10~15用A~F或者a~f代替。
②实型常量(Floating-point Constants):
表示实数值,包括小数部分。例如:3.14, 2.0e-5。
注意:指数形式的话e前边必须有数字,e后边必须为整数。
③字符常量(Character Constants):
表示单个字符。用单引号括起来的字符,例如:'A', '9', '%'。
转移字符以“\”开头,后边跟不同的字符表示不同的意思。例如:
●\n :表示换行
●\ddd :表示1~3位八进制数所表示的一个Ascll字符。
④字符串常量(String Constants):
表示一串字符。用双引号括起来的字符序列,例如:"Hello, World!"。
⑤符号常量(Symbolic Constants):
符号常量是使用 #define 预处理指令定义的常量,它们在程序中具有固定的标识符。符号常量不会在程序执行期间改变其值。例如:
#define PI 3.14
#define MAX_SIZE 100
3.变量
概念:变量是用于存储和表示数据的标识符。每个变量都有一个特定的数据类型,这决定了变量可以存储的数据类型和占用的内存空间大小。
①变量声明:
在使用变量之前,需要进行变量声明,以告诉编译器有一个具有特定类型和名称的变量将被使用。例如:
int age; // 声明一个整型变量名为age
②变量初始化:
变量可以在声明的同时进行初始化,即为变量赋予一个初始值。
例如:
int count = 0; // 初始化一个整型变量count,并赋值为0
③变量命名规则:
变量名必须遵循一定的规则,包括以字母或下划线开头,只能包含字母、数字和下划线等。
例如:
int my_variable; // 合法的变量名
4.数据类型
●整形(Integer):
int:表示整数类型。通常在32位系统上占4个字节,在64位系统上通常占8个字节。
short:短整数类型,通常占2个字节。
long:长整数类型,通常占4个字节,但在64位系统上可能占8个字节。
int num = 42;
●浮点型(Floating-point):
float:单精度浮点数,通常占4个字节。
double:双精度浮点数,通常占8个字节。
float fnum = 3.14;
●字符型(Character):
char:表示单个字符,通常占1个字节。(通常用单引号引起来表示字符)
char ch = 'A';
2.1算术表达式
1.C语言中常用的运算符
运算符的简介:
●算术运算符
+(加法)、-(减法)、*(乘法)、/(除法)、%(取模、取余)。
//例子:
int a = 5, b = 3, result;
result = a + b; // result = 8
result = a - b; // result = 2
result = a * b; // result = 15
result = a / b; // result = 1
result = a % b; // result = 2
●关系运算符
==(等于)、!=(不等于)、<(小于)、>(大于)、<=(小于等于)、>=(大于等于)。
//关系运算符的例子:
int a = 5, b = 10;
if (a == b) {
printf("你好,世界");
} else {
printf("条件不成立,不执行上述语句");
}
if (a != b) {
printf("你好,世界"); // 条件成立,执行语句
} else {
printf("条件不成立,不执行上述语句");
}
if (a < b) {
printf("你好,世界");// 条件成立,执行语句
} else {
printf("条件不成立,不执行上述语句");
}
// 以此类推
●逻辑运算符
&&(逻辑与)、||(逻辑或)、!(逻辑非)
//逻辑运算符的例子:
int a = 1, b = 0;
if (a && b) {
// 当a和b都为真时执行
}
if (a || b) {
// 当a或b任一为真时执行
}
if (!a) {
// 当a为假时执行
}
●位运算符
&(按位与)、|(按位或),^(按位异或)、~(按位取反),<<(左移)、>>(右移)。
//位运算符的例子
unsigned int a = 5; // 二进制表示为 0000 0101
unsigned int b = 3; // 二进制表示为 0000 0011
unsigned int result;
result = a & b; // 0000 0001 (1)
result = a | b; // 0000 0111 (7)
result = a ^ b; // 0000 0110 (6)
result = ~a; // 1111 1010 (补码表示的负数,取反加1)
result = a << 1; // 0000 1010 (左移一位,相当于乘以2)
result = a >> 1; // 0000 0010 (右移一位,相当于除以2)
●赋值运算符
=(赋值)、+=(加法赋值)、-=(减法赋值)、*=(乘法赋值)、/=(除法赋值)、%=(取模赋值)、&=(按位与赋值)、|=(按位或赋值)、^=(按位异或赋值)、<<=(左移赋值)、>>=(右移赋值)。
//赋值运算符的例子
int a = 5, b = 3;
a += b; // 相当于 a = a + b;
a -= b; // 相当于 a = a - b;
// 以此类推
●自增、自减运算符
自增运算符(++):
前缀形式:++x,先增加变量的值,然后使用新值。
后缀形式:x++,先使用变量的值,然后再增加变量的值。
自减运算符(--):
前缀形式:--x,先减少变量的值,然后使用新值。
后缀形式:x--,先使用变量的值,然后再减少变量的值
//自增
int a = 5;
int b, c;
b = ++a; // 前缀形式,a先加1,然后赋值给b,此时a和b的值都是6
c = a++; // 后缀形式,a的值先赋给c,然后a再加1,此时c为6,a变为7
//自减
int x = 10;
int y, z;
y = --x; // 前缀形式,x先减1,然后赋值给y,此时x和y的值都是9
z = x--; // 后缀形式,x的值先赋给z,然后x再减1,此时z为9,x变为8
●逗号运算符
x=(a,b,c) ,则x的结果为c。
形式:表达式1,表达式2,........,表达式n.
结合方向:从左至右
运算规则:先计算表达式1的值,然后计算表达式2的值,再计算表达式3的值,......,最后计算表达式n的值,最后的表达式n的值就是整个逗号表达式的值。
#include <stdio.h>
int main() {
int a = 5, b = 10, c = 15, result;
// 使用逗号表达式
result = (a += 2, b += 5, c *= 3, a + b + c);
// 输出各变量的值
printf("a: %d\n", a); // 输出:a: 7
printf("b: %d\n", b); // 输出:b: 15
printf("c: %d\n", c); // 输出:c: 45
printf("Result: %d\n", result); // 输出:Result: 57
return 0;
}
●其他运算符
字节运算符:sizeof
条件运算符:?:
指针运算符:&,*
强制运算符:(类型名)(表达式)
初等运算符:圆括号()、下标运算符([ ])、结构体成员运算符(->)
<了解即可>
2.运算符的结合性和优先级
概述:在C语言中,运算符的结合性(associativity)和优先级(precedence)决定了表达式中运算符的计算顺序。结合性指的是当相邻的运算符具有相同的优先级时,是从左往右计算还是从右往左计算。优先级则决定了不同运算符之间的计算顺序,具有高优先级的运算符会在表达式中具有较早的计算顺序。
①结合性
所有的单目运算符、条件运算符、赋值运算符以及其扩展运算符结合方向是从右往左,
其他运算符的结合方向都是从左往右。
②优先级
初等运算符>单目运算符>算数运算符(先乘除后加减)>关系运算符>逻辑运算符(不包括“!”)>条件运算符>赋值运算符>逗号运算符
3.1基本语句
1.输入/输出函数
①输入函数
scanf()函数的一般调用形式:
scanf(格式控制,输入项表);
●格式控制:是以“%”开始的格式控制符。
●输入项表:是用逗号断开的各个变量的地址。(一般用&取地址符)
//例子:输入的两种写法
//第一种写法:
int a,b; //定义两个整型变量
scanf("%d %d",&a,&b); //输入两个整数赋值给a和b
//第二种写法
int x,y;
scanf("%d,%d",&x,&y); //在输入格式控制中,如出现除格式控制符以外的字符,输入要原样输入
②输出函数
printf()函数的一般调用形式:
printf(格式控制,输出项表);
●格式控制的规则:
(1)一般字符原样输出
(2)以"%"开始的为格式转换说明符
(3)以"\"开始的为转义字符
拓展:为了使输出数据整齐,可以指定输出宽度。(例如:%nd用于指定输出所占的宽度,以下程序为x=%3d,则输出共占3个宽度,得x= 5;)
//输出的例子
#include <stdio.h>
int main(){
int x=5,y=20;
printf("x=%d,y=%d\n",x,y);
return 0;
}
2.输入/输出的格式字符
①printf 函数中的格式字符
%d:以十进制形式输出整数。
%f:以浮点数形式输出数字。
%c:输出一个字符。
%s:输出字符串。
%x、%X:以十六进制形式输出整数。
%o:以八进制形式输出整数。
%u:以无符号十进制形式输出整数。
%%:输出百分号。
int num = 12; //定义整型常量
float pi = 3.14; //定义浮点型常量
char ch = 'A'; //定义字符型常量
char str[] = "Hello";
printf("Integer: %d\n", num); //输出整型
printf("Float: %f\n", pi); //输出浮点型
printf("Character: %c\n", ch); //输出字符型
printf("String: %s\n", str); //输出字符串型
②scanf 函数中的格式字符
%d:读取十进制整数。
%f:读取浮点数。
%c:读取一个字符。
%s:读取字符串,不会读取空白字符。
%x、%X:读取十六进制整数。
%o:读取八进制整数。
%u:读取无符号十进制整数。
int num;
float pi;
char ch;
char str[50];
scanf("%d", &num);
scanf("%f", &pi);
scanf(" %c", &ch); // 注意:空格用于跳过空白字符
scanf("%s", str);
4.1选择结构
1.关系运算符/关系表达式
①关系运算符
上文已经有所了解,复习一下吧:
C语言提供了“<”、“<=”、“>”、“>=”、“==”、“!=”这6种关系运算符。
优先级:关系运算符的优先级低于算术运算符高于赋值运算符。
②关系表达式
●概念:关系表达式就是用关系运算符将常量、变量和各种表达式连接起来的运算式。
●关系运算符的结果是一个整数值——“0或者非0”(非0值表示真,0值表示假)
例子:
关系表达式:3>5 关系表达式的值:0
关系表达式:3<=4 关系表达式的值:1
关系表达式:52-12<30 关系表达式的值:0
关系表达式:'a'>=97 关系表达式的值:1
2.逻辑运算符/逻辑表达式
①逻辑运算符
上文已经有所了解,复习一下吧:
C语言提供了“&&”、“||”、“!”这3种逻辑运算符。
逻辑与(&&)、逻辑或(||)是双目运算符,优先级低于关系运算符高于赋值运算符。
逻辑非(!)是单目运算符,而且要求必须出现在运算对象的左边,逻辑非(!)优先级高于算术运算符。
●优先级:
!>&&>|| 。
!>算术运算符>关系运算符>&&>||>赋值运算符。
②逻辑表达式
●A&&B运算中,只有A、B同时为真才为真,A或B其中一个为假,结果都为假。
●A||B运算中,只有A、B同时为假才为假,A或B其中一个为真,结果都为真。
●关系运算符不能连用,数学表示的"0<x<10"在C语言表示为“x>0&&x<10”或“0<10&&x<10”的形式。
(注意:C语言中绝不能写成“0<x<10”)
int a = 5;
int b = 10;
int c = 15;
if (a < b && b < c) {
// 条件成立:a小于b且b小于c
printf("a小于b且b小于c\n");
} else {
// 条件不成立
printf("条件不成立\n");
}
3.if语句
①if语句的基本结构
if (表达式) {
// 如果条件为真,执行这里的代码块
// 可以包含一个或多个语句
} else {
// 如果条件为假,执行这里的代码块
// 可选的,可以不包含
}
●if后的表达式必须用括号括起来。
●if是C语言的关键字。
●else必须与if配对 ,共同组成if-else语句。
●if语句的嵌套:在if语句中又包含一个或者多个if语句结构,称为if语句的嵌套。
②if语句的经典示例
1.判断输入字符是否为字母
//判断字符是否为字母
#include <stdio.h>
int main(){
char x;
printf("请输入一个字符:");
scanf("%c",&x);
if(x>='a'&&x<='z'||x>='A'&&x<='Z') //判断x是否为字母
{
printf("\n字符是:%c,",x);
printf("是字母\n");
}
else
{
printf("\n字符是:%c,",x);
printf("不是字母\n");
}
return 0;
}
2.判断年份
#include <stdio.h>
int main() {
int year;
// 输入年份
printf("请输入一个年份: ");
scanf("%d", &year);
// 判断是否为闰年
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
printf("%d年是闰年。\n", year);
} else {
printf("%d年不是闰年。\n", year);
}
return 0;
}
4.条件运算符
①条件运算符形式
●条件运算符:?:
●优先级:条件运算符高于赋值运算符;但低于逻辑、关系、算术运算符。
●一般形式:表达式1?表达式2:表达式3
当表达式1的值为非0(真)时,则以表达式2的值作为整个条件表达式的值。
当表达式1的值为0(假)时,则以表达式3的值作为整个条件表达式的值。
例如
int a=5,b=3;
(a>b)?a:b //先判断a>b是否为真,为真输出a的值5,为假则输出b的值3。
②条件运算符的经典示例
1.比数值大小
#include <stdio.h>
int main() {
int num1 = 10;
int num2 = 20;
int max = (num1 > num2) ? num1 : num2;
printf("最大值是: %d\n", max);
return 0;
}
5.switch语句
①switch 语句的基本结构
switch(表达式)
{
case 常量表达式1:语句1
case 常量表达式2:语句2
......
case 常量表达式n:语句n
default:代码块;
}
●概述:switch 语句是C语言中一种用于多分支选择的流程控制语句。它允许根据表达式的值从一组可能的情况中选择一个分支来执行。
●case介绍:
case与它后边的常量表达式合称case标号
case 后面的 常量表达式1是常量值,如果表达式的值等于某个 case 后面的常量值,那么与该 case 相关联的代码将被执行。
●default 的介绍:
default是C语言中的关键字。
default是可选的,用于处理表达式不等于任何 case 常量时的情况。如果没有匹配的 case,将执行 default 后的代码块。
●break的介绍:
break 语句用于终止 switch 语句,防止继续执行其他 case。如果省略 break,程序将会继续执行下一个 case,直到遇到 break 或 switch 结束。
②switch语句的经典示例
1.判断星期的代码示例
#include <stdio.h>
int main() {
int day = 3;
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;
default:
printf("周末\n");
}
return 0;
}
2.输入成绩判断成绩等级
#include <stdio.h>
int main() {
double score;
printf("请输入一个成绩:");
scanf("%lf",&score); //注意这个是字母L,不是1
if(score>=0){
switch((int)score/10){
case 10:
case 9:printf("A\n");
break;
case 8:printf("B\n");
break;
case 7:printf("C\n");
break;
case 6:printf("D\n");
break;
default:printf("E\n");
}
}
else
{
printf("错误!,成绩不能为负值!");
}
return 0;
}
5.1循环结构
①for 循环
●一般形式:for(表达式1;表达式2;表达式3)
●概述:for 循环是一种在已知循环次数的情况下使用的循环结构。
基本结构:
for (初始化表达式; 循环条件; 更新表达式) {
// 循环体
}
●初始化表达式:在循环开始前执行,用于初始化循环控制变量。
●循环条件:每次迭代前都会被评估,如果条件为真,则执行循环体;否则,退出循环。
●更新表达式:在每次迭代后执行,用于更新循环控制变量的值。
示例:
#include <stdio.h>
int main() {
for (int i = 1; i <= 5; i++) {
printf("%d ", i);
}
return 0;
}
②while循环
●while是C语言的关键字。
●概述:while 循环用于在条件为真时执行循环体,只有在循环体内的条件变为假时才会退出循环。
基本结构:
while (循环条件) {
// 循环体
}
示例
#include <stdio.h>
int main() {
int i = 1;
while (i <= 5) {
printf("%d ", i);
++i;
}
return 0;
}
③do-while循环
●概述:do-while 循环是一种先执行循环体,然后检查条件的循环结构。这意味着循环体至少会被执行一次。
基本结构:
do {
// 循环体
} while (表达式); //必须加分号
●do-while的执行过程:
先执行循环体,然后计算表达式的值,若表达式为真,则执行循环体中的语句,然后再计算表达式的值,为真执行循环体,以此反复。
示例:
#include <stdio.h>
int main() {
int i = 1;
do {
printf("%d ", i);
++i;
} while (i <= 5);
return 0;
}
6.1break/continue的介绍
①break
●break 语句用于立即终止当前所在的循环,跳出循环体,不再执行循环后面的语句。
●在 for、while 或 do-while 循环中使用 break 会导致程序执行流程跳出整个循环。
●通常与某个条件结合使用,一旦满足条件,就使用 break 来提前结束循环。
示例:
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; ++i) {
if (i == 5) {
printf("Breaking out of the loop at i = %d\n", i);
break;
}
printf("%d ", i);
}
return 0;
}
//输出结果
1 2 3 4 Breaking out of the loop at i = 5
②continue
●continue 语句用于跳过循环体中剩余的语句,直接进行下一次循环迭代。
●当在循环体中的某个条件满足时,使用 continue 可以跳过该次迭代中剩余的代码,直接进入下一次循环。
#include <stdio.h>
int main() {
for (int i = 1; i <= 5; ++i) {
if (i == 3) {
printf("Skipping the iteration at i = %d\n", i);
continue;
}
printf("%d ", i);
}
return 0;
}
//输出结果
1 2 Skipping the iteration at i = 3 4 5
7.1上篇结束介绍
C语言是一门极其重要的编程语言,应用十分广泛,作者为了让更多C语言初学者简单易懂的学习和理解C语言,通过查阅大量书籍和网络文献保证文章准确率,然后通过作者自己的对于C语言的见解和认知编写了这一篇C语言知识点博客,对C语言入门初学者超级友好,可能制作水平远不及其他大佬,或者多少会有些许错误,还请各位读者谅解,给予指正!在此感谢各位读者阅读,制作不易,请多包涵!!!
此篇只是C语言的简单部分,供初学者认识和学习,下篇相对困难且重要,大家一起努力,共同进步吧,不畏艰险,迎难而上吧!!!
(在C语言中Ascll码也很重要哦,本文没有提及,可以去看其他的文章补一下知识点哈!)