c语言-10 函数与程序结构
C语言知识总结

第一章概述一、C程序的基本结构例子#include <stdio.h>/*函数功能:计算两个整数相加之和入口参数:整型数据a和b返回值:整型数a和b之和*/int Add(int a, int b){return (a + b);}/*主函数*/main(){int x, y, sum = 0;printf("Input two integers:");scanf("%d%d", &x, &y); /*输入两个整型数x和y*/sum = Add(x, y); /*调用函数Add计算x和y相加之和*/ printf("sum = %d\n", sum); /*输出x和y相加之和*/}二、C程序结构1.C程序–由函数构成–必须有,且只能有一个main(主函数)–总是从main函数开始执行2.函数–由函数首部和函数体组成–函数首部指定函数名、函数参数、类型–函数体从{ 开始,到} 结束–函数内有语句3.语句–包括说明性语句、可执行语句–以;表示语句结束4.注释–可以出现在程序的任何位置–用/* 和*/ 括起来,必须成对出现5.书写格式–C语言没有行的概念,书写格式自由。
–习惯小写字母,缩进格式。
三、C程序的符号系统1、关键字(Keyword)–又称为保留字,C语言中预先规定的具有固定含义的一些单词2、标识符(Identifier)–系统预定义标识符–用户自定义标识符3、运算符(Operator)–34种,详见附录D4、分隔符(Separator)–空格、回车/换行、逗号等5、其它符号–大花括号―{‖和―}‖通常用于标识函数体或者一个语句块–―/*‖和―*/‖是程序注释所需的定界符6、数据(Data)a)变量(Variable)b)常量(Constant)三、标识符1、定义:由字母、下划线和数字组成的字符序列用于程序中的变量、符号常量、数组、函数、数据类型等操作对象的名字2、分类:(1)系统定义标识符–具有固定名字和特定含义的标识符–分为关键字和预定义标识符(2)用户定义标识符–用于对用户使用的变量、数组、函数等操作对象进行命名3、对标识符的规定(1)用户定义标识符–必须以字母或下划线“_”开头–不能含有除字母、数字和下划线“_”外的其他字符–标识符中大小写字母含义不同(2)关键字必须用小写字母。
C语言程序设计基础知识期末复习2023年修改整理

C语言程序设计基础知识期末复习一、 C语言与算法1.程序:一组计算机能识别和执行的指令。
2.C语言的特点:运算符丰富(共有34种运算符)、数据类型丰富、具有结构化的操纵语句。
3.C语言程序的结构特点:(1).一个程序由一个或多个源程序文件组成:一个源程序文件中能够包括三个部分:预处理指令、全局声明、函数定义(2).函数是C程序的要紧组成部分:一个C程序是由一个或多个函数组成的必须包含一个main函数(只能有一个);每个函数都用来实现一个或几个特定功能;被调用的函数能够是库函数,也能够是自己编制设计的函数。
(3).一个函数包括两个部分函数首部和函数体(声明部分:定义在本函数中所用到的变量;对本函数所调用函数进行声明;执行部分:由若干个语句组成,指定在函数中所进行的操作)(4). 程序总是从main函数开始执行(5). C程序对计算机的操作由C语句完成(6.)数据声明和语句后来必须有分号(7.)C语言本身不提供输入输出语句(8.)程序应当包含注释,增加可读性4、算法(1)算法+ 数据结构= 程序(2)顺序结构、抉择结构、循环结构是表示一个良好算法的基本结构(3)算法的特性:有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性(4)算法流程图:一个流程图包括以下几部分:表示相应操作的框;带箭头的流程线;框内外必要的文字说明。
流程线不要忘记画箭头,否则难以判定各框的执行次序。
算法流程图的结构特点:只有一个入口;只有一个出口(一个推断框有两个出口;一个抉择结构只有一个出口)结构内的每一部分都有机遇被执行到。
也就是说,对每一个框来说,都应当有一条从入口到出口的路径通过它;结构内不存在“死循环”。
二、顺序结构设计5、标识符:用来标识变量名、符号常量名、数组名、类型名、函数名等的有效字符序列。
C语言对标识符的规定:(1)只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线(2)长度:在TC中最多允许32个字符,建议不要超过8个假如系统规定标识符长度为8,那样x1234567A和x1234567B会被视为同一标识符。
C语言

• 返回值
通过return返回 return 表达式;
函数
自定义函数
• 调用 函数名(实参) 注:
1. 调用时函数名必须与所定义的函数名一致 2. 实参的个数与形参的个数必须一致 3. 实参和形参的类型、顺序必须一直
函数
•
函数说明(为了遵循“先定义,后使用”的原则) 类型名 函数名(参数类型1,参数类型2……); 注:
数据类型
常 用 基 本 类 型
C语言简介
整型
实型 字符型
常 用 组 合 类 型
数组 机构体
公用体
数据类型1
整型
常量:1、57、8、6……
名称 关键字 int short (int) long (int) unsigned 字节 4 2 4 4
C语言简介
变 量
基本整型 短整型 长整形 无符号型
16位系统:long是4字节,int是2字节 32位系统:long是4字节,int是4字节 64位系统:long是8字节,int是4字节 C语言又规定,无论什么平台,都要保证long型占用的字节数不小于int型
选择结构
逻辑运算
选择结构
逻辑运算符 &&(逻辑“与”)、 ||(逻辑“或”)、 !(逻辑“ 非”) &&:当运算符两边的值均为1时,计算值为1,否则为0 ;左边为0,右边被短路 ||:当运算符两边的值中有一个为1时,计算值为1,两 者都为0时,计算值为0;左边为1,右边被短路 !:单目运算符 优先级:! > 算术运算符 > 关系运算符 > && > || > 赋值运 算符
通过二进制相互转换
数的存储
C语言简介
C语言(1-10)

•
§3.3 整型数据
3.3.1整型常量的表示方法 整型常量的表示方法 整型常量即整常数。在C语言中,整常数 可用以下三种形式表示: (1)十进制整数。 (2)八进制整数。以0头的数是八进制数。 (3)十六进制整数。以0x开头的数是16进制数。 (1)整型数据在内存中的存放形式 (1)整型数据在内存中的存放形式 数据在内存中是以二进制形式存放的。
第二章
§2.1 算法的概念 广义地说,为解决一个问题而采取的方法和步骤,就称 为“算法”。
对同一个问题,可有不同的解题方法和步骤
100
例: 求
• •
∑
n
n =1
方法1:1+2,+3,+4,一直加到100 加99次 方法2:100+(1+99)+(2+98)+…+(49 +51)+50 = 100 + 49×100 +50 加51次
§3.4 浮点型数据 3.4.2 浮点型变量 (1)浮点型数据在内存中的存放形式 (1)浮点型数据在内存中的存放形式 一个浮点型数据一般在内存中占4个字节(32位)。与 整型数据的存储方式不同,浮点型数据是按照指数形 式存储的。系统把一个浮点型数据分成小数部分和指 数部分,分别存放。指数部分采用规范化的指数形式。
§3.8
算术运算符和算术表达式
自增、 (4) 自增、自减运算符 作用是使变量的值增1或减1 如: • ++i,--i(在使用i之前,先使i的值加 (减)1) • i++,i--(在使用i之后,使i的值加( 减)1) i++与++i的区别: i++与++i的区别: 的区别 ++i是先执行i=i+1后,再使用i的值; i++是先使用i的值后,再执行i=i+1。 例如: 例如: ①j=++i; i的值先变成4, 再赋给j,j的值均为4 ②j=i++; 先将 i的值3赋给j,j的值为3,然后i变为4
C语言重要知识点

第三章
注意:C 语言中用非 0 表示逻辑真的,用 0 表示逻辑假的。 C 语言有构造类型,没有逻辑类型。 关系运算符号:注意<=的写法,==和=的区别! if 只管后面一个语句,要管多个,请用大括号! 1、关系表达式: a、表达式的数值只能为 1(表示为真) ,或 0(表示假) 。 如 9>8 这个关系表达式是真的,所以 9>8 这个表达式的数值就是 1. 如 7<6 这个关系表达式是假的,所以 7<6 这个表达式的数值就是 0. b. 考试易错: int x=1,y=0,z=2; x<y<z 是真还是假?带入为 1<0<2,从数学的角度出发肯定是错,但如果是 C 语言那 么就是正确的! 因为要 1<0 为假得到 0,表达式就变成了 0<2 那么运算结果就是 1,称 为真的了 c. 等号和赋值的区别! 2、逻辑表达式: 核心:表达式的数值只能为 1(表示为真) ,或 0(表示为假) 。 a、共有 && || ! 三种逻辑运算符号。 b、! > && > || 优先的级别。 c、表示 x 小于 0 大于 10 的方法。 0<x<10 是不行的(一定记住) 。是先计算 0<x 得到的结果为 1 或者 0;再用 0,或 1 与 10 比较得到的总是真(为 1) 。所以一定要用(0<x)&&(x<10)表示比 0 大比 10 小。 3、if 语句 a、else 是与最接近的 if 且没有 else 的语句匹配。
6、输入时候字符和整数的区别 scanf(“%d”,&x); 这个时候输入 1,注意表示的是整数 1 scanf(“%c”,&x); 这个时候输入 1,注意表示的是字符’1’,ASCLL 为整数 48. 补充说明: 1、scanf 函数的格式考查: 函数的第二部分是&a 这样的地址,不是 a; scanf(“%d%d%d%d”,&a,&b,&c); 跳过输入的第三个数据。 2、putchar,getchar 函数的考查: char a=getchar() 是没有参数的,从键盘得到你输入的一个字符给变量 a. putchar(‘y’) 把字符 y 输入到屏幕中。
C语言-10循环结构- while 语句

§作业
一台购买价为 28,000 美元的机器在 7 年内以每年 4000 美元的比率折旧。编写并运行一个 C 程序,计算并显示 美元的比率折旧。 程序, 7 年的折旧表,该表应该具有如下的形式: 年的折旧表,该表应该具有如下的形式: 年 ---1 2 3 4 5 6 7 折旧 ---------4000 4000 4000 4000 4000 4000 4000 年终值 ---------24000 20000 16000 12000 8000 4000 0 累计折旧 ---------4000 8000 12000 16000 20000 24000 28000
C语言程序设计
第十课 循环结构- while 语句 循环结构-
§10.1 循环(重复) 10. 循环(重复)
前面几章介绍的程序在 前面几章介绍的程序在演示 C 程序的正确结构,以及构造 程序的正确结构, 输入、输出、赋值和选择功能方面是非常有用的。 基本的 C 输入、输出、赋值和选择功能方面是非常有用的。 大多数程序的实际功能主要表现在它们多次重复相同的计算 或指令序列的能力上,即每次使用不同的数据, 或指令序列的能力上,即每次使用不同的数据,而不必针对每组 新的数据值重新运行程序, 语句, 新的数据值重新运行程序,本章将介绍实现该功能的 C 语句, while、 do语句。 包括 while、for 和 do-while 语句。
§10.3.3 while 应用-更改控制变量的值 10.
我们仍需要更改 count 的值才能最终退出 while 语句,这需要 语句, 这样的条件, 使用像 count=count+l 这样的条件,在每次执行 while 语句时都 的值。事实是, 递增 count 的值。事实是,用于重复单个语句的 while 语句不会妨 的值,我们所要做的就是使用复合 碍我们使用其他语句来更改 count 的值,我们所要做的就是使用复合 语句来替代单个语句 例如: 来替代单个语句, 语句来替代单个语句,例如: count = 1; //将 count 初始化 //将 while( count <= 10 ) { printf("%4d",count); //将count递增 //将count递增 count++; } 现在让我们来分析一下这组完整的指令的工作方式。 现在让我们来分析一下这组完整的指令的工作方式。第一个赋值语 设置为1 然后, 语句, 句将 count 设置为1。然后,进入 while 语句,条件第一次得到赋 10,所以条件成立,并执行复合语句。 值。因为 count 的值小于 10,所以条件成立,并执行复合语句。复 printf()方法来显示 合语句中第一个语句是调用 printf()方法来显示 count 值。接下来 的语句是将 count 中当前存储的值加上 1,使该值等于 2。现在 while 语句循环回来重新测试条件,因为 count 的值仍小于 10,所 语句循环回来重新测试条件, 10, 以将再次执行复合语句, 11。 以将再次执行复合语句,该过程将一直持续到 count 的值达到 11。
C语言程序设计教程(电子教案)

学习目标
对C语言有一个概括的了解, 能够编写包含键盘输入、计算和 显示输出等操作的简单C程序。
4
主要内容
• C语言的产生与特点 • 简单C程序的组成 • C语言应用程序开发的基本步骤
5
1.1 C语言的产生及特点
C语言是为了编写系统程序而在1968年开始 研发的计算机高级语言
C语言表达能力强,使用灵活,程序结构清 晰,紧凑,可移植性好
指针 类型
17
基本数据类型说明符
整型:int long
字符型:char 实型:float
double long double
18
2.2 常 量
常量∶在程序运行过程中,其值不能被改 变的量。
一. 不同数制整型常量的表示
例如: 12 :十进制数 12
012 :八进制数 12(等于十进 制数10,用前导符0表示八进制数常量)
计算x+y+z,并将结 8果赋给变量sum
显示变量 sum的值
主函数 main()
一般C程序的组成
【例1-2】采用模块结构,改写例1-1的程序。 add(int x,int y,int z )
{ return(x+y+z);
}
函数add()
调用函数 add()
main() { int x,y,z; printf("Please Input Three Integers:\n "); scanf("%d,%d,%d ",&x,&y,&z);
4. 用‘\’ ’表示字符’ ,‘\”’表示字符”, ‘\\ ’表示字符\ 。
5. 用双引号括起来的字符序列表示字符串常量,其 中最后一个字符是字符串结束符‘\0’,不显式 地表示出来。如:“English” 。
c语言的整体框架结构

c语言的整体框架结构C语言是一种通用的高级程序设计语言,其框架结构主要包括输入输出、基本数据类型、控制结构、函数和库五个方面。
下面将详细介绍C语言的整体框架结构。
1. 输入输出(Input/Output):C语言提供了一组标准库函数来实现输入和输出操作,使得程序可以与用户进行交互。
常用的输入函数有scanf()和fgets(),用于从键盘读取用户输入的数据;常用的输出函数有printf()和puts(),用于将结果输出到屏幕。
通过这些输入输出函数,程序可以接收用户的输入,并将结果展示给用户,实现与用户的交互。
2. 基本数据类型(Basic Data Types):C语言提供了一些基本的数据类型,包括整型、浮点型、字符型等。
整型包括int、short、long和long long等,用于表示整数;浮点型包括float和double,用于表示实数;字符型用于表示单个字符。
这些数据类型可以根据需要进行组合和扩展,以满足程序对不同类型数据的需求。
3. 控制结构(Control Structures):C语言提供了一些控制结构来进行程序的流程控制,包括顺序结构、选择结构和循环结构。
顺序结构指的是程序从上到下顺序执行;选择结构包括if语句和switch语句,用于根据条件选择不同的执行路径;循环结构包括for循环、while循环和do-while循环,用于重复执行一段代码。
通过这些控制结构,可以实现对程序流程的灵活控制,使程序可以根据不同的条件做出不同的处理。
4. 函数(Functions):C语言支持函数的定义和调用,通过函数可以将一段代码封装成一个独立的模块,以达到代码复用和模块化的目的。
函数可以接受参数,并返回一个值。
参数用于传递数据给函数,函数内部对参数进行处理,可以改变参数的值或返回结果;返回值用于将计算结果返回给函数的调用者。
函数可以使程序结构更加清晰,简化程序设计过程,并提高代码的可读性和可维护性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
源件cal.c
#include <stdio.h> #include "vol.c" //增加文件包含,连接相关函数
void cal ( int sel ) //常用圆形体体积计算器的主控函数 { switch (sel)
4、大程序构成---多文件的C程序(*了解)
程序文件模块
一个C语言程序可由多个C源文件组成; 每个C源文件可包含多个函数; 一个C语言程序当且仅当只有一个main()函数。
多文件模块下全局变量的作用域
外部变量声明: extern 变量名表; 将全局变量的作用域扩展到声明所在的文件。
静态全局变量定义:static 类型 变量名表; 该全局变量的作用域不能扩展到其他文件模块。
return r;
int main()
}
{ int n,y;
printf("input an integer number:");
scanf("%d",&n);
注意溢出
y=jc(n); printf("%d!=%d\n",n,y);
return 0;
}
函数的递归调用
递归程序的编写方法
分析问题,若其求解过程存在“递归求解、规模递减” 的特征,可考虑采用递归程序实现;
b=20;
total=SUM*2; 等价于:total=a+b*2; printf(INFO,total); 等价于:printf("total=%d\n",total);
}
宏定义
带参数的宏定义(了解)
#include <stdio.h>
#define MAX(a, b) a > b ? a: b
大程序构成
函数与程序文件模块 外部函数:extern int fun (int a, int b) {…} 外部函数可被其他文件中的函数调用。 定义函数时省略extern,则默认为外部函数。 内部函数:static 类型名 函数名(形参表){… } 内部函数只能被其所在文件中的其他函数调用。
宏定义
定义格式
#define 宏名 常量值
#define PI 3.1415926 #define SCHOOL "广东药科大学" #define CODE ‘A’ #define SUM a+b
说明
宏名命名遵循“标识符”规则,建议采用大写字母; define属预编译命令,不是C语句,在编译过程中系统
递归实现的两个关键点:
递归出口:直接输出n,如果n<=9,即n为1位数 递归式子:输出个位数n%10,再递归调用
reverse(n/10) 输出前n-1位
void reverse(int num) { if (num<=9)
printf ("%d",num); // 递归出口 else { printf ("%d",num%10);
printf("%c-->%c\n",a,b); else
{ hanoi(n-1, a, c, b);
printf("%c-->%c\n",a, b);
hanoi(n-1, c, b, a);
} }
3、宏定义
例10-5 将英里、英尺、英寸等单位转换成米和厘米。
1英里=1609m、1英尺=30.48cm、1英寸=2.54cm
明确递归的出口条件(即何时不再递归调用下去了); 提取出问题求解的递归公式; 编写递归函数,其一般结构:
类型 f(类型 n, …) { if(起点或终点条件)
非递归部分; //递归出口 else
递归部分; // 含有直(间)接对f(n-k)的调用(k>0) }
例10-3 编写递归函数reverse(int n)实现将 整数n逆序输出。
return 0;
}
头文件与 #include
头文件的概念
一种包含函数声明和宏定义、后缀为.h的文本文件。
#include <文件>用于将指定的文件内容插入到该位置。
头文件的应用
用户可以创建自己的头文件,并将需要在多个文件中使 用的函数声明及宏定义、类型定义等放在该头文件中, 并在需要的地方包含该头文件即可。
源文件vol.c
#include <stdio.h> #define PI 3.141592654 double vol_ball( ) //球体体积 { double r;
printf("请输入球的半径:"); scanf("%lf", &r); return(4.0/3.0*PI*r*r*r); } double vol_cylind( ) //圆柱体积 { double h, r; printf("请输入圆柱的底圆半径和高:"); scanf("%lf%lf", &r, &h); return(PI*r*r*h); } double vol_cone( ) //圆锥体积 { double h, r; printf("请输入圆锥的底圆半径和高:"); scanf("%lf%lf", &r,&h); return(PI*r*r*h/3.0); }
例:编写一个常用圆形体体积计算器的C程序,采用命 令方式输入1、2、3,分别选择计算球体、圆柱体、圆锥 体的体积,并输入计算所需相应参数。 方法一、用函数的嵌套调用来实现(例10-1)
程序结构
main( )
cal ( )
vol_ball ( ) vol_cylind ( ) vol_cone ( )
#define SQR(x) x * x
int main(void)
{ int x , y;
scanf ("%d%d" , &x, &y) ;
x = MAX (x, y);
/x* 引= 用x>宏y定?x义:y*;/
y = SQR(x);
/y* 引= 用x*宏x;定义 */
printf("%d %d\n" , x, y) ;
reverse (num/10); // 递归调用 } }
汉诺(Hanoi )塔问题 (*略)
古代有一个梵塔,塔内有3个座A、B、C,开始时A 座上有64个盘子,盘子大小不等,大的在下,小的在 上。有一个老和尚想把这64个盘子从A座移到B座。
要求:
每次只允许移动一个盘; 盘子只能插在A、B、C三个座上; 移动过程中,大盘不能压在小盘上。
A
B
C
汉诺(Hanoi)塔问题
解题思路
要把64个盘子从A座移动到B座,需要移动大约264 次盘子。 如果能将63个盘子从A座移动到C座,问题就迎刃而解啦! 而将63个盘子从一个座移动到另一个座的方法与前面类似,
只是数量少了1。
……
A
……
B
……
C
汉诺(Hanoi)塔问题
将n个盘子从A座移到B座可以分解为以下3个步骤:
函数的递归调用
#include “stdio.h” jc函数
vomid amianin() { jl=ojncg(5j=)jc(5);
x=5 r=5*jc(4)
pprinnttff((“j%) ld\n”,j);
}
120
jc(5)=120
jc函数 x=1 r=1
jc(1)=1
递归出口
jc函数 x=2 r=2*jc(1)
#include "cal.c"
#include "vol.c" cal.c中只包含主控函数cal(),根据输入调用不同体积计
算函数vol_ball( )、 vol_cylind( )、vol_cone( ),其中 要给出各函数的原型声明 vol.c中包含vol_ball( )、 vol_cylind( )、vol_cone( )
#include<stdio.h> #define Mile_to_m 1609 #define Foot_to_cm 30.48 #define Inch_to_cm 2.54 void main(void) { float foot, inch, mile;
scanf("%f%f%f", &mile, &foot, &inch); printf("%f miles=%f m\n", mile, mile*Mile_to_m); printf("%f feet=%f cm\n", foot, foot*Foot_to_cm); printf("%f inches=%f cm\n", inch, inch*Inch_to_cm); }
第10章 函数与程序结构
主要内容
➢圆形体体积计算-函数的嵌套调用 ➢汉诺塔问题-函数的递归调用 ➢长度单位转换-宏定义(熟悉) ➢大程序构成-多文件的C程序(了解)
教学目标、重点和难点
教学目标
掌握函数的嵌套调用方法及其应用 理解函数的递归调用,熟悉用函数的递归调用解决
应用问题的方法; 了解常见的宏定义的格式及其作用; 了解多文件的C程序的实现方法,理解多文件中变
2、函数的递归调用
在一个函数的函数体内直接或间接地调用该函数本
身,称为函数的递归调用。
例如:求n!
int jc(int n)
递归出口
{ int r;
if(n==0||n==1)
r=1;
f函数
直接调用
调用f函数
间接调用