C语言例题第六章Word文档格式.docx

上传人:b****4 文档编号:16637891 上传时间:2022-11-25 格式:DOCX 页数:23 大小:33.78KB
下载 相关 举报
C语言例题第六章Word文档格式.docx_第1页
第1页 / 共23页
C语言例题第六章Word文档格式.docx_第2页
第2页 / 共23页
C语言例题第六章Word文档格式.docx_第3页
第3页 / 共23页
C语言例题第六章Word文档格式.docx_第4页
第4页 / 共23页
C语言例题第六章Word文档格式.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

C语言例题第六章Word文档格式.docx

《C语言例题第六章Word文档格式.docx》由会员分享,可在线阅读,更多相关《C语言例题第六章Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。

C语言例题第六章Word文档格式.docx

printf(“s=%f”,s);

【例6.4】编写程序,求任意数x的n次幂。

voidpower(floatx,intn);

/*定义函数求x的n次幂,没有返回值*/

{

floatp=1;

i++)

p=p*x;

printf(“%f的%d次方为:

%f\n”,x,n,p);

floatx;

intn;

printf(“请输入x=?

n=?

\n”);

scanf(“%f,%d”,&

n);

power(x,n);

/*以函数语句的方式调用函数*/

【例6.5】编写程序,交换两个参数的值。

inta=3,b=9;

voidswap(intx,inty);

/*预先说明swap函数*/

exchangebefore:

a=%d,b=%d\n"

a,b);

swap(a,b);

/*调用swap函数*/

afterexchange:

voidswap(intx,inty)/*swap函数定义*/

intz;

z=x;

x=y;

y=z;

/*交换形参x和y的值*/

changeinfunction:

x=%d,y=%d\n"

x,y);

程序执行结果:

a=3,b=9

x=9,y=3

【例6.6】编程计算s=1!

+2!

+3!

+……+10!

longf2(intn)/*定义求n的阶乘函数*/

longt=1;

i++)t=t*i;

returnt;

}

longf1(intp)/*定义求n个数的和函数*/

longsum=0;

=p;

sum+=f2(i);

/*调用求阶乘函数累加到和*/

returnsum;

longs;

s=f1(10);

/*调用求和函数*/

s=%ld\n"

s);

【例6.7】编制程序,用递归法计算n!

n!

的递归定义形式如下:

n!

=1(n=0,1)

n*(n-1)!

(n>

1)

longfac(intn)/*定义求n的阶乘的递归函数*/

longf;

if(n<

0)printf("

n<

0,inputerror"

elseif(n==0)f=1;

elsef=n*fac(n-1);

return(f);

longy;

\ninputainteagernumber:

%d"

y=fac(n);

%d!

=%ld"

n,y);

【例6.8】Hanoi塔问题

Hanoi塔游戏据说来源于布拉玛神庙。

游戏的装置是:

一块板上有三根针A,B,C。

A针上套有64个大小不等的圆盘,大的在下,小的在上。

如图6-5所示。

游戏的目标是要把这64个圆盘从A针移动C针上,规定每次只能移动一个圆盘,移动可以借助B针进行。

但在任何时候,任何针上的圆盘都必须保持大盘在下,小盘在上。

求移动的步骤。

viodmove(intn,inta,intb,intc)/*定义移动圆盘的递归过程函数*/

if(n==1)printf("

%d-->

%d\n"

a,c);

/*n=1,将圆盘从A直接移动到C*/

else

move(n-1,a,c,b);

/*把n-1个圆盘从A借助于C移动到B*/

/*将A上的最后一个圆盘移到C上*/

move(n-1,b,a,c);

/*把n-1个圆盘从B借助于A移动到C*/

main()

{intn;

inputn=:

move(n,1,2,3);

/*调用移动圆盘递归函数*/

当n=3时程序运行的结果为:

inputn=:

3↙

1→3

1→2

3→2

2→1

2→3

【例6.9】在复合语句中定义变量举例。

inti=2,j=3,k;

/*主函数体内定义的局部变量*/

k=i+j;

{

intk=8;

/*复合语句定义的局部变量*/

k=%d\n"

k);

k=8

k=5

【例6.10】输入长方体的长宽高l,w,h。

求体积及三个面的面积s1、s2和s3。

ints1,s2,s3;

/*定义全程变量分别存放长方体三个面的面积*/

intvs(inta,intb,intc)/*定义求体积函数*/

intv;

v=a*b*c;

/*计算体积*/

s1=a*b;

s2=b*c;

s3=a*c;

/*计算三个面的面积*/

return(v);

intv,l,w,h;

inputlength,widthandheight:

%d%d%d"

l,&

w,&

h);

v=vs(l,w,h);

/*调用函数返回体积值*/

\nv=%d,s1=%d,s2=%d,s3=%d\n"

v,s1,s2,s3);

【例6.11】外部变量与局部变量同名举例。

inta=3,b=5;

/*a,b为全局变量*/

max(inta,intb)/*a,b为形参,是局部变量,与全局变量同名*/

intc;

c=a>

b?

a:

b;

return(c);

inta=8;

/*a为局部变量,与全局变量a同名*/

max=%d\n"

max(a,b));

max=8

【例6.12】全局变量的说明举例。

intvs(inty,intw)

externinth;

/*全局变量声明*/

v=y*w*h;

externintw;

inty=5;

printf(“v=%d”,vs(y,w));

inty=3,w=4,h=5;

/*全局变量定义*/

v=100

【例6.13】分析下面程序中auto变量值的变化。

voidf1()

inta=0;

printf(“a=%d\n”,a);

a++;

for(i=0;

3;

i++)f1();

程序的执行结果都为:

a=0

【例6.14】修改上例f1函数中的a为静态局部变量,再观察运行结果。

staticinta=0;

/*定义静态局部变量a*/

main同上例(此处略)。

a=1

a=2

分析:

由于a为静态局部变量,只在编译时赋了一次初值,以后每次调用结束后都保留了本次运算的结果,所以输出结果依次为0,1,2。

【例6.15】求sum=1!

+2!

+3!

+4!

+5!

的值。

intfac(intn)

staticintf=1;

/*定义静态局部变量f*/

f=f*n;

inti,sum;

=5;

i++)sum+=fac(i)

sum=%d\n"

sum);

sum=153

【例6.16】编写程序计算s=12+22+32+…+102的值。

intsquare(intn)

registerinti,s=0;

/*定义寄存器变量*/

i++)s+=i*i;

return(s);

s=%d\n"

square(10));

s=385

由于在循环体内反复计算i和s的值,因此将它们说明为寄存器变量,提高了程序执行的效率。

【例6.17】设一个程序由两个源程序文件file1.c和file2.c组成,分析下列程序。

/*file1.c*/

longf1(intn)/*定义求n!

函数*/

longfac=1;

i++)fac=fac*i;

return(fac);

externlongf2(intm);

/*函数声明,f2在文件file2.c中*/

printf(“inputn=\n”);

scanf(“%d”,&

f2(n));

/*file2.c*/

longf2(intm)/*定义求m个数的和函数*/

externlongf1(intn);

/*函数声明,f1在文件file1.c中*/

longs=0;

s=s+f1(i);

【例6.18】编写程序,实现用函数指针变量调用“输入n个数,求其中的最大数”的函数。

intmax(intn1)/*定义求n个数的最大值函数*/

inti,x,m1;

pleaseinput%dmumbers:

n1);

“%d"

x);

m1=x;

n1;

if(x>

m1)m1=x;

return(m1);

{int(*pf)();

/*定义函数指针变量*/

intm,n;

pf=max;

/*函数指针变量pf指向max函数的入口地址*/

printf("

inputn=?

\n"

scanf("

m=(*pf)(n);

/*通过函数指针变量pf调用max函数,返回值赋值给m*/

themaxmumberis:

m);

5↙

pleaseinput5mumbers:

122681915↙

26

【6.19】用指针作参数实现两个数据的交换。

#include<

voidswap(int*x,int*y)/*形参为指针变量*/

intt;

t=*x;

*x=*y;

*y=t;

inta,b;

inputa,b:

a,&

b);

swap(&

/*用a,b的地址作为实参调用函数*/

程序执行结果如下:

3,9↙

a=9,b=3

例6.19是用指针变量作形参,地址作实参的情况。

也可以用指针变量作为实参调用函数。

例如,对上例中swap函数不变,修改main函数如下:

int*p1=&

a,*p2=&

/*定义指针变量分别指向a,b*/

swap(p1,p2);

/*用指针变量p1,p2作为实参调用函数*/

【例6.20】输入a、b、c三个整数,按从大到小的顺序输出。

voidswap(int*p1,int*p2)

intp;

p=*p1;

*p1=*p2;

*p2=p;

inta,b,c*pa,*pb,*pc;

/*定义三个指针变量pa,pb,pc*/

pa=&

a,pb=&

b,pc=&

c;

/*三个指针变量分别指向a,b,c*/

inputa,b,c:

%d,%d,%d"

b,&

c);

if(*pa<

*pb)swap(pa,pb);

/*用指针变量作实参调用函数swap*/

*pc)swap(pa,pc);

if(*pb<

*pc)swap(pb,pc);

\n%d,%d,%d\n"

a,b,c);

inputa,b,c:

6,3,9↙

9,6,3

【例6.21】假定一个数组中存放的是学生5门课的成绩,编写程序,判断数组中各元素的值,若大于等于60则输出“pass”,否则输出“bad”。

voidgrade(intx)

=60)printf("

%d--pass\n"

x);

elseprintf("

%d--bad\n"

inta[5],i;

input5numbers:

5;

i++)scanf("

a[i]);

/*数组输初值*/

i++)grade(a[i]);

/*依次以数组元素作实参调用函数grade*/

input5numbers:

8060597145

80--pass

60--pass

59--bad

71--pass

45--bad

【例6.22】编制程序,用选择法对5个整数排序。

voidsort(inta[],intn)/*定义排序函数,形参为数组名*/

inti,j,k,m;

n-1;

{k=i;

/*k记录数组中的最元素下标*/

for(j=i+1;

j<

n;

j++)

if(a[j]>

a[i])k=j;

if(k!

=i)

{m=a[i];

a[i]=a[k];

a[k]=m;

int*p,i,a[5];

p=a;

/*数组a的首地址赋值给指针变量p*/

input5numberstoA:

p+i);

/*数组输入初值*/

sort(p,5);

/*指针作实参调用函数*/

theresultaftersort\n"

while(p<

a+5)

%d"

*p);

p++;

12345

54321

【例6.23】编制程序,利用原数组空间实现数组的逆置。

即将数组的第1个元素放到最后一个位置,第2个元素放到倒数第2个位置…,最后一个元素放到第1个位置。

voidfun(intb[10])/*定义数组逆置函数,形参为数组名*/

intl,r,t;

l=0;

r=9;

while(l<

r)

{t=b[l];

b[l]=b[r];

b[r]=t;

l++;

r--;

inta[10];

input10numberstoarray:

10;

fun(a);

/*数组名作实参调用函数*/

nowthearrayis:

3d%"

a[i]);

【例6.24】编制程序,输入a、b、c三个整数,调用函数返回求其中的最大数的地址。

int*max(intx,inty,intz)/*定义整型指针型函数max*/

int*pmax;

/*定义指针变量pmax*/

y)pmax=&

x;

/*pmax指向x,y中的大者*/

elsepmax=&

y;

if(z>

*pmax)pmax=&

z;

return(pmax);

/*返回指向整型变量的指针*/

inta,b,c,*p;

p=max(a,b,c);

/*函数返回结果赋值给整型指针变量*/

tnemaxis:

*p=%d\n"

12,99,28↙

*p=99

【例6.25】编写程序,显示命令行上的参数。

main(intargc,char*argv[])

{inti=0;

while(argc>

{++i;

%s\n"

argv[i]);

argc--;

argv++;

将该程序以文件名testexe命名,经连接编译后的可执行文件为test.exe。

在DOS下运行时输入以下命令:

testexeTurbocfoxproC++

则程序执行结果为:

Turboc

foxpro

C++

6.11习题

6-1单项选择题

1.下列叙述中正确的是()

A.C语言编译时不检查语法B.C语言的子程序有过程和函数两种

C.C语言的函数可以嵌套定义D.C语言所有函数都是外部函数

2.在一个C语言程序中()

A.main函数必须出现在所有函数之前B.main函数可以在任何地方出现

C.main函数必须出现在所有函数之后D.main函数必须出现在固定位置

3.以下叙述中正确的是()

A.全局变量的作用域一定比局部变量的作用域范围大

B.静态(static)类别变量的生存期贯穿于整个程序的运行期间

C.函数的形参都属于全局变量

D.未在定义语句中赋初值的auto变量和static变量的初值都是随机值

4.下列关于函数的说法中错误的是()

A.C语言中的函数只有static和extern两种类型

B.C语言中允许函数的递归调用

C.调用函数时,C语言要求形参与实参的个数类型完全一致

D.C语言函数的缺少数据类型是空类型(void型)

5.C语言规定,各个函数之间()

A.允许直接递归调用也允许间接递归调用

B.不允许直接递归调用也不允许间接递归调用

C.允许直接递归调用,不允许间接递归调用

D.不允许直接递归调用,允许间接递归调用

6.在以下函数调用语句中,函数fun1参数的个数为()

fun1(x,10,(x,10),fun2(y,10,(y,10)));

A.8B.4C.5D.编译出错

7.以下所列的各函数首部中,正确的是()

A.voidplay(var:

In

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 信息与通信

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1