c语言程序设计基础-5函数
c语言《程序设计基础》课后习题参考答案与解析
c语言《程序设计基础》课后习题参考答案与解析1. 习题一:编写一个C程序,输出“Hello World!”。
解析:这是一个非常简单的C程序,只需要使用printf函数输出所需的字符串即可。
```c#include <stdio.h>int main() {printf("Hello World!");return 0;}```2. 习题二:编写一个C程序,计算两个整数的和并输出结果。
解析:这个程序需要使用scanf函数从用户输入中读取两个整数,并使用printf函数输出它们的和。
```c#include <stdio.h>int main() {int num1, num2, sum;printf("请输入第一个整数:");scanf("%d", &num1);printf("请输入第二个整数:");scanf("%d", &num2);sum = num1 + num2;printf("两个整数的和为:%d", sum);return 0;}```3. 习题三:编写一个C程序,判断一个数是奇数还是偶数并输出结果。
解析:这个程序需要使用scanf函数读取用户输入的整数,并使用if-else语句判断该数的奇偶性,然后使用printf函数输出结果。
```c#include <stdio.h>int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (num % 2 == 0) {printf("该数是偶数");} else {printf("该数是奇数");}return 0;}```4. 习题四:编写一个C程序,判断一个年份是否为闰年并输出结果。
C语言程序设计教程(第5章 函数)
22
信息科学与工程学院
作用域(可用域)与生存期
C语言中定义的变量都有一个起作用的范 围,称为变量的作用域。 程序运行时,变量被创建和被删除的时间 段,称为变量的生存期。
23
信息科学与工程学院
局部变量和全局变量
在一个函数内部定义的变量是内部变量, 它只在本函数内部范围内有效。也就是说 只有在本函数内才能使用它们。这些变量 称为“局部变量”。 在函数之外定义的变量称为外部变量,也 称为全局变量,在文件内的所有函数都能 使用它。它的有效范围为从定义变量的位 置开始到文件的结束。
4
信息科学与工程学院
5.1 问题的提出
C语言程序是由什么构成的? 函数 什么是函数?
能完成特定功能的功能块; 一般有输入参数 和返回值; 一次定义,可以调用多次。
一个C语言程序为什么需要不同的函数?
一个函数过大难于编写和维护; 一个函数的程序不利于协作; 代码和功能共享的需要。
5
信息科学与工程学院
6. 函数调用举例分析(见下页)
15
信息科学与工程学院
实参到形参是单向值传递 例2 求两个整数中的最大值
int max(int x,int y) /*函数定义*/ { int temp; if (x>y) temp=x; else temp = y; COPY return temp; } void main() { int a,b; scanf("%d,%d",&a,&b); a = max(a,b); /*函数调用*/ printf("\n max= %d \n",a); }
2
信息科学与工程学院
第5章 函数
本章需要掌握的知识点: 函数定义 函数说明 函数调用 形参和实参的关系 变量的存储类别
c语言《程序设计基础》课后习题参考答案与解析
c语言《程序设计基础》课后习题参考答案与解析《程序设计基础》习题参考答案与部分解析第1章 C 语言概述一、填空a) C源程序的基本单位是函数。
b) 一个C程序中至少应包括一个 main函数。
c) 在C语言中,输出操作是有库函数 printf( )函数完成。
二、单选题1、A2、C3、B解析:第1题答案:A 。
因为一个C程序总是从main函数开始执行的,而不论main函数在程序中的位置。
且到main函数结束。
第2题答案:C 。
因为 main函数没有限制必须位于程序的最前面。
C程序书写自由,一行内可写几个语句。
在对一个C 程序进行编译的过程中,无法检查注释当中的拼写错误。
不过C语言本身并没有输入输出语句,输入输出是由函数完成的。
第3题答案:B。
因为一个C语言程序是由若干个函数组成的。
但至少包含一个main 函数,且main函数的位置不限。
三、编程题1、编写一个输出“Welcome to C!”信息的小程序。
解:程序如下#include “stdio.h”main( ){1printf(“Welcome to C!”) ;}2、已知三角形的三边长分别为3,4,5,试用海轮公式编程求其面积。
海伦公式为:S?= ,其中s= (a+b+s)/2 ;解:程序如下#include “math.h”#include “stdio.h”main( ){int a , b , c ; /* a ,b,c 3个整型变量表示三角形的3条边。
*/float s ,s1 ; /* s1作为面积变量,s 作为中间变量是都应该是实形*/a=3 ; b= 4; c=5 ;s= (a+b+c)/2.0 ;s1= sqrt(s*(s-a)*(s-b)*(s-c)); /* sqrt函数完成开平方根功能。
*/printf(“area=%f\n”,s1);}2第2章程序设计基础知识一、单选题1、C2、A3、C4、A5、C6、C7、D8、C9、D 10、A 11、D 12、A 13、C 14、C 15、B A 16、B 17 D解析:1. 答案:C。
c语言程序设计基础教程课后答案
c语言程序设计基础教程课后答案C语言程序设计基础教程课后答案第一章:C语言概述1. 简述C语言的特点。
- C语言是一种结构化编程语言,具有高效、灵活、功能强大等特点。
- 它支持多种编程范式,如过程式编程、结构化编程、面向对象编程等。
- C语言具有较低的抽象级别,接近硬件,因此执行效率较高。
2. C语言的发展历史。
- C语言在1972年由丹尼斯·里奇(Dennis Ritchie)在贝尔实验室开发。
- 它最初是作为UNIX操作系统的系统编程语言而设计的。
第二章:C语言环境和基本语法1. 如何设置C语言的开发环境?- 选择一个C语言编译器,如GCC、MSVC等。
- 安装编译器并配置环境变量,以便在命令行中直接调用编译器。
2. C语言的基本语法结构是什么?- C语言的基本结构包括预处理指令、函数定义、变量声明和语句。
第三章:数据类型、运算符和表达式1. C语言中的基本数据类型有哪些?- 整型(int)、字符型(char)、浮点型(float和double)等。
2. 运算符的分类及其用法。
- 算术运算符:+、-、*、/、%等。
- 赋值运算符:=、+=、-=等。
- 比较运算符:==、!=、>、<等。
- 逻辑运算符:&&、||、!等。
第四章:控制语句1. 条件语句的用法。
- if语句用于基于条件执行代码块。
- switch语句用于多条件选择。
2. 循环语句的用法。
- while循环用于在满足条件时重复执行代码块。
- for循环用于已知迭代次数的循环。
- do-while循环先执行代码块再判断条件。
第五章:数组和字符串1. 数组的基本概念和使用。
- 数组是相同数据类型的元素集合,存储在连续的内存位置。
- 声明数组:int arr[10]; 表示一个包含10个整数的数组。
2. 字符串的表示和操作。
- 在C语言中,字符串是以空字符('\0')结尾的字符数组。
- 使用标准库函数如strcpy、strlen等操作字符串。
第5章 函数与带参数宏 《C语言程序设计及应用教程》课件-PPT课件
5.2 函数的嵌套与递归调用
函数的嵌套调用
不允许嵌套定义,函数间平行的、独立。 C中的函数:
允许嵌套调用。
main( ) 调用函数a 结束
a函数
调用函数b
b函数
【例5-7】 输入两个整数,求平方和
#include <stdio.h>
int fun1(int x,int y)
int fun1(int x,int y);
斐波那契数列");
for(i=0;i<N;i++)
{
printf("%d\t",iF[i]);
if((i+1)%10==0)
printf("\n");
}
printf("\n");
}
int Sum(int iF[],int n); void main() { int i,Fibonacci[N],m,n; //生成斐波那契数列 CreateFibonacci(Fibonacci); //输出斐波那契数列 PrintFibonacci(Fibonacci); //求数列前n项的和 printf(" 请输入要求和的项数 n(n<%d): ",N); scanf("%d",&n); m=Sum(Fibonacci,n); printf("\n 斐波那契数列前 %d项的和:%4d\n",n,m);}
第5章 函数与带参数宏 ?C语言 程序设计及应用教程?课件
5.1 函数的声明、定义与调用
5.1.1 函数的声明与定义 5.1.2 函数调用 5.1.3 函数参数传递 5.1.4 主函数中的参数
C语言程序设计-第5章--函数
实参可以是常量、变量或表达式,但要求 它们必须要有确定的值,在调用时将实参 的值赋给形参。另外,实参和形参的类型 应相同或兼容。
— 31 —
5.2 函数的参数传递和返回值
➢ 5.2.2 函数的返回值
一般情况下,主调函数调用完被调函数后,都希望能够得到一 个确定的值,这就是函数的返回值。在C语言中,函数返回值 是通过return语句来实现的。return语句的一般形式有3种:
/*函数声明*/
/*调用逆序函数,将a的逆序值赋给b*/ /*调用逆序函数,将b的逆序值赋给c */
— 23 —
5.2 函数的参数传递和返回值
➢ 5.2.1 函数的形参与实参
{
int y=0,sign=1;
/*定义sign表示x的符号,定义变量y代表逆序数据*/
if(x<0)
/*当x小于0时取符号及取反*/
— 18 —
5.1 函数的定义和调用
➢ 5.1.2 函数的调用
另外,按函数在语句中的作用来分,可以有以下3种函数调用方式:
函数表达式
函数语句
函数作为实参
函数作为表达式中的一项出 现,以函数返回值参与表达 式的运算。
函数调用的一般形式加上分 号即构成函数语句。
函数作为另一个函数调用的 实际参数出现,即把该函数 的返回值作为实参进行传送。
#include<stdio.h> int main() {
int x=0,y; y=trans(x); printf("y=%d\n",y); printf("x=%d\n",x); return 0; } trans(int a) { a++; printf("a=%d\n", a); return a; }
C语言程序设计基础知识要点
01.C程序根本构造一、C语言的特点:1、C语言源程序的根本组成单位是函数;一个C程序可由假设干个函数组成,其中必须有且仅有一个以main命名的主函数,其余的函数名称可由编程者自行设定。
,2、C程序的执行总是由main()函数的第一个可执行语句开场,到main〔〕函数的最后一个可执行的语句完毕;而其他函数都是在main〔〕函数开场执行以后,通过其他函数的调用才得以运行。
3、C语言系统提供了丰富的库函数,用户在程序中需要调用某个库函数时,必须用#include编译预处理命令将描述该库函数的头文件包含进去。
二、C程序的书写格式:1、语句可从分开放在任意多行内;如:printf(“To C,〞);printf(“ or not to C:〞);与printf(“To C , or not to C:〞);是等价的2、一行中可以有假设干个语句;如:a=123;b=345;3、每个语句和数据定义的最后必须有一个分号;三、C语言程序的运行:1、编译(pile):将C源程序文件翻译成能被计算机识别的二进制形式的“目标〞文件;编译时,编译器将检查源程序每一条语句的语法错误。
2、建造(Bulid):C语言程序例如:显示“Hello〞#include<stdio.h>int main(void){printf(“Hello.\n〞);return 0;}说明:#include<stdio.h> 是必不可少的,它包含了C语言标准输入输出库的相关信息;printf函数来自〞标准输入输出库〞,可以产生格式化输出;\n 告诉printf函数执行完信息显示后要进展换行操作;return 0 说明程序终止时会向操作系统返回值0;{ }来标出main〔〕函数的起始和完毕。
02.数据类型一、C语言的特点:1、C语言源程序的根本组成单位是函数;一个C程序可由假设干个函数组成,其中必须有且仅有一个以main命名的主函数,其余的函数名称可由编程者自行设定。
c语言程序设计5(函数)
参数的传递
1. 函数调用时,被调函数中的形参被分配 临时的存储单元,实参的值赋给形参变量 2. 实参可以是常量、变量或表达式 3. 实参的个数、类型和顺序必须与形参一致 4. 形参与实参各占一个独立的存储空间,调 用结束后,形参单元被释放
形参值的改变不会影响实参-----值传递
例:P134 main( ) { int v1=10, v2=20; printf(“v1=%d v2=%d\n”,v1,v2); printf(“_ do swap _\n”); swap(v1,v2); printf(“v1=%d v2=%d\n”,v1,v2); } void swap(int x, int y) { int temp; v1=10 v2=20 temp=x; _ do swap _ x=y; y=temp; v1=10 v2=20 }
自定义函数的应用实例
P136 例3:输出“九 九表”。 它是一个
9行9列的二维表格,
加上一个行标题和一
个列标题,显示出来
应该是10行10列。
#include <stdio.h> void drawLine(int n,char ch); /* 连续显示n个ch字符 */ main() { int i,j; printf("\n 9.9 table\n"); /* 显示表名 */ drawLine(30, '='); /* 显示每列的标题 */ printf("\n 1 2 3 4 5 6 7 8 9"); drawLine(30, '='); for (i=1; i<=9; i++) { /* 显示每行的内容 */ printf("\n%3d", i); for (j=1; j<=9; j++) printf("%3d", i*j); if (i<9) drawLine(30, '-'); else drawLine(30, '='); } void drawLine(int n, char ch) /*连续显示n个ch字符*/ } { int i; putchar('\n'); /*换行*/ for (i=1; i<=n; i++) putchar(ch); /*连续显示n个字符ch*/ }
C语言程序设计教程教学课件完整版电子教案
课程重点内容回顾
C语言基础语法
包括数据类型Βιβλιοθήκη 变量、 运算符、表达式、控 制结构等。
函数与模块化设计
函数的定义、调用、 参数传递、局部变量 与全局变量等。
数组与字符串
一维数组、二维数组、 字符数组、字符串处 理函数等。
指针与内存管理
指针的概念、指针变 量的定义与使用、内 存分配与释放等。
文件操作
文件的打开、关闭、 读写操作、文件定位 等。
do-while循环
详细讲解do-while循环的使用,包 括其语法、执行流程和与while循环 的区别。
for循环
阐述for循环的基本语法和使用方法, 包括循环变量、循环条件和循环体。
循环的嵌套
介绍循环嵌套的概念,通过实例演示 其实现方法。
数组与字符串处理
一维数组
详细讲解一维数组的定义、初始 化和使用方法,包括数组元素的
指针运算
指针与数组关系
指针支持加法、减法、比较等运算,可用于 遍历数组、字符串等操作。
数组名可视为指向数组首元素的指针,通过 指针可访问和修改数组元素。
动态内存分配与释放
动态内存分配函数 C语言提供malloc、calloc等函数用于 动态分配内存,可在运行时根据需要申
请指定大小的内存空间。 内存释放函数
C语言的应用领域
学习C语言的意义
说明学习C语言对于理解计算机底层 原理、提高编程能力、拓展职业发展 空间等方面的重要性。
阐述C语言在系统软件、应用软件、 嵌入式系统、游戏开发等领域的应用。
教学目标与要求
01
02
03
知识目标
掌握C语言的基本语法、 数据类型、运算符、控制 结构等基础知识。
C语言程序设计(李圣良)章 (5)
printf("%3d",score[i]); printf("\n"); pass(score,10);
第5单元 函 数
printf("处理之后的成绩如下:\n"); for(i=0;i<10;i++)
printf("%3d",score[i]); printf("\n"); } void pass(int array[],int n) { int i; for(i=0;i<n;i++)
function(); }
第5单元 函 数 图5-2 例5-4程序运行结果
第5单元 函 数
5.2.2 函数的声明 在C语言中,除了main函数外,用户所定义的函数遵循
“先定义、后使用”的规则。当把函数的定义放在调用之后, 应该在调用之前对函数进行声明,即在所调用的函数之后定义, 则在调用函数之前需要对被调函数进行声明。
第5单元 函 数
(2) 调用的函数仅仅是完成某些操作而不返回函数值,这 时函数的调用可以作为一条独立的语句。
【例5-4】 读程序,理解无返回值的函数调用。
#include <stdio.h> void function() {
printf(“Hello,World!\n”); } main() {
{
int z;
/* 求得的最大公约数用z存放 */
实现函数功能的语句
return (z);
/* return语句带回返回值 */
}
C语言程序设计基础
C语言程序设计基础C语言是一种通用的高级编程语言,广泛应用于软件开发和系统编程。
学习C语言的基础知识对于初学者而言至关重要。
在这篇文章中,我们将介绍C语言程序设计的基础知识,包括语法、变量、运算符、控制语句和函数等等。
一、C语言的基本语法1.程序结构2.注释注释是用来对程序进行解释说明的,编译器会忽略注释部分。
C语言中有两种注释方式,分别是单行注释和多行注释。
3.变量和数据类型C语言中变量用于存储数据,变量有不同的数据类型。
常用的数据类型包括整型、浮点型、字符型和布尔型。
4.格式化输入输出C语言中使用printf函数进行输出,使用scanf函数进行输入。
在输出时可以使用格式化字符来控制输出样式。
二、C语言的运算符1.算术运算符C语言中的算术运算符包括加法、减法、乘法、除法、取余等。
2.关系运算符关系运算符用来比较两个值的大小关系,结果为真或假。
3.逻辑运算符逻辑运算符用来进行逻辑运算,包括与、或、非。
4.赋值运算符赋值运算符用来将一个值赋给一个变量。
三、C语言的控制语句1.条件语句条件语句用来根据不同的条件来执行不同的代码块。
常见的条件语句有if语句、if-else语句和switch语句。
2.循环语句循环语句用来重复执行一段代码,常见的循环语句有while循环、do-while循环和for循环。
3.跳转语句跳转语句用来跳过一些语句或者退出循环。
四、C语言的函数函数是C语言中组织代码的一种方式,使用函数可以将代码分割成小块,方便重用和维护。
C语言中有系统函数和用户自定义函数。
1.函数的定义和声明函数的定义包括函数的返回类型、函数名、参数列表和函数体。
函数的声明告诉编译器函数的存在。
2.函数的调用和返回在程序中可以通过函数名和参数列表来调用函数。
函数执行完毕后,可以通过return语句返回一个值。
以上是C语言程序设计的基础知识的介绍。
通过学习这些基础知识,可以编写简单的C语言程序。
在学习过程中,不仅要掌握语法规则,还要注意编写清晰、易懂、可维护的代码。
C语言程序设计(PTA习题5-5使用函数统计指定数字的个数)
C语⾔程序设计(PTA习题5-5使⽤函数统计指定数字的个数)/*本题要求实现⼀个统计整数中指定数字的个数的简单函数*/#include <stdio.h>int CountDigit( int number, int digit ); //函数声明int main(){int number, digit;scanf("%d %d", &number, &digit);printf("Number of digit %d in %d: %d\n", digit, number, CountDigit(number, digit));return 0;}/* 你的代码将被嵌在这⾥ */int CountDigit( int number, int digit )//定义CountDigit这个计算数字个数的的函数{int i, number1;int n, count = 0;if(number!=0){if(number<0){number = -number; //将负数转为整数}else{while(number%10!=0){ //当number为个位数时退出循环i = number%10; //取出整数的个位数if(i==digit){ //判断是否为想要寻找的数字count++; //是的话count+1}number = number/10; //去掉最后⼀个数字}return count;}}else{ //如果这个整数为0,则0的个数为1count++; //count⾃增1return count;}}。
五C语言程序设计
五《C语言程序设计》实验四选择结构程序设计一、实验目的1、掌握分支语句的格式和功能。
2、掌握选择结构的程序设计。
3、掌握分支结构的嵌套。
二、实验内容与要求1、编程,计算下列分段函数值:x2+3x-4,x<0且x≠-4f(x)= x2-6x+5,0=x<10且x≠1及x≠5x2-4x-1,其他要求如下:(1)用if语句实现分支。
自变量x与函数值均采用双精度类型。
(2)自变量x值从键盘输入,且输入前要有提示信息。
(3)数据的输出格式采用以下形式:x=输入值,f(x)=计算值(4)分别以-3.0,-1.0,0.5,1.5,2.5,3.5,4.5,5.5为自变量,运行该程序。
记录结果。
(5)源程序以sy4_1.c存盘。
2、编程,将一个百分制成绩转换成等级制成绩。
具体要求如下:(1)百分制与等级制的对应关系如下:(2)用switch语句实现该功能。
(3)用键盘输入百分制成绩,输入前要有提示信息。
(4)要能判断输入数据的合理性,对于不合理的数据应输出错误信息。
(5)输出结果中应包含百分制成绩和成绩等级。
(6)分别输入成绩-10,99,60,85,70,101,45,运行该程序。
记录结果。
(7)源程序以sy4_2.c存盘。
三、思考题1、实现选择结构程序设计的方法有哪几种?各有什么特点?适用条件是什么?2、如何设置选择结构中的判断条件?它在程序设计中的意义何在?实验五循环结构程序设计(1)一、实验目的1、掌握循环的概念。
2、掌握三种常用的循环语句的格式和功能。
3、初步掌握循环结构的编程方法。
二、实验内容与要求1、编程,分别利用三种循环语句,求1+2+3+…50之和。
要求如下:(1)输出计算结果;数据的输出格式采用以下形式:1+2+3+…50=计算值(2)源程序分别以sy5_1.c、sy5_2.c、sy5_3.c存盘。
2、编程,穷举算法解百马百担问题(有100匹马驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问有大、中、小马各多少?)要求如下:(1)输出计算结果;在数据输出之前应有提示信息。
C语言2_5
(8)有关指针表示方法的区别
• 由于引进了指针的概念,在程序中要注意区分下面三种表 示方法所具有的不同意义。例如,有一个指针px , • px — 指针变量,它的内容是地址量。 • *px— 指针的目标变量,它的内容是数据。 • &px — 指针变量占用的存储区域的地址。 px
&px 图2.5_2 px、*px和&px的意义
•
例:合法的指针变量定义
static float *p; int *p1, *p2, *p3; char m, *da;
说明:
• 与其他变量一样,指针变量也有全局变量、 局部变量、静态局部变量、静态全局变量。 • 指针变量在未赋初值时不指向任何地址, 因此指针变量也必须初始化后才能被引用。
2、指针的使用
(3)相同类型的指针之间可以相互赋 值
• 也可以向一个指针赋初值为另一个指针变量,即把另一个 已经初始化的指针赋予另一个指针。这时,这两个指针指 向同一变量的内存地址。如下例所示:例如: int n; int *p1=&n; //指针p1的值初始化为变量n的地址 int *p2=p1; //指针p2的值初始化为指针变量p1 • 上面这种写法与下面的写法是等价的: int n; int *p1=&n; //指针p1的值初始化为变量n的地址 int *p2=&n; //指针p2的值初始化为变量n的地址
• 定义了一个指针后,在使用此指针前,必须首先给它赋一 个合法的值。否则,程序中对指针的使用就有可能导致系 统崩溃。可以在定义指针的同时,通过初始化来给指针赋 值,也可以在使用之前给指针赋值。下面首先来了解指针 的初始化。 • 由于指针是保存地址的变量,所以初始化时赋予它的初值 必须是地址量。指针初始化的一般形式是 : 存储类别 数据类型 *指针名=初始地址值; • 例如: int a,*pa=&a; • 将变量a 的内存地址作为初始值赋予int型指针pa。 • 上面这种写法与下面的写法是等价的: int a; int *pa=&a;
四川大学《c语言程序设计》课件-第5章 函数
用void定义参数 ,表示没有参数
void 函数名(void)
{ 声明语句序列 可执行语句序列 return ;
}
return语句后无需 任何表达式
【例】 计算整数n的阶乘n!
/* 函数功能: 用迭代法计算n!
返回值函数类入型口参数:函整数型名变量说n明表示阶乘的形阶参数表,函
函数返回值: 函返数回的n!功的能值
函数定义(Function definition)
返回值 类型
函数名标识符, 说明运算规则
参数表相当于 运算的操作数
类型 函数名(类型 参数1, 类型 参数2, ……)
{ 声明语句序列
可执行语句序列 return 表达式;
}
函数出口
返回运算的结果
函数定义(Function definition)
因变量
函数名
自变量
程序设计中的函数
程序设计中的函数不局限于计算 –计算类,如打印阶乘表的程序…… –判断推理类,如排序、查找……
问题的提出
读多少行的程序能让你不头疼? 假如系统提供的函数printf()由10行代码替换,那么你编过的程 序会成什么样子?
–实际上一个printf()有上千行代码 main()中能放多少行代码? 如果所有代码都在main()中,怎么团队合作? 如果代码都在一个文件中,怎么团队合作?
C程序的存储类别 – auto型(自动变量) – static型(静态变量) – extern型(外部变量) – register型(寄存器变量)
变量的存储类型( Storage Class)
变量的生存期(Lifetime )
The lifetime of a variable is the period of time during which memory is allocated to the variable
C语言程序设计》基本知识点
C语言程序设计》基本知识点C语言程序设计》教学基本知识点第一章C语言基本知识1.C源程序的框架尽管各个C源程序的功能千变万化,但框架是不变的,主要有:编译预处理、主函数()、函数n()等,主函数的位置不一定在最前面,可以在程序的中部或后面,主函数的名字固定为main。
2.C语言源程序的书写规则:1)C源程序是由一个主函数和若干个其它函数组成的。
2)函数名后必须有小括号,函数体放在大括号内。
3)C程序必须用小写字母书写。
4)每句的末尾加分号。
5)可以一行多句。
6)可以一句多行。
7)可以在程序的任何位置加注释。
3.语句种类语句是程序的基本成分,程序的执行就是通过一条条语句的执行而得以实现的,根据表现形式及功能的不同,C语言的基本语句可以分为五大类。
1)流程控制语句流程控制语句的功能是控制程序的走向,程序的流程有三种基本结构:顺序结构、分支结构和循环结构,任何复杂的程序都可以由这三种基本结构复合而成。
其中后两种结构要用特定的流程控制语句实现。
2)表达式语句表达式语句的形式是:表达式。
即表达式后跟一分号“;”,分号是语句结束符,是一个语句必不可少的成分。
表达式和表达式语句的区别在于表达式代表的是一个数值,而表达式语句则代表一种动作。
最常见的表达式语句是赋值语句。
3)函数挪用语句函数挪用语句实践上也是一种表达式语句,形式为:在一次函数挪用的小括号后面加上一个分号。
(4)空语句空语句的形式就是一个分号,它不代表任何动作,常常作为一个意义迁移转变点利用。
5)复合语句复合语句从形式上看是多个语句的组合,但在语法意义上它只相当于一个语句,在任何单一语句存在的地方都可以是复合语句。
注意复合语句中最后一个语句末尾的分号不能少。
复合语句右大括号后面没有分号。
4.运算符用来表示数据各种操作的符号称为运算符。
运算符实际上代表了一种类型数据的运算规则。
不同的运算符具有不同的运算规则,其操作的数据类型必须符合该运算符的要求,运算结果的数据类型也是固定的。
C语言程序设计(第3版)何钦铭-颜-晖-第5章--函数
第5章函数【练习5-1】使用函数求1到n之和:输入一个正整数n,输出1〜n之和。
要求自定义和调用函数sum(n)求1〜n之和。
若要计算m〜n(m<n)之和,又该如何定义函数?试编写相应程序。
解答:#include<stdio.h>intsum(intn);intmain(void){intn;intsum;printf("Entern:")scanf("%d",&n);printf("sum=%d\n",sum(n));return0;}intsum(intn){intresult,i;result=0;for(i=1;i<=n;i++)result=result+i;returnresult;}若要计算m〜n(m<n)之和,则需要在main()中定义2个变量m和n:scanf("%d%d",&m,&n);printf("sum=%d\n",sum(m,n));同时在函数定义时需设置2个形参:intsum(intm,intn){intresult,i;result=0;for(i=m;i<=n;i++)result=result+i;returnresult;}【练习5-2】使用函数找最大值:输入2个数,输出其中较大的数。
要求定义和调用函数max(a,b)找出并返回a、b中较大的数。
试编写相应程序。
解答:#include<stdio.h>doublemax(doublea,doubleb);intmain(void)inta,b;printf(“Inputaandb:”);scanf("%lf%lf",&a,&b);printf("max=%lf\n",max(a,b));return0;}doublemax(doublea,doubleb){if(a>b)returna;elsereturnb;}【练习5-3】数字金字塔:输入一个正整数n,输出n行数字金字塔。
C语言程序设计第5章“使用指针参数交换两个变量值”案例
使用指针参数交换两个变量值”案例C主讲教师崔玲玲 5.1 “【案例说明】用函数实现两个变量值的交换使其在主调函数和被调函数中的值一致。
要求用指针变量作为函数参数。
程序运行结果如图 5.1所示。
图 5.1 使用指针参数交换两个变量值【案例目的】 1 熟悉如何定义指针变量掌握将指针变量作为函数参数的方法。
2 掌握通过指针参数由被调函数向主调函数传递多个值的方法。
【技术要点】由于变量的值始终存放在内存单元中因此要交换两个变量的值只需交换这两个变量对应的存储单元的值即可这就需要知道两个变量的地址。
也就是说需要保证主调函数与被调函数中所要交换的两个数的内存单元是同一内存单元即传递的参数是内存单元的地址而不是内存单元中的值。
【相关知识及注意事项】1. 指针和地址2. 指针变量的定义及初始化3. 指针变量的赋值4. 指针变量的引用 5. 指针作为函数参数 5.2 “有序数列的插入”案例【案例说明】用指针法编程插入一个数到有序数列中。
程序运行结果如图 5.7所示。
图 5.7 有序数列的插入【案例目的】 1 熟悉如何定义指针变量掌握将指针变量指向一维数组元素的方法。
2 掌握如何在一个有序的数列中查找合适的位置。
3 掌握如何将一个数插入到一个有序数列中。
【技术要点】 1 有序数组中插入一个数的关键是找到该数据插入的位置然后将插入位置及其后的所有元素均后移一位在空出的位置放入待插入的数据。
例如在13、27、38、49、65、76、97这列有序数据中插入53这个数成为新的有序数列13、27、38、49、53、65、76、97。
2 定义数组时必须多开辟一个存储单元用于存放待插入的数据。
【相关知识及注意事项】1. 指针变量的运算 2. 指针与一维数组 5.3 “两个字符串首尾连接”案例【案例说明】编写程序将两个字符串首尾连接起来。
要求用字符指针变量处理。
程序运行结果如图 5.9所示。
图 5.9 两个字符串首尾连接【案例目的】 1 学会定义基类型为字符型的指针变量并将指针变量指向串首的操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8
5.1.2 函数的分类
❖ ⑴从函数定义的角度分类
main( )
//主函数
{
void max2(int x, int y); //max2函数声明
int a,b;
//声明部分,定义变量
printf("Please input two integers:\n"); //调用printf函数
scanf("%d,%d",&a,&b); //调用scanf函数
#include <stdio.h>
int dif(int x, int y)
{
int z;
z = x > y ? x-y : y-x;
return( z );
}
main( )
//主函数
{
int a,b,c;
//声明部分,定义变量
printf("Please input two integers:\n"); //调用printf函数
▪ ⑴当被调函数的函数定义出现在主调函数之前时。 ▪ ⑵如果已在所有函数定义之前,在函数外预先说明了各
个函数的类型。 ▪ ⑶对库函数的调用不需要再作说明,但必须把该函数的
头文件用include命令包含在源文件前面。 ▪ ⑷在Turbo C环境下,如果被调函数的返回值是整型或
字符型时,可以不对被调函数作说明。在VC环境下,即 便被调函数的返回值是整型或字符型,当被调函数的函 数定义出现在主调函数之后时,一定要先声明函数,再 使用。
▪ ②无返回值函数。此类函数用于完成某项特定的处理任 务,执行完成后不向调用者返回函数值。这类函数类似 于其它语言的过程。由于函数无须返回值,用户在定义 此类函数时可指定它的返回值为“空类型”,空类型的 说明符为“void”。
10
5.1.2 函数的分类
#include <stdio.h>
//包含预处理命令
4
5.1 函数基础知识
C程序
源程序文件1
...
源程序文件n
函数1 ... 函数n
函数1
... 函数m
❖ 由图可以看出一个C语言程序可以包含若干个源文 件,而每个源文件又是由若干个函数构成的,因 此,也可以说函数是C语言源程序的基本模块, 程序的功能是通过对函数模块的调用来实现的。
5
5.1.1 函数的概念
▪ ①类型标识符和函数名合称为函数头,其中类型标识符 用于确定函数类型即该函数的返回值类型,例如整型、 实型、字符型等。省略类型标识符时默认为int类型。 函数名唯一标识函数的名称,通过函数名可实现函数的 调用。C语言中函数名必须是合法的标识符,即满足标 识符的命名规则。在很多情况下都不要求无参函数有返 回值,此时函数类型符可以写为void。
▪ ①库函数。库函数由C系统提供,用户无须定义,也不 必在程序中作类型说明,只需在程序前包含该函数原型 的头文件,即可在程序中直接调用。在本书第二章对库 函数作了详细说明,在C程序中大量应用了库函数。例 如,printf 、scanf 、getchar 、putchar、gets、 puts、strcat等函数。
▪ ②用户自定义函数。用户自定义函数是用户根据需要编 写的函数。用户自定义函数不仅要在程序中定义函数本 身,而且在主调函数模块中还必须对该被调函数进行类 型说明,然后才能使用。
9
5.1.2 函数的分类
❖ ⑵根据函数调用是否有返回值分类
▪ ①有返回值函数。此类函数被调用执行完后将向调用者 返回一个执行结果,称为函数返回值。如数学函数即属 于此类函数。 由用户定义的这种要返回函数值的函数, 必须在函数定义和函数说明中明确返回值的类型,如例 5-1中的max1函数,执行完后将向它的调用者(main函 数)返回z的值,并赋给变量c。
❖ 函数,就是一个能够完成一定功能的执行代码段。 ❖C语言程序的所有功能都是通过函数之间的调用来
实现的。使用函数有以下优点:
▪ ①程序结构清晰,可读性好。 ▪ ②减少重复编码的工作量。 ▪ ③可多人共同编制一个大程序,缩短程序设计周期,提
高程序设计和调试的效率。
❖可以将一些重复使用的功能或操作定义成一个函 数,在其他函数中如果需要可以直接调用这个函 数,而省掉了很多重复性的工作。并且使程序结 构看起来更加简单清晰。
max2(a,b);
//调用max2函数,无返回值
}
void max2(int x, int y) //定义max2函数
{ int z;
if(x>y) z=x; else z=y;
printf("max=%d\n", z); }
11
5.1.2 函数的分类
❖ ⑶从主调函数和被调函数之间数据传送的角度分类
在程序需要扩充功能的时候,用一个编好的函数 取代它。这类函数称为空函数,其定义形式为: ❖类型标识符 函数名( ) ❖{ ❖} ❖ 函数体没有任何语句,调用此函数也不能完成任 何实际操作,空函数的功能是使程序结构清晰, 需要时可以用其它函数代替。
17
5.2 函数原型与函数调用
本节内容
5.2.1 函数的原型 5.2.2 函数的参数 5.2.3 函数的调用 5.2.4 函数的返回值
22
5.2.2 函数的参数
❖ 函数的参数可分为形参和实参两种。 ❖ 在定义函数时函数名后括号内的变量表列称为形
式参数表列,简称为形参。
▪ 只有在函数被调用时,该函数的形参才在内存中开辟空 间,一旦调用结束,所占用的存储空间也就随之释放。 因此,形参变量只在整个函数体内都可以使用。
❖ 调用函数时函数名后括号内的变量表列称为实在 参数表列,简称为实参。
18
5.2.1 函数的原型
❖ 编译程序在处理函数调用时,首先要获得执行被 调函数的接口信息,确认函数调用语句的正确性, 然后进入被调函数执行。因此对被调函数有以下 要求:
▪ ①被调函数必须是已经存在的用户自定义函数或者库函 数。
▪ ②如果调用的是库函数,在程序的开头必须用#include <*.h>或#include“*.h”将库函数所在头文件包含进来。 头文件以字母h为后缀,其中包含了库函数的原型说明。
{ switch(opr) {
case '+':printf("%5.2f%c%5.2f=%6.2f\n",x,opr,y,x+y);return;
case '-':printf("%5.2f%c%5.2f=%6.2f\n",x,opr,y,x-y);return;
case '*':printf("%5.2f%c%5.2f=%6.2f\n",x,opr,y,x*y);return;
▪ ③如果使用的是自定义函数,在主调函数中应对被调函 数作原型说明。通常函数原型说明放在主调函数的开始 位置或整个程序的开始。
19
5.2.1 函数的原型
❖ 在C语言程序中有两种方式可以说明函数原型。 ❖①函数类型 函数名(数据类型1,数据类型
2,… ); ❖②函数类型 函数名(数据类型1 形式参数1, 数
case '/':printf("%5.2f%c%5.2f=%6.2f\n",x,opr,y,x/y);return;
default :printf("Operator error! \n"); } }
21
5.2.1 函数的原型
❖ 实际在C语言中,如果有以下几种情况时可以在主 调函数中省去对被调函数的说明:
6
5.1.1 函数的概念
#include <stdio.h> main( )
//包含预处理命令 //主函数
{
int max1(int x, int y);
//max1函数声明
int a,b,c;
//声明部分,定义变量
printf("Please input two integers:\n"); //调用printf函数
12
5.1.3 函数的定义
❖5.1.3.1 函数定义的形式 ❖ 函数定义也就是确定该函数应完成什么功能以及
如何实现这一功能。函数分为无参函数和有参函 数。 ❖ ⑴无参函数定义的一般格式如下所示: ❖类型标识符 函数名 ( ) ❖{ ❖ 声明部分 ❖ 语句部分 ❖}
13
5.1.3 函数的定义
❖ 说明:
scanf("%d,%d",&a,&b); //调用scanf函数
c=max1(a,b);
//调用max1函数
printf("max=%d\n", c);
//调用printf函数
} int max1(int x, int y)
//定义max1函数
{ int z;
if(x>y) z=x; else z=y;
据类型2 形式 参数2,…);
▪ 函数类型是该函数返回值的数据类型。如果是无值型则 表示函数没有返回值。
▪ 函数名为C语言的合法标识符。 ▪ 括号中的内容为该函数的形式参数说明。可以只有数据
类型而没有形式参数, 也可以两者都有。
20
#include <stdio.h>
main( )
{
void calc(float x,float y,char opr);