C语言编程大全_第1页
C语言编程大全_第2页
C语言编程大全_第3页
C语言编程大全_第4页
C语言编程大全_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言编程大全第一章绪论:认识C语言1.1C语言的起源与发展C语言由美国贝尔实验室的丹尼斯·里奇(DennisRitchie)于1972年在B语言的基础上设计开发,最初用于UNIX操作系统的编写。其设计初衷是兼顾底层硬件操作能力与高级语言的简洁性,经过半个多世纪的发展,C语言逐渐成为最广泛使用的编程语言之一,衍生出C++、Java等多种主流编程语言,至今仍在系统开发、嵌入式开发、底层驱动等领域占据不可替代的地位。C语言的发展历程关键节点:1978年,BrianKernighan与DennisRitchie合著《TheCProgrammingLanguage》(俗称“K&R圣经”),确立了C语言的标准;1989年,ANSI发布C语言第一个官方标准ANSIC(C89);后续相继推出C99、C11、C17等版本,逐步完善语法特性、增加新功能,提升语言的安全性和实用性。1.2C语言的核心特点简洁高效:语法简洁,关键字仅32个,代码执行效率高,接近汇编语言,能直接操作硬件资源,适合对性能要求较高的场景。灵活性强:支持指针操作,可直接访问内存地址,能实现底层硬件控制,同时支持自定义函数、结构体、枚举等,适配多种编程需求。可移植性好:标准C语言代码在不同操作系统(Windows、Linux、Unix)和硬件平台上,经过少量修改即可运行,具有良好的跨平台特性。面向过程:采用“面向过程”的编程思想,将问题拆解为一系列步骤,通过函数调用实现流程控制,逻辑清晰,易于理解和维护。应用广泛:常用于系统软件(操作系统、编译器)、嵌入式开发(单片机、物联网设备)、底层驱动、游戏开发等领域,是编程入门的优选语言。1.3C语言的应用场景系统开发:编写操作系统内核、编译器、数据库内核等底层软件,例如UNIX、Linux操作系统的核心代码均由C语言编写。嵌入式开发:单片机、ARM芯片、物联网设备(如智能手环、智能家居)的程序开发,利用C语言的底层操作能力,实现设备的控制与数据处理。驱动开发:硬件设备(显卡、声卡、打印机)的驱动程序,需通过C语言与硬件底层交互,实现设备与操作系统的通信。数值计算与算法实现:科学计算、工程计算中的核心算法(如排序、查找、矩阵运算),C语言的高效性能满足计算速度需求。游戏开发:早期游戏(如贪吃蛇、俄罗斯方块)及游戏引擎的底层开发,利用C语言的性能优势,实现游戏的流畅运行。1.4学习C语言的准备工作1.4.1开发环境搭建C语言开发无需复杂的硬件配置,主流开发环境分为两类,可根据需求选择:Windows系统:推荐使用Dev-C++(轻量简洁,适合入门)、Code::Blocks(开源免费,功能全面)、VisualStudio(微软出品,集成调试、编译、运行,适合进阶)。Linux/Unix系统:自带GCC编译器(GNUCompilerCollection),可搭配Vim、VSCode等编辑器,通过终端命令编译运行代码,贴近底层开发场景。核心步骤:安装开发环境→编写代码→编译(将C语言源码转换为可执行文件)→运行→调试(排查代码错误)。1.4.2学习建议C语言是编程入门的基础,学习时需注重“理解+实践”,避免只看不动手:循序渐进:从基础语法(变量、常量、表达式)入手,逐步学习函数、数组、指针等难点,不可急于求成。多写代码:每学习一个知识点,编写对应的实例程序,通过实践巩固理解,避免“眼会手不会”。重视调试:遇到代码错误时,学会使用开发环境的调试工具,排查语法错误、逻辑错误,培养问题解决能力。多读源码:阅读优秀的C语言源码(如标准库源码、开源项目),学习规范的编程风格和高效的实现方法。第二章C语言基础语法2.1基本概念:关键字、标识符、常量与变量2.1.1关键字关键字是C语言预先定义的、具有特定含义的标识符,不能作为变量名、函数名使用,C89标准共32个关键字,核心常用关键字分类如下:类别关键字说明数据类型int、char、float、double、void定义变量或函数的类型控制语句if、else、for、while、do、switch、case、break、continue、return控制程序执行流程存储类型auto、static、register、extern定义变量的存储方式其他struct、union、enum、typedef、const、volatile、sizeof结构体、枚举、类型定义等2.1.2标识符标识符是用户自定义的名称,用于命名变量、函数、结构体等,需遵循以下规则:由字母(A-Z、a-z)、数字(0-9)、下划线(_)组成,不能以数字开头。区分大小写,例如“num”和“Num”是两个不同的标识符。不能使用关键字作为标识符,例如不能命名“int”“if”等。建议命名规范:简洁明了,见名知义,例如用“age”表示年龄,“sum”表示求和,避免使用无意义的名称(如“a1”“b2”)。2.1.3常量常量是程序运行过程中,值不能改变的量,分为4类:整型常量:整数,如123、-45、0(十进制)、0123(八进制,以0开头)、0x12(十六进制,以0x开头)。实型常量:小数或科学计数法表示的数,如3.14、-0.5、1.23e5(表示1.23×10⁵)、4.5e-3(表示4.5×10⁻³)。字符常量:单个字符,用单引号括起来,如'a'、'5'、'+',注意区分字符常量('5')和整型常量(5)。字符串常量:多个字符组成的序列,用双引号括起来,如"hello"、"Clanguage",字符串末尾默认包含一个结束符'\0'(不可见)。2.1.4变量变量是程序运行过程中,值可以改变的量,本质是内存中的一块存储空间,使用前必须先定义(声明类型和名称)。1.变量定义格式数据类型变量名1,变量名2,...;例:c

#include<stdio.h>

intmain(){

intnum1=10;//定义整型变量num1,初始值为10

charch='A';//定义字符变量ch,初始值为'A'

floatscore=95.5;//定义浮点型变量score,初始值为95.5

return0;

}

2.常用数据类型数据类型说明占用字节(32位系统)取值范围int整型4-2¹⁵~2¹⁵-1(-32768~32767)char字符型1-128~127float单精度浮点型4约±3.4×10⁻³⁸~±3.4×10³⁸(精度6-7位小数)double双精度浮点型8约±1.7×10⁻³⁰⁸~±1.7×10³⁰⁸(精度15-16位小数)2.2运算符与表达式运算符用于对数据进行运算,表达式是由运算符和操作数组成的式子,C语言运算符种类丰富,按功能可分为以下几类:2.2.1算术运算符用于进行加减乘除、取余等算术运算,核心运算符及示例:运算符功能示例结果+加法5+38-减法/负号5-3/-52/-5*乘法5*315/除法(整数除法取商)5/2/5.0/22/2.5%取余(仅适用于整数)5%2/7%31/1++自增(前增:先增后用;后增:先用后增)inta=3;++a/a++4/3--自减(规则同自增)inta=3;--a/a--2/3注意:整数除法中,结果只保留整数部分,舍去小数(如5/2=2,而非2.5);取余运算的结果符号与被除数一致(如-5%2=-1,5%-2=1)。2.2.2赋值运算符用于将右侧的值赋给左侧的变量,核心运算符:=、+=、-=、*=、/=、%=,示例:c

inta=5;

a+=3;//等价于a=a+3,结果a=8

a-=2;//等价于a=a-2,结果a=6

a*=4;//等价于a=a*4,结果a=24

a/=3;//等价于a=a/3,结果a=8

a%=5;//等价于a=a%5,结果a=3

2.2.3关系运算符用于判断两个值的关系,结果为布尔值(1表示真,0表示假),核心运算符:>、<、==、!=、>=、<=,示例:c

inta=5,b=3;

printf("%d",a>b);//输出1(真)

printf("%d",a==b);//输出0(假)

printf("%d",a!=b);//输出1(真)

注意:“==”是判断相等,“=”是赋值,不可混淆(如if(a=3)是赋值,永远为真;if(a==3)是判断,只有a等于3时为真)。2.2.4逻辑运算符用于逻辑判断,结果为1(真)或0(假),核心运算符:&&(逻辑与)、||(逻辑或)、!(逻辑非),运算规则:逻辑与(&&):两边都为真,结果才为真;只要有一边为假,结果为假(短路特性:左边为假时,右边不执行)。逻辑或(||):两边只要有一边为真,结果就为真;两边都为假,结果才为假(短路特性:左边为真时,右边不执行)。逻辑非(!):取反,真变假,假变真。c

inta=5,b=3;

printf("%d",a>3&&b>5);//1&&0=0

printf("%d",a>3||b>5);//1||0=1

printf("%d",!(a==b));//!0=1

2.2.5运算符优先级当表达式中包含多个运算符时,需遵循优先级规则(从高到低):1.括号(());2.自增/自减(++、--)、逻辑非(!);3.算术运算符(*、/、%高于+、-);4.关系运算符;5.逻辑运算符(&&高于||);6.赋值运算符。建议:当不确定优先级时,使用括号明确运算顺序,例如(a+b)*c优先计算a+b,再乘以c。2.3输入与输出C语言的输入输出通过标准库函数实现,需包含头文件<stdio.h>(standardinput/outputheader),核心函数为printf(输出)和scanf(输入)。2.3.1输出函数printf()功能:将指定内容输出到屏幕,格式:printf("格式控制字符串",输出项1,输出项2,...);核心格式控制符(对应不同数据类型):格式控制符对应数据类型示例输出结果%dint(整型)printf("%d",123);123%cchar(字符型)printf("%c",'A');A%ffloat、double(浮点型)printf("%.2f",3.1415);3.14(保留2位小数)%s字符串printf("%s","hello");helloc

#include<stdio.h>

intmain(){

intnum=100;

charch='B';

floatscore=98.5;

printf("num=%d,ch=%c,score=%.1f\n",num,ch,score);

//输出:num=100,ch=B,score=98.5

return0;

}

2.3.2输入函数scanf()功能:从键盘获取输入,存储到指定变量中,格式:scanf("格式控制字符串",&变量名1,&变量名2,...);注意:变量名前必须加&(取地址符),表示将输入的值存储到该变量的内存地址中,示例:c

#include<stdio.h>

intmain(){

intnum;

charch;

floatscore;

printf("请输入一个整数、一个字符、一个小数:");

scanf("%d%c%f",&num,&ch,&score);

printf("你输入的是:num=%d,ch=%c,score=%.2f\n",num,ch,score);

return0;

}

补充:输入多个数据时,可用空格、回车、Tab键分隔;若输入字符时,需注意空格和回车会被当作字符读取,可在格式控制符前加空格(如"%d%c")避免错误。2.4程序流程控制C语言程序的执行流程分为3种:顺序结构(从上到下依次执行)、选择结构(根据条件判断执行不同代码)、循环结构(重复执行某段代码),核心通过控制语句实现。2.4.1选择结构:if-else语句功能:根据条件是否成立,执行不同的代码块,有3种形式:1.单分支if语句c

if(条件表达式){

//条件为真时执行的代码

}

//条件为假时,跳过该代码块,执行后续代码

2.双分支if-else语句c

if(条件表达式){

//条件为真时执行的代码

}else{

//条件为假时执行的代码

}

3.多分支if-elseif-else语句c

if(条件1){

//条件1为真时执行

}elseif(条件2){

//条件1为假、条件2为真时执行

}elseif(条件3){

//条件1、2为假,条件3为真时执行

}else{

//所有条件都为假时执行

}

示例:判断一个数是正数、负数还是零c

#include<stdio.h>

intmain(){

intnum;

printf("请输入一个整数:");

scanf("%d",&num);

if(num>0){

printf("这是一个正数\n");

}elseif(num<0){

printf("这是一个负数\n");

}else{

printf("这是零\n");

}

return0;

}

2.4.2选择结构:switch-case语句功能:当条件是多个固定值时,替代多分支if-else,结构更清晰,格式:c

switch(表达式){

case常量1:

//表达式等于常量1时执行的代码

break;//跳出switch语句,避免继续执行后续case

case常量2:

//表达式等于常量2时执行的代码

break;

...

default:

//表达式不等于任何常量时执行的代码

break;

}

注意:case后的常量必须是整数、字符或枚举值,不能是变量;break语句不可省略(否则会出现“穿透效应”,执行完当前case后,继续执行下一个case);default可省略,位置可任意。示例:根据输入的数字,输出对应的星期c

#include<stdio.h>

intmain(){

intday;

printf("请输入1-7之间的数字:");

scanf("%d",&day);

switch(day){

case1:

printf("星期一\n");

break;

case2:

printf("星期二\n");

break;

case3:

printf("星期三\n");

break;

case4:

printf("星期四\n");

break;

case5:

printf("星期五\n");

break;

case6:

printf("星期六\n");

break;

case7:

printf("星期日\n");

break;

default:

printf("输入错误!\n");

break;

}

return0;

}

2.4.3循环结构:while循环功能:先判断条件,条件成立则重复执行循环体,格式:c

while(条件表达式){

//循环体:需要重复执行的代码

//(注意:需在循环体内修改条件,避免死循环)

}

示例:计算1到100的和c

#include<stdio.h>

intmain(){

inti=1,sum=0;

while(i<=100){

sum+=i;//等价于sum=sum+i

i++;//修改条件,i自增,避免死循环

}

printf("1到100的和为:%d\n",sum);//输出5050

return0;

}

2.4.4循环结构:do-while循环功能:先执行一次循环体,再判断条件,条件成立则继续循环,格式:c

do{

//循环体:先执行一次

}while(条件表达式);//注意末尾有分号

区别:while循环“先判断后执行”,可能一次都不执行;do-while循环“先执行后判断”,至少执行一次。示例:输入一个正整数,直到输入正确为止c

#include<stdio.h>

intmain(){

intnum;

do{

printf("请输入一个正整数:");

scanf("%d",&num);

}while(num<=0);//输入错误(非正整数),继续循环

printf("你输入的正整数是:%d\n",num);

return0;

}2.4.5循环结构:for循环功能:最常用的循环,将初始化、条件判断、条件修改整合在一起,格式清晰,格式:c

for(初始化表达式;条件表达式;修改表达式){

//循环体

}

执行流程:1.执行初始化表达式(仅一次);2.判断条件表达式,成立则执行循环体;3.执行修改表达式;4.重复步骤2-3,直到条件不成立。示例:计算1到100的偶数和c

#include<stdio.h>

intmain(){

intsum=0;

for(inti=2;i<=100;i+=2){//i从2开始,每次加2(偶数)

sum+=i;

}

printf("1到100的偶数和为:%d\n",sum);//输出2550

return0;

}

2.4.6循环控制语句:break与continuebreak:跳出当前循环(或switch语句),不再执行循环体内剩余的代码,也不再进行下一次循环判断。continue:跳过当前循环体内剩余的代码,直接进行下一次循环判断(不跳出循环)。示例:打印1到10,跳过5c

#include<stdio.h>

intmain(){

for(inti=1;i<=10;i++){

if(i==5){

continue;//跳过i=5,直接执行下一次循环

}

printf("%d",i);//输出:1234678910

}

return0;

}

第三章C语言进阶知识3.1数组3.1.1数组的定义与初始化数组是一组相同数据类型的变量的集合,连续存储在内存中,可通过下标访问单个元素(下标从0开始)。1.数组定义格式数据类型数组名[数组长度];例:intarr[5];//定义一个包含5个整型元素的数组注意:数组长度必须是常量(不能是变量),C89标准不支持变长数组,C99及以上版本支持。2.数组初始化初始化分为完全初始化和部分初始化,示例:c

//1.完全初始化:所有元素都赋值

intarr1[5]={1,2,3,4,5};

//2.部分初始化:未赋值的元素默认为0

intarr2[5]={1,2};//等价于{1,2,0,0,0}

//3.省略数组长度:编译器根据初始化元素个数自动计算长度

intarr3[]={1,2,3,4};//长度为4

//4.字符数组初始化(字符串)

charstr1[]="hello";//自动添加结束符'\0',长度为6(hello\0)

charstr2[]={'h','e','l','l','o'};//无结束符,长度为5

3.1.2数组的访问与遍历通过“数组名[下标]”访问单个元素,下标范围是0~数组长度-1(超出范围会导致数组越界,出现不可预测的错误)。示例:遍历数组,计算所有元素的和c

#include<stdio.h>

intmain(){

intarr[]={1,2,3,4,5};

intlen=sizeof(arr)/sizeof(arr[0]);//计算数组长度(总字节数/单个元素字节数)

intsum=0;

for(inti=0;i<len;i++){

sum+=arr[i];//访问第i个元素

}

printf("数组所有元素的和为:%d\n",sum);//输出15

return0;

}

3.1.3二维数组二维数组是数组的数组,用于存储表格形式的数据,定义格式:数据类型数组名[行数][列数];示例:c

#include<stdio.h>

intmain(){

//定义并初始化一个3行4列的二维数组

intarr[3][4]={

{1,2,3,4},

{5,6,7,8},

{9,10,11,12}

};

//遍历二维数组

for(inti=0;i<3;i++){//行循环

for(intj=0;j<4;j++){//列循环

printf("%d",arr[i][j]);

}

printf("\n");//每行结束换行

}

return0;

}

注意:二维数组初始化时,行数可省略,列数不可省略(如intarr[][4]={{1,2},{3,4}};行数自动计算为2)。3.2函数函数是C语言的核心模块,将一段实现特定功能的代码封装起来,可重复调用,提高代码的复用性和可读性,分为库函数和自定义函数。3.2.1函数的定义与调用1.自定义函数定义格式c

返回值类型函数名(参数列表){

//函数体:实现功能的代码

return返回值;//若返回值类型为void,可省略return

}

说明:返回值类型:函数执行完成后返回的数据类型,若不返回任何值,用void表示。参数列表:函数接收的输入数据,可无参数(空参数列表),也可多个参数(用逗号分隔)。函数名:遵循标识符命名规则,见名知义。2.函数调用格式:函数名(参数列表);若函数有返回值,可将返回值赋值给变量或直接使用。示例:自定义函数,计算两个整数的和c

#include<stdio.h>

//自定义函数:计算两个整数的和,返回值为int,接收两个int参数

intadd(inta,intb){

intsum=a+b;

returnsum;//返回计算结果

}

intmain(){

intnum1=5,num2=3;

intresult=add(num1,num2);//调用add函数,将返回值赋值给result

printf("%d+%d=%d\n",num1,num2,result);//输出8

return0;

}

3.2.2函数的声明若函数定义在main函数之后,需在main函数之前进行函数声明(告诉编译器函数的返回值类型、函数名和参数列表),否则编译器会报错。函数声明格式:返回值类型函数名(参数列表);(无需函数体)示例:函数声明的使用c

#include<stdio.h>

//函数声明(告诉编译器add函数的信息)

intadd(inta,intb);

intmain(){

intnum1=5,num2=3;

intresult=add(num1,num2);//可正常调用

printf("%d+%d=%d\n",num1,num2,result);

return0;

}

//函数定义(在main函数之后)

intadd(inta,intb){

returna+b;

}

3.2.3函数参数:值传递与地址传递1.值传递将实参(调用函数时传入的参数)的值复制一份给形参(函数定义中的参数),形参的修改不会影响实参的值,适用于不需要修改实参的场景。c

#include<stdio.h>

voidswap(inta,intb){

inttemp=a;

a=b;

b=temp;

printf("函数内:a=%d,b=%d\n",a,b);//输出6,3

}

intmain(){

inta=3,b=6;

swap(a,b);//值传递,实参a、b的值复制给形参a、b

printf("函数外:a=%d,b=%d\n",a,b);//输出3,6(实参未改变)

return0;

}

2.地址传递将实参的内存地址传递给形参(形参为指针类型),形参通过地址访问实参,修改形参指向的值,会直接改变实参的值,适用于需要修改实参的场景。c

#include<stdio.h>

voidswap(int*a,int*b){//形参为指针,接收实参的地址

inttemp=*a;//*a表示访问指针a指向的内存地址的值(即实参a的值)

*a=*b;

*b=temp;

}

intmain(){

inta=3,b=6;

swap(&a,&b);//传递实参a、b的地址

printf("函数外:a=%d,b=%d\n",a,b);//输出6,3(实参已改变)

return0;

}

3.2.4库函数C语言标准库提供了大量现成的函数,无需自定义,直接包含对应头文件即可调用,常用库函数:输入输出函数:printf()、scanf()、gets()、puts()(包含<stdio.h>)。字符串处理函数:strlen()(求字符串长度)、strcpy()(字符串复制)、strcmp()(字符串比较)(包含<string.h>)。数学函数:sqrt()(求平方根)、pow()(求幂)、abs()(求绝对值)(包含<math.h>)。内存操作函数:malloc()(动态分配内存)、free()(释放内存)(包含<stdlib.h>)。示例:使用strlen()求字符串长度c

#include<stdio.h>

#include<string.h>//包含字符串处理函数头文件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论