C语言程序设计 课件全套 孙英梅 第1-9章 C语言概述-结构体和共用体_第1页
C语言程序设计 课件全套 孙英梅 第1-9章 C语言概述-结构体和共用体_第2页
C语言程序设计 课件全套 孙英梅 第1-9章 C语言概述-结构体和共用体_第3页
C语言程序设计 课件全套 孙英梅 第1-9章 C语言概述-结构体和共用体_第4页
C语言程序设计 课件全套 孙英梅 第1-9章 C语言概述-结构体和共用体_第5页
已阅读5页,还剩292页未读 继续免费阅读

下载本文档

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

文档简介

经典永流传—C语言概述C语言程序设计第一章本章目录01.C语言的发展和特点02.认识简单的C语言程序03.C语言程序的开发环境04.趣味实例与总结1.1C语言的发展和特点了解C语言的前世今生与核心魅力C语言的的产生和发展-诞生背景机器语言计算机直接识别的二进制代码,执行效率最高。但晦涩难懂,完全不适合人类阅读和编写,维护成本极高。汇编语言使用助记符代替机器指令,改善了可读性。但仍与硬件架构紧密相关,可移植性差,编程效率依然受限。时代需求迫切需要一种既易于学习使用,又能直接操作硬件、执行效率高的通用语言。C语言正是在这样的背景下应运而生。C语言的的产生和发展-发展历程1967年剑桥大学的MartinRichards开发了BCPL语言,为后续语言奠定了基础。1970年贝尔实验室的KenThompson设计出了更简单的B语言,用于开发UNIX系统。1972年DennisRitchie在B语言基础上克服缺点,设计出了经典的C语言。1977年发表不依赖具体机器的编译程序,提升了可移植性,C语言开始全球传播。C语言的特点简洁紧凑,灵活方便仅有32个关键字和9种控制语句,语法简洁。程序书写格式自由,主要使用小写字母,易于学习和书写。运算符丰富拥有34种运算符,将括号、赋值、强制类型转换等均作为运算符处理,能实现复杂的运算和表达。数据类型丰富支持整型、实型、指针、结构体等多种类型。特别是指针的引入,极大地提高了程序的灵活性和效率。结构化语言采用结构化程序设计思想,程序各部分相互独立,层次分明,便于模块化设计、阅读、维护和调试。C语言的特点语法限制少,自由度大C语言给予程序员极大的自由度,如不检查数组越界、允许数据类型通用。这带来了灵活性,但也要求程序员更加谨慎。可直接访问物理地址C语言可像汇编一样直接对位、字节和内存地址进行操作,非常适合编写操作系统、驱动程序等底层系统软件。生成代码质量高,执行效率高编译器生成的目标代码质量高,程序执行效率接近汇编语言,远高于其他高级语言,性能优势显著。适用范围广,可移植性好C语言程序可在Windows、Linux、macOS等多种操作系统和硬件平台上编译运行,具有极好的可移植性。实例体验:1.工作系统设计语言shutdown.c#include<stdlib.h>main(){system("shutdown-s-t1");}代码解析与原理说明这段代码虽然简短,却展示了C语言作为系统级编程语言的核心能力:系统调用:通过system()函数直接调用操作系统的命令行工具(shutdown)。底层控制:实现了对计算机硬件和系统服务的直接控制,体现了语言的高效与底层访问能力。例1-1实现计算机1s后自动关机实例体验:2.应用程序设计语言print_c.c#include<stdio.h>main(){printf("****\n");printf("*\n");printf("*\n");printf("****\n");}代码解析与说明功能演示:该程序通过多次调用printf函数,精确控制星号的输出位置和数量,最终在控制台绘制出字母“C”的图案。核心价值:这展示了C语言不仅是系统级编程语言,同样可以作为应用程序设计语言,实现逻辑控制、数据处理和简单的图形化输出。例1-2用*号输出字母C的图案。1.2认识简单的C语言程序剖析C语言程序的基本结构与规范C语言程序的构成#include<stdio.h>//编译预处理命令main()//主函数{printf("德塑人生技行天下\n");//输出字符串“德塑人生技行天下”;}编译预处理命令以#开头,通常用于引入头文件或宏定义,为编译做准备。程序主体(函数)程序执行的核心逻辑,必须包含main函数作为入口点。注释说明用于解释代码功能,不参与程序编译,提升代码可读性。C语言程序的构成-编译预处理命令基础定义与格式识别特征:以#开头所有以#号开头的代码行,都是编译预处理命令。这是它们最显著的标志。执行时机:编译前处理在程序被正式编译成机器码之前,由预处理器专门处理这些命令。核心应用:#include<stdio.h>功能:文件包含将系统提供的stdio.h头文件内容嵌入到当前程序中,相当于“复制粘贴”。必要性:准备“调料包”该文件声明了printf和scanf等函数。如果不包含它,编译器将不认识这些函数,程序会报错。这就像做菜前准备好调料一样。C语言程序的构成-程序主体(函数)基本单位函数是C语言程序的基石。一个完整的C语言程序由一个或多个函数组成,它们协同工作以实现复杂的功能。main()入口函数程序的执行起点,系统从此开始调用。一个程序必须且只能有一个main()函数。函数分类库函数:开发环境提供的现成工具,如printf()。自定义函数:程序员编写的特定功能模块,如sum()。C语言程序的构成-注释核心作用注释用于对程序进行说明和解释,提高代码的可读性。它是写给开发者看的,不会被编译器处理,也不会影响程序的运行结果。注意事项在双引号括起来的字符串中,`//`和`/*`不会被当作注释,而是作为字符串的一部分被原样输出。单行注释(//)//这是一个单行注释//特点:以双斜杠开始,作用范围至本行结束块注释(/*...*/)/*这是一个块注释*///特点:可以跨越多行,常用于大段说明C语言程序的编写规范1)

C语言程序书写格式灵活,一般是一行写一个语句,也可以一行写几个语句,还可以一个语句写几行。2)每个语句以分号(;)结束。3)严格区分大小写,程序中常用小写字母。4)花括号必须成对使用,花括号中的内容常用缩进格式书写。5)

在书写程序中可使用/*…*/对任何部分注释,以增强程序的可读性。规范小贴士分号是C语言语句的组成部分,不可缺少。注意:一个语句没有结束,在换行前不要加分号。C语言编译器中对符号全角(中文)、半角(英文)有着严格的要求,在C语言的程序中,出现的所有符号均应为半角符号,全角符号会报错,如分号应为“;”,不能写成“;”。C语言程序的特点1)C语言程序主要由若干函数构成。每一个C语言程序有且只有一个main()函数。一个C语言程序总是从main()处开始执行,与main()函数在源程序中的位置无关。C语言程序主要由函数构成,这种特点有利于实现程序的结构化。2)每个函数总是以“{”开始,以“}”结束,花括号必须成对出现。3)C语言程序书写格式自由,一个语句可以占多行,一行也可以有多个语句。4)语句和数据定义后必须要有分号,例如“c=a+b;”。5)C语言没有输入/输出语句,而是使用函数进行输入/输出,例如scanf()、printf()。6)注释以“/*”开始,以“*/”结束。实例体验#include<stdio.h>intmax(intx,inty){intz;if(x>y)z=x;elsez=y;returnz;}intmain(){inta,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf("max=%d\n",c);}例1-3输出一行信息main(){printf(“ThisisaCProgram.\n”);}例1-4求两个数中较大者1.3C语言程序的开发环境了解C语言程序从编写到运行的完整流程C语言程序开发流程01编辑源程序使用文本编辑器(如VSCode)编写源代码,保存为.c后缀文件。02编译利用编译器(如GCC)将代码翻译为机器码,生成.obj目标文件。编译是把高级语言变成计算机可以识别的二进制语言。03链接链接器将目标文件与库文件(如printf实现)合并,生成.exe可执行文件。04运行在操作系统环境中执行生成的.exe文件,观察并验证程序运行结果。流程图

常见C语言开发环境VisualStudio(VS)微软开发的功能最强大、最全面的IDE,对C/C++有原生且优秀的支持,适合各种规模的项目开发。Dev-C++轻量级、安装包小、界面简洁,非常适合C语言初学者快速上手,降低入门门槛。Code::Blocks开源、免费、跨平台的IDE,配置灵活,插件丰富,性能表现也相当不错。VSCode+插件轻量级编辑器,通过安装插件和编译器可打造高度可定制的开发环境,深受开发者喜爱。实例体验-Dev-C++5.11的安装1)下载Dev-C++5.11安装包,双击运行下载好的“Dev-C++5.11.exe”安装程序。在弹出的安装语言选择窗口中,单击语言列表选择需要的语言,然后单击“OK”按钮确定安装语言。实例体验-Dev-C++5.11的安装2)在弹出的许可证窗口中,直接单击“IAgree”按钮同意安装许可。实例体验-Dev-C++5.11的安装3)在弹出的组件选择窗口中,安装类型选择“Full”(默认值),然后单击“Next”按钮进入下一步。实例体验-Dev-C++5.11的安装4)

在弹出的选择安装位置窗口中,可以单击“Browse”按钮,选择新的安装位置后,单击“Install”按钮开始安装。5)等待Dev-C++安

后,

框,

留“RunDev-C++5.11”复选框,然后,单击“Finish”按钮完成安装。实例体验-Dev-C++5.11的安装6)

当Dev-C++首次运行时,会弹出首次运行配置窗口,在该窗口中,选择语言为“简体中文/Chinese”(这里又有中文了),然后单击“Next”按钮进入下一步。7)在弹出的主题选择窗口中,可以选择编辑器的字体、颜色和图标,通常保留默认即可,设置完毕后,单击“Next”按钮进入下一步。实例体验-Dev-C++5.11的安装8)在弹出的Dev-C++已设置成功窗口中,直接单击“OK”按钮完成首次安装配置(见左图

),紧接着会出现Dev-C++的主界面(见右图

)。实例体验-程序运行练习输出“爱国敬业诚信友善”。步骤如下:1)启动Dev-C++5.11,在主界面中,单击菜单栏上的“文件->新建->源代码”菜单,创建一个新的文件,如图1-12所示。。实例体验-程序运行练习2)在编辑窗口中输入或修改C语言程序。#include<stdio.h>main(){

printf("爱国敬业诚信友善\n");}3)单击菜单栏“文件->保存”,弹出“保存为”对话框,选择存储位置,输入文件名“ex1”,设置保存类型为“Csourcefiles(*.c)”。4)单击菜单栏“运行->编译”,或者按下快捷键F9或单击工具按钮

。在消息窗口中的“编译日志”页显示编译结果信息,如图

所示。实例体验-程序运行练习5)单击菜单栏“运行->运行”,或者按下快捷键F10或单击工具按钮

,若源程序编译无错误,将弹出运行结果,如图

所示。1.4趣味实例:C语言的运行环境和运行过程了解C语言运行环境和运行过程趣味实例实训目的1.学习C语言的运行环境,了解所用的计算机系统的基本操作方法,学会独立使用该系统。2.了解在该系统上如何编辑、编译、链接和运行一个C语言程序。3.通过运行简单的C语言程序,初步了解C语言源程序的特点。实训内容1.熟悉Dev-C++的启动以及工作环境。2.在Dev-C++环境中运行C语言源程序。趣味实例实训过程voidmenu(){system("cls");//清屏

printf("\n\n\n");

printf("\t\t\t*******************************\n");

printf("\t\t\t

\n");

printf("\t\t\t学生成绩管理系统\n");

printf("\t\t\t

\n");

printf("\t\t\t

[1]查看所有学生信息\n");

printf("\t\t\t

[2]输入学生记录\n");

printf("\t\t\t

[3]删除学生记录\n");

printf("\t\t\t

[4]修改学生记录\n");

printf("\t\t\t

[5]查询学生成绩(学号)

\n");

printf("\t\t\t

[6]查询学生成绩(姓名)

\n");

printf("\t\t\t

[7]查看成绩排序(学号)

\n");

printf("\t\t\t

[0]退出\n");

printf("\t\t\t

\n");}}1.安装并启动Dev-C++。2.输入下面程序段。#include<stdio.h>#include<stdlib.h>voidmenu();main(){charc1,c2;printf("\n\n\n按回车键返回主菜单...");scanf("%c%c",&c1,&c2);//第一个字符接收上一行的回车键menu();}本章小结程序的基石—基本数据类型及表达式C语言程序设计第二章本章目录01.基本数据类型和标识符02.常量03.变量04.运算符和表达式05.常用的数学函数06.趣味实例2.1基本数据类型和标识符程序世界的砖瓦与命名规则C语言的基本数据类型在现实生活中会遇到不同类型的数据,有整数、实数、单个字符和字符串等。C语言把这些数据类型定义为整型、浮点型、字符型和字符串型等,例如123、7.56、1.35e6、'a'、"工匠精神"分别属于不同的数据类型,其中,123是整型常量,7.56和1.35e6是浮点型常量,'a'是字符常量,"工匠精神"是字符串常量。C语言的基本数据类型见下表:标识符类型名称占用字节数表示范围short短整型2int或

long长整型4char字符型10~

255float浮点型(实型)4double双精度浮点型8说明:

C语言的基本数据类型标识符什么是标识符?所谓标识符,指的是编程人员在编写程序时自己规定的具有特定含义的词,用来标明设定的变量名、数组名、函数名等。简单来说,就是我们给程序中的各种元素起的“名字”。必须遵守的命名规则只能由字母、数字和下划线组成,且第一个字符必须是字母或下划线。严格区分英文字母大小写,例如score和Score是两个不同的标识符。不能使用C语言的关键字作为标识符。标识符示例与命名规范合法标识符示例student_name(见名知意,使用下划线)age(简单明了,单个单词)_score(以下划线开头,常用于私有变量)PI(全大写字母,通常表示常量)非法标识符示例123abc(以数字开头,规则不允许)myname(包含空格,属于非法字符)float(使用了编程语言的关键字)stu-name(包含非法字符'-'减号)推荐命名规范见名知义拒绝使用无意义的x,y。例如用user_id代替a,使代码更具可读性。规避易混淆字符不单独使用字母“l”(小写L)和“o”(小写O)作为标识符,防止与数字“1”和“0”混淆。长度合规性

C语言标识符无理论长度限制,但受编译器/系统实际限制(如早期编译器仅识别前8个字符),命名时需兼顾长度适中与编译器兼容性。实例体验例2-1在Dev-C++中使用sizeof体验不同数据类型的字长#include<stdio.h>main(){printf("%d\n",sizeof(short));printf("%d\n",sizeof(int));printf("%d\n",sizeof(long));printf("%d\n",sizeof(char));printf("%d\n",sizeof(float));printf("%d\n",sizeof(double));}代码解析与说明该程序通过sizeof运算符获取short、int等6种C语言基本数据类型的内存字节数,经printf输出,直观地展示不同类型的内存占用情况,结果随系统位数略有差异。2.2常量程序运行中值不能改变的量常量常量是指在程序运行过程中其值保持不变的量,分为直接常量和符号常量。直接常量包括整型常量、实型常量、字符常量和字符串常量。例如:整型常量:15、-8、0。实型常量:3.7、-8.2、58.12E-2。字符常量:'a'、'A'、'+'、'5'。字符串常量:"thisisaboy."、"a"、"123"。符号常量定义与格式定义:用标识符代表常量,一般用大小字母表示。格式:#define标识符常量示例:#definePI3.14159主要优点一改全改修改#define处的值,程序中所有引用自动更新。代码实战示例#definePRICE50#include<stdio.h>main(){intnum,total;num=10;total=num*PRICE;printf("total=%d\n",total);}例2-2:运用符号常量表示某商品的单价,编程计算10个该商品的总价。整型常量十进制整数由数字0-9组成,不能以0开头(数字0本身除外)。示例:123,-45,0八进制整数以数字0开头,由数字0-7组成。示例:0123(83),045(37)十六进制整数以0x或0X开头,由数字0-9和字母a-f组成。示例:0x1A(26),0XFF(255)长整型整数long型,十进制,以字母l或L结尾。示例:0L,12345L注意事项:任何类型的数据在计算机中都是以二进制补码形式存储的。正数的补码和该数的原码(该数的二进制形式)相同,负数的补码是将该数的绝对值的二进制形式按位取反再加1,即原码的反码加1得到。实型常量十进制形式由数字和小数点组成,小数点前后至少有一边有数字。

示例:3.14,-0.55.(等价于5.0).6(等价于0.6)指数形式(科学记数法)格式:尾数e/E指数(表示尾数×10^指数)示例:1.23e4(即12300)3.6E-2(即0.036)注意事项:字母e或E前后必须有数字,且指数部分必须是整数。字符型常量与字符串常量字符常量定义:单引号括起的单个字符,如'a','5','#'转义字符:以反斜杠开头,如\n(换行),\t(制表),\\(反斜杠)字符串常量定义:双引号括起的字符序列,如"Hello","Clanguage"特性:末尾自动添加结束符\01)字符由单引号括起来,字符串由双引号括起来。2)字符只能是单个字符,字符串则可以含一个或多个字符。3)可以把一个字符赋予一个字符型变量,但不能把一个字符串赋予一个字符型变量。4)字符占一个字节的内存空间。二者的区别:转义字符一种特殊形式的字符型常量,就是以一个字符“\”开头的字符序列,如\n(换行),\t(制表),\\(反斜杠)。转义字符具有特定的含义,不同于字符原有的意义,故称转义字符。转义字符主要用来表示那些用一般字符不便于表示的控制代码。常用的转义字符及其含义见右表。转义字符转义字符的含义+ASCII代码\n回车换行10\t横向跳到下一制表位置9\b退格8\r回车13\f走纸换页12\\反斜线符“\”92\'单引号符39\"双引号符34\a鸣铃7\ddd1~3位八进制数所代表的字符

\xhh1~2位十六进制数所代表的字符实例体验#include<stdio.h>main(){putchar('c');putchar('h');putchar('a');putchar('r');putchar('\n');putchar('i');putchar('n');putchar('t');}例2-3符号常量的使用#definePI3.14//定义符号常量PI#include<stdio.h>main(){floatarea,len,r;printf("请输入半径的值:");scanf("%f",&r);area=PI*r*r;len=2*PI*r;printf("半径R=%f,面积S=%f,周长L=%f\n",r,area,len);}例2-4单个字符常量的输出实例体验例2-5转义字符的使用#include<stdio.h>main(){inta,b,c;a=5;b=6;c=7;printf("abc\tde\rf\n");printf("hijk\tL\bM\n");}2.3变量程序运行中值可以改变的量变量的定义与初始化定义格式与示例格式:类型说明符变量表;inta,b,c;//定义三个整型变量floatx;//定义一个实型变量charch;//定义一个字符型变量变量的定义需要注意以下几点:1)每个变量定义语句都必须以分号结尾。2)每一个变量一经定义,就有一种确定的类型,在编译时就能为其分配相应的存储单元。3)每一个变量都有一个名字,在内存中占据一定的存储单元。变量的定义与初始化先定义后初始化先定义变量,然后再进行赋值或是等到需要赋值的时候再赋值。inta,b,c;a=3;b=c=5;注意:1)变量的初始化实际上是一个赋值语句。2)在定义变量的时候,可以只给部分变量赋值。3)

如果同时对几个变量赋相同的初值,应该注意书写格式。在定义变量时,不能给多个变量用连续赋值的方法赋相同的值,如在上面的例子中,不能改写成“inta,b=c=5;”,但可以改写成“inta,b=5,c=5;”。定义初始化定义变量的同时赋值。inta=3;intb.c=5;整型变量类型分类1)基本整型,用int表示。2)短整型,用shortint表示,或用short表示。3)长整型,用longint表示,或用long表示。以上3类数据都可以加上修饰符unsigned,来指定是“无符号数”。如果加上修饰符signed,则指定是“有符号数”。如果既不指定为signed,也不指定为unsigned,则隐含为有符号的(signed)。存储形式数据在内存中是以二进制形式存放的,如果定义了一个初始值为10的短整型变量i,shortinti=10;它以下面的形式存放在内存中:0000000000001010实型变量类型分类float(单精度):占用4字节,只能提供7位有效数字。double(双精度):占用8字节,可提供16位有效数字。floatprice=9.9f;//建议加f后缀doublepi=3.1415926;存放形式按指数形式存储,系统把一个实型数据分为小数部分和指数部分分别存放。实数3.14159在内存中的存放形式如下:小贴士

小数部分占的位(bit)

数越多,数的有效数字越多,精度越高。指数部分占的位数越多,则能表示的数值范围越大。注意:1)两个实型数据之间不能进行相等比较。2)实数范围内,应当避免将一个很大的数和一个很小的数直接相加或相减,否则可能表达不准确,“丢失”小的数。因为数据位数超出有效数字个数时,超出部分将舍弃,因此会产生一定的误差。字符型变量定义与赋值示例字符型变量本质存储的是ASCII码值。可以直接赋值字符或对应的整数。charch1='a';//存储字符'a'的ASCII码值97charch2=98;//等价于ch2='b'charch3='\n';//存储换行符的ASCII码值10存储形式字符x的ASCII码值是120(十进制表示),y的ASCII码值是121。将字符型变量'x'和'y'赋值给a、b,即“a='x';b='y';”,那么它们在内存中的存储形式为:实例体验#include<stdio.h>main(){shortinta,b;a=32767;b=a+1;printf("%d,%d\n",a,b);}例2-6变量的定义与使用#include<stdio.h>main(){inta=12,b=-24,u;/*定义整型变量a,b,u*/floatd=2.34;/*定义浮点型变量d*/charc='A';/*定义字符型变量c*/u=a+b;/*给变量u赋值*/printf("%d,%c,%f\n",u,c+32,d+3.5);}例2-7整型数据的溢出实例体验#include<stdio.h>main(){chara,b;a='a';b='b';a=a-32;b=b-32;printf("%c,%c\n",a,b);}例2-8实数的四舍五入#include<stdio.h>main(){floata,b;a=123456.789e5;b=a+20;printf("a=%f\n",a);printf("b=%f\n",b);}例2-9大小写字母的转换2.4运算符和表达式程序的运算与逻辑的核心算术运算符注意运算符的优先级共分为15级。1级最高,15级最低;算术运算符两边均为整数时,运算结果仍为整数;若参与运算的两个数中有一个为实数,则结果为double型;若参与运算的运算符优先级相同,则按照规定的结合方向处理。强制类型转换符可以利用强制类型转换符将表达式的运算结果转换成所需类型。一般形式

(类型说明符)(表达式)(float)a;//把a转换为实型(int)(x+y);//把x+y的结果转换为整型赋值运算符和赋值表达式简单赋值“=”将赋值号右边表达式的值赋给左边的变量。a=10;b=a+5;复合赋值运算符结合赋值与算术运算,简化代码书写。a+=5;等价于a=a+5;x*=y+7;等价于x=x*(y+7);r%=p;等价于r=r%p;如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下:1)实型赋予整型,舍去小数部分。2)整型赋予实型,数值不变,但将以浮点形式存放。3)字符型赋予整型,由于字符型为一个字节,而整型为两个字节,故将字符的ASCII码值放到整型量的低8位中,高8位为0。4)整型赋予字符型,只把低8位赋予字符型变量。小贴士自增自减运算符及表达式自增运算(i++/i++)其功能是使变量的值增加1。++i;//i增加1后再参与其他运算i++;//i参与运算后再增加1自减运算(--i/i--)--i;//i减少1后再参与其他运算i--;//i参与运算后再减少1其功能是使变量的值减少1。逗号运算符及表达式C语言中逗号“,”也是一种运算符,称为逗号运算符。其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式,如“3+5,6+8”是一个逗号表达式。一般形式:

表达式1,表达式2其求值过程是分别求两个表达式的值,并以“表达式2”的值作为整个逗号表达式的值。例如

上面的逗号表达式“3+5,6+8”的值为14。除了上述几个运算符和表达式外,还有逻辑运算符、关系运算符以及相应的逻辑表达式和关系表达式,这些内容将在第4章介绍。实例体验#include<stdio.h>main(){floatx;inti;x=3.6;i=(int)x;printf("x=%f,i=%d\n",x,i);}例2-10算术运算符的计算#include<stdio.h>main(){intx,y;x=7;y=3;printf("x+y=%d,x-y=%d\n",x+y,x-y);printf("x*y=%d,x/y=%d\n",x*y,x/y);printf("x%y=%d\n",x%y);}例2-11强制类型转换实例体验#include<stdio.h>main(){inta,c,b=322;floatx,y=8.88;charc1='k',c2;a=y;x=b;c=c1;c2=b;printf("a=%d,x=%f,c=%d,c2=%c\n",a,x,c,c2);}例2-12赋值运算符的使用#include<stdio.h>main(){floatk,x,y;x=(k=9.8)+7;printf("k=%f,x=%f\n",k,x);y=k=9.8+7;printf("k=%f,y=%f\n",k,y);}例2-13赋值运算中的类型转换实例体验#include<stdio.h>main(){ inta=2,b=4,c=6,x,y;x=a+b,y=b+c;printf("y=%d,x=%d",y,x);}例2-14自增/自减运算符和表达式#include<stdio.h>main(){inti=8;printf("%d\n",++i);printf("%d\n",--i);printf("%d\n",i++);printf("%d\n",i--);printf("%d\n",-i++);printf("%d\n",-i--);}例2-15逗号表达式的使用2.5常用的数学函数利用库函数简化数学运算常用数学函数(一)使用前请包含头文件:#include<math.h>函数原型功能说明调用示例fabs(x)计算x的绝对值,x为实型数据fabs(-3.5)→3.5sqrt(x)计算x的平方根(x≥0)sqrt(16)→4.0pow(x,y)计算x的y次方pow(2,3)→8.0exp(x)计算自然指数e的x次方exp(1)→2.71828...log(x)计算x的对数,以e为底(x>0)log(2.71828)→1.0log10(x)计算x的对数,以10为底(x>0)log10(100)→2.0常用数学函数(二)函数原型功能说明示例sin(x)计算x的正弦值(x为弧度)sin(π/2)→1.0cos(x)计算x的余弦值(x为弧度)cos(0)→1.0tan(x)计算x的正切值(x为弧度)tan(0)→0.0abs(x)计算int型整数x的绝对值abs(-5)→5rand()产生0~32767范围内的随机整数注意:三角函数参数为弧度值。如需计算角度,请先转换(弧度=角度×π/180)。实例体验#include<stdio.h>#include<math.h>#definePI3.14main(){floatk;//定义角度变量kk=30;printf("%7.1f\n",sin(k*PI/180));//求角度k的正弦值}例2-16输入一个正数x,求x的二次方根#include<stdio.h>#include<math.h>main(){floatx,y;printf("inputx:");//提示输入xscanf("%f",&x);//从键盘输入xy=sqrt(x);//使用函数求x的二次方根

printf("%f的二次方根是%f\n",x,y);}例2-17三角函数的使用2.6趣味实例—验证表达式综合运用本章知识解决实际问题趣味实例实训目的1.掌握C语言中数据类型的声明、定义、赋值和引用。2.掌握算术运算符、赋值运算符、自增/自减运算符及逗号运算符的使用,学会在C语言环境下用表达式进行计算。3.掌握不同类型数据之间的转换和赋值方法。实训内容1.C语言各种类型常量及变量的定义与使用。2.运算符和表达式的使用。趣味实例实训过程1.启动Dev-C++。2.输入下面程序段。#include<stdio.h>main(){intd;charch;floatfl;unsignedintui;d=sizeof(d);printf("d=%d\n",d);printf("charis%d\n",sizeof(char));printf("floatis%d\n",sizeof(float));printf("unsignedintis%d\n",sizeof(unsignedint));}3.编译运行,查看程序的运行结果。4.新建文件,输入:#include<stdio.h>main(){intnX,nY=5,nZ;charch='A';nZ=nY*2.5;nX=nZ/nY;printf("nX=%dnY=%dnZ=%d\n",nX,nY,nZ);nX=nZ*nY*30.5;nY=nX/ch;nZ=nY+10;printf("nX=%dnY=%dnZ=%d\n",nX,nY,nZ);nX%=9;nZ%=-9;nY=nX*nZ%10;printf("nX=%dnY=%dnZ=%d\n",nX,nY,nZ);}趣味实例5.编译运行,查看程序的运行结果。6.新建文件,输入程序(右侧程序段);7.编译运行,查看程序的运行结果。#include<stdio.h>main(){intm,n,k;m=n=k=-1;++m||++n&&++k;printf("m=%d\tn=%d\tk=%d\n",m,n,k);++m&&++n||k--; printf("m=%d\tn=%d\tk=%d\n",m,n,k);m--&&n--&&++k; printf("m=%d\tn=%d\tk=%d\n",m,n,k);++k||++m&&++n;printf("m=%d\tn=%d\tk=%d\n",m,n,k);++m||++n||++k;printf("m=%d\tn=%d\tk=%d\n",m,n,k);}本章小结必与你同行—顺序结构程序设计C语言程序设计第三章本章目录01.程序设计概述02.简单编程的好助手03.数据输出语句04.数据输入语句05.复合语句和空语句06.顺序结构程序设计07.趣味实例3.1程序设计概述了解程序设计的基本步骤、算法的概念和结构化程序设计思想程序设计的基本步骤需求分析明确需求、输入与输出,这是设计的第一步,也是最关键的一步。算法设计构思解决问题的具体方法和步骤,形成指令的有限序列。编码实现使用编程语言(如C语言)将设计好的算法转换为计算机可执行的代码。测试与调试运行并检查语法与逻辑错误,反复修改直到得到预期结果。整理文档(补充内容)编写说明文档,记录功能、使用方法及设计思路,方便维护。核心流程总结:需求分析→算法设计→编码实现→测试与调试→整理文档算法程序公式数据结构+算法=程序算法vs程序算法抽象的逻辑思想,解决问题的步骤。程序具体的代码实现,算法的物理载体。算法算法是对特定问题求解步骤的一种描述,是指令的有限序列。简单来说,算法就是解决问题的方法和步骤。结构化程序设计和模块化结构结构化设计原则自顶向下逐步细化模块化设计结构化编码三大基本结构顺序结构选择结构(分支)循环结构设计优势逻辑清晰待开发软件划分为若干独立模块易于维护模块工作单纯明确。可靠性高为较大软件打好基础。实例体验:最原始方法:步骤1:先求1×2,得到结果2。步骤2:将步骤1得到的乘积2乘以3,得到结果6。步骤3:将6再乘以4,得24。步骤4:将24再乘以5,得120。例3-1求1×2×3×4×5。改进的算法:步骤1:使t=1。步骤2:使i=2。步骤3:使t×i,乘积仍然放在变量t中,可表示为t×i→t。步骤4:使i的值+1,即i+1→i。步骤5:如果i≤5,返回重新执行步骤3以及其后的步骤4和步骤5;否则,算法结束。实例体验:如果n表示第i个学生学号,n〔i〕表示第i个学生学号,g表示第i个学生成绩,g〔i〕表示第i个学生成绩,则算法可表示如下:步骤1:1→i。步骤2:如果g〔i〕≥80,则打印n〔i〕和g〔i〕,否则不打印。步骤3:i+1→i。步骤4:若i≤50,返回步骤2,否则,结束。例3-2有50个学生,要求将成绩在80分以上的学号和成绩打印出来。实例体验:闰年的条件:①能被4整除,但不能被100整除的年份;②能被100整除,又能被400整除的年份。设y为被检测的年份,则算法可表示如下:步骤1:2000→y。步骤2:若y不能被4整除,则输出“y年不是闰年”,然后转到步骤6。步骤3:若y能被4整除,不能被100整除,则输出“y年是闰年”,然后转到步骤6。步骤4:若y能被100整除,又能被400整除,输出“y年是闰年”,否则输出“y年不是闰年”,然后转到步骤6。步骤5:输出“y年不是闰年”。步骤6:y+1→y。步骤7:当y≤2500时,返回步骤2继续执行,否则结束。例3-3判定2000~2500年中的每一年是否是闰年,将结果输出。3.2简单编程的好助手—流程图学习如何用流程图来描述算法流程图的基本组成元素流程图是用规定的图形、连线和文字说明来表示算法步骤的工具,能够直观展示逻辑流程。起止框(椭圆)表示算法的开始或结束,位于流程的首尾。输入输出框(平行四边形)表示数据的输入或运算结果的输出。处理框(矩形)表示对数据进行的具体处理或运算步骤。判断框(菱形)根据给定条件进行判断,并决定执行路径。流程线与连接点箭头表示执行方向,圆圈用于连接不同位置的流程线。三种基本结构的流程图表示顺序结构特点:各操作步骤按顺序依次执行,流程线单向连接,无分支。选择结构(分支)特点:根据条件P是否成立,选择执行路径A或B,形成逻辑分支。循环结构特点:包括当型(While)和直到型(Do-While),在条件满足时重复执行循环体。实例体验:例3-4有50个学生,要求将成绩在80分以上的学号和成绩输出。流程图如图3-7所示。实例体验:例3-5判断2000—2500年中的每一年是否为闰年并将结果输出。流程图如图3-8所示。3.3数据输出语句掌握putchar和printf函数的使用,实现数据的格式化输出字符输出函数putchar书写形式putchar(c);功能与参数功能:向标准输出设备(显示器)输出一个字符。参数c:可以是字符常量、变量或ASCII码值。代码示例与运行结果#include<stdio.h>main(){charch='A';putchar(ch);//输出'A'putchar('B');//输出'B'putchar(67);//输出ASCII67->'C'putchar('\n');//换行putchar('D');//输出'D'}运行结果:ABCD格式化输出函数printf(一)——常用格式控制书写形式printf(“输出格式串”,表达式列表);常用格式说明符%d:十进制整数%f:浮点数%c:单个字符%s:字符串%x:十六进制%o:八进制代码实战演示#include<stdio.h>main(){inta=100;floatb=3.14;charc='A';printf("整数:%d\n",a);printf("浮点数:%f\n",b);printf("字符:%c\n",c);printf("十六进制:%x\n",a);}功能与参数功能:向标准输出设备输出任意类型数据。参数:输出格式串为格式控制字符串,表达式列表为指定输出的数据。格式化输出函数printf(二)——进阶格式控制宽度与对齐

•宽度:%5d表示占5字符宽度,不足补空格•左对齐:%-5d(默认右对齐,使用'-'号改为左对齐)精度控制•浮点数:%.2f表示保留2位小数(如3.14)•组合使用:%8.2f表示总宽8字符,保留2位小数特殊标志

•+:强制显示正负号(如%+d输出+123)•0:用0填充宽度(如%05d输出00123)代码实战演示#include<stdio.h>main(){inta=123;//整数示例floatb=3.1415926f;//浮点数示例printf("默认输出:%d,%f\n",a,b);printf("宽度5右对齐:%5d\n",a);printf("宽度5左对齐:%-5d\n",a);printf("保留2位小数:%.2f\n",b);printf("显示正负号:%+d,%+f\n",a,b);}实例体验:#include<stdio.h>main(){chara='B',b='o',c='k';

putchar(a);

putchar(b);

putchar(b);

putchar(c);

putchar('\t');

putchar(a);

putchar(b);

putchar('\n');

putchar(b);

putchar(c);}例3-6输出单个字符。例3-7格式输出。#include<stdio.h>main(){inta=88,b=89;floatd=2.7;printf("%d%d\n",a,b);//输出的a、b值之间有一个空格printf("%d,%d\n",a,b); //输出的a、b值之间有一个逗号printf("%c,%c\n",a,b); //按字符型输出a、b值printf("a=%d,b=%d\n",a,b);//增加了非格式字符串a=、b=printf("d=%6.2f\n",d); //输出数据宽度为6,保留两位小数//点,右对齐,不足6位左边补空格printf("d=%e\n",d); //按科学记数法输出} 3.4数据输入语句掌握getchar和scanf函数的使用,实现从键盘获取数据字符输入函数getchar书写形式getchar();常用形式:变量=getchar();功能与参数从标准输入设备(键盘)读取一个字符。无参数。注意事项会读取输入缓冲区中的回车符(\n),混合使用时需注意清空缓冲区。代码示例与运行结果#include<stdio.h>main(){charc;printf("Inputacharacter:");c=getchar();//读取字符putchar(c);}运行结果:Inputacharacter:AA格式化输入函数scanf(一)书写形式与功能形式:scanf(“输入格式串”,地址列表);功能:从标准输入读取数据,按格式存储到指定的变量中。关键参数解析输入格式串:格式控制字符串(%d,%f,%c,%s)地址列表:变量的地址0(必须使用取地址符&)避坑指南(补充)变量前必须加&(取地址符),否则程序崩溃。输入多数据时,用空格/回车/Tab分隔。代码实战:多类型输入演示#include<stdio.h>main(){inta;floatb;charc;printf("请输入整数:");scanf("%d",&a);//注意&符号printf("请输入浮点数:");scanf("%f",&b);printf("请输入字符:");scanf("%c",&c);//空格跳过换行printf("整数:%d,浮点数:%f,字符:%c\n",a,b,c);}格式化输入函数scanf(二)普通字符必须原样输入若格式串含普通字符,输入时需严格匹配,否则读取失败。示例:scanf("a=%d,b=%f",&a,&b)输入:a=10,b=3.14输入缓冲区与%c的陷阱(补充)%d会跳过空白符,但%c不会,可能读取到残留的换行符'\n'。解决方案:在%c前加空格,主动跳过空白符。正确写法:scanf("%c",&ch);代码示例:缓冲区处理#include<stdio.h>main(){inta;charch;printf("请输入整数:");scanf("%d",&a);//输入10后按回车,//残留\nprintf("请输入字符:");//scanf("%c",&ch);//错误:读取到\nscanf("%c",&ch);//正确:跳过空白符printf("a=%d,ch='%c'\n",a,ch);}实例体验:#include<stdio.h>main(){charc;printf("inputacharacter\n");c=getchar();putchar(c);}例3-8输入单个字符。例3-9scanf()函数一般形式示例。#include<stdio.h>main(){inta,b,c;printf("inputa,b,c\n");scanf("%d%d%d",&a,&b,&c);printf("a=%d,b=%d,c=%d",a,b,c);}实例体验:例3-10输入三个小写字母,输出其ASCII码和对应的大写字母。#include<stdio.h>main(){chara,b,c;printf("inputcharactera,b,c\n");scanf("%c%c%c",&a,&b,&c);printf("%d,%d,%d\n%c,%c,%c\n",a,b,c,a-32,b-32,c-32);}3.5复合语句与空语句理解复合语句和空语句的概念及用法复合语句定义与语法用一对花括号{}将若干个语句括起来形成的整体,也称为“语句块”或分程序。{语句1;语句2;...;语句n;}特点复合语句内,可以有定义部分,定义部分出现在可执行语句的前面。语法等价于单一语句,支持多层嵌套。(补充)定义了局部作用域:内部变量仅在块内有效。代码示例:作用域演示(补充)#include<stdio.h>main(){inta=10;//外部变量printf("外部a=%d\n",a);{//复合语句开始,新的作用域inta=20;//覆盖外部aintb=30;//局部变量bprintf("内部a=%d\n",a);}//复合语句结束,内部a和b销毁printf("外部a=%d\n",a);//恢复外部a的值}空语句定义与语法仅由一个分号“;”构成的语句,不执行任何操作,仅作为“占位符”。核心用途满足语法结构要求但逻辑无需操作时使用。在循环体内对程序起“延时”(消耗CPU时间或等待事件)作用。避坑指南警惕“if”/“for”后多余的分号,这会导致逻辑分离。例如:if(a>0);{...}//此处的花括号代码块将独立执行代码示例:循环延时与条件占位#include<stdio.h>main(){inti;printf("开始计数...\n");for(i=0;i<1000000;i++);//空循环体:消耗时间printf("结束!\n");if(5>0);//空语句占位,不做任何事}复合语句和空语句的使用。实例体验:例3-11复合语句和空语句的使用。#include<stdio.h>main(){inta=1;while(1){;//此语句为空语句,程序执行到此语句时不产生任何动作a++;//此行为空行if(a==10)break;}}3.6顺序结构程序设计通过具体实例,学习如何编写顺序结构的C语言程序实例:计算圆的周长和面积(补充)算法分析与思路问题描述:从键盘输入圆的半径,利用数学公式计算并输出圆的周长和面积。定义变量:半径(radius)、周长、面积及常量PI输入数据:通过scanf获取用户输入的半径值计算处理:周长=2πr,面积=πr²输出结果:格式化打印计算后的周长和面积C语言代码实现#include<stdio.h>#definePI3.14159main(){floatradius,perimeter,area;printf("请输入圆的半径:");scanf("%f",&radius);perimeter=2*PI*radius;area=PI*radius*radius;printf("周长:%.2f面积:%.2f\n",perimeter,area);}实例3-12:x=20.5,y=10.2,如何交换两个变量的值?问题描述已知x和y的值,求Z的值。核心算法定义变量x,y,zz=3x+5y-8进阶方法(无中间变量)(补充)算术运算:a=a+b;b=a-b;a=a-b;位运算:a^=b;b^=a;a^=b;(效率高)数学分析实例3-12:x=20.5,y=10.2,如何交换两个变量的值?流程图C语言代码实现#include<stdio.h>main(){intx,y,t;printf("请输入两个整数:");scanf("%f%f",&x,&y);printf("交换前:x=%f,y=%f\n",x,y);t=x;//第一步x=y;//第二步y=t;//第三步printf("交换后:x=%f,y=%f\n",x,y);}实例3-13:计算表达式:z=3x+5y-8。问题描述已知x和y的值,求Z的值。核心算法定义变量x,y,zz=3x+5y-8C语言代码实现#include<stdio.h>main(){intx,y,z;scanf("%d,%d",&x,&y);z=3*x+5*y-8;printf("%d",z);}流程图实例3-14:求ax2+bx+c=0方程的根,a、b、c由键盘输入,设b2-4ac>0。问题描述已知a,b,c的值,求方程的根。核心算法定义变量a,b,c,disc,p,q,x1,x2一元二次方程的求根公式C语言代码实现#include<math.h>#include<stdio.h>main(){floata,b,c,disc,x1,x2,p,q;scanf("a=%f,b=%f,c=%f",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf("\nx1=%5.2f\nx2=%5.2f\n",x1,x2);}3.7趣味实例:数据的输入和输出通过趣味实例正确掌握顺序结构的编程趣味实例实训目的1.熟练掌握scanf()、printf()函数的语法格式,正确使用各种输入/输出格式符,掌握各种类型数据的输入/输出方式。2.掌握getchar()、putchar()函数的语法格式,以及使用它们进行字符型数据输入/输出的方法。实训内容1.画算法流程图。2.数据输入及输出函数的使用。。实例一:输入、输出练习代码实现(C语言)#include<stdio.h>main(){inta,b,c;scanf("%d%d",&a,&b);c=a/b;printf("%d\n",c);}要求与步骤要求画出流程图,分析程序的功能步骤1.启动软件2.输入程序段3.画出算法流程图4.编译运行,查看结果分析功能。练习意义感受顺序结构设计流程。实例二:简单的字符画(补充)代码实现(C语言)#include<stdio.h>main(){printf("******\n");printf("****\n");printf("**++**\n");printf("**+**\n");printf("******\n");}实现思路与解析顺序结构应用程序按顺序执行多条printf语句,利用\n换行符控制输出位置,构建图案轮廓。字符组合技巧通过空格、星号(*)和加号(+)的巧妙排列,组合出笑脸的五官和脸型,精准控制输出格式。练习意义这不仅是一个有趣的练习,更是掌握printf格式化输出和提升代码逻辑控制能力的好方法。实例三:反向输出数字问题提出从键盘上输出一个3位数,然后将它反向输出。例如输入123,则输出321。操作步骤:1.画出算法流程图2.根据流程图编写程序段3.输入编辑4.编译运行。实现思路与解析顺序结构本题解决思路为无分枝或循环,所以确定为顺序结构。关键算法主要算法是:利用商除10求余运算,分别求出个位数、十位数和百位数;然后再依次输出。练习意义1.体会算法的应用。2.体验顺序结构的编程设计。本章小结学会去选择—分支结构程序设计C语言程序设计第四章本章目录01.关系运算和逻辑运算02.条件语句——if语句03.多分支语句——switch04.趣味实例4.1关系运算和逻辑运算用于构成条件的关系表达式和逻辑表达式关系运算

关系运算就是对两个数据值的大小进行比较的运算,也称为比较运算。对表达式进行比较,结果为0,即为假。C语言为我们提供了6种关系运算符,见表注意:>=、<=、==、!=这种符号之间不能存在空格。关系运算符1)关系运算符都是双目运算符,其结合性均为自左至右。例如:a>b>7相当于(a>b)>72)关系运算符的优先级低于算术运算符,高于赋值运算符。例如:a>b+7相当于a>(b+7)

a=b>7相当于a=(b>7)3)在6个关系运算符中,<、<=、>、>=的优先级相同,高于==和!=,==和!=的优先级相同。若运算符优先级相同,根据其结合性进行运算,否则按照优先级运算。例如:a!=b>7相当于a!=(b>7)

a!=b==7相当于(a!=b)==7C语言中的关系运算符优先级1)用关系运算符连接的表达式称为关系表达式,以下是合法的关系表达式:2>33>2>1a>ba+b>c-d(a=7)<=(b=5)2)若a=2,b=7,c=4,d=1,1)中关系表达式的值为:

关系表达式和关系表达式的值表达式相当于值2>303>2>1(3>2)>10a>b2>70a+b>c-d2+7>4-11(a=7)<=(b=5)(2=7)<=(7=5)0逻辑运算C语言中的逻辑运算符有三种,见表1)逻辑非!的优先级最高,逻辑与&&次之,逻辑或||优先级最低。2)逻辑运算符和其他运算符优先级从低到高依次为:赋值运算符、逻辑或、逻辑与、关系运算符、算术运算符、逻辑非例如:a>b&&c>d等价于(a>b)&&(c>d)

a+!b||c<a等价于(a+(!b))||(d<a)

C语言中逻辑运算符的优先级逻辑运算

用逻辑运算符连接的表达式叫逻辑表达式,逻辑表达式运算的结果也只有“真”和“假”,“真”对应的值为1,“假”对应的值为0。需要说明的是,在逻辑表达式中非0即为真。1)逻辑与运算(&&),参与运算的两个表达式均为真时,结果才为真,否则为假。例如:3&&0,3为真,0为假,运算的结果为假,值为0。(7>0)&&(4>3),7>0的结果为真,4>3结果也为真,故运算的结果为真,值为1。2)逻辑或运算(||),参与运算的两个表达式均为假时,结果才为假,否则为真。例如:7||0,7为真,0为假,运算的结果为真,值为1。(5>0)||(5>7),5>0的结果为真,5>7的结果为假,故运算的结果为真,值为1。3)非运算(!),参与运算的表达式为真时,结果为假;参与运算的表达式为假时,结果为真。例如:!0,0

温馨提示

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

评论

0/150

提交评论