版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
"CaseTutorialsofCLanguageProgramming"isbasedondataprocessing《C语言程序设计案例教程》
----基于数据处理目录02第2章简单的数值运算程序设计03第3章逻辑运算与选择结构程序设计01第1章C语言概述及程序设计基础04第4章重复运算与循环结构程序设计目录06第6章指针与字符串数据处理07第7章函数与程序结构优化05第5章数组与批量数据处理08第8章结构体与复杂数据处理目录10第10章文件与大批量数据处理09第9章链表与非连续存储数据处理1.1C语言的发展及特点01021.2C语言程序的基本结构031.3编译预处理1.4程序设计基础041.5VS2019使用方法05第1章C语言概述及程序设计基础1.1.1C语言的发展本书以Visual
studio2019为开发平台进行编程练习1.1.2C语言的特点(一)0102030405C语言是一种结构化语言C语言功能强大,程序运行效率高C语言数据结构丰富C语言运算符丰富C语言简洁、紧凑,使用方便、灵活1.1.2C语言的特点(二)0607080910C语法限制不太严格、程序设计自由度大C语言程序生成代码质量高,程序执行效率高C语言可移植性强C语言允许直接访问物理地址,能进行位操作适合编写嵌入式程序与操作系统等TIOBEIndex:VeryLongTermHistory
Toseethebiggerpicture,pleasefindbelowthepositionsofthetop:10programminglanguagesofmanyyearsback.Pleasenotethattheseareaveragepositionsforaperiodof12months.1.2C语言程序的基本结构【例1.1】一个简单的C程序示例。#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>voidmain() {
printf("这是我的第一个C语言程序!\n");}1.2.1C语言程序的书写基本结构在VS中为了避免早期的C语言中的某些函数认为是不安全的,加上此声明语句可以避免出现编译错误(要求所有程序均增加此行定义,下同)//预处理,文件包含//主函数//调用库函数
【例1.2】已知圆的半径,求圆的周长和面积(ex1_2.cpp)。#include<stdio.h>//预处理,文件包含#definePI3.14159 //预处理,宏定义floatarea(intradius) //计算半径为radius的圆面积函数{ returnPI*radius*radius; //返回圆面积}voidmain(){ intradius; //声明圆半径radius为整型变量 floatcircumferencel,circle_area; //声明周长circumferencel、面积circle_area为单精度浮点型变量 scanf("%d",&radius); //从键盘输入半径 circumferencel=2*PI*radius; //计算周长circumferencel的值 circle_area=area(radius); //计算面积circle_area的值 printf("半径=%d,周长=%5.2f,面积=%5.2f\n",radius,circumferencel,circle_area); //输出圆的半径、周长和面积}1.2.1C语言程序的书写基本结构函数area函数main【例1.2】已知圆的半径,求圆的周长和面积(ex1_2.cpp)。#include<stdio.h>//预处理,文件包含#definePI3.14159 //预处理,宏定义floatarea(intradius) //计算半径为radius的圆面积函数{ returnPI*radius*radius; //返回圆面积}voidmain(){ intradius; //声明圆半径radius为整型变量 floatcircumferencel,circle_area; //声明周长circumferencel、面积circle_area为单精度浮点型变量 scanf("%d",&radius); //从键盘输入半径 circumferencel=2*PI*radius; //计算周长circumferencel的值 circle_area=area(radius); //计算面积circle_area的值 printf("半径=%d,周长=%5.2f,面积=%5.2f\n",radius,circumferencel,circle_area); //输出圆的半径、周长和面积}1.2.1C语言程序的书写基本结构函数area函数main1.编译预处理部分编译预处理部分#开头,它通常又包括文件包含、宏定义与条件编译三种情况。#inclue<文件名>#define标识符
字符串2.函数部分12C语言程序的基本结构:函数返回值类型函数名1(形式参数列表){函数体1}
函数返回值类型函数名2(形式参数列表){函数体2}
intmain(){函数体n}
函数部分2C语言程序的书写结构:函数返回值类型函数名1(形式参数列表){函数体1}
函数返回值类型函数名2(形式参数列表){函数体2}
intmain(){函数体n}
编译预处部分
1特别说明:main()可以放在函数中的任意位置,但通常放在最前或者最后面。
1.2.2C语言程序的逻辑结构1.2.3字符集C语言字符集由字母、数字、空格、标点和特殊字符组成。(1)字母:小写字母a~z,大写字母A~Z,共52个。(2)数字:0~9共10个。(3)下划线:_。(4)空格:(5)其它符号:见下表符号作用符号作用符号作用,逗号运算符()表达式+加号.结构体成员-减号;语句标记[]数组下标标记*乘号#宏定义格式符/除法\转义符{}复合语句%其余数'字符标记&按位与"字符串标记<>文件包含标记|按位或!not(逻辑非)~按位取反=赋值运算?
:条件运算符^按位异或`未给出@未给出$未给出1.2.4标识符在程序中使用的语句功能名、变量名、函数名、数组名、指针名、标号等统称为标识符。1.标识符概述0103正确的:x1a__yabc_defmax_of_groupxyzAx3WhileiF3.示例02标识符只能是字母(A~Z,a~z)、数字(0~9)、下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线。2.标识符的书写规定:错误的:5x1a
y$1abc%defwhile
case
1.2.4标识符在程序中使用的语句功能名、变量名、函数名、数组名、指针名、标号等统称为标识符。1.标识符的分类0403正确的:x1a__yabc_defmax_of_groupxyzAx3WhileiF3.示例02标识符只能是字母(A~Z,a~z)、数字(0~9)、下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线。2.标识符的书写规定:错误的:5x1a
y$1abc%defwhile
case
关键字4.标识符的分类
预定义标识符0102
用户标识符03关键字也称保留字,不得作为它用。如语句命令if、for等系统预先定义的标识符,同样不得作为它用。如库函数名printf等0102一般用来给变量、数组、结构体、函数、或文件等命名。“见名识义”很重要,如area03数据类型关键字(12个)char:字符型double:双精度enum:枚举型。float:浮点型int:整型long:长整型short:短整型signed:有符号struct:结构体union:联合体
unsigned:无符号void:空类型。关键字(keyword)分类介绍:控制语句(12个)for:循环语句。do:循环语句。while:循环语句。break:结束本层循环。continue:结束本次循环。if/else条件语句。goto:无条件跳转switch/case/default:多分支语句。return:返回函数计算结果。0102存储类型(4个)auto:VC6.0中自动变量extern:外部变量register:寄存器变量static:静态变量const:只读变量。其它(4个)
sizeof:计算数据类型长度。typedef:定义一个数据类型名。volatile:说明变量在程序执行中可被隐含地改变031.2.5C语言语句C语言规定:在每一条语句末尾用分号“;”结束。3.语句的表示与功能介绍格式:函数返回值类型函数名(形式参数列表);
用函数定义的第一行后面加;表示,其作用为声明一个函数,以便实现函数的任意位置摆放而不出现函数未定义的编译错误。(1)函数说明0103格式:对已经定义了的变量用关键字extern进行外部变量声明,起到扩展外部变量作用域的作用。如:externintx;(3)变量说明02格式:数据类型关键字变量名标识符;作用:定义一个或多个变量。例如:intx,y;
floatradius,area;(2)变量定义1)说明语句3.语句的表示与功能介绍其一般形式为:
表达式;执行表达式语句就是计算表达式的值。如z=x+y;i++;x+y;(1)表达式语句0103
控制语句用于控制程序的流程,以实现程序的分支、循环和跳转等功能。(3)控制语句02其一般形式为:
函数名(实际参数表);执行一个函数调用功能。(2)函数调用语句2)执行语句①分支结构语句:if/else、switch/case;②循环控制语句:dowhile、while、for;③跳转语句:break、continue、return、goto。3.语句的表示与功能介绍把多个语句用“{}”括起来组成的一个语句块称为复合语句。例如:{
x=y+z;a=b+c;printf(“%d%d”,x,a);}(4)复合语句0405
只有分号“;”组成的语句称为空语句。执行时无功能实现。(5)空语句2)执行语句例如,用空语句作循环体:while(getchar()!='\n');
4.语句的分析模型【例1.3】系统登录:密码输入正确则提示“恭喜!登录成功!”,如果出错只允许两次密码输入出错,第三次密码还是错误便强制退出登录。输入一个字符串,计算其长度lenlen!=6密码正确?出错次数+1设密码长度为6位符号,出错次数置0出错次数<3输出提示,结束出错次数+1出错次数<3输出提示,结束输出提示,结束yesnonoyesnoyes4.语句的分析模型intmain(){
charpassword[20]={0};
inti,j,count=0;i=j=0;
for(i=1;i<=5;i++)
{
printf("请输入6位密码:");scanf("%s",password);j=strlen(password);
if(j!=6)
{count++;printf("密码长度不对,第%d次输入错误!\n",count);
if(count==3)
{
printf("连续3次输入的密码不正确,登录失败!\n");
break;
}
}
else
{
……
}
}
return0;}复合语句for语句if-else语句if语句复合语句程序1.2.6C语言程序的书写约定“见名识义”4.关于标识符号{和}均单独占一行,一行一般只写一个语句2.不要吝啬程序的长度要么放在最前面,要么放在最后面3.主函数main()的位置VisualStudio20101.选用更好的开发环境①/*……*/②//用于注释一行5.适当添加必要的注释保留像VS
2020版本的自动嵌套式的缩进格式,不要随意更改010203040506编译预处理对其中的预处理指令进行处理,并对源代码进行转换汇编程序将高级语言程序转换成汇编语言代码优化程序对程序的代码进行优化处理链接程序将编译后的目标代码与其他目标代码或库文件合并成一个可执行文件编译进行程序的语法分析,生成分析表可执行文件生成可在操作系统(如windows)环境下运行的程序1.3编译预处理C语言由源代码生成可执行程序的过程如下:1.3.1预处理命令分类:(1)文件包含:将源文件中以#include格式包含的文件复制到编译的源文件中,可以是头文件,也可以是其他的程序文件。(2)宏定义指令:#define指令定义一个宏,#undef指令删除一个宏定义。(3)条件编译:根据#ifdef和#ifndef后面的条件决定需要编译的代码。预处理指令:在程序的一行中以符号#开头的指令。1.3.2文件包含1.文件包含的格式#include<文件名>或#include"文件名"例如:#include"stdio.h"//头文件#include<math.h>作用:直接使用已经存在的库函数或用户自己定义的函数,以丰富程序功能,减轻程序员的编程负担,提高编程效率。一个include命令只能指定一个被包含文件,若有多个文件要包含,则需用多个include命令。1.3.3宏定义1.无参宏定义其定义的一般形式为:#define标识符字符串作用:可以用一个“宏名”来代替程序中出现的任何符号串。#include
<stdio.h>#define
PI
3.1415926#define
AREA
PI*r*r#define
M
(x*x+2*x+1)void
main(){
int
r,x; r=3; x=5; printf("%f\n",AREA); printf("%d\n",M*2);}printf("%f\n",3.1415926*r*r);printf("%d\n",(x*x+2*x+1)*2);宏替换1.3.3宏定义#include
<stdio.h>#define
P
printf#define
D
"%d
"
//%d输出整型变量的格式符#define
F
"%f\n"
//&f输出浮点数型变量的格式符void
main(){
int
a=5,c=8,e=11;
float
b=3.8,d=9.7,f=21.08;
P(D
F,a,b);
P(D
F,c,d);
P(D
F,e,f);}宏定义也可以用来定义程序中多次使用的符号串或格式符,以减少敲代码的数量printf(“%d”%f\n”,a,b);printf(“%d”%f\n”,c,d);printf(“%d”%f\n”,e,f);宏替换1.3.3宏定义2.带参宏定义C语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。带参宏定义的一般形式为:
#define宏名(形参表)字符串带参宏调用的一般形式为:
宏名(实参表);如:
#defineM(y)y*y+2*y//宏定义宏定义也可以用来定义程序中多次使用的符号串或格式符,以减少敲代码的数量k=5*5+2*5;s=a+b*a+b+2*a+b;宏替换宏调用:
k=M(5);
s=M(a+b);
带参数的宏使用不当具有一定的隐患!!!1.3.3宏定义使用不当的宏:2+3*3+4宏替换解决办法:
#define
SQUARE(a,b)
a*b带参数的宏使用不当具有一定的隐患!建议:慎用!!!#include
<stdio.h>#define
SQUARE(a,b)
a*bvoid
main(){ printf("正方形1的面积:%d\n",SQUARE(2,3)); printf("正方形2的面积:%d\n",SQUARE(2+3,3+4));}1.3.4条件编译作用:可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的:1.格式1#ifdef标识符程序段1#else程序段2#endif功能:根据标识符已定义的情况进行编译2.格式2#ifndef标识符程序段1#else程序段2#endif功能:根据标识符未定义的情况进行编译3.格式3#if常量表达式程序段1#else程序段2#endif功能:根据常量表达式的值进行编译1.3.4条件编译#include
<stdio.h>#define
PI
3.14159#define
R
1
//常量定义,用于条件编译void
main(){
float
c,area,square;
//定义输入变量c,圆的面积area,矩形面积square printf("inputanumber:
"); scanf("%f",&c);#if
R
//根据R的值决定对if后面的程序段进行编译
area=PI
*c*c;
printf("圆面积是:%f\n",area);#else
square=c*c;
printf("矩形面积是:%f\n",square);#endif}#define
R
01.4程序设计基础
尼克劳斯-埃米尔-沃思(NiklausEmilWirth),Pascal的创造者,图灵奖获得者,计算机历史博物馆研究员,于2024年1月1日去世,享年89岁。他1975年出版的书名为《算法+数据结构=程序》,(Algorithm+DataStructures=Programs),凭借他提出的著名公式:"算法+数据结构=程序,于1984年获得了图灵奖"。1.4.1算法基本概念
1.算法的定义
算法(algorithm)是对特定问题求解的步骤的一种具体描述,算法是指令的有限序列,其中每一条指令表示一个或是多个操作,用于解决某个实际问题;所以算法也是指解决问题的方法和步骤。
2.程序
算法(algorithm)+数据结构=程序。2.算法的特征一个算法有零个或多个输入,这些输入取自于某个特定的对象集合。输入算法中每一条指令必须有确切的含义,使用者理解时不存在二义性。确定性描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。可行性就是用有限个步骤在有限的时间内解决某个特定的问题有穷性一个算法有一个或多个输出,这些输出是同输入有着某些特定关系的量。输出3.算法的设计要点效率指的是算法执行的时间,对于一个问题,执行时间短算法效率高。高效率算法主要是为了让人阅读和交流,其次才是机器执行可读性当输入非法时,算法也能适当地做出反应或进行处理,而不会出错健壮性算法应该能够正确地解决求解问题正确性存储量需求指算法执行过程中所需要的最大存储空间。低存储4.算法效率的度量在设计之初先分析算法所需要的时间与空间事前分析程序运行后统计其所消耗的时间与空间事后统计一个用高级程序语言编写的程序在计算机上运行时所消耗的时间取决于下列因素:l依据的算法选用何种策略;l问题的规模;l书写程序的语言,对于同一个算法,实现语言的级别越高,执行效率就越低;l编译程序所产生的机器代码的质量;l机器执行指令的速度。一般较少使用,原因是这种方法有两个缺陷:一个是必须先运行依据算法编制的程序;另一个是所得时间的统计量依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法本身的优劣。4.算法效率的度量度量算法所需要的空间S(n)=O(f(n))(1)空间复杂度度量算法所需要的时间T(n)=O(f(n))(1)时间复杂度O(1)<O(log₂n)<O(n)<O(nlog₂n)<O(n²)<O(n³)<O(2ⁿ)<O(n!)<O(nⁿ)空间复杂度一般为O(1)、O(n)、O(n2)和O(n3)1.4.2算法的表示•优点:简单,便于阅读。•缺点:无统一的标准,文字冗长,容易出现歧义。1.用自然语言表示【例1.13】用自然语言描述计算并输出x、y、z三个数中最大者的算法。算法如下:S1.输入变量x,y,z;S2.比较x与y,将其较大的数存放到t中;S3.比较t与z,将其较大的数存放到max中;S4.输出max;1.4.2算法的表示•伪代码是用介于自然语言与计算机语言之间的文字和符号来描述算法。它无固定的、严格的语法规则,书写格式自由,且易于修改,要求表达清楚。2.用伪代码表示例1.14】用伪代码表示计算t=5!的算法。begin(算法开始)t⇐1i⇐2whilei≤5{
t⇐t*ii⇐i+1}printftend(算法结束)1.4.2算法的表示•图形表示算法,直观形象,易于理解美国国家标准化协会ANSI规定了一些常用的流程图符号。3.用流程图表示处理框虚线起止框
判断框流程线连接符输入/输出框注解用上面的基本图形符号可以构造任意复杂的算法结构三种基本结构:顺序结构、分支结构、循环结构的流程图表示:顺序结构分支结构多分支结构死循环结构当型循环结构直到型循环结构【例1.15】画出求1+2+3+…+100的流程图。1.4.2算法的表示•算法的每一步都用一个矩形框描述,按执行次序连接起来就是一个完整的算法描述,这种描述方法被称为N-S图。4.N-S图表示N-S流程图用以下流程图符号
(A)顺序结构
(B)选择结构
(C)当型循环
(D)
直到型循环【例1.15】用N-S图画出求1+2+3+…+100的算法图。s←0,i←1
当i≤100成立s←s+ii←i+1输出s的值s←0,i←1【例1.15-1】用N-S图画出求1…100中的素数和的算法图。s←0,i←1
当i≤100成立i是素数s←s+i输出s的值s←0,i←1i←i+1空yesno1.4.2算法的表示•用程序设计语言表示算法时,必须遵循该程序设计语言的语法规则,要求比较严格,一般不常用其表示算法。5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年云南省腾冲市高三生物下册期末考试模拟考试卷(含答案)
- 2026年河南省灵宝市高三生物下册期末考试模拟试卷及参考答案
- 2026年江苏省江阴市高三生物下册期末考试模拟测试卷含答案
- 2026年湖南省湘乡市高一化学上册期末考试检测卷含答案【研优卷】
- 2026年黑龙江省北安市高三生物上册期末考试考试卷(含答案)
- 2026年河北省深州市高三生物上册期末考试模拟考试卷含答案
- 2026年吉林省桦甸市高三物理下册期末考试模拟考试卷(含答案)
- 2026年河北省定州市高一化学上册期末考试模拟试卷含答案AB卷
- 2026年吉林省珲春市高三生物上册期末考试模拟卷(含答案)
- 2026年辽宁省北镇市高一化学上册期末考试模拟试卷(网校专用)附答案
- 南京医科大学-毕业答辩-课件模板
- T/CMEAS 010-2023标准化病人(SP)医学教育项目建设与应用指南
- T/CCCI 001-2024企业文化建设与管理评价标准
- 2025黄山市黄山区仙源镇社区工作者考试真题
- 石材外墙合同范例
- GB/T 44748.1-2024筛分试验第1部分:使用金属丝编织网和金属穿孔板试验筛的方法
- 新中国赞歌 课件 2024-2025学年浙人美版(2024)初中美术七年级上册
- 第三届全国生态环境监测专业技术人员大比武广东省赛试题库(含答案)
- 应用PDCA提高入院宣教的知晓率
- 深静脉血栓(DVT)课件
- QCSG1140022023年电力设备预防性试验规程
评论
0/150
提交评论