C语言学习目标
掌握C语言的语法规则,数组,循环,函数,指针等。
要学会一些算法,比如冒泡排序,快速排序,递归等。
在学习的过程中理解什么是面向过程,为将来学习c艹,Java等面向对象语言做准备。
如何学习C语言
掌握基础知识,为将来进一步学习打下良好的基础
上机实践,通过大量的例题学习怎么设计算法,培养解题思路
养成良好的编程习惯,注释一定要写,不然一周后自己写的代码都不认识了
这三行代码作用
#include<stdio.h>//头文件
int main()//主函数,main函数程序的入口必有而且只能有一个
{
for (int i = 0; i < 10; i++)
{
printf("%d\n", i);//这个输出函数不是C语言自带的,而是包含在库函数<stdio.h>里面
}
return 0;//将结果返回到函数调用处
}
怎么解决学习C语言过程中遇到的问题
问题分析:对上级分配的工作要进行认真的分析,研究所给出的条件,分析最后应该达到的目标,找出解决问题的规律,选择解题的方法。
设计算法:例如要解一个方程式,就要选择用什么方法求解,并且把求解的每一步清晰的写出来。
编写程序:根据得到的算法,用c语言编写出源代码,在写代码的过程中尽可能的添加注释。
编译源程序:对源程序进行编辑、编译和连接,得到可执行程序,如果编译不通过,根据报错提醒,解决报错。
运行程序、分析结果:能得到程序不一定意味着程序就是正确的,要对结果进行分析,看它是否合理。
编写程序文档:许多程序是提供给别人使用的,提供给用户使用的程序,必须有说明书。内容包括:程序名称、功能、运行环境、程序的装入和启动、需要输入的数据,以及其他注意事项。
c语言代码结构
一个程序由一个或者多个源程序文件组成,一个规模较小的程序,往往只包括一个源程序文件,一个源程序文件包括3部分:
1、预处理指令,由预处理得到的结果与程序其他部分一起,组成一个完整的、可以用来编译的最后的源程序,然后由编译程序对该源程序正式进行编译,才能得到目标程序。
2、全局声明,即在函数之外进行数据声明。
3、函数定义,自己定义的函数
函数是c程序的主要组成部分
1、程序的几乎全部工作都是由各个函数分别完成的,函数是c程序的基本单位,在设计良好的程序中,每个函数都用来实现一个或几个特点的功能.
一个函数包括两部分
1、函数首部,即函数的第一行,包括函数名、函数类型、函数属性、函数参数、参数类型。
2、函数体,包括声明部分和执行部分。
函数总是从main函数开始的
1、不管main函数在整个程序中的位置如何,main函数可以放在程序的开头,也可以放在程序的结尾,或在一些函数之前,或一些函数之后。
程序中对计算机的操作是由函数中的c语句完成的
1、如赋值,输入输出数据的操作都是由相应的c语句实现。
在每个数据声明和语句的最后必须有一个分号
1、分号是c语句的必要组成部分。
C语言本身不提供输入输出语句
1、输入和输出的操作是由库函数scanf和printf函数来完成。
程序应当包含注释
1、一个好的、有使用价值的源程序都应当加上必要的注释,增加程序的可读性。
常量:在程序运行过程中,其值不能被改变的量称为常量。
分为以下几类:
1、整型常量
2、实型常量
3、字符常量(分为普通字符和转义字符)
4、字符串常量
5、符号常量
变量:变量代表一个有名字的,具有特定属性的一个存储单元。
常变量:c99允许使用常变量,常变量具有变量的基本属性只是不允许修改。
#include<stdio.h>//头文件
#define PI 3.14//属于常变量声明了PI的值是3.14,PI的值就不能改变
int main()//主函数
{
int number = 5;//number是个变量,5是个常量
float number_2 = 1.234;
double number_3 = 3.5678;//number_2和number_3属于实型变量,后面的值是常量
char character = 'a';//character是字符变量,'a'是字符常量
return 0;
}
浮点类型
1、单精度浮点类型:float
2、双精度浮点类型:double
3、复数浮点型:float_comlex,double_comple,long long_comple (编译系统为每一个float型变量分配4个字节,数值以规范化的二进制数指数形式存放在存储单元中)(double型为了扩大能表示的数值范围,用8个字节存储一个double型数据,可以得到15位有效数字)
枚举类型:enum
字符和字符代码
1、字母
2、数字
3、专门符号
4、空格符
5、不能显示的字符
字符变量
1、字符变量是用类型符char定义字符变量
整型变量 (注意:这里占多少个字节跟系统和编译器规定有关!可以在编译器上自己试试查看)
1、基本型:类型说明符为int在内存中占2个字节或4个字节(vs2022中是4个字节)
2、短整型:类型说明符为short int或short (vs2022中是2个字节)
3、长整型:类型说明符为long int 一个long int型变量的值的范围是-2的31次方~2的31次方-1,即-2147483648~2147483647.,(vs2022中是4个字节)
4、双长整型:long long int (vs2022中是8个字节,这个是c99新增的类型)
标识符:用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为标识符。
c语言规定标识符只能由字母、数字和下划线3种字符组成,且第1个字符必须为字母或下划线。
C语言%求余
#include<stdio.h>
int main()
{
int num1, num2;
num1 = 4;
num2 = 3;//如果后一个数比前一个大,求余的值就还是前一个数
printf("两数求余的值:%d\n", num1 % num2);
}
C语言算术表达式和运算符的优先级与结合性
1、在表达式求值时,先按运算符的优先级别顺序执行,例如先乘除后加减。如果在一个运算对象两侧的运算符的优先级别相同,则按照结合方向“自左至右”即先左后右执行。
c语言强制类型转换运算符
1、一般形式:(类型名)(表达式)
(double)a:将a转换成double类型
(int)(x+y):将x+y的值转换成int类型
c语言常用运算符总结
1、算术运算符:+ - / % ++ --
2、关系运算符:> < == > = < !=
3、逻辑运算符:! && ||
4、位运算符:<< >> ~ | ^ &
5、赋值运算符:=
6、条件运算符:?:
7、逗号运算符: ,
8、指针运算符:*
9、求字节运算符: sizeof
10、强制类型转换运算符: (需要强制转换的类型)
11、成员运算符:. ->
12、下标运算符:[]
13、函数调用运算符:函数名()
c语言关系运算符是什么
在c语言中,比较符称为关系运算符,所谓关系运算就是比较运算,将两个数值进行比较,判断其比较的结果是否符合给的条件。
#define _CRT_SECURE_NO_WARNINGS //忽略安全检测,不然使用scanf会报错
#include<stdio.h>
int main()
{
int num;
scanf("%d", &num);
if (num<5)
{
printf("num小于5");
}
else
{
printf("unm不小于5");
}
}
c语言逻辑运算符优先次序
1、有3种逻辑运算符:与(AND),或(OR),非(NOT)。在basic和pascal等语言可以在程序中直接用and,or,not作为逻辑运算符。在c语言中不能在程序中直接使用,而是用其他符号代替。
2、!(非) &&(与) ||(或) 中“!”优先级最高。
3、逻辑运算符中的“&&”和“||”低于关系运算符,“!”高于算术运算符。
4、&&和||是双目运算符,它要求有两个运算对象(操作数),!是一目运算符,只要求有一个运算对象。
c语言逻辑表达式
逻辑表达式的值应该是一个逻辑量“真”或“假”。C语言编译系统在表示逻辑运算结果时,以数值1代表“真”,以0代表“假”,但在判断一个量是否为“真时”,以0代表“假”,以非0代表“真”。即将一个非零的数值认作“真”。
c语言逻辑变量
这是c99所增加的一种数据类型。可以将关系运算和逻辑运算的结果存到一个逻辑型变量中,以便于分析和运算。定义逻辑变量用类型符Bool。(vs2022没有这个)
c语言条件运算符(三目运算符)
一般形式
表达式1:? 表达式2:: 表达式3
条件运算符由两个符号(?和:)组成,必须一起使用。要求有3个操作对象,称为三目运算符。
三目运算符可以这样理解,先计算出表达式1的值,表达式1后面的问号表示“该往哪里”,有两条路,如果表达是1的值为真(非0),自然直接到表达式2,如为假(0值),就绕过表达式2,到表达式3.
条件表达式由三个运算对象和条件运算符组成
c语言使用条件运算符注意事项
1、条件运算符优先于赋值运算符
2、表达式“2”和表达式“3”不仅可以是数值表达式,还可以是赋值表达式或函数表达式。
3、条件表达式相当于一个不带关键字if的if语句,用它处理简单选择结构可以使程序简洁。
4、三目运算符是C语言中唯一一个三目运算符。
c语言printf用法
1、一般格式
printf(格式控制,输出表列)
格式控制是用双引号括起来的一个字符串,称“转换控制字符串”,简称“格式字符串”,
包含:(格式声明:由%和格式字符组成,如%d、%f。)(普通字符:既需要在输出时原样输出的字符。)
输出表列是程序需要输出的一些数据,可以是常量、变量或表达式。
c语言printf注意事项:输出是以计算机为主体而言的,从计算机向输出设备输出数据称为输出,C语言本身不包含输出语句,如果不加头文件,代码就会报错。
c语言scanf函数
一般形式
scanf(格式控制,地址表列)
格式控制和printf函数一样,地址表列是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。
(格式声明只包含一部分:以%开始,以一个格式字符结束,中间可以插入附加的字符。)
使用c语言scanf函数的注意事项:
1、scanf函数中的格式控制后面应当是变量地址,而不是变量名。
2、如果在格式控制字符串中除了格式声明以外还有其他字符,则在输入数据时在对应的位置上应输入这些字符相同的字符。
3、在用%c格式声明输入字符时,空格字符和转义字符中的字符都作为有效字符输入。
4、在输入数值数据时,如输入空格、回车、tab键或遇到非法字符时会认为你的输入结束。
C语言putchar函数
想从计算机向显示器输出一个字符,可以调用系统函数库中的putchar函数。
一般形式
putchar(c)
putchar是put character(给字符)的缩写,其作用是输出字符变量c的值,显然它是一个字符。getchar函数的值就是从输入设备得到的字符。getchar函数只能接受一个字符。如果想输入多个字符就要用多个getchar函数。
c语言if语句的一般形式
一般形式
f(表达式)语句1
[else语句2]
if语句中的表达式可以是关系表达式、逻辑表达式,甚至还可以是数值表达式。
语句1和语句2可以是一个简单的语句,也可以是一个复合语句,还可以是其他的if嵌套。
c语言if语句最常见的3种形式
1、没有else子句部分
if(表达式)语句1
2、有else子句部分
if(表达式)
语句1
else
语句2
3、在else部分又嵌套多层的if语句
if(表达式1)语句1
else if(表达式2)语句2
else if (表达式3)语句3
......
语句1、语句2.....语句m等是if语句中的“内嵌语句”,它们是if语句中的一部分。
if语句注意事项:整个if语句可以写在多行上,也可以写在一行上。if语句无论写在几行上,都是一个整体,属于同一语句。内嵌语句也可以是一个if语句。在if语句中要对给定的条件进行检查,判断所给定的条件是否成立。
c语言switch多分支语句
如果分支较多,嵌套的if语句层数多,程序繁长而且可读性降低,因为c语言提供switch语句直接处理多分支选择。
一般形式
switch(表达式)
{
case 常量1:语句1
case 常量2:语句2
.....
case 常量n:语句n
default:语句n+1
}
例:#define _CRT_SECURE_NO_WARNINGS //忽略安全检测,不然使用scanf会报错
#include<stdio.h>//头文件
int main()//主函数
{
char grade;//定义成绩级别字符变量
printf("输入成绩级别:");//提示语句
scanf("%c", &grade);//键盘输入
printf("成绩段:");//提示语句
switch (grade)//switch 多分支
{
case'A':printf("85-100\n"); break;//输出A的成绩分布
case'B':printf("70-84\n"); break;//输出B的成绩分布
case'c':printf("60-69\n"); break;//输出C的成绩分布
case'D':printf("不及格小于60\n");//输出D的成绩分布
default:printf("输入成绩等级有误\n");//输出成绩级别有误
}
return 0;//函数返回值为0
}
switch多分支注意事项:
1、switch后面括号内的“表达式”,其值的类型应为整数类型,包括字符型。
2、switch下面的花括号内是一个复合语句。
3、可以没有default标号,此时如果没有与switch表达式相匹配的case常量,则不执行任何语句,流程转到switch语句的下一个语句。
4、各个case标号出现的次序不影响执行结果,case标号只起标记作用。
5、每一个case常量必须互不相同。
6、在case子句中虽然包含了一个以上执行语句,但可以不必用花括号括起来,会自动顺序执行本case标号后面所以的语句。
C语言while语句
一般形式:while(表达式)语句
注意事项:
1、其中的语句就是循环体,可以是一个简单的语句,也可以是符复合语句。执行循环体的次数是由循环条件控制的,这个循环条件就是上面一般形式中的“表达式”,也称为循环条件表达式。
2、while循环可以简单的记为,只要当循环条件表达式为真(即给定的条件成立),就执行循环体语句。
3、while循环特点是:先判断条件表达式,后执行循环体语句。
例:#include<stdio.h>//头文件
int main()//主函数
{
int num;
num = 15;
while (num > 10)//循环条件
{
num--;
printf("%d\n", num);
}//循环体
}
c语言do while介绍
除了while语句以外,c语言还提供了do...while语句来实现循环。
一般形式:
do
语句
while (表达式)
例:#include<stdio.h>//头文件
int main()//主函数
{
int num;//定义整型变量
num = 15;//给num赋值15
do//关键词do
{
num--;
printf("%d\n", num);
} while (num > 10);//先运行第8行和第9行的代码然后再判断num是否大于10如果符合条件的话会继续执行第8行和第9行的代码(dowhile语句一定要有一个分号结束)
}
c语言for语句介绍
除了可以用while语句和do.....while语句实现循环外,c语言还提供for语句实现循环
指针(一般用%x十六进制输出)
直接访问:通过变量名直接访问地址
间接访问:把变量的地址放到另一个变量中,使用时先找到后者的地址,从中取出前者的地址
指针变量:存放地址的变量
struct是自定义结构体(sizeof是一个计算结构类型所占内存字节数的关键字)
strcpy是字符串拷贝
常用内存管理函数有分配内存空间函数malloc 、calloc释放内存空间函数free
动态内存分配函数
void*malloc(unsigned size)
功能:在内存的动态存贮区(堆)中分配一块长度为size的连续空间。
返回值:指针,存放被 分配内存的起始地址。若未申请地址,则返回null(0)。
void*:指向任何类型的数据,在使用时,要进行强制类型转换。
例如:(int*)malloc(sizeof(int))
(struct student*)malloc(sizeof(struct student))
sizeof是一个运算符作用是计算需要分配的空间的字节数
void free(void*ptr)
功能:释放由malloc()申请的动态内存空间,ptr存放该空间的首地址。
返回值:无。
p=(struct student*)malloc(sizof(struct student));
......
free(p);
实践才能把知识变成技能,坚持才有沉淀。