C语言程序设计教案 第八章 函数

C语言程序设计教案   第八章 函数
C语言程序设计教案   第八章 函数

第八章函数课题:第八章函数§1~§4

教学目的:1、掌握函数定义的一般形式

2、掌握函数调用的一般形式

教学重点:教学难点:函数定义、调用的一般形式形式参数和实际参数

步骤一复习引导

一个C语言源程序可由一个主函数和若干个辅助函数组成。

由主函数调用其他函数,其他函数也可以互相调用。

步骤二讲授新课

§8.1 概述

例8.1

main( )

{ printstar( );

print_message( );

printstar( );

}

printstar( )

{ printf( “ ********** \n”); }

print_message( )

{ printf(“How do you do ! \n”); }

说明:

?1、一个源程序文件由一个或多个函数组成。一个源程序文件是一个编译单位。

?2、一个C程序由一个或多个源程序文件组成。这样可以分别编写、分别编译,提高调度效率。

?3、C程序的执行从main 函数开始,在main函数中结束整个程序的运行。

?4、所有函数都是平行的,即函数不能嵌套定义,函数可以互相调用,但不能调用main 函数。

?5、从用户使用的角度看,函数有两种:标准函数(库函数)和用户自己定义的函数

?6、从函数的形式看,函数分为两类:无参函数和有参函数

§8.2 函数定义的一般形式

(一)无参函数的定义形式

类型标识符函数名( )

{

函数体(包括声明部分和执行部分)

}

例:printstar( )

{ printf( “ ********** \n”); }

(二)有参函数定义的一般形式

类型标识符函数名(形式参数表)

{

函数体(包括声明部分和执行部分)

}

例如:int max(int x, int y)

{ int z;

z=x>y?x:y;

return (z);

}

(三)一个函数可以是空函数

如dummy( ) { }

§8.3 函数参数和函数的值

(一)形式参数和实际参数形式参数:定义函数时函数名后括号中的变量名,简称形参;

实际参数:调用函数时函数名后括号中的表达式,简称实参。

main( )

{ int a,b,c;

scanf(“%d,%d”,&a,&b);

c = max(a, b); /*调用max函数*/

printf(“max=%d”,c);

}

int max(int x ,int y) /*定义max函数*/

{ int z;

z=x>y?x: y;

return(z);

}

关于形参和实参的说明:

形参在未出现函数调用时,并不占内存中的存储单元。只有在发生函数调用时,函数中的形参才被分配内存单元。在调用结束后,形参所占的内存单元也被释放。

2、实参可以是常量、变量或表达式,如:c = max(3,a+b);

但要求它们有确定的值。在调用时将实参的值赋给形参(如果形参是数组名,则传递的是数组的首地址,而不是变量的值。)

3、在被定义的函数中,必须指定形参的类型;

4、实参与形参的类型应一致。

5、C语言规定,实参对形参的数据传递是“值传递”,即单向传递。在内存中,实参单

元与形参单元是不同的单元。

(二)函数的返回值

1、return语句

return (表达式);

或:return 表达式;

或:return;

或:函数执行到最后遇到“}”

return语句的用途有二:

(1)用于结束函数的执行并返回到调用者;

(2)用来向调用者传递一个返回值。

注意:该语句对非void函数适用。

2、函数值的类型

如:int max(x,y)

char letter(c1, c2)

double min(x, y)

C语言默认函数返回值为int型。

3、函数值的类型和return语句中表达式的值不一致,则以函数类型为准;

main()

{ float a, b; int c;

scanf(“%f,%f”,&a,&b);

c=max(a,b);

printf(“Max is %d\n”,c);

}

max(float x, float y)

{ float z;

z = x>y? x: y;

return (z);

}

若输入的数据情况为:1.5, 2.5

则输出的结果为:Max is 2

4、如果被调函数中没有return语句,则函数带回一个不确定值。

5、为了明确表示“不带回值”,可以用“void ”定义“无类型”(或称“空类型”)。如:void print_message( )

{ printf(“How do you do!\n”); }

§8.4 函数的调用

要正确实现函数间的相互调用需满足下列条件:

第一,被调用函数必须存在且允许调用;

第二,必须给出满足函数运行时要求的参数;

第三,在调用一个函数之前一般应该对被调用函数进行声明。

(一)函数声明的一般形式

函数类型函数名(参数类型1,参数类型2, …, 参数类型n);

或:函数类型函数名(参数类型1 参数名1,参数类型2 …);

如:int print(char format, …);

char fun2(int i, char p1);

float add(float , float);

注意:函数声明与函数定义不同!

(二)函数调用的一般方法

函数调用形式: 函数名(实参表列);

1.函数语句

如:前述例子中的 print();

2.函数表达式

如:c=max(a,b);

3.函数参数

如:m=max(a, max(b,c));

printf(“%d”, max(a,b));

例:main( ) { int i=2, p; p=f(i, ++i); printf(“%d”,p); } TC 环境下,按自右而左的顺序 求值。此例 f(i, ++i) ~ f(3,3)

例:计算组合C(m,n)=m!/(n!(m-n)!)

main()

{ int m, n;

long cmn, temp;

long factor(int);

scanf(“%d %d”,&m,&n);

cmn=factor(m);

temp=factor(n);

cmn=cmn/temp;

cmn=cmn/factor(m-n);

printf(“%ld \n”,cmn);

}

步骤三 课堂小结

1、 有参函数的定义形式

2、 形参和实参的区别

3、 函数的声明和调用

步骤四 布置作业

书面作业:(第八章课后练习)8.1

int f(int a, int b) { int c; if (a>b) c=1; else if(a= =b)c=0; else c=-1 return(c); }

课题:第八章函数§5~§7

教学目的:1、掌握函数的嵌套调用和递归调用

2、掌握虚实结合

教学重点:教学难点:嵌套和递归调用、数组作为函数参数递归调用、虚实结合

步骤一复习引导

float root(float x1, float x2)

{ int i; float x,y,y1;

y1=f(x1);

do

{ x=xpoint(x1,x2);

y=f(x);

if (y*y1>0)

{y1=y; x1=x; }

else {y2=y; x2=x;}

}while(fabs(y)>=0.0001);

return(x);

}

步骤二、讲授新课

§8.6 函数的递归调用

直接或间接调用自身的函数为递归函数。

一个问题采用递归方法来解决时必须符合以下条件:

(1)可将一个问题转化为具有同样解法的规模较小的问题;

(2)必须有明确的结束条件。

[例8.7]:有5个人坐在一起,问第5个人多少岁,他说比第4个人大2岁,问第4个人的岁数,他说比第3个人大2岁,问第3个人的岁数,他说比第2个人大2岁,问第2个人,他说比第1个人大2岁,问第一个人,他说是10岁。请问第5个人的岁数?(P158)

分析:显然这是一个递归问题。即:

age(5)=age(4)+2

age(4)=age(3)+2

age(3)=age(2)+2

age(2)=age(1)+2

age(1)=10

程序:

age(int n)

{ int c;

if(n= =1) c=10;

else c=age(n-1)+2;

return (c);

}

main( )

{ printf(“%d”,age(5));

}

[例8.8]:利用递归求n!(P160)

例:Fibonacci数列已在前面定义过,用递归函数求此数列的第n项。fib(int n)

{ int f;

if(n= =0 || n= =1) f=1;

else f=fib(n-1)+fib(n-2);

return(f); }

[习题8.13]:用递归方法求n阶勒让德多项式的值,递归公式为:

1 (n=0)

P n(x)= x (n=1)

((2n-1)xP n-1(x)-(n-1)P n-2(x))/n (n>1)

main()

{ int x, n;

float p(int ,int);

printf(“\n Input n & x:”);

scanf(“%d,%d”,&n,&x);

print f(“n=%d,x=%d\n”,n,x);

printf(“P%d(%d)=%6.2f”,n,x,p(n,x));

}

float p(int n, int x)

{ if(n= =0) return(1);

else if (n= = 1) return(x);

else return( ((2*n-1)*x-p((n-1),x)-(n-1)*p((n-2),x))/n );

}

例:双递归。这段程序的结果是_________

void f(int b, int t)

{ int m;

if(b

{ m=(b+t)/2;

printf(“%d\n”,m);

f(b,m-1);

f(m+1,t);

}

}

main() { f(1,6); }

§8.7数组作为函数参数

虚实结合(哑实结合)

一、数组元素作函数实参

值传递:用赋值的方法,把实在参数的值赋给被调函数对应的形式参数。

?不希望破坏调用函数中作为实在参数对象的值时,使用“值传递”方式;

?注意:数组元素作为函数实参时如同简单变量。

二、数组名作函数参数

地址传递:指形参与实参结合的不是数据本身,而是把数据的地址传递给被调用函数。结合后的形参与实参都指向同一个存储区。

?在函数间传递一批数据时,一般采用“地址传递”方式。

[例8.13]:用选择法对数组中10个整数按由小到大排序。

main()

{ int a[10],i;

printf(“enter the array\n”);

for(i=0; i<10; i++)

scanf(“%d”,&a[i]);

sort(a,10); printf(“the sorted array:\n”);

for(i=0; i<10; i++)

printf(“%d”,a[i]);

printf(“\n”);

}

三、多维数组名作函数参数

main()

{ static int a[3][4]={{1,3,5,7},

{2,4,6,8},{15,17,34,12}};

printf(“max value is %\n”,

max_value(a));

}

步骤三课堂小结

函数的嵌套调用和递归调用,注意调用的过程

数组作为函数参数有两种情况:传递数组元素的值、传递数组名

步骤四布置作业

书面作业:(第八章课后练习)8.2、8.17、15

课题:第八章函数§8-§10

教学目的:1、掌握局部变量和全局变量的作用范围

2、掌握变量的存储类别,了解内部函数和外部函数

教学重点:教学难点:局部变量和全局变量、变量的存储类别变量的作用域和生存期

步骤一、复习引导

在函数调用过程中,不仅要注意实参和形参的数据结合,而且要注意各个变量的作用域和生存期。

步骤二、讲授新课

§8.8局部变量和全局变量

一、局部变量

在一个函数内部定义的变量是内部变量,它只在本函数范围内有效。

二、全局变量

在函数之外定义的变量称为外部变量,即全局变量(全程变量)。

全局变量可以为本文件中其他函数所共用。它的有效范围为从定义变量的位置开始到本源文件结束。

使用全局变量可以增加函数间的数据联系;

[例8.15]:有一个一维数组,内放10个学生成绩,写一函数,求出平均分,最高分和最低分。float max=0,min=0;

float average(float array[],int n)

{ int i;

float aver,sum=array[0];

max=min=array[0];

for(i=1; i

{ if(array[i]>max) max=array[i];

else if(array[i]

sum=sum+array[i];

}

aver=sum/n;

return(aver);

}

main()

{float ave,score[10];

int i;

for(i=0;i<10;i++) scanf(“%f”,&score[i]);

ave=average(score,10);

printf(“%6.2f,%6.2f,%6.2f”,max,min,ave);

}

●在同一源文件中,如果外部变量与局部变量同名,则在局部变量的作用范围内外部变量

不起作用;

[例8.16]:外部变量与局部变量同名

int a=3,b=5; /*a,b外部变量*/

max(int a, int b); /*a,b局部变量*/

{ int c;

c=a>b?a:b;

return(c);

}

main()

{ int a=8; /*a局部变量*/

printf(“%d”,max(a,b));

§8.9变量的存储类别

从变量的作用域(空间)来分,为全局和局部变量。

从变量值存在的(生存期)时间来分,可以分为:

一、动态存储方式与静态存储方式

静态存储方式:指在程序运行期间分配固定的存储空间的方式。

动态存储方式:在程序运行期间根据需要进行动态的分配存储空间的方式。

二、auto变量

?调用函数时系统自动分配存储空间,在函数调用结束时自动释放这些存储空间,

称这类局部变量为自动变量。

?自动变量用关键字auto作存储类别的声明。它也可省。

三、用static声明局部变量

?函数中变量的值在函数调用结束后不消失而保留原值,在下次该函数调用时,该

变量已有值,即为上一次函数调用结束时的值。该局部变量为静态局部变量。

main()

{ int a=2, i;

for( i=0; i<3; i++)

printf(“%d”,f(a));

}

运行结果为:____________

说明:

1、静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运

行期都不释放。

自动变量属于动态存储类别,占动态存储区空间而不占静态存储区空间,函数调用结束后即释放。

2、对静态局部变量在编译时赋初值,程序运行时,它已有初值,以后每次调用函数

时不再重新赋初值而只是保留上次函数调用结束时的值。

对自动变量赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值。

3、对静态局部变量来说,如不赋初值,编译时自动赋初值0或空字符。

对自动变量来说,如不赋初值,它的值是一个不确定的值。

4、虽然静态局部变量在函数调用结束后仍然存在,但其他函数不能引用。

四、register变量

将局部变量的值放在CPU中的寄存器中,需要用时直接从寄存器取出参加运算,不必再到内存中去存取。这种变量称为寄存器变量。

说明:

?1、只有局部自动变量和形式参数可作为register变量。

?2、不能定义任意多个寄存器变量。

?3、局部静态变量不能定义为寄存器变量。

五、用extern声明外部变量

1、在一个文件内声明外部变量

例:main()

{ extern A; /*外部变量声明*/

printf(“%d”,A);

}

int A=13; /*定义外部变量*/

2、在多文件的程序中声明外部变量

例:用extern将外部变量的作用域扩展到其他文件。

文件file1.c中的内容为:

int A;

main()

{ int power(int);/*对调用函数作声明*/

int b=3,c;

scanf(“%d”, &A);

c=A*b;

printf(“%d*%d=%d\n”,A, b, c);

}

六、用static声明外部变量

在定义外部变量时,加一个static声明,可以使此变量只能用于本文件中。

注:对外部变量加或不加static声明,都是静态存储,只是作用范围不同,都是在编译时分配内存的。

●用static来声明一个变量的作用有二:

1、对局部变量用static声明,则为该变量分配的空间在整个程序执行期间始终存在。

2、全局变量用static声明,则该变量的作用域只限于本文件模块。

另注:用auto、register、static声明变量时,是在定义变量的基础上加这些关键字,而不能单独使用。

?如:int a; /*定义整型变量a*/

static a; /*对变量a声明为静态变量*/

此用法不对。编译时会被认为“重新定义”。

七、关于变量的声明和定义

一般讲,把建立存储空间的声明称定义,而把不需要建立存储空间的声明称为声明。

?例:main()

{ extern A; /*是声明不是定义*/

… }

int A; /*是定义*/

注:

1、外部变量的定义只能一次,它在所有函数之外,而同一文件中的外部变量的声明

可以有多次,它可在函数内也可在函数外。

2、对外部变量的初始化只能在定义时进行,而不能在声明中进行。

八、存储类别小结

从作用域角度分:

局部变量:自动变量即动态局部变量(离开函数,值就消失)

静态局部变量(离开函数,值仍保留)

寄存器变量(离开函数,值就消失)

(形式参数可以定义为自动变量或寄存器变量)

全局变量:静态外部变量(只限本文件引用)

外部变量(即非静态的,允许其他文件引用)

从变量存在的时间分:

动态存储:自动变量、寄存器变量、形式参数

静态存储:静态局部变量、静态外部变量、外部变量

从变量值存放的位置分:

内存中的静态存储区:静态局部变量、静态外部变量、外部变量

内存中的动态存储区:自动变量和形式参数

寄存器:寄存器变量

●static对局部变量和全局变量的作用不同。

1.对局部变量来说,它使变量静态存储,

对全局变量来说,它使变量局部化(本文件),但仍为静态存储。

2.从作用域角度看,凡有static声明的,其作用域是局限的,或局限于

本函数内,或局限于本文件内。

§8.10内部函数和外部函数

一、内部函数

?一个函数只能被本文件中其他函数所调用。

?即:static类型标识符函数名(形参表)

?如:static int fun( int a,int b)

二、外部函数

?一个函数可供其他文件调用,称为外部函数

?定义时声明或调用时声明,即:

extern int fun(int a, int b ) 定义时

或extern fun(int a, int b ) 调用时在定义时,也可省写extern ,即为外部函数

步骤三课堂小结

1、局部变量和全局变量的作用域

2、变量的存储类别有动态存储方式和静态存储方式

3、关键字有auto、static、register、extern

步骤四布置作业

书面作业:(第八章课后练习)8.14

C语言程序设计课后习题1-8参考答案

C语言程序设计课后习题1-8参考答案 习题1参考答案 一、简答题 1、冯诺依曼计算机模型有哪几个基本组成部分?各部分的主要功能是什么? 答:冯诺依曼计算机模型是由运算器、控制器、存储器、输入设备、输出设备五大功能部件组成的。 运算器又称算术逻辑部件,简称ALU,是计算机用来进行数据运算的部件。数据运算包括算术运算和逻辑运算。 控制器是计算机的指挥系统,计算机就是在控制器的控制下有条不紊地协调工作的。 存储器是计算机中具有记忆能力的部件,用来存放程序和数据。 输入设备是用来输入程序和数据的部件。 输出设备正好与输入设备相反,是用来输出结果的部件。 2、简述计算机的工作原理。 答:计算机的工作原理可简单地概括为:各种各样的信息,通过输入设备,进入计算机的存储器,然后送到运算器,运算完毕把结果送到存储器存储,最后通过输出设备显示出来。整个过程由控制器进行控制。 3、计算机软件系统分为哪几类? 答:软件内容丰富,种类繁多,通常根据软件用途将其分为两大类:系统软件和应用软件。 系统软件是指管理、监控、维护计算机正常工作和供用户操作使用计算机的软件。这类软件一般与具体应用无关,是在系统一级上提供的服务。系统软件主要包括以下两类:一类是面向计算机本身的软件,如操作系统、诊断程序等。另一类是面向用户的软件,如各种语言处理程序(像BC、VC等)、实用程序、字处理程序等。 应用程序是指某特定领域中的某种具体应用,供最终用户使用的软件,它必须在操作系统的基础上运行。. 4、什么叫软件?说明软件与硬件之间的相互关系。 答:软件是指计算机程序及有关程序的技术文档资料。两者中更为重要的是程序,它是计算机进行数据处理的指令集,也是计算机正常工作最重要的因素。在不太严格的情况下,认为程序就是软件。硬件与软件是相互依存的,软件依赖于硬件的物质条件,而硬件则需在软件支配下才能有效地工作。在现代,软件技术变得越来越重要,有了软件,用户面对的将不再是物理计算机,而是一台抽象的逻辑计算机,人们可以不必了解计算机本身,可以采用更加方便、更加有效地手段使用计算机。从这个意义上说,软件是用户与机器的接口。 二、填空题 1、算术逻辑 2、键盘鼠标 3、控制器运算器 4、10 2 5、0 0x

C语言函数章节选择题

有问题的题目是: 14、20(答案对,但是不好解释,不同系统也许有不同结果)41超出范围、 1.在C语言中,全局变量的存储类别是: A) static B) extern C) void D) register A 2.C语言中,凡未指定存储类别的局部变量的隐含存储类别是: A) 自动(auto) B) 静态(static) C) 外部(extern) D) 寄存器(register) A 3. 在一个C源程序文件中,要定义一个只允许本源文件中所有函数使用 的全局变量,则该变量需要使用的存储类别是:________。 A) extern B) register C) auto D) static D 4. 若有以下调用语句,则正确的fun函数首部是 main() { ∶ ∶ int a;float x; ∶ ∶ fun(x,a); ∶ ∶ } A) void fun(int m,float x) B) void fun(float a,int x) C) void fun(int m,float x[]) D) void fun(int x,float a) B 5. 有如下函数调用语句func(rec1,rec2+rec3,(rec4,rec5)); 该函数调用语句中,含有的实参个数是 A) 3 B) 4 C) 5 D) 有语法错误 A 6. 以下程序的运行结果是。 #include main() { int k=4,m=1,p; p=func(k,m); printf("%d, ",p); p=func(k,m); printf("%d\n",p); }

C语言程序设计第四版第六章答案_谭浩强

1、用筛选法求100之内的素数。解: #include #include int main() {int i,j,n,a[101]; for (i=1;i<=100;i++) a[i]=i; a[1]=0; for (i=2;i int 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"); printf("The orginal numbers:\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("\nThe sorted numbers:\n"); for (i=1;i<=10;i++) printf("%5d",a[i]); printf("\n"); return 0; } 3、求一个3×3的整型矩阵对角线元素之和。解: #include int main() { int a[3][3],sum=0; int i,j; printf("enter data:\n"); for (i=0;i<3;i++) for (j=0;j<3;j++) scanf("%3d",&a[i][j]); for (i=0;i<3;i++) sum=sum+a[i][i]; printf("sum=%6d\n",sum);

完整word版单片机C语言应用程序设计第五版马忠梅课后习题答案

第一章单片机由哪几部分组成?、80511可P2P0和个8位并行I/O口(其中8位中央处理器CPU、片内振荡电器及其时钟电路,4,个中断优先级)个中断源(具有2位定时器/计数器,5 用于外部存储器的扩展),2个16 全双工串行口,布尔处理器。单片机有多少个特殊功能寄存器?它们可以分为几组,各完成什么主要功能?、80512 表P7 1-3个特殊功能寄存器,在物理 上是分散在片内各功能部件中,在数218051单片机内部有答:中,以便能使用统一的直接寻址方式80H~FFH学上把它们组织在内部数据存储器地址空间来访问。这些特殊功能寄存器颁 在以下各个功能部件中:主要完;DPH两个8位寄存器组成)PSW、SP、DPTR(由DPL和(1)CPU:ACC、B、成运算和逻辑判断功能;完成中断管理IP、IE;(2)中断系统:完成 定时或者计数功能、TH1;TCOM、TL0、TH0、TL1(3)定时器/计数器:TMOD、口带有可选的纵向拓展I/O完成I/O口功能,其中部分P1P0、、P2、P3(4)并行I/O口:功能。主要完成数据的串行发送和接收SBUF、PCON5)串行口:SCON、(、决定程序执行顺序的寄存器是哪几个?它是几位寄存器?是否为特殊功能寄存器?它的3 内容是什么信息?它的内容是下一条 将要执行的不是特殊功能寄存器,它是16位寄存器,是程序计数器PC,程序的地址的用途是什么?它由哪几个特殊功能寄存器组DPTRDPTR是什么特殊功能寄存器?4、成?位)和8DPL (数据指针低是16位数据指针寄存器,它由两个8位特殊功能寄存器DPTR位地址,作地址寄存器用,可寻址外部16DPTR用于保存DPH(数据指针高8位)组成,数据存储器,也可寻址程序存储器。线?它们和单片机对外的地址总线和数据总线有什么关系?地址的引脚有多少I/O5、8051 总线和数据总线各是多少位?线可以在外扩存储器时分时复根I/OP0口8I/O8051单片机的40个引脚中有32根口线,和P3.6位地址总线,P2口作为高8用作为外部存储器的低8位地址 总线和8位数据总线,位。16位,数据总线为8P3.7分别作为外部存储器的写和读控制线。地址总线单片机堆栈的最大容量不能超过多少字8051、什么是堆栈?堆栈指针SP的作用是什么? 6 节?堆栈是数据寄存器的一部分,这一部分数据的存取是按照先入后出、后入先出的原则进行的。堆栈指针SP在启用堆栈之前是用来决定堆栈的位置。如在8051芯片复位后,SP的值为07H,则决定了堆栈从08H开始设置。修改SP值可以使堆栈设置在内部RAM的其它部分。在堆栈启 用之后,SP指向堆栈顶部,即由SP来决定数据读出和存入堆栈的地址。8051单片机内部用作 数据区的RAM的容量为128个字节,前8个字节要用来作为工作寄存器R0-R7。堆栈可以从08H开始设置直到7FH,共120个字节。但这只是最大可能的容量。一般情况下,内部RAM还要分出一部分作一般的数据区,或者还要用其中的位寻址区来用于位操作,等等。所以,8051 的堆栈区是比较小的,使用时要注意到这个限制。 8、8051内部RAM低128字节可分为几个区域?其中通用寄存器区的字节地址范围为多少?如何实现寄存器组的切换?可位寻址区的字节地址和位地址范围分别为多少? 8051内部RAM的低128字节可以分为通用寄存器区、位寻址区、便签(工作或者堆栈RAM)1 中的个字节。设置PSW区和特殊功能寄存器区。通用寄存器区的地址从00H到1FH共3212816个字节RS1可以切换当前通用寄存器组。位寻址区地址从20H到2FH共位RSO和127. 0到位,占用地址8051单片机对外有几条专用控制线?其功能是什么?9、,高电位有效,当有条专用控制线。它们是复位信号线RST一般的说法是8051单片机有4,低电平有效,当此复位信号从此线输入时,使单片机复位。访问外部存贮器控制信号EA先使用片单片机全部使用外部指令存贮器,而当此控制线为高电平时,控制线为低电平时,1000H(地址为,在4KB范围之外,才使用指令存贮器FFFFH内的4KB指令存贮器(0000H-)和外部地址锁存器允PSEN-FFFFH)。另有两条输出控制:外部程序存贮器的读选通信号。前者是低电平有效,在读外部程 序存贮器时使用。后者是高电平有效,在锁存ALE许信号P0口输出的低8位地址时使用。端必须怎样处理?为什么?10、8031的/EA为有效时,/EA访问内部ROM,当端是访问外部程序

C语言上机题库百科园第1章!南信大!

第一章 以下叙述中错误的是( ) A.一个C语言程序只能有一个主函数 B.C语言编写的每个函数都可以进行独立的编译并执行 C.C语言编写的函数都可以作为一个独立的源程序文件 D.C语言编写的函数源程序,其文件名后缀可以是C 计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是( ) A.C语言程序仅可以编译执行 B.C语言程序仅可以解释执行 C.以上说法都不对 D.C语言程序既可以编译执行又可以解释执行 C语言规定:在一个源程序中,main的位置( ) A.可以任意 B.必须在最后 C.必须在最开始 D.必须在系统调用的库函数后面 一个C语言程序是由( ) A.若干过程组成 B.若干子程序组成 C.函数组成

D.一个主程序和若干子程序组成 以下关于结构化程序设计的叙述中正确的是( ) A.一个结构化程序必须同时由顺序、分支、循环三种结构组成 B.在C语言中,程序的模块化是利用函数实现的 C.由三种基本结构构成的程序只能解决小规模的问题 D.结构化程序使用goto语句会很便捷 以下叙述正确的是( ) A.在C程序中,main函数必须位于程序的最前面 B.在对一个C程序进行编译的过程中,可发现注释中的拼写错误 C.C语言本身没有输入输出语句 D.程序的每行中只能写一条语句 以下叙述中错误的是( ) A.C语言编写的每个函数都可以进行独立的编译并执行 B.C语言编写的函数源程序,其文件名后缀可以是C C.一个C语言程序只能有一个主函数 D.C语言编写的函数都可以作为一个独立的源程序文件 以下叙述正确的是( ) A.C程序的书写格式是固定的,每行只能写一条语句 B.C程序中注释部分可以单独占一行 C.构成C程序的基本单位是函数,所有函数名都可以由用户命名

C语言程序设计(谭浩强)第四版-课后答案

第一章程序设计和C语言【第15页】 1-5 #include int main ( ) { printf ("**************************\n\n"); printf(" Very Good!\n\n"); printf ("**************************\n"); return 0; } 1-6 #include int main() {int a,b,c,max; printf("please input a,b,c:\n"); scanf("%d,%d,%d",&a,&b,&c); max=a; if (max #include int main() {float p,r,n; r=0.1; n=10; p=pow(1+r,n); printf("p=%f\n",p); return 0; }

3-2-1 #include #include int main() {float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5; p=1000; r5=0.0585; r3=0.054; r2=0.0468; r1=0.0414; r0=0.0072; p1=p*((1+r5)*5); // 一次存5年期 p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期 p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期 p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次 p5=p*pow(1+r0/4,4*5); // 存活期存款。活期利息每一季度结算一次 printf("p1=%f\n",p1); // 输出按第1方案得到的本息和 printf("p2=%f\n",p2); // 输出按第2方案得到的本息和 printf("p3=%f\n",p3); // 输出按第3方案得到的本息和 printf("p4=%f\n",p4); // 输出按第4方案得到的本息和 printf("p5=%f\n",p5); // 输出按第5方案得到的本息和 return 0; } 3-2-2 #include #include int main() {double r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5; p=1000; r5=0.0585; r3=0.054; r2=0.0468; r1=0.0414; r0=0.0072; p1=p*((1+r5)*5); // 一次存5年期 p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期 p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期 p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次

c语言程序设计第五版习题答案()

习题解析与答案 第1章C语言概述 一.简答题 1.概述C语言的主要特点。 【解答】 (1)语言简洁、紧凑,使用方便、灵活。 (2)数据类型丰富,表达能力强。 (3)运算符多样。C语言中的运算符包含的范围非常广泛。 (4)具有结构化的控制语句。如if…else语句、while语句、do while语句、switch语句、for语句。 (5)允许直接访问物理地址。C语言中含有的位和指针运算,能够直接对内存地址进行访问操作。 (6)所生成的目标代码质量高,可移植性好。 2.构成C语言程序的基本单位是什么它由哪几部分组成 【解答】函数是构成C语言程序的基本单位。一个完整的C程序一般由文件包含、宏定义、函数说明、变量和一个或若干个函数组成。 3.C语言程序的运行一般要经过哪几个步骤 【解答】(1)编辑;(2)编译;(3)连接,生成EXE文件;(4)执行。 二.运行程序写结果 1.输入下面程序并运行。 main() { int a1,a2,x; a1=100;

a2=50; x=a1-a2; printf(″x=%d\n″,x); } 【解答】运行结果为:x=50 2.输入下面程序并运行。 main() { int a1,a2,x; a1=10; a2=20; x=a1*a2; printf(″a1=%d,a2=%d\n″,a1,a2); printf(″x=%d\n″,x); } 【解答】运行结果为:a1=10,a2=20 x=200 3.输入下面程序并运行。 #include <> main() { printf("******\n"); printf(" *****\n"); printf(" ****\n"); printf(" ***\n"); printf(" **\n"); printf(" *\n"); } 【解答】运行结果为:****** ***** **** *** ** *

《C语言程序设计》课后习题答案(第四版)谭浩强

第1章程序设计和C语言1 1.1什么是计算机程序1 1.2什么是计算机语言1 1.3C语言的发展及其特点3 1.4最简单的C语言程序5 1.4.1最简单的C语言程序举例6 1.4.2C语言程序的结构10 1.5运行C程序的步骤与方法12 1.6程序设计的任务14 1-5 #include int main ( ) { printf ("**************************\n\n"); printf(" Very Good!\n\n"); printf ("**************************\n"); return 0; } 1-6#include int main() {int a,b,c,max; printf("please input a,b,c:\n"); scanf("%d,%d,%d",&a,&b,&c); max=a; if (max

2.5结构化程序设计方法34 习题36 第章最简单的C程序设计——顺序程序设计37 3.1顺序程序设计举例37 3.2数据的表现形式及其运算39 3.2.1常量和变量39 3.2.2数据类型42 3.2.3整型数据44 3.2.4字符型数据47 3.2.5浮点型数据49 3.2.6怎样确定常量的类型51 3.2.7运算符和表达式52 3.3C语句57 3.3.1C语句的作用和分类57 3.3.2最基本的语句——赋值语句59 3.4数据的输入输出65 3.4.1输入输出举例65 3.4.2有关数据输入输出的概念67 3.4.3用printf函数输出数据68 3.4.4用scanf函数输入数据75 3.4.5字符数据的输入输出78 习题82 3-1 #include #include int main() {float p,r,n; r=0.1; n=10; p=pow(1+r,n); printf("p=%f\n",p); return 0; } 3-2-1 #include #include int main() {float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5; p=1000;

标准C语言程序设计第五版课后练习题答案

课后练习题答案 Chapter 1 1.1×√×√√×√××√ 1.2b c 1.3ad 1.4semicolon printf math、h \n Chapter 2 2、1 ×√××√√×√××√× 2、2 typedef 255 external const Chapter 3 3、1 ×√××√√×××√√√ 3、2 integer modula 6 logical sizeof paratheses typeconversion precedence 3、3 F F T F F F 3、4 F T T T F 3、5 (b) (c) 3、6 0 -2 7 10、25 false 3 3 1 3、10 0 1 1 1 1 3、11 d } 100 3、12 110 111 3、13 1 3、14 200 3、15 x<=y 3、16 TRUE 3、19 2 1 4 3、20 -40 40 Chapter 4 4、1 ×√√√√√××√√√× 4、2 %hd %x ctype、h %l %*d [^] blank 6 - %e 4、4 (a) scanf(“%d %c %d”, &a, &b, &c); (b)scanf(“%d %f %s”, &a, &b, &c); (c) scanf(“%d-%d-%d”, &a, &b, &c); (d) scanf(“%d %s %d”, &a, &b, &c);

4、5 (a)10x1、230000 (b)1234x 1、23 (c)1234 456、000000 (d) “123、40 ” (e) 1020 1222(乱码) 4、7 (a)1988 x (b)乱码 (c)120 乱码 (d)乱码 x 4、8 (a)1275 -23 5、740000 (b) 1275 -235、740000 (c) 0 0、000000 (d) 1275xxxx-235、74 (e)Cambridge (f)1275 Cambridge 4、10 1988 无无 Chapter 5 5、1 √×√××××××√ 5、2 && switch break if-else x=y 5、4 (a)x = 2; y = 0; (b) x = 1; y = 0; 5、5 (a) if (grade <= 59) if (grade >= 50) second = second + 1; (b) if (number > 100) printf(“out of range”); else if (number < 0) printf(“out of range”); else sum = sum + number; (c) if (T > 200) printf(“admitted”); else if (M > 60) {if (M > 60) printf(“admitted”);} else printf(“not admitted”); 5、6 F T F T 5、8 (a) x > 10 (b) (x != 10)||(y ! = 5) || (z >= 0) (c) (x + y != z) || (z > 5) (d) (x > 5) || (y != 10) || (z >= 5) 5、9 (a) x = 5; y = 10; z = 1 (b) x = 5; y = 10; z = 1 (c) x = 5; y = 0; z =0 (d) 无变化 5、10 (a) x= 0; y = 2; z = 0; (b) x = 1; y = 2; z = 0; 5、12 8 5、13 Delhi Bangalore END 5、14 2 4 4 8 5、15 0 0 2 5、16 25 5、17 Number is negative 5、18 ABC

C语言程序设计第四版第七章答案-谭浩强

第七章函数 7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。 maxyueshu(m,n) int m,n; { int i=1,t; for(;i<=m&&i<=n;i++) {if(m%i==0&&n%i==0) t=i; } return(t); } minbeishu(m,n) int m,n; {int j; if(m>=n) j=m; else j=n; for(;!(j%m==0&&j%n==0);j++); return j; } main() {int a,b,max,min; printf("enter two number is: "); scanf("%d,%d",&a,&b); max=maxyueshu(a,b); min=minbeishu(a,b); printf("max=%d,min=%d\n",max,min); } 7.2求方程的根,用三个函数分别求当b2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。 #include"math.h" float yishigen(m,n,k) float m,n,k; {float x1,x2; x1=(-n+sqrt(k))/(2*m); x2=(-n-sqrt(k))/(2*m); printf("two shigen is x1=%.3f and x2=%.3f\n",x1,x2); } float denggen(m,n) float m,n; {float x; x=-n/(2*m); printf("denggen is x=%.3f\n",x); }

(完整版)《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语言的运算符分为单目运算符,双目运算符和三目运算符(三目运算符只有条件运算符一个)。 根据运算对象和运算结果的数据类型可分为算术运算符、关系运算符、逻辑运算符等。 5.表达式 表达式是由常量、变量、函数,通过运算符连接起来而形成的一个算式。一个常量,一个变量或一个函数都可以看成是一个表达式。 表达式的种类有: 算术表达式、关系表达式、逻辑表达式、赋值表达式、字位表达式、强制类型转换表达式、逗号

大学生C语言程序设计(第四版 谭洪强)实验5答案

实验四参考答案(参考答案) (1) 设计程序sy5-1.c,从键盘上输入一个3行3列矩阵各个元素的值,输出其主对角线元素和反向对角线元素之和。 算法分析: 对角线上的元素,1维和2维下标相同,反对角线元素,如果行下标为i,列下标就为2-i; 参考答案: #include int main() { int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int i,j,sum=0; for(i=0;i<3;i++) sum=sum+a[i][i]+a[i][2-i]; //a[i][i]当前行的主对角线元素 //a[i][2-i]当前行的反对角线元素printf("矩阵的正、反对角线元素之和为:%d\n",sum); return 0; } 运行结果: (2) 设计程序sy5-2.c,找出一个3×4的矩阵中的最小值及其位置。 算法分析: 首先把二维数组中的第一个数即a[0][0]看成最小值,然后逐行逐列的去遍历每个元素,逐一判断每一个元素是否比最小值还好小,如果是,就改写最小值,并记录他的下标。 参考答案: #include #include int main() { int a[3][4]={{10,21,41,5},{12,15,46,35},{40,21,26,30}}; int i,j,row,colum,min; printf("数组a:\n"); for(i=0;i<3;i++) { for(j=0;j<4;j++) printf("%5d",a[i][j]);

printf("\n"); } min=a[0][0];row=0;colum=0; //首先把第一个数a[0][0]看成最小数 for(i=0;i<3;i++) //双重循环逐一遍历每个元素a[i][j] for(j=0;j<4;j++) if(min>a[i][j]) //如果当前值a[i][j]比最小值还要小 {min=a[i][j];row=i;colum=j;} //用a[i][j]改写最小值,并记下他们的下标printf("矩阵中最小元素是:%d,行下标是:%d,列下标是%d\n",min,row,colum); return 0; } 运行结果: (3) 设计程序sy5-3.c,定义一个3×3的二维数组,通过随机函数自动赋值。然后输入一个整数n,使数组左下三角(含对角线元素)元素中的值乘以n 。例如:若n的值为3,a 数组中的值为 | 1 9 7 |则程序运行后a数组中的值应为| 3 9 7 | | 2 3 8 | | 6 9 8 | | 4 5 6 | | 12 15 18 | 算法分析: 主要理解到对角线即以下元素包含哪些元素,即他们的下标变化。对每一行i来说,对角线以下的元素,他们的列下标是0,1,2,---,i;所以用外循环i遍历行,内循环j(从0到i),逐一遍历每一个a[i][j],并给a[i][j]赋值为他的n倍。最后输出矩阵。 参考答案: #include #include int main() { int a[3][3]; int i,j,n; printf("原来a的值:"); for(i=0;i<3;i++) //生成数组元素,并按矩阵形式输出 { for(j=0;j<3;j++) {a[i][j]=rand()%20; //rand()参看教材385页 //rand()%20 产生一个20以内的整数

《C语言程序设计》第8章习题答案

1、选择题 (1)A(2)D(3)B(4)A(5)D(6)B(7)B(8)C(9)B(10)B(11)C 2、填空题 (1)#include (2)#define (3)3 5 5 (4)a=4,b=13 a=13,b=4 (5)10 (6)16 (7)1000 10 (8)10 (9)the max value is 2 (10)2 3、程序设计题 (1) #define LETTER 1 main() { int i; char c; char str[80]; printf("Please enter a string:"); scanf("%s",str); i=0; while((c=str[i])!='\0') { i++; #ifdef LETTER if(c>='a'&&c<='z') c=c-32; #else if(c>='A'&&c<='Z') c=c+32; #endif printf("%c",c); printf("%d",(int)c); } } (2)

#include #include "d:188011.c" #include "d:188012.c" #include "d:188013.c" int fmax(int x,int y,int z); int fmin(int x,int y,int z); int faver(int x,int y,int z); main() { int a,b,c; int max=0; int min=0; int average=0; printf("Please enter three number:"); scanf("%d,%d,%d",&a,&b,&c); max=fmax(a,b,c); min=fmin(a,b,c); average=faver(a,b,c); printf("The max of the three number is: %d.\n",max); printf("The min of the three number is: %d.\n",min); printf("The average of the three number is %d.\n",average); } /*188011.c*/ int fmax(int x,int y,int z) { int max; max=x; if(xy) {min=y; if(min>z) min=z; } else return min; }

《C语言》章节列表

第1章程序设计和C语言1 第2章算法——程序的灵魂16 第3章最简单的C程序设计——顺序程序设计第4章选择结构程序设计85 第5章循环结构程序设计114 第6章利用数组处理批量数据142 6.1怎样定义和引用一维数组142 6.1.1怎样定义一维数组143 6.1.2怎样引用一维数组元素144 6.1.3一维数组的初始化145 6.1.4一维数组程序举例146 6.2怎样定义和引用二维数组148 6.2.1怎样定义二维数组149 6.2.2怎样引用二维数组的元素150 6.2.3二维数组的初始化151 6.2.4二维数组程序举例152 6.3字符数组154 6.3.1怎样定义字符数组154 6.3.2字符数组的初始化155 6.3.3怎样引用字符数组中的元素155 6.3.4字符串和字符串结束标志156 6.3.5字符数组的输入输出159 6.3.6使用字符串处理函数161 6.3.7字符数组应用举例165 习题168 第7章用函数实现模块化程序设计170 7.1为什么要用函数170 7.2怎样定义函数172 7.2.1为什么要定义函数172 7.2.2定义函数的方法173 7.3调用函数174 7.3.1函数调用的形式174 7.3.2函数调用时的数据传递175 7.3.3函数调用的过程177 7.3.4函数的返回值178 7.4对被调用函数的声明和函数原型179 7.5函数的嵌套调用182 7.6函数的递归调用184 7.7数组作为函数参数192 7.7.1数组元素作函数实参193 7.7.2数组名作函数参数194 7.7.3多维数组名作函数参数197 7.8局部变量和全局变量199 7.8.1局部变量199

c语言程序设计(科学出版社)课后习题解答

第3章习题解答 第1章 1.C 语言程序主要由预处理命令、函数、注释等组成。 2.填空 (1)分号 (2)main (3)stdio.h 3. 源程序: #include main( ) { printf(“*************************\n”); printf(“Hello World!\n”); printf(“*************************”); } 4. 源程序: #include main( ) { int a, b, c; /* 定义变量*/ scanf(“%d”, &a); /* 输入第一个整数*/ scanf(“%d”, &b); /* 输入第二个整数*/ c=a-b; /* 计算差*/ printf(“%d-%d=%d”,a,b,c); /* 输出结果*/ } 5. (1) (2)x=10; (3)printf(“s=%d\n”,s); 第2章 1. (1) c (2) a (3) b g (4) a d e (5) d 2. a. 5 b. 295 c. 4 d. 29 e. 9 3. a.x=4,y=6

b. x=4,y=3 f.x=3,y=6 4. 16 5. #include main() { int a,b,c; scanf("%d%d",&a,&b); c=a*b; printf("%d*%d=%d",a,b,c); } 第3章 1. (1) b (2) b (3) d (4) a (5) b 2. (1)&a,&b (2)l,s 3. printf(“x=%.2f,y=%.2f\n”,x,y); 4. #include main() { int num1,num2,num3,sum; float average; scanf("%d%d%d",&num1,&num2,&num3); sum=num1+num2+num3; average=sum/3.0; printf("sum=%d,average=%.2f\n",sum,average); } 5. #include main() { int hour,minute,second,total; /* 定义变量代表时、分、秒和总秒数*/ scanf("%d",&total); hour=total/3600; minute=total%3600/60; second=total%3600%60;

C语言程序设计8章

C语言程序设计8章

《C语言程序设计》课程练习 8章函数 一、判断题 1. 在函数定义中,形参变量有时也可以是全局变量。( ) √ × 正确 2. 在C程序中,函数调用可以作为函数的形参。 √ × 正确 3. 在C程序中,函数调用可以作为函数的实参。 √ × 正确 4. 在C程序中,函数的形式参数是指针类型时,调用时对应的实参也必须是指针类型。 √ × 正确 5. 对任一变量一旦被指定为某一确定类型后,该变量在程序运行时所占存储空间的 多少和所能参加的运算类型便已确定了。() √ × 正确 6. C语言程序必须包含库函数。()

√ × 正确 7. 如果被定义函数的返回值是整型,可以不必进行说明。() √ × 正确 8. 一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量。() √ × 正确 9. return语句可以带有表达式也可以不带。() √ × 正确 10. 若某自定义函数中无return语句,则该函数一定没有返回值。 √ × 正确 11. 在C语言中,变量的初始化都是在编译阶段完成的。 √ × 正确 12. 在同一源文件中,全局变量与局部变量同名,在局部变量作用范围内,全局变量的值等于局部变量的值。 √ × 正确 13. return语句作为函数的出口,在某一个函数体内必须唯一。() √ × 正确

14. C语言程序必须包含库函数。() √ × 正确 15. C语言中,任意两个函数间不能嵌套定义,但可以互相调用。() √ × 正确 16. 在函数的定义中,若函数没有参数,则可以省略函数名后的括号。 √ × 正确 17. 函数返回值的数据类型取决于return语句中表达式的数据类型。 √ × 正确 18. 函数返回值的数据类型取决于主调函数传递过来的实参的数据类型。 √ × 正确 19. 函数返回值的数据类型取决于函数定义时为函数指定的数据类型。 √ × 正确 20. 在C程序中,函数的形式参数是指针类型时,调用时对应的实参也必须是地址量。 √ × 正确 21. C程序中,函数调用时用数组名作为函数的实参,则传递给形参的是整个数组。

C语言学习知识程序设计(第3版)何钦铭颜晖第5章函数

第5章函数 【练习5-1】使用函数求1到n之和:输入一个正整数 n,输出1~n之和。要求自定义和调用函数sum(n)求 1~n 之和。若要计算 m~n(m int sum(int n); int main(void) { int n; int sum; printf("Enter n:") scanf("%d", &n); printf("sum = %d\n", sum(n)); return 0; } int sum(int n) { int result, i; result = 0; for(i = 1; i <= n; i++) result = result + i; return result; } 若要计算 m~n(m

【练习5-2】使用函数找最大值:输入2个数,输出其中较大的数。要求定义和调用函数 max(a, b)找出并返回 a、b 中较大的数。试编写相应程序。 解答: #include double max(double a, double b); int main(void) { int a, b; printf(“Input a and b:”); scanf("%lf%lf",&a, &b); printf("max= %lf\n", max(a, b)); return 0; } double max(double a, double b) { if(a > b) return a; else return b; } 【练习5-3】数字金字塔:输入一个正整数 n,输出n行数字金字塔。试编写相应程序。 解答: #include int main(void) { int n,i,j; printf(“Enter n:”); scanf("%d", &n); for(i = 1; i <= n; i++){ for(j = 1; j <= n - i; j++) printf(" "); for(j = 1; j <= i; j++) printf("%d ", i); putchar('\n'); } return 0; } 【练习5-4】思考:若把例 5-9 中静态变量 f 定义成普通局部变量,还能实现计算 n!吗?请上机检验。若把 f 换成全局变量又会如何?

相关文档
最新文档