C语言课件第7章
- 格式:ppt
- 大小:3.92 MB
- 文档页数:38


1
章 节 第7章 函数
课 题 用户自定义函数
学习内容 掌握C语言函数的定义格式和调用方法
学习重点 C语言函数的定义格式和调用方法
学习难点 C语言函数的调用
学 习 程 序
一、知识回顾 问题提出
1、想一想:C语言函数的组成结构?
2、C语言函数的调用过程?
二、自主学习 互动探究
知识点一:函数的定义
1 .无参函数的定义形式
类型标识符 函数名( )
{ 说明部分
语句 }
2. 有参函数的定义形式
类型标识符 函数名(形式参数表列)
{说明部分
语句}
方式1
函数返回值类型名 函数名(参数列表)
参数类型说明
{ 局部变量说明;
语句序列; } 如: int max(a,b)
int a,b;
方式2
函数返回值类型名 函数名(参数类型说明及参数列表)
{ 局部变量说明;
语句序列; } 如: int max(int a,int b)
3. “空函数”的定义形式
类型标识符 函数名( ) { }
【例7-1】定义符号函数sign。
int sign(x) /*函数返回值类型如未说明,默认为int,建议给出函数类型说明*/
int x; /*形式参数说明*/
{ int y; /*函数体局部变量*/ 隆回县职业中专学校教学、学习设计方案
专 业 科: 信息科 年级: 二 科目: C程序
方案设计: 史春水 方案审核: 备课节次:
2 y=x>0?1:(x==0?0:-1);
return y; /*返回函数值*/
}
知识点二:函数各部分作用:
1)函数的说明部分
函数说明部分用于描述函数的类型, 函数名, 参数表及参数类型。
第七章函数
一、选择题
1.如果在一个函数的复合语句中定义了一个变量,则该变量()。
A) 只在该复合语句中有效,在该复合语句外无效
B) 在该函数中任何位置都有效
C) 在本程序的源文件范围内均有效
D) 此定义方法错误,其变量为非法变量
2.C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是:。
A)地址传递; B)单向值传递;
C)双向值传递; D)由用户指定传递方式
3.以下关于C语言程序中函数的说法正确的是:。
A)函数的定义可以嵌套,但函数的调用不可以嵌套;
B)函数的定义不可以嵌套,但函数的调用可以嵌套;
C)函数的定义和调用均不可以嵌套;
D)函数的定义和调用都可以嵌套。
4.以下正确的函数形式是:。
A)double fun(int x,int y) B)fun (int x,y)
{z=x+y;return z;} {int z;return z;}
C)fun(x,y) D)double fun(int x,int y)
{int x,y; double z; {double z;
z=x+y; return z;} z=x+y; return z;}
5.以下说法不正确的是:。
C 语言规定
A)实参可以是常量、变量或表达式
B)形参可以是常量、变量或表达式
C)实参可以是任意类型
D)形参应与其对应的实参类型一致或赋值兼容
6.在下面的函数声明中,存在着语法错误的是。
A)BC(int a, int);B) BC(int,int);
C)BC(int,int=5);D) BC(int x, int y);
7.以下错误的描述是。
函数调用可以
数组
7.1
#include
void main()
{int i,j,n,a[101];
for(i=1;i<=100;i++)
a[i]=i;
for(i=2;i
for(j=i+1;j<=100;j++)
{if(a[i]!=0 && a[j]!=0)
if(a[j]%a[i]==0)
a[j]=0;
}
printf("\n");
for(i=2,n=0;i<=100;i++)
{if(a[i]!=0)
{printf("%5d",a[i]);
n++;
}
if(n==10)
{printf("\n"); n=0;
}
}
}
7.2题
#include
void main()
{int i,j,min,temp,a[11];
printf("Enter data:\n");
for(i=1;i<=10;i++)
{printf("a[%d]=:",i);
scanf("%d",&a[i]);
}
printf("\n");
for(i=1;i<=10;i++)
printf("%5d",a[i]);
printf("\n");
for(i=1;i<=9;i++) {min=i;
for(j=i+1;j<=10;j++)
if(a[min]>a[j]) min=j;
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
printf("\n The sorted numbers:\n");
for(i=1;i<=10;i++)
printf("%5d",a[i]);
}
7.6题
#define N 11
C语⾔教材第七章指针实验
第七章指针
第⼀部分知识训练
【知识要点】1. 地址与指针
指针变量的概念:⽤⼀个变量专门来存放另⼀个变量的地址。2. 指向变量的指针变量
指针变量的形式:基类型 *指针变量名;&: 取地址运算符;*:指针运算符。3. 指针与数组
引⽤⼀个数组元素可以⽤下标法和指针法;可以⽤数组名作函数的参数。4.指针与函数
函数指针变量定义的⼀般形式为:类型说明符 (*指针变量名)();
⼀个函数的返回值可以是⼀个函数。
【典型习题与解析】5. char * const p;
char const * p
const char *p
上述三个有什么区别?
【解析】char * const p; //常量指针,p的值不可以修改;
char const * p;//指向常量的指针,指向的常量值不可以改;
const char *p; //和char const *p。
6. main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
}
输出结果是什么?
【解析】
答案:输出:2,5*(a+1)就是a[1],*(ptr-1)就是a[4],执⾏结果是2,5。
&a+1不是⾸地址+1,系统会认为加⼀个a数组的偏移,是偏移了⼀个数组的⼤⼩(本例是5个int)。
int *ptr=(int *)(&a+1);则ptr实际是&(a[5]),也就是a+5。
原因如下:1)&a是数组指针,其类型为 int (*)[5];⽽指针加1要根据指针类型加上⼀定的
值,不同类型的指针+1之后增加的⼤⼩不同。2)a是长度为5的int数组指针,所以要加 5*sizeof(int),所以ptr实际是a[5],
但是prt与(&a+1)类型是不⼀样的(这点很重要),所以prt-1只会减去sizeof(int*) a,&a的地址是⼀样的,但意思不⼀样。
3)a是数组⾸地址,也就是a[0]的地址,&a是对象(数组)⾸地址,a+1是数组下