c语言第8章函数

合集下载

C语言程序设计第1至8章复习知识点总结

C语言程序设计第1至8章复习知识点总结

printf("max=%d\n",c);
/*输出c的值*/
}
int max(int x, int y) {
int z; if (x>y) z=x; else z=y; return (z); }
/*定义max函数,函数值为整型,x、y为形参,整型*/
/*定义内部变量z*/ /*比较x,y的大小,如果x大于y,则执行z=x*/ /*否则执行z=y*/ /*将z的值返回,通过max带回调用处*/
整理课件
c语言第一至八章总结
2 基本数据类型
1、整型
2、实型
3、字符型
实型
小数形式 :3.14 指数形式:3.14*103 =3.14e003
标准化指数形式:3.14*103
对应 只有一个大于0的整数
字符
ASCII表
例:以下选项中,不能作为合法常量的是( B ) A) 1.234e04 B)1.234e0.4 C) 1.234e+4 D)1.234e0
long
注意:每一步运算都要先
unsigned
转换为同一类型 例:

int a=3,b=4;
int
char,short float c=3.0/4,d=b/a;
printf("%f,%f",c,d);
整理课件
c语言第一至八章总结
数据类型的强制转换
例2.8强制类型转换 #include<stdio.h> void main() {
程序设计语言 机器语言 机器语言
可执行
不可以
不可以
可以
文件名后缀
.c 整理课.o件bj
.exe

《C语言程序设计》第8章指针

《C语言程序设计》第8章指针
}
10.3.3 指针变量和数组作函数参数 数组名作形参时,接收实参数组的起始地址;
作实参时,将数组的起始地址传递给形参数组。
引入指向数组的指针变量后,数组及指向数 组的指针变量作函数参数时,可有4种等价形式 (本质上是一种,即指针数据作函数参数):
(1)形参、实参都用数组名 (2)形参、实参都用指针变量 (3)形参用指针变量、实参用数组名 (4)形参用数组名、实参用指针变量
(4)指针变量的++、--与&、*的结合
对于指针变量的++、--与&、*的结合 使用,关键要注意按照运算符的优先级和 结合性进行。
例如: int a=2, *p; p=&a;
•表达式:(*p)++,按运算符的优先级,等价于 a++。其含义为:取出指针变量p所指向的内存单 元的值(即a的值),a的值加1,送回a的内存单 元,a的值变为3,p的值未发生变化,仍然指向 变量a。
程序说明:printf("%s\n",s);语句 通过指向字符串的指针变量s,整体引
用它所指向的字符串的原理:系统首先输出s 指向的第一个字符,然后使s自动加1,使 之指向下一个字符;重复上述过程,直至遇到 字符串结束标志。
main() { char string[ ]=”I love Beijing.”; printf(“%s\n”,string); }
3.数组元素的引用 数组元素的引用,既可用下标法,也可用
指针法。
10.3.2 通过指针引用数组元素 如果有“int a [10],*p=a;” ,则: (1)p+i和a+i都是数组元素a [i]的地址。
(2)*(p+i)和*(a+i)就是数组元素a [i]。 int a [3]; a [0]——*a a [1]——*(a +1) a [2]——*(a +2)

C语言全部章节习题集(参考答案)

C语言全部章节习题集(参考答案)
}
选择结构答案
一、单项选择题
1.B 2.A 3.D 4.C 5.D 6.B 7.C
二、填空题
1. 5 5 4
5 5 4
3 3 4
2. 4 0
3. VeryGood
Good
VeryGood
A. 8 B. 4 C. 2 D. 出错
14、设a=1,b=2,c=3,d=4,则表达式:a<b? a : c<d? a : d的结果为( D )。
A. 4 B. 3 C. 2 D. 1
15、设a 为整型变量,不能正确表达数学关系:10<a<15的 C 语言表达式是( A )。
{ float a,b,temp;
printf("input a and b:");
scanf("%d,%d",&a ,&b);
temp = a; a = b; b = temp;
printf("a=%d , b=%d\n", a , b);
scanf(“%f”,&t);
if(t>=90) ch=’A’;
else if(t>=80) ch=’B’;
24、下列不正确的转义字符是( C )。
A. \\ B. \' C. 074 D. \0
二、填空题:
1、C 语言中的逻辑值“真”是用 1 表示的,逻辑值“假”是用 0 表示的。
2、若x和n都是int型变量,且x的初值为12,n的初值为5,则计算表达式x%=(n%=2)后x的值为 0 。
5、判断变量 a、b 的值均不为 0 的逻辑表达式为a!=0&&b!=0 。

C语言程序设计 第3版 第8章 函数

C语言程序设计 第3版 第8章 函数

s=a+b;
return s;
}
main()
//主函数
{
int s;
s=sum();
printf("s=%d\n",s);
}
运行结果
2 3↙ s=5
C语言程序设计
2.函数的定义
无返回值无参数 无返回值有参数
有返回值无参数 有返回值有参数
一般形式:
类型标识符 函数名(形式参数表列) {
函数体; return 表达式; }
调用方式
函数调用的一般形式:
函数名(实际参数表) 实际参数表中的参数可以是常数、变量或表达式,各实参之间用逗号分隔。
调用方式:
(1)函数表达式:函数作为表达式中的一项出现在表达式中,这种方式要求函数有返回值。 例如:s=sum(x,y);把sum的返回值赋予变量s。
(2)函数语句:函数调用的一般形式加上分号即构成函数语句,这种方式不要求函数有返回值。 例如:sum(x,y);以函数语句的方式调用函数。
void sum(int a,int b) //自定义函数
{
int s;
s=a+b;
ห้องสมุดไป่ตู้
printf("s=%d\n",s);
} main()
//主函数
{
int x=2,y=3;
sum(x,y);
}
运行结果
s=5
C语言程序设计
2.函数的定义
无返回值无参数 无返回值有参数
有返回值无参数 有返回值有参数
一般形式:
类型标识符 函数名( ) {
函数体; return 表达式; }
注意说明:
(1)函数的类型实际上是函数返回值的类型。

C语言程序设计(第八章)

C语言程序设计(第八章)
字符读写函数fgetc()和fputc()是以字符(字节)为单位
的读写函数。 每次可从文件读出或向文件写入一个字符。
第八章
1.读字符函数fgetc()
fgetc() 函数的功能是从指定的文件中读一个字符,函
数调用的形式为:
字符变量 = fgetc(文件指针);
例如:
ch = fgetc(fp);
的意义是从打开的文件fp中读取一个字符并送入ch中 。
(1)字符读/写函数 :fgetc()/fputc()
(2)字符串读/写函数:fgets()/fputs()
(3)数据块读/写函数:freed/()fwrite()
(4)格式化读/写函数:fscanf()/fprinf()
以上函数原型都在头文件stdio.h中加以声明。
第八章
8.5.1字符读/写函数 :fgetc()/fputc()
关闭文件则断开指针与文件之间的联系,禁止再对该文
件进行操作。
第八章
8.3.1 文件打开的函数fopen()
open函数用于打开一个文件,其调用的一般形式为: 文件指针名 = fopen(文件名, 使用文件方式);
“文件指针名”:必须是被说明为FILE 类型的指针变量。
“文件名”:被打开文件的文件名,“文件名”是字符串常 量、字符数组或字符指针。 “使用文件方式”:指文件的类型和操作要求。
/* 输出系统提示信息 */
上面程序段的意义是,如果返回的指针为空,表示不能 打开test.dat文件,则给出提示信息“打开文件test.dat出 错!”,然后输出系统提示信息,当用户从键盘敲任一键后 执行exit(1)退出程序 。
第八章
8.3.2 文件关闭的函数fclose()

C语言程序设计教程第8章文件

C语言程序设计教程第8章文件

8.2.1 文件的打开与关闭
2. 文件关闭函数fclose() 文件一旦使用完毕,为避免文件数据丢失等错误的发生, 可用文件关闭函数将其关闭。 函数调用的一般形式是: fclose(文件指针); 例如: fclose(fp); 正常完成关闭文件操作时,fclose()函数返回值为0, 如果返回非零值则表示有错误发生。
检查各种输入输出函数对文件进行读写时是否 出错,返回值为0表示未出错,否则表示有错。
8.2.2 文件检测与定位
2.文件的定位函数 在文件内部有一个位置指针,用来指向文件中当前被读写 的字节。 在文件打开时,该指针总是指向文件的第一个字节。 它不同于文件指针,文件指针是指向整个文件的,须在 程序中定义说明,只要不重新赋值,文件指针的值是不变的。 文件内部的位置指针是指示文件内部的当前读写位置, 比如每读写一次,该指针均会向后移动,它不需在程序中定 义说明,而是由系统自动设置的。
在stdio.h中定义了两个文件操作过程中经常用到的符号常量
8.2 文件操作
另外 在stdio.h中定义了两个文件操作过程中经常用到的符号常量 NULL:表示空指针,值为0 EOF: 表示文件末尾,值为-1 通过文件指针就可以完成对文件的操作 文件操作的过程一般有如下步骤:
1. 说明一个文件指针; 2. 通过文件名打开文件,并为文件指针赋值; 3. 通过文件指针对文件进行存取(即读或写操作) ; 4. 关闭文件。
8.2.1 文件的打开与关闭
1. 文件打开函数fopen()
文件在进行读写操作之前要先打开,使用完毕要关闭
所谓打开文件,实际上是建立文件的各种信息,并使 文件指针指向该文件,以便进行其它操作。 fopen()函数用来打开一个文件,其调用的一般形式为:

C语言第七讲

C语言第七讲
*存放在CPU的通用寄存器中,目的是提高执行速度 *long,double,float不能设为register型,因为超过寄存 器长度
•static(静态)型:存放在一般内存区域中,生命期长 •extern(外部)型:用于说明变量是外部的,而不能
用于定义一个变量。
8.8 局部量和全局变量
•局部变量:作用域仅仅局限于定义它的函数,在不
8.4 函数的调用
函数调用:就是一个函数(调用函数)调用另一个
函数(被调用函数) 。 调用前要先说明函数原型,即在调用函数的说明部分 按如下形式说明: 类型说明符 被调用函数名(含类型说明的形参表)
调用形式: 函数名(实参表) 嵌套调用:C语言不允许嵌套定义函数
但可以嵌套调用函数
递归调用:函数直接或间接调用自身
文件包含:是指一个源文件可以将另外一个指定的源文 编译预处理: 是C语言区别于其它高级语言的一个重要
编译预处理——文件包括
C语言编译系统中以“.h”为扩展名的文件称 为头文件,在使用C语言编译系统提供的库函数 进行程序设计时,经常需要在源程序中包含相应 的“头文件”,如“stdio.h”、“string.h”等 。 用C语言设计程序时,通常将全局变量的定 义、符号常量的定义、结构类型的定义以及函数 类型说明等语句放在头文件中。这样,对于需要 该文件的源程序来讲,都可以通过#include语句 将其包含到程序中。正确使用#include语句,将 会减少不必要的重复工作,提高编程效率。
“值传递”举例
main() 每调用一次返回一个值,调用结束立即释 函数原型:在函数使用前对函数的返 {float fc(); 放形参所占内存单元,下次调用重新分配 回类型和参数变量类型进行说明的语句 float sum; sum=fc(50)+fc(100)+fc(150)+fc(200); printf(“sum=%f ”,sum);} float fc(int n) {float s=0; int i; for(i=1; i<=n; i++) s+=1/(float)i; return(s);}

C语言程序设计-第三版-谭浩强主编第6—8章课后习题答案

C语言程序设计-第三版-谭浩强主编第6—8章课后习题答案

C语言程序设计-第三版-谭浩强主编第6—8章课后习题答案第六章循环语句6.1输入两个正数,求最大公约数和最小公倍数.#includevoidmain(){inta,b,num1,num2,temp;printf(\请输入两个正整数:\\n\canf(\if(num1temp=num1;num1=num2;num2=temp;}a=num1,b=num2;while(b!=0){temp=a%b;a=b;b=temp;}printf(\它们的最大公约数为:%d\\n\printf(\它们的最小公倍数为:%d\\n\}编译已通过6.2输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数.解:#includevoidmain(){charc;intletter=0,pace=0,degit=0,other=0;printf(\请输入一行字符:\\n\while((c=getchar())!='\\n'){if(c>='a'&&c<='z'||c>'A'&&c<='Z')letter++;eleif(c=='')pace++;eleif(c>='0'&&c<='9')digit++;eleother++;}printf(\其中:字母数=%d空格数=%d数字数=%d其它字符数=%d\\n\digit,other);}6.3求(n)=a+aa+aaa++aaa之值,其中a是一个数字,n表示a的位数。

解:voidmain(){inta,n,count=1,n=0,tn=0;printf(\请输入a和n的值:\\n\canf(\printf(\while(count<=n){tn=tn+a;n=n+tn;a=a某10;++count;}printf(\\\n\}6.4求(即1+2!+3!+4!++20!)voidmain(){floatn,=0,t=1;for(n=1;n<=20;n++){t=t某n;=+t;}printf(\\\n\}阶乘利用递归,再求和:#includeuingnamepacetd;longFunc(intn){ if(1==n)returnn;if(n>1)returnn某Func(n-1);}main(){long=0;inti=1;while(i<=6){=+Func(i);i++;}cout<6.5求voidmain(){intk,N1=100,N2=50,N3=10;float1=0.0,2=0.0,3=0.0;for(k=1;k<=N1;k++)/某计算1到100的和某/{1=1+k;}for(k=1;k<=N2;k++)/某计算1到50各数平方和某/{2=2+k某k;}for(k=1;k<=N3;k++)/某计算1到10各数倒数之和某/{3=3+1.0/k;}printf(\总和=%8.2f\\n\}已通过intmain(){intk=1,i=11,j=51;float=0.0;while(k<=10){=+k+k某k+1.0/k;while(k==10&&i<=50){=+i+i某i;while(i=50&&j<=100){ =+j;j++;}i++;}k++;}}6.6所谓“水仙开数”是指一个3位数,其个位数字立方和等于该数本身。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第8章函数1.以下程序的输出结果是( )A、6 9 9B、6 6 9C、6 15 15D、6 6 15int d=1;fun(int p){ static int d=5;d+=p;printf("%d ",d);return(d);}main( ){ int a=3;printf("%d \n",fun(a+fun(d)));}答案:C注解:函数fun调用两次,第一次调用的实参是全局变量d的值1,在函数调用执行过程中,输出的是局部静态变量d;第二次调用的实参是第一次调用的返回值和变量a的和,输出的仍是局部静态变量d的值。

注意静态变量的定义和初始化是在第一次使用时进行的,在以后的使用过程中,保留上一次的值,不再初始化。

2.若有以下调用语句,则不正确的fun函数的首部是()A、void fun(int m,int x[])B、void fun(int s,int h[41])C、void fun(int p,int *s)D、void fun(int n,int a)main( ){ …int a[50],n;…fun(n,&a[9]);…}答案:D注解:从主函数中fun函数的调用格式可以看出,fun函数的两个形参的类型,第一个形参是整型变量,第二个形参是变量的地址,则必须是数组名或者是指针。

3.有如下函数调用语句func(rec1,rec2+rec3,(rec4,rec5));该函数调用语句中,含有的实参个数是()A、3B、4C、5D、有语法错答案:A注解:该函数调用语句中,含有的实参分别是rec1,rec2+rec3表达式计算后的值和(rec4,rec5)逗号表达式计算后值。

4.有如下程序int runc(int a,int b){ return(a+b);}main( ){ int x=2,y=5,z=8,r;r=func(func(x,y),z);printf("%d\n",r);}该程序的输出的结果是()A、12B、13C、14D、15答案:D注解:函数func第一次调用的返回值作为第二次调用的实参,第一次调用func(x,y)即func(2,5)的返回值是7,第二次调用func(7,z)即func(7,8)的返回值是15,所以r的值为15。

5.有如下程序long fib(int n){ if(n>2)return(fib(n-1)+fib(n-2));else return(2);}main( ){printf("%d\n",fib(3));该程序的输出结果是()A、2B、4C、6D、8答案:B注解:函数fib是递归函数,递归终止条件是n<=2。

则fib(3)的调用过程是:条件n>2成立,则再次调用fib(2)和fib(1),而fib(1)和fib(2)在函数调用时,不再递归调用,均返回2到它的上一级调用,即到调用fib(3)的执行过程,所以fib(3)调用返回值为4。

6.在C语言中,函数的隐含存储类别是()A、autoB、staticC、externD、无存储类别答案:C7.以下所列的各函数首部中,正确的是()A、void play(var:Integer,var b:Integer)B、void play(int a,b)C、void play(int a,int b)D、Sub play(a as integer,b as integer)答案:C注解:选项A、D不是C语言的函数定义格式,C语言在函数定义的函数头部,形参的定义是每一个形参都要有自己的关键字。

8.以下程序的输出结果是()A、0B、29C、31D、无定值fun(int x,int y,int z){ z=x*x+y*y;}main( ){ int a=31;fun(5,2,a);printf("%d",a);}答案:C注解:函数fun的调用时,参数传递是传值方式,所以形参值的变化并不会影响实参值的变化,故变量a的值保留原值。

9.当调用函数时,实参是一个数组名,则向函数传送的是()A、数组的长度B、数组的首地址C、数组每一个元素的地址D、数组每个元素中的值答案:B注解:函数调用时,参数是数组名或指针时,参数传递是传地址方式。

10.以下只有在使用时才为该类型变量分配内存的存储类说明是()A、auto和staticB、auto和registerC、register和staticD、extern和register答案:B11.以下程序的输出结果是()A、1B、2C、3D、4long fun( int n){ long s;if(n= =1 || n= =2)s=2;else s=n-fun(n-1)return s;}main( ){ printf("%ld\n",fun(3));}答案:A注解:fun函数调用是递归调用,主函数中fun(3)调用的执行过程是:初始n=3,if语句的条件n= =1 || n= =2不成立,执行else子句,再次调用fun函数,s=3-fun(2),则此次执行过程中,if语句的条件n= =1 || n= =2成立,执行if后的子句s=2;,然后再返回到调用它的上一级函数fun(3),fun(3)调用再返回到主函数,返回值为1。

12.以下程序的输出结果是()main( ){ int num= 0;while(num<=2){ num++;printf("%d\n",num);}A、1B、1C、1D、l2 2 23 34答案:B注解:循环的执行过程是:(1)变量num的初值为0,则条件num<=2满足,执行循环体,输出num自增后的值1;(2)变量num的值变为1,条件满足,输出num自增后的值2;(3)变量num的值变为2,条件满足,输出num自增后的值3;(4)变量num的值变为3,条件不满足,则退出循环的执行。

13.以下程序的输出结果是()int f( ){static int i=0;int s=1;s+=i;i++;return s;}main( ){int i,a=0;for(i=0;i<5;i++)a+=f();printf("%d\n",a);}A、20B、24C、25D、15答案:D注解:在主函数中,函数f( )被调用5次,第一次调用时定义静态变量i,并给i赋初值0,s累加和为1,变量i的值自增为1,将s值返回给a,则a的值为1,第二次调用时,静态变量i保留第一次调用时的值1,s 累加和为2,变量i的值自增为2,将s值返回到a+=f( ),则a的值为1+2=3,第三、四、五次调用类似执行。

14.以下程序的输出结果是()f(int b[ ],int m,int n){int i,s=0;for(i=m;i<n;i=i+2) s=s+b[i];return s;}main( ){int x,a[ ]={1,2,3,4,5,6,7,8,9};x=f(a,3,7);printf("%d\n",x);}A、10B、18C、8D、15答案:A注解:函数f(a,3,7)调用时,a是传数组地址,形参数组b与a使用同一片存储空间。

f函数的执行是循环控制变量I的初值是3,变量s中累加上b[3]的值4,s的值为4,然后变量I增为5,条件I<7成立,s中累加上b[5]的值6,s的值为10,变量I的值增为7,条件不成立,则退出循环,返回值给x,则最后输出的值为10。

填空题1.以下程序的输出结果是____________________main( ){int x=0;sub(&x,8,1);printf("%d\n",x);}sub(int *a,int n,int k){if(k<=n) sub(a,n/2,2*k);*a+=k;}答案:注解:函数调用sub(&x,8,1),将变量x的地址传给指针变量a,数值8传给n,数值1传给k,在函数体的执行中,条件k<=n成立,再次调用sub(a,4,2)函数,执行函数体,条件k<=n成立,第三次调用sub(a,2,4)函数,数值2传给n,数值4传给k,执行循环体,条件不成立,执行语句*a+=k;,指针a所指单元内的值为4,返回上一级调用,执行语句*a+=k;,指针a所指单元内的值为6,再一次返回到第一次函数调用,执行语句*a=k;,指针a所指单元内的值为7,则变量x的值为7。

2.以下程序输出的最后一个值是_____________int ff(int n){ static int f=l;f=f*n;return f;}main( ){ int i;for(i=1;i<=5;i++ ) printf("%d\n",ff(i));}答案:120注解:函数ff在循环中调用5次,第一次调用ff(1),函数体执行,静态变量f的值为1,执行1*n,返回值为1,第二次调用ff(2),静态变量f的值保留第一次调用的值1,执行1*n,返回值为2,依次类推,第五次调用ff(5),f保留第四次调用的值24,执行24*n=24*5=120,返回值为120。

3.以下函数的功能是:求x的y次方,请填空。

double fun( double x,int y){ int i;double z;for(i=1,z=x;i<y;i++) z=z*_______;return z;}答案:x注解:求x的y次方,即是x*x*…*x,一共有y个x相乘,在for循环中,变量z用为存放累乘的积,所以z=z*x,变量z的初值为x,所以只要循环y-1即可。

4.若已定义:int a[10],i;,以下fun函数的功能是:在第一个循环中给前10个数组元素依次赋1、2、3、4、5、6、7、8、9、10;在第二个循环中使a数组前10个元素中的值对称折叠,变成1、2、3、4、5、5、4、3、2、1。

请填空。

fun( int a[ ]){ int i;for(i=0;i<10;i++) (1) =i;for(i=0;i<5;i++) (2) =a[i];}答案:(1)a[i] (2)a[9-i]注解:根据要求,第二个循环将数组前10个元素中值对称折叠,即将数组的a[5]中存放a[4]的值,a[6]中存放a[3]的值,依次类推,a[9]中存放a[0]的值,由此可知(2)中应填入的是a[9-i]。

5.若变量n中的值为24,则prnt函数共输出(1) 行,最后一行有(2) 个数。

相关文档
最新文档