版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章C语言概述01C语言的发展史02C语言的特性03一个简单的C程序04一个完整的C程序05C语言程序的格式06开发环境C语言的发展史程序语言简述低级语言机器语言汇编语言高级语言FortranALGOL60CobolBasicPascalPrologC/C++JavaC语言的历史ALGOL6019601963CPLA语言1967BCPL1970B语言1973C语言第一个UNIX操作系统1988制定ANSI标准编程语言的学习方向C语言其他语言1其他语言2其他语言3其他语言4其他语言5……其他语言6编程语言的学习方向C语言C++Visual
C++JavaJavaScriptHTMLAndroidC#A嵌入式Objective-cC语言的特点C语言的特点特点高效性灵活性功能丰富表达力强移植性好一个简单的C程序第一个C语言程序#include<stdio.h>intmain(){ printf("Hello,world!I'mcoming!\n"); /*输出要显示的字符串*/ return0; /*程序返回0*/}结果DOS窗口中显示“Hello,world!I'mcoming!”代码分析01#include<stdio.h>03intmain()04{02
05 printf("Hello,world!I'mcoming!\n"); /*输出要显示的字符串*/06 return0; /*程序返回0*/07}"stdio.h"转义字符函数头//输出要显示的字符串//程序返回0主函数的结束标志一个完整的C程序完整的C程序定义头文件宏定义函数声明主函数的函数头主函数的函数体定义变量输出语句输入语句调用函数calculate()函数返回值定义函数calculate()结果长方形的高度为:10请输入长度2请输入宽度5长方形的体积是:100C语言程序的格式C语言的格式特点主函数main(){}函数;大小写通用空格空行开发环境DevC++安装DevC++1了解DevC++的主界面2常用快捷键3设置DOS窗口文字和背景颜色VisualC++6.0安装VisualC++6.01了解VisualC++6.0的主界面2常用快捷键3VisualStudio2019VisualStudio20191了解VisualStudio2019的主界面2常用快捷键3第2章算法01算法的基本概念02算法的描述算法的基本概念什么是算法?食材配料操作步骤数据算法程序算法的特性有穷性确定性可行性输入输出算法的优劣1、正确性2、可读性3、健壮性4、时间复杂度与空间复杂度算法的描述算法的外在表现自然语言自然语言例任意输入3个数,求这3个数中的最小数。①、定义4个变量分别为x、y、z以及min②、输入大小不同的3个数分别赋给x、y、z③、判断x是否小于y,如果小于,则将x的值赋给min,否则将y的值赋给min④、判断min是否小于z,如果小于,则执行步骤
⑤,否则将z的值赋给min⑤、将min的值输出流程图流程图起止输入/输出判断处理流程1、顺序结构2、选择结构3、循环结构顺序结构AB例输入两个数分别赋给变量i和j,再将这两个数分别输出。开始输入两个数赋值给i和j结束输出变量i和j的值选择结构A判断B成立不成立例输入一个数,判断该数是否为偶数,并给出相应提示。开始输入一个数赋值给i结束判断i能否被2整除YNi是偶数i不是偶数循环结构A判断成立不成立例求1到100的整数和。开始结束i>100N输出sumi=1;sum=0;sum=sum+i;i++;综合练习例输入a、b、c三个数,并按大小输出。开始结束a>bNa与b互换输入a、b、c三个数Ya<c顺序输出c、a、bb<c顺序输出a、c、b顺序输出a、b、cNYNYN-S流程图N-S流程图ABA判断B成立不成立A判断成立不成立顺序结构AB输入两个值分别赋给变量i和j将变量i和j的值输出例输入两个数分别赋给变量i和j,再将这两个数分别输出。选择结构输入一个数赋给变量i输出i是偶数例输入一个数,判断该数是否为偶数,并给出相应提示。输出i不是偶数ABPYN判断i是否能被2整除YN循环结构例求1到100的整数和。当P成立i<=100i=1;sum=0;sum=sum+i;i++;输出sum第3章数据类型01编程规范02关键字03标识符04数据类型05常量06变量07变量的存储类别08混合运算编程规范编程规范代码缩进函数的命名规范变量、常量命名规范注释Tab关键字32个关键字autodoubleintstructbreakelselongswitchcaseenumregistertypedefcharexternunionreturnconstfloatshortunsignedcontinueforsignedvoiddefaultgotosizeofvolatiledowhilestaticif标识符什么是标识符?标识符变量名函数名数组名标识符的命名规则1、以字母、下划线开头int!number;int2hao;int_hao;intnumber;2、除开头外,其他位置都可以由字母、下划线或数字组成intgood_way;intcar6V;3、区分大小写字母intmingri;intMINGRI;intMingRi;≠≠4、标识符不是关键字intint;intInt;5、具有相关的含义6、不要将标识符设定的过长不推荐数据类型C语言中有哪些数据类型数据类型基本类型构造类型指针类型空类型整型字符型实型枚举型单精度型双精度型数组型结构体型共用体型常量什么是常量?常量的值在程序运行过程中不可改变。常量数值型常量字符型常量符号常量整型常量可以直接使用的整型常数num=101;height=-4932;定义十进制数字进制数十进制数字八进制数字十六进制数字不以0开头包含数字0~9以0开头包含数字0~7以0x开头包含数字0~9及字母A~FOctalNumber1=356;OctalNumber2=0492;OctalNumber3=057;HexNumber1=0x123;HexNumber2=89j2;实型常量实型num1=10.1;num2=0.432;浮点型小数实型常量的表示法num1=10.1;num2=0.432;1、科学计数法2、指数方式eSciNum1=45e2=45*102=4500SciNum2=45e-2=45*10-2=0.45实型常量的分类双精度double单精度float长双精度longdouble6~715~1618~19FloatNum=1.2345e2F;LongDoubleNum=5.458e-1L;DoubleNum=1.2345e2;默认字符型常量字符型常量字符常量字符串常量1、一个字符2、''3、区分大小写'a''#''a''A'≠'a''ab'1、多个字符2、"""Haveagoodday!"转移字符常量的值在程序运行过程中不可改变。转义字符意义转义字符意义\n回车换行\\反斜杠“\”\t横向跳到下一制表位置\'单引号符\v竖向跳格\a鸣铃\b退格\ddd1~3位八进制数所代表的字符\r回车\xhh1~2位十六进制数所代表的字符\f走纸换页符号常量#definePAI3.14符号变量什么是变量?变量的值在程序运行过程中可以进行改变。变量整型变量实型变量字符型变量整型变量整型变量基本型无符号型-231~(231-1)基本型短整型长整型占4个字节int-215~(215-1)占2个字节shortint或short-231~(231-1)占4个字节longint或long0~(232-1)短整型长整型unsignedint或unsigned占4个字节0~(216-1)unsignedshort占2个字节0~(232-1)unsignedlong占4个字节short<=int<=long实型变量3.1415926整数部分小数部分实型变量的分类双精度double单精度float长双精度longdouble占内存4个字节占内存8个字节占内存8个字节floatfFloatStyle;fFloatStyle=1.2345e2f;longdoublefLongDouble;fLongDouble=5.458e-1L;doubledDoubleStyle;dDoubleStyle=1.2345e2;字符型变量charcharcChar;cChar='a';以ASCII码形式存储ASCII码表49~57:数字(0-9)65~90:大写字母(A-Z)97~122:小写字母(a-z)字符型变量charcChar;cChar='a';存储单元屏幕a97输出字符输出整型97转换a变量的存储类别静态存储和动态存储静态存储动态存储程序运行分配的固定的存储方式程序运行期间根据需要动态地分配存储空间auto变量修饰一个局部变量为自动的,每次执行到定义该变量时,都会产生一个新的变量,并且对其重新进行初始化。作用auto关键字可省略static变量局部变量全局变量静态变量函数调用结束后保留原值register变量内存变量运算器寄存器普通变量register变量速度快extern变量外部存储变量混合运算类型转换10+'a'-1.5+3.2*6char、shortintunsignedlongdoublefloat第4章运算符与表达式01表达式02赋值运算符与赋值表达式03算术运算符与算术表达式04关系运算符与关系表达式05逻辑运算符与逻辑表达式06位逻辑运算符与位逻辑表达式07逗号运算符与逗号表达式08复合赋值运算符表达式表达式表达式操作符操作数5+5iNumber+9Height=iBase+(iPay*iDay)赋值运算符与赋值表达式赋值运算符等号=iAge=20;Total=Counter*3;变量赋初值
在声明变量时,可以为其赋一个初值,就是将一个常数或者一个表达式的结果赋值给一个变量,变量中保存的内容就是这个常量或者赋值语句中表达式的值。这就是为变量赋初值。intiNumber=100;fBase+Day*3自动类型转换短的数据类型的值长的数据类型的值强制类型转换数据类型A数据类型Bfloati=10.1f;intj=(int)i;强制类型转换(类型名)(表达式)(float)(x+y)算术运算符与算术表达式算数运算符符号功能符号功能+单目正%取模-单目负+加法*乘法-减法/除法算数表达式
在表达式中使用算术运算符,则将表达式称为算术表达式。Number=(3+5)/Rate;Height=Top–Bottom+1;Area=Height*Width;算术运算符的优先级
在表达式求值时,先按照运算符的优先级别高低次序执行,算术运算符中*、/、%的优先级别高于+、-的级别。R=x+y*z;R=(x+y)
*z;算术运算符的结合级
当算术运算符的优先级相同时,结合方向为“自左向右”。a–b+c自增/自减运算符自增运算符:++自减运算符:--
a++++aa先参与运算,再加1a先加1,再参与运算关系运算符与关系表达式关系运算符符号功能符号功能>大于<=小于等于>=大于等于==等于<小于!=不等于关系表达式
关系运算符用于对两个表达式的值进行比较,返回一个真值或者假值。返回真值还是假值取决于表达式中的值和所用的运算符。其中真值为1,假值为0,真值表示指定的关系成立,假值则表示指定的关系不正确。7>57>=57<57<=57==57!=5优先级与结合性
关系运算符的结合性都是自左向右的。if(Number=NewNum!=10){ …}
if((Number=NewNum)!=10){ …}
逻辑运算符与逻辑表达式逻辑运算符逻辑运算符根据表达式的真或者假属性返回真值或假值。符号功能&&逻辑与||逻辑或!单目逻辑非逻辑表达式Result=Func1&&Func2;Result=Func1||Func2;Result=!Func2;逻辑运算符的优先级!&&||
“&&”和“||”是双目运算符,它们要求有两个操作数,结合方向自左至右
“!”是单目运算符,要求有一个操作数,结合方向自左向右。位逻辑运算符与位逻辑表达式位逻辑运算符符号功能&位逻辑与|位逻辑或^位逻辑非~取补位逻辑表达式
在程序中,位逻辑运算符一般被程序员用作开关标志。较低层次的硬件设备驱动程序,经常需要对输入/输出设备进行位操作。if(Field&BITMASK)逗号运算符与逗号表达式逗号表达式表达式1,表达式2,…,表达式nValue=2+5,1+2,5+7;Value=(2+5,1+2,5+7);复合赋值运算符复合赋值运算符Value=Value+3;Value+=3;第5章常用的数据输入/输出函数01语句02字符数据输入/输出03字符串输入/输出04格式输出函数05格式输入函数06顺序程序设计应用语句语句C语言的语句用来向计算机系统发出操作指令。一条语句编写完成经过编译后产生若干条机器指令。实际程序中包含若干条语句,因此语句的作用就是完成一定的操作任务。字符数据输入/输出字符数据输出putchar('A');putchar('\101');putchar字符转义字符A、字符型变量、整型变量、常量字符数据输入cChar=getchar();getchar字符getchar字符字符putchar字符串输入/输出字符串输出函数putsputs(“ILOVECHINA!”);字符串“\0”为结束符
puts("ILOVE\0CHINA!");结束符输出结果:ILOVE字符串输入函数gets(cString);gets格式输出函数printf格式输出函数printf(格式控制,输出列表)普通字符格式字符格式字符功能说明d,i以带符号的十进制形式输出整数(整数不输出符号)o以八进制无符号形式输出整数x,X以十六进制无符号形式输出整数。用x输出十六进制数的a~f时以小写形式输出;用X时,则以大写字母输出u以无符号十进制形式输出整数c以字符形式输出,只输出一个字符s输出字符串f以小数形式输出e,E以指数形式输出实数,用e时指数以“e”表示,用E时指数以“E”表示g,G选用“%f”或“%e”格式中输出宽度较短的一种格式,不输出无意义的0。若以指数形式输出,则指数以大写表示printf格式输出函数printf(格式控制,输出列表)变量表达式intiInt=10;printf("thisis%d",iInt);例普通字符格式字符格式输入函数scanf格式输入函数scanf(格式控制,输出列表)scanf("%d",&iInt);取地址符顺序程序设计应用顺序程序设计例将一个输入的大写字符转换成小写字符选择结构程序设计01if语句02if语句的基本形式03if的嵌套形式04条件运算符05switch语句06if…else语句和switch语句的区别07选择结构程序应用if语句if语句判断if语句if语句的基本形式if语句形式if(表达式){
语句块}if(iSignal==1){printf("theSignalLightis%d:\n",iSignal);printf("Carscanrun");}if语句中的易错点if(value=0){…}if(value==0){…}赋值等于if…else语句形式if(表达式){
语句块1;}else{
语句块2;}if(value){printf("thevalueistrue");}else{printf("thevalueisfalse");}elseif语句形式if(表达式1){
语句1}elseif(表达式2){
语句2}…elseif(表达式m){
语句m}else语句nelseif语句形式if(iSelection==1){…}elseif(iSelection==2){…}elseif(iSelection==3){…}else{…}if的嵌套形式if的嵌套形式if(表达式1){if(表达式2) {语句块1}else {语句块2}}else{if(表达式3) {语句块3}else {语句块4}}条件运算符条件运算符if(a>b){max=a;}else{max=b;}?:max=(a>b)?a:b;表达式1?表达式2:表达式3;switch语句switch语句的基本形式switch(表达式){case情况1:
语句块1;case情况2:
语句块2;…case情况n:
语句块n;default:
默认情况语句块;}表达式语句块1语句块2语句块n默认语句...情况1情况2情况n默认情况switch语句的基本形式switch(selection){case1: printf("ProcessingReceivables\n"); break;case2: printf("ProcessingPayables\n"); break;case3: printf("Quitting\n"); break;default: printf("Error\n"); break;}多路开关模式的switch语句switch(表达式){case1:
语句1 break;case2:case3:
语句2 break;…default:
默认语句 break;}if…else语句和switch语句的区别if…else语句和switch语句的区别语法效率选择结构程序应用选择结构程序实例例使用switch语句计算运输公司的计费。路程(km)运费s<250没有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣循环控制01循环语句02while语句03do-while语句04for语句05三种循环语句的比较06循环嵌套07转移语句循环语句循环语句循环的特点是,反复执行某程序段,知道条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。whiledo-whileforwhile语句while语句while(表达式)语句while(iSum<100){iSum+=1;}do-while语句do-while语句do{
循环体语句}while(表达式);do{iNumber++;}while(iNumber<100);for语句for语句使用for(表达式1;
表达式2;
表达式3)for(i=1;i<100;i++){printf("theiis:%d",i);}循环变量赋初值循环条件循环变量增量for语句使用for循环的变体for语句中省略表达式1for(;iNumber<10;iNumber++)for循环的变体for语句中省略表达式2for(iCount=1;;iCount++){sum=sum+iCount;}for循环的变体for语句中省略表达式3for(iCount=1;iCount<50;){sum=sum+iCount;iCount++;}for循环的变体3个表达式都省略for(;;){
语句}while(1){
语句}for循环的变体表达式1为与循环变量赋值无关的表达式for(sum=0;iCount<50;iCount++){sum=sum+iCount;}for语句中的逗号应用for(iSum=0,iCount=1;iCount<100;iCount++){iSum=iSum+iCount;}for(表达式1;
表达式2;
表达式3)逗号表达式for(iCount=1;iCount<100;iCount++,iCount++){iSum=iSum+iCount;}for(iCount=1;iCount<100;iCount=iCount+2)3种循环语句的比较3种循环语句的比较while和do-while循环只在while后面指定循环条件,在循环体中应包含使循环趋于结束的语句(如i++或者i=i+1等);for循环可以在表达式3中包含使循环趋于结束的操作,也可以设置将循环体中的操作全部放在表达式3中。
用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成;而for语句可以在表达式1中实现循环变量的初始化。while循环、do-while循环和for循环都可以用break语句跳出循环,用continue语句结束本次循环。循环嵌套循环嵌套的结构while(表达式){
语句while(表达式){
语句}}do{
语句do{
语句}while(表达式);}while(表达式);while结构中嵌套while结构do-while结构中嵌套do-while结构循环嵌套的结构for(表达式;表达式;表达式){
语句for(表达式;表达式;表达式){
语句}}do{
语句while(表达式);{
语句}}while(表达式);for结构中嵌套for结构do-while结构中嵌套while结构循环嵌套实例例使用嵌套语句打印欢迎界面的边框。转移语句goto语句goto标识符;gotoShow;printf("themessagebeforeShowMessage");Show:printf("ShowMessage");break语句while(1){printf("Break");break;}break;continue语句continue;数组01一维数组02二维数组03字符数组04多维数组05数组的排序算法06字符串处理函数07数组应用一维数组一维数组的定义类型说明符
数组标识符[常量表达式];数组,相同数据类型的元素按一定顺序排列的集合。intiArray[5];一维数组的引用数组标识符[下标]iArray[2];一维数组初始化inti,iArray[6]={1,2,3,4,5,6};定义数组时直接对数组元素赋初值对其中一部分元素进行赋值intiArray[6]={0,1,2};不指定数组长度intiArray[]={1,2,3,4};一维数组应用例使用数组保存学生姓名。二维数组数据类型
数组名[常量表达式1][常量表达式2];二维数组的定义intarray[3][4];行下标列下标array[0][0]array[0][1]array[0][2]array[0][3]array[0][0]array[0][1]array[0][2]array[0][3]array[0][0]array[0][1]array[0][2]array[0][3]二维数组的引用array[1][2];intarray[2][4];…array[2][4]=9;数组名[下标][下标];二维数组初始化intarray[2][2]={1,2,3,4};intarray[][3]={1,2,3,4,5,6};inta[2][3]={{1,2,3},{4,5,6}};inta[2][3];a[0][0]=1;a[0][1]=2;二维数组应用例
打印趣味俄罗斯方块的游戏窗口,并设置左右下横框上有图案。字符数组字符数组的定义char数组标识符[常量表达式]charcArray[5];字符数组的引用cArray[0]='H';cArray[1]='e';cArray[2]='l';cArray[3]='l';cArray[4]='o';字符数组的初始化charcArray[5]={'H','e','l','l','o'};逐个字符赋给数组中各元素如果在定义字符数组时进行初始化,可以省略数组长度charcArray[]={'H','e','l','l','o'};字符数组的初始化charcArray[]={"Hello"};利用字符串给字符数组赋初值charcArray[]="Hello";字符数组的结束标志charcArray[]="Hello";\0Hello\0charcArray[]={'H','e','l','l','o','\0'};字符数组的输入输出for(i=0;i<5;i++) { printf("%c",cArray[i]);}使用格式符“%c”进行输入和输出charcArray[]="GoodDay!";printf("%s",cArray); 使用格式符“%s”进行输入或输出使用格式符“%s”的注意事项
输出字符不包括结束符“\0”
用“%s”格式输出字符串时,printf函数中的输出项是字符数组名cArray,而不是数
组中的元素名cArray[0]等
如果数组长度大于字符串实际长度,则也只输出到“\0”为止
如果一个字符数组中包含多个“\0”结束字符,则在遇到第一个“\0”时输出就结束字符数组的应用例
计算字符串中单词的个数。多维数组返回语句数据类型数组名[常量表达式1][常量表达式2]…[常量表达式n];intiArray1[3][4][5]; //三维数组intiArray2[4][5][7][8]; //四维数组数组的排序算法选择法排序
元素【0】元素【1】元素【2】元素【3】元素【4】起始值第1次第2次第3次第4次排序结果排序过程数组元素9 6 15 4 2296 15 442615 92 461592 4 69152 4 6 9 15冒泡法排序
元素【0】元素【1】元素【2】元素【3】元素【4】起始值第1次第2次第3次第4次排序结果排序过程数组元素9 6 15 4 2222 42 4 62 4 6 9 159 6 15 449 6 15 69159 15交换法排序
元素【0】元素【1】元素【2】元素【3】元素【4】起始值第1次第2次第3次第4次排序结果排序过程数组元素9 6 15 4 22 4 6 9 159615422915642 4 6 15 92 4 6 9 15插入法排序
元素【0】元素【1】元素【2】元素【3】元素【4】起始值第1次第2次第3次第4次排序结果排序过程数组元素9 6 15 4 22 4 6 9 1596 96 9 15 4 6 9 15 折半法排序
元素【0】元素【1】元素【2】元素【3】元素【4】起始值第1次第2次第3次第4次排序结果排序过程数组元素9 6 15 4 22 4 6 9 159 6 2 4 154 6 2 9 154 2 6 9 152 4 6 9 15排序算法比较选择法排序冒泡法排序交换法排序插入法排序折半法排序n(n-1)/2次比较
交换n-1次1~n2次比较n-1次比较字符串处理函数字符串复制STRCPYstrcpy(目的字符数组名,源字符数组名)字符串连接STRCATstrcat(目的字符数组名,源字符数组名)字符串比较STRCMPstrcmp(字符数组名1,字符数组名2)
字符串1=字符串2,返回值为0
字符串1>字符串2,返回值为正数
字符串1<字符串2,返回值为负数字符串大小写转换strlwr(字符串)STRLWRstrupr(字符串)小写字母大写字母大写字母小写字母STRLEN获得字符串长度strlen(字符数组名)strupr数组应用反转输出字符串输出系统日期和时间例
设计一个应用程序,当用户输入命令字符“0”时显示帮助信息,输入命令字符“1”时显示系统日期,输入命令字符“2”时显示系统时间,输入命令字符“3”时退出系统。密码:字符串的加密和解密mrsoft密码:@#$#^&函数01函数概述02函数的定义03返回语句04函数参数05函数的调用06内部函数和外部函数07局部变量和全局变量08函数应用函数概述函数主函数..........a函数b函数..............................a函数b函数工程师函数的注意事项主函数不允许被其他函数调用在主函数中实现程序的开始和结束一个C程序必须有,也只能有一个主函数函数的定义函数定义的形式返回值类型
函数名(参数列表){
函数体(函数实现特定功能的过程);}函数头函数体intAddTwoNumber(intiNum1,intiNum2){ intresult; result=iNum1+iNum2; returnresult; }有参函数无参函数返回值类型函数名(){
函数体}voidShowTime() /*函数头*/{printf("It'stimetoshowyourself!");/*显示一条信息*/}函数定义的注意事项不能嵌套定义voidShowTime() {printf("It'stimetoshowyourself!");intAddTwoNumber(intiNum1,intiNum2){ intresult; result=iNum1+iNum2; returnresult; }}函数定义的注意事项不能嵌套定义voidShowTime(){printf("%d\n",AddTwoNumber(3,4));}intAddTwoNumber(intiNum1,intiNum2){ intresult; result=iNum1+iNum2; returnresult; ShowTime();}可以嵌套调用定义和声明返回值类型
函数名(参数列表);intShowNumber(intiNumber);返回语句返回语句return0;立即从所在的函数中退出,即返回到调用的程序中去。返回值返回值intMinus(intiNumber1,intiNumber2){intiResult; /*定义一个整型变量用来存储返回的结果*/iResult=iNumber1-iNumber2; /*进行减法计算,得到计算结果*/returnresult; /*return语句返回计算结果*/}intmain(){intiResult; /*定义一个整型变量*/iResult=Minus(9,4); /*进行9-4的减法计算,并将结果赋值给变量iResult*/return0; /*程序结束*/}函数参数函数参数intAddTwoNumber(intiNum1,intiNum2){ intresult; result=iNum1+iNum2; returnresult; }函数参数形式参数实际参数形式参数与实际参数数组作函数参数数组元素作为函数参数
由于实参可以是表达式形式,数组元素可以是表达式的组成部分,因此数组元素可以作为函数的实参,与用变量作为函数实参一样,是单向传递。数组元素作为函数参数
可以用数组名作为函数参数,此时实参与形参都使用数组名。数组作函数参数可变长度数组作为函数参数voidFunction(iintiArrayName[]);
intiArray[10]; /*定义整型数组*/Function(iArray); /*将数组名作为实参进行传递*/使用指针作为函数参数voidFunction(int*pPoint);
intiArray[10]; /*定义整型数组*/Function(iArray); /*将数组名作为实参进行传递*/main函数的参数main(intargc,char*argv[])函数的调用函数的调用方式函数的调用函数语句调用函数表达式调用函数参数调用Display();/*函数在表达式中,这时AddTwoNum(3,5)位置应该为具体的值*/iResult=iNum3*AddTwoNum(3,5); /*函数在参数中*/iResult=AddTwoNum(10,AddTwoNum(3,5));嵌套调用intmain(){voidDisplay() {printf("IwanttoshowtheNestingfunction");}return0;}voidShowMessage() { printf("TheShowMessagefunction");}
voidDisplay(){ShowMessage();}递归调用内部函数和外部函数内部函数函数内部函数外部函数
定义一个函数,如果希望这个函数只被所在的源文件使用,那么就称这样的函数为内部函数。
使用内部函数,可以使函数只局限在函数所在的源文件中,如果在不同的源文件中有同名的内部函数,则这些同名的函数是互不干扰的。内部函数staticstatic
返回值类型
函数名(参数列表)staticintAdd(intiNum1,intiNum2)外部函数externexternintAdd(intiNum1,intiNum2);局部变量和全局变量作用域{....................}形参变量在此区域,形参变量有效局部变量在一个函数的内部定义的变量是局部变量。intmain(){intiD;for(iD=1;iD<10;iD++){charcD;...}return0;}cD的作用范围iD的作用范围全部变量如果一个变量在所有函数的外部声明,这个变量就是全局变量。#include<stdio.h>inta,b;voidf1(){ ......}floatx,y;intfz(){ ......}main(){ ......}函数应用有关数学的常用函数abs() 求整数的绝对值labs() 求长整数的绝对值fabs() 求浮点数的绝对值sin() 正弦函数cos() 余弦函数tan() 正切函数isalpha() 检测字母isdigit() 检测数字isalnum() 检测字母或数字指针01指针相关概念02数组与指针03指向指针的指针05指针变量作函数参数06返回指针值的函数07指针数组作main函数的参数指针的相关概念地址与指针变量与指针
变量的地址是变量和指针二者之间连接的纽带,如果一个变量包含了另一个变量的地址,则可以理解成第一个变量指向第二个变量。这个“指向”就是通过地址来体现的。因为指针变量是指向一个变量的地址,所以将一个变量的地址值赋给这个指针变量后,这个指针变量就“指向”了该变量。指针变量指针变量的一般形式类型说明*变量名int*a;指针变量指针变量的赋值&变量名;inta;int*p=&a;inta;int*p;p=&a;指针变量指针变量的引用*指针变量指针变量“&”和“*”运算符“&*”和“*&”的区别p=&i;&*q=*p;inta;p=&a;指针自加自减运算
指针的自加自减运算不同于普通变量的自加自减运算,也就是说并非简单地加1减1数组与指针一维数组与指针
当定义一个一维数组时,系统会在内存中为该数组分配一个存储空间,其数组的名称就是数组在内存中的首地址。若再定义一个指针变量,并将数组的首地址传给指针变量,则该指针就指向了这个一维数组。int*p,a[10];p=a;int*p,a[10];p=&a[0];二维数组与指针3行5列的二维数组&a[0][0]既可以看作数组0行0列的首地址,也可以看作二维数组的首地址。&a[m][n]就是第m行n列元素的地址。a[0]+n表示第0行第n个元素的地址。&a[0]是第0行的首地址,当然&a[n]就是第n行的首地址。a+n表示第n行的首地址。字符串与指针
访问一个字符串可以通过两种方式,第一种方式就是前面讲过的使用字符数组来存放一个字符串,从而实现对字符串的操作;另一种方式就是下面将要介绍的使用字符指针指向一个字符串,此时可不定义数组。字符串数组charcountry[5][20]={"China","Japan","Russia","Germany","Switzerland"}
一个数组,其元素均为指针类型数据,称为指针数组。也就是说,指针数组中的每一个元素都相当于一个指针变量。类型名数组名[数组长度]指向指针的指针指向指针的指针类型标识符**指针变量名;int**p;指针变量作函数参数指针变量作函数参数
整型变量、实型变量、字符型变量、数组名和数组元素等均可作为函数参数。此外,指针型变量也可以作为函数参数。返回指针值的函数返回指针值的函数int*fun(intx,inty)
一个函数可以带回一个整型值、字符值、实型值等,也可以带回指针型的数据,即地址。其概念与之前介绍的类似,只是带回的值的类型是指针类型而已。返回指针值的函数简称为指针函数。类型名*函数名(参数表列);指针数组作main函数的参数指针数组作main函数的参数main()main(intargc,char*argv[])结构体和共用体01结构体02结构体数组03结构体指针04包含结构的结构05链表06链表相关操作07共用体08枚举类型结构体结构体、共用体、枚举图书图书编号图书名称作者 出版社
单价 存储量 学生学生编号学生姓名年龄 性别 年级 班级号
intcharxx[]charxx[]charxx[]floatintintcharxx[]intcharintint数组结构体、共用体、枚举结构体的类型的概念结构体成员结构体声明定义引用结构体变量的声明structstruct
结构体名{
数据类型成员名1;
数据类型成员名2;......
数据类型成员名n;};structstu{intnum;charname[20];charsex;floatscore;};结构体变量的定义1.先定义结构体后定义变量structstudentstudent1,student2;结构体变量的定义struct
结构体名{
数据类型成员名1;
数据类型成员名2;......
数据类型成员名n;}变量1,...,变量n;2.定义类型同时定义变量structProduct{charcName[10]; /*产品名称*/charcShape[20]; /*形状*/charcColor[10]; /*颜色*/intiPrice; /*价格*/charcArea[20]; /*产地*/}product1,product2; /*定义结构体变量*/结构体变量的定义struct{
数据类型成员名1;
数据类型成员名2;......
数据类型成员名n;}变量1,...,变量n;3.直接定义变量struct{charcName[10]; /*产品名称*/charcShape[20]; /*形状*/charcColor[10]; /*颜色*/intiPrice; /*价格*/charcArea[20]; /*产地*/}product1,product2; /*定义结构体变量*/结构体注意事项类型和变量是不同的概念,不要混淆。变量可以复制、存取或运算分配内存单位。结构体中的成员,可以单独使用,它的作用相当于普通变量。成员也可以是一个结构体变量。成员名可以与程序中的变量名相同,但二者不代表同一对象。结构体变量的引用printf("%s%s%s%d%s",product1);printf("%s%s%s%d%s",product2);结构体变量名.成员名结构成员运算符product1.cName="Icebox";product2.iPrice=2000;scanf("%s",&product1.cName);student1.birthday.year=1986;student1.birthday.month=12;student1.birthday.day=6;结构体类型的初始化structStudent{charcName[20];charcSex;intiGrade;}student1={"HanXue","W",3}; /*定义变量并设置初始值*/结构体数组结构体数组与数组的区别结构体数组和数组的定义与引用规则是相同的相同点不同点结构体数组中的所有元素为结构体变量普通数组中的所有元素为基本类型变量定义结构体数组struct结构体名{
成员列表}数组名[数组长度];structStudent /*学生结构*/{charcName[20]; /*姓名*/intiNumber; /*学号*/charcSex; /*性别*/intiGrade; /*年级*/}student[5]; /*定义结构体数组*/structStudentstudent[5];/*定义结构体数组*/struct /*学生结构*/{charcName[20]; /*姓名*/intiNumber; /*学号*/charcSex; /*性别*/intiGrade; /*年级*/}student[5]; /*定义结构体数组*/初始化结构体数组struct结构体名{
成员列表;}数组名={初始值列表};structStudent /*学生结构*/{charcName[20]; /*姓名*/intiNumber; /*学号*/charcSex; /*性别*/intiGrade; /*年级*/}student[5]={{"WangJiasheng",12062212,'M',3}, {"YuLongjiao",12062213,'W',3}, {"JiangXuehuan",12062214,'W',3}, {"ZhangMeng",12062215,'W',3}, {"HanLiang",12062216,'M',3}}; /*定义数组并设置初始值*/结构体指针指向结构体变量的指针结构体类型*指针名;structStudent*pStruct;引用成员的方法:1(*pStruct).成员名2pStruct->成员名;指向结构体数组的指针
结构体指针变量不但可以指向一个结构体变量,还可以指向结构体数组,此时指针变量的值就是结构体数组的首地址。结构体指针变量也可以直接指向结构体数组中的元素,这时指针变量的值就是该结构体数组元素的首地址。结构体作为函数参数使用结构体变量作为函数参数voidDisplay(structStudentstu);结构体作为函数参数使用指向结构体变量的指针作为函数参数voidDisplay(structStudent*stu)结构体作为函数参数使用结构体变量的成员作为函数参数Display(student.fScore[0]);包含结构的结构包含结构的结构structstudent /*学生信息结构*/{charname[30]; /*姓名*/intnum; /*学号*/charsex[20]; /*性别*/structdatebirthday; /*出生日期*/}student={"苏玉群",12061212,"女",{1986,12,6}}; /*为结构变量初始化*/链表链表概述数组链表定义固定长度连续性存储空间过长过小头指针数据部分指针部分动态内存分配函数malloc函数calloc函数free函数void*calloc(unsignedn,unsignedsize);voidfree(void*ptr);void*malloc(unsignedintsize);创建动态链表
所谓建立动态链表就是指在程序运行过程中从无到有地建立起一个链表,即一个一个地分配节点的内存空间,然后输入节点中的数据并建立节点间的相连关系。输出链表链表相关操作链表的插入操作链表的删除操作共用体共用体的概念union
共用体名{
成员列表}变量列表;unionDataUnion{intiInt;charcChar;floatfFloat;}variable;共用体变量的引用共用体变量.成员名;variable.iInt;variable.cChar;variable.fFloat;共用体变量的初始化unionDataUnionUnion={97};共用体类型的数据特点
共用体变量中,可以包含若干个成员及若干种类型,但共用体成员不能同时使用。共用体变量中起作用的成员值是最后一次存放的成员值。共用体变量的地址和它的各成员的地址是一样的。不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。枚举类型枚举的概念输
赢星期一星期二星期三星期四星期五星期六星期日#defineUP 1;#defineDOWN 2;#defineLEFT 3;#defineRIGHT 4;上下左右枚举类型的定义enum
枚举标识符{常量列表}enumColors(Red=1,Green,Blue);位运算01位与字节02位运算操作符03循环位移04位段位与字节位与字节
位是计算机存储数据的最小单位。一个二进制位可以表示两种状态(0和1),多个二进制位组合起来便可表示多种信息。整型4个字节32位字符型1个字节8位位运算操作符位运算操作符运算符含义&按位与|按位或~取反^按位异或<<左移>>右移“与”运算符aba&b00001010011189&38&“或”运算符aba|b00001110111117|31|“取反”运算符~25-25~“异或”运算符aba^b000011101110^107^127“左移”运算符<<a=39a左移两位a变成了156“右移”运算符>>a=6a右移两位a变成了10000011000000001循环位移循环位移循环移位就是将移出的低位放到该数的高位或者将移出的高位放到该数的低位循环左移循环位移循环右移位段位段的概念
位段类型是一种特殊的结构类型,其所有成员的长度均是以二进制位为单位定义的,结构中的成员被称为位段。结构结构名{
类型
变量名1:长度;
类型
变量名2:长度;……
类型
变量名n:长度;}structpacked_data{
unsigneda:2;
unsignedb:1;unsignedc:1;unsignedd:2;}data;位段相关说明
因为位段类型是一种结构类型,所以位段类型和位段变量的定义,以及对位段(即位段类型中的成员)的引用均与结构类型和结构变量相同。
一个位段必须存储在一个存储单元(通常为一字节)中,不能跨两个存储单元。如果本单元不够容纳某位段,则从下一个单元开始存储该位段。
在数值表达式中引用位段时,系统自动将位段转换为整型数。ftell函数longftell(文件类型指针)第13章预处理01宏定义02#include指令03条件编译宏定义不带参数的宏定义
宏定义指令#define用来定义一个标识符和一个字符串,以这个标识符来代表这个字符串,在程序中每次遇到该标识符时就用所定义的字符串替换它。宏定义的作用相当于给指定的字符串起一个别名。#define宏名
字符串预处理命令的标志标识符常数、表达式、格式字符串等#definePI3.14159带参数的宏定义#define宏名(参数表)字符串对两个数实现乘法加法混合运算例#include指令#include指令
在一个源文件中使用#include指令可以将另一个源文件的全部内容包含进来,也就是将另外的文件包含到本文件之中。#include使编译程序将另一源文件嵌入带有#include的源文件,被读入的源文件必须用双引号或尖括号括起来。#include"stdio.h"#include<stdio.h>条件编译#if命令#if的基本含义是:如果#if命令后的参数表达式为真,则编译#if到#endif之间的程序段,否则跳过这段程序。#endif命令用来表示#if段的结束。#if常数表达式语句段
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025粮油销售合同范本
- 打字员的劳动合同书
- 印刷品订货合同格式
- 2025房屋商用租赁合同范本
- 2025农机社会化服务作业合同(合同版本)
- 医疗机构采购与供应合同
- 配音演员聘用合同范本
- 探索在线技能培训的新模式
- 指点迷津筑梦未来主题班会
- 技术进口合同范本
- 地铁车站低压配电及照明系统
- 规范性文件备案审查意见反馈表
- 六年级上册数学书苏教版答案
- CDE网站申请人之窗栏目介绍及用户操作手册
- 车班班长工作总结5篇
- 行业会计比较(第三版)PPT完整全套教学课件
- 值机业务与行李运输实务(第3版)高职PPT完整全套教学课件
- 高考英语语法填空专项训练(含解析)
- 42式太极剑剑谱及动作说明(吴阿敏)
- 部编版语文小学五年级下册第一单元集体备课(教材解读)
- 仁爱英语九年级下册单词表(中英文)
评论
0/150
提交评论