ch5例题习题实验.docx

上传人:b****7 文档编号:25046391 上传时间:2023-06-04 格式:DOCX 页数:39 大小:82.33KB
下载 相关 举报
ch5例题习题实验.docx_第1页
第1页 / 共39页
ch5例题习题实验.docx_第2页
第2页 / 共39页
ch5例题习题实验.docx_第3页
第3页 / 共39页
ch5例题习题实验.docx_第4页
第4页 / 共39页
ch5例题习题实验.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

ch5例题习题实验.docx

《ch5例题习题实验.docx》由会员分享,可在线阅读,更多相关《ch5例题习题实验.docx(39页珍藏版)》请在冰豆网上搜索。

ch5例题习题实验.docx

ch5例题习题实验

第五章函数

例题

5.1

#include

/*

函数功能:

计算平均数

函数入口参数:

整型x,存储第一个运算数

整型y,存储第二个运算数

函数返回值:

平均数

*/

intAverage(intx,inty)

{

intresult;

result=(x+y)/2;

returnresult;

}

main()

{

inta=12;

intb=24;

intave=Average(a,b);/*在这里进行函数调用*/

printf("Averageof%dand%dis%d.\n",a,b,ave);

}

5.2

#include

intAverage(intx,inty);/*声明Average()函数*/

main()

{

inta=12;

intb=24;

intave=Average(a,b);/*在这里进行函数调用*/

printf("Averageof%dand%dis%d.\n",a,b,ave);

}

/*

函数功能:

计算平均数

函数入口参数:

整型x,存储第一个运算数

整型y,存储第二个运算数

函数返回值:

平均数

*/

intAverage(intx,inty)

{

intresult;

result=(x+y)/2;

returnresult;

}

5.3

#include

Func()

{

printf("inFunc()\n");

}

main()

{

Func(1,2,3);

}

5.4

#include

main()

{

inta;

{

intb;

{

intc;

a=0;b=0;c=0;d=0;

}

a=0;b=0;c=0;d=0;

}

{

intd;

a=0;b=0;c=0;d=0;

}

a=0;b=0;c=0;d=0;

}

5.5

#include

main()

{

inta=1;

{

inta=2;

printf("IntheINNERblock,a=%d\n",a);

}

printf("IntheOUTERblock,a=%d\n",a);

}

5.6

#include

intAverage(intx,inty);/*声明Average()函数*/

main()

{

intx=12;

inty=24;

printf("Averageof%dand%dis%d.\n",x,y,Average(x,y));

}

/*

函数功能:

计算平均数

函数入口参数:

整型x,存储第一个运算数

整型y,存储第二个运算数

函数返回值:

平均数

*/

intAverage(intx,inty)

{

return(x+y)/2;

}

5.7

#include

intglobal;/*定义全局变量*/

voidGlobalPlusPlus(void);

main()

{

global=1;

printf("BeforeGlobalPlusPlus(),itis%d\n",global);

GlobalPlusPlus();

printf("AfterGlobalPlusPlus(),itis%d\n",global);

}

/*

函数功能:

对全局变量global加1,并打印加1之前与之后的值

函数入口参数:

函数返回值:

*/

voidGlobalPlusPlus(void)

{

printf("Before++,itis%d\n",global);

global++;

printf("After++,itis%d\n",global);

}

5.8

#include

voidGlobalPlusPlus(void);

main()

{

intglobal=1;

printf("BeforeGlobalPlusPlus(),itis%d\n",global);

GlobalPlusPlus();

printf("AfterGlobalPlusPlus(),itis%d\n",global);

}

/*

函数功能:

对局部变量global加1,并打印加1之前与之后的值

函数入口参数:

函数返回值:

*/

voidGlobalPlusPlus(void)

{

intglobal=1;

printf("Before++,itis%d\n",global);

global++;

printf("After++,itis%d\n",global);

}

5.9

#include

voidFunc(void);

main()

{

inti;

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

{

Func();

}

}

/*

函数功能:

打印被调用的次数

函数入口参数:

函数返回值:

*/

voidFunc(void)

{

staticinttimes=1;/*定义静态变量*/

printf("Func()wascalled%dtime(s).\n",times++);

}

5.10

getnum.prj文件:

getnum.c

main.c

----------------------------------------

getnum.h文件:

externunsignedintgetnumError;/*声明外部变量*/

intGetInt(void);

longGetLong(void);

floatGetFloat(void);

doubleGetDouble(void);

----------------------------------------

getnum.c文件:

#include"getnum.h"

#include

#include

#include

#include

#defineBUFFER_SIZE32/*输入缓冲区大小*/

enuminput_type{FLOAT,INT}inputType;/*输入类型*/

unsignedintgetnumError=0;/*非零表示出错*/

staticunsignedcharbuffer[BUFFER_SIZE];/*输入缓冲区*/

staticunsignedintpos=0;/*buffer中有效数据的末尾位置+1*/

staticunsignedchar*GetInput(void);

staticintIsValidChar(charch);

staticintHasDot(void);

/*

函数功能:

读取用户的int类型输入

函数入口参数:

函数返回值:

用户输入结果

*/

intGetInt(void)

{

return(int)GetLong();

}

/*

函数功能:

读取用户的long类型输入

函数入口参数:

函数返回值:

用户输入结果

*/

longGetLong(void)

{

inputType=INT;

returnatol(GetInput());/*把字符串转为数值类型*/

}

/*

函数功能:

读取用户的float类型输入

函数入口参数:

函数返回值:

用户输入结果

*/

floatGetFloat(void)

{

return(float)GetDouble();

}

/*

函数功能:

读取用户的double类型输入

函数入口参数:

函数返回值:

用户输入结果

*/

doubleGetDouble(void)

{

inputType=FLOAT;

returnatof(GetInput());/*把字符串转为数值类型*/

}

/*

函数功能:

读取用户输入的字符串,限制必须是整数或者浮点数

函数入口参数:

函数返回值:

数据缓冲区

*/

staticunsignedchar*GetInput(void)

{

charc='\0';

pos=0;

while((c=getch())!

='\r')/*回车输入结束*/

{

if(c=='\b')/*输入退格符*/

{

if(pos>0)

{

pos--;

printf("\b\b");/*删除前一个字符*/

}

else

putchar('\a');/*响铃,提醒没有字符可删除*/

}

elseif(pos<(BUFFER_SIZE-1))/*防止越界并为'\0'预留空间*/

{

if(IsValidChar(c))/*合法字符保存并回显*/

{

buffer[pos++]=c;

putchar(c);

}

else

putchar('\a');/*响铃,提醒输入非法字符*/

}

else/*达到buffer上界*/

{

putchar('\a');

}

}

buffer[pos]='\0';

putchar('\n');

if(pos>0)

getnumError=0;

else

getnumError=1;/*用户什么都没有输入*/

returnbuffer;

}

/*

函数功能:

判断当前输入的字符是否合法

函数入口参数:

函数返回值:

非0表示合法,0表示非法

*/

staticintIsValidChar(charch)

{

intresult;/*判断结果*/

if(ch>='0'&&ch<='9')/*数字全部接收*/

result=1;

elseif(pos==0&&(ch=='-'||ch=='+'))/*第一个字符可以是正负号*/

result=1;

elseif(ch=='.'&&inputType==FLOAT&&!

HasDot())/*只有浮点数能输入一次小数点*/

{

result=1;

}

else/*其余情况皆非法*/

result=0;

returnresult;

}

/*

函数功能:

判断是否已经输入了小数点

函数入口参数:

函数返回值:

非0表示已经输入,0表示还未输入

*/

staticintHasDot(void)

{

inti;

for(i=0;i

='.';i++)

;

return(i

}

----------------------------------------

main.c文件:

#include

#include"getnum.h"

main()

{

doublef;

printf("TestGetDouble().\n");

do

{

printf("Inputanumber:

");

f=GetDouble();

if(getnumError!

=0)

printf("Youinputnothing.\n");

else

printf("Whatyouinputis%lf.\n",f);

}while(f!

=-1);/*输入-1退出*/

}

5.11

#include

intFactorial(intx);

main()

{

intx;

while

(1)/*无限循环*/

{

printf("Pleaseinputx(-1toquit):

");

scanf("%d",&x);

if(x==-1)

break;/*循环出口*/

else

printf("Thefactorialof%dis%d.\n",x,Factorial(x));

}

}

/*

函数功能:

计算x的阶乘

函数入口参数:

整型x

函数返回值:

整型的结果

*/

intFactorial(intx)

{

inti,result;

for(i=1;i<=x;i++)

result*=i;

returnresult;

}

 

习题

习题答案

5.1

5.2

5.3

#include

intSquare(inti)

{

returni*i;

}

main()

{

inti=0;

i=Square(i);

for(;i<3;i++)

{

staticinti=1;

i+=Square(i);

printf("%d,",i);

}

printf("%d\n",i);

}

5.4

#include

main()

{

intn,ret;

printf("Inputn:

");

scanf("%d",&n);

ret=IsPrimeNumber(n);

if(ret!

=0)

{

printf("%disaprimenumber\n",n);

}

else

{

printf("%disnotaprimenumber\n",n);

}

}

/*

函数功能:

判断参数是否是素数

函数入口参数:

number为整型数,要求为正整数

函数返回值:

非0值表示是素数,否则不是素数

*/

intIsPrimeNumber(intnumber)

{

inti;

if(number<=1)/*负数、0和1都不是素数*/

return0;

for(i=2;i<=sqrt(number);i++)

{

if((number%i)==0)/*被整除,不是素数*/

return0;

}

return1;

}

-------------------------------------------------

#include

main()

{

intn,ret;

printf("Inputn:

");

scanf("%d",&n);

ret=IsPrimeNumber(n);

if(ret!

=0)

{

printf("%disaprimenumber\n",n);

}

else

{

printf("%disnotaprimenumber\n",n);

}

}

/*

函数功能:

判断参数是否是素数

函数入口参数:

number为整型数,要求为正整数

函数返回值:

非0值表示是素数,否则不是素数

*/

intIsPrimeNumber(intnumber)

{

inti,flag=1;/*标志变量置为真,假设是素数*/

if(number<=1)/*负数、0和1都不是素数*/

flag=0;

for(i=2;i<=sqrt(number);i++)

{

if((number%i)==0)/*被整除,不是素数*/

flag=0;

}

returnflag;

}

5.5

#include

unsignedlongFactorial(unsignedintnumber);

main()

{

unsignedintm,k;

doublep;

do{

printf("Pleaseinputm,k(m>=k>0):

");

scanf("%u,%u",&m,&k);

}while(m

p=(double)Factorial(k)/Factorial(m-k);

printf("p=%f\n",p);

}

/*

函数功能:

计算参数的阶乘

函数入口参数:

无符号整型

函数返回值:

运算结果

*/

unsignedlongFactorial(unsignedintnumber)

{

unsignedlongi,result=1;

for(i=2;i<=number;i++)

result*=i;

returnresult;

}

5.6

#include

intMaxCommonFactor(inta,intb);

main()

{

inta,b,x;

printf("Inputa,b:

");

scanf("%d,%d",&a,&b);

x=MaxCommonFactor(a,b);

printf("MinCommonMultiple=%d\n",x);

}

/*

函数功能:

计算两个正整数的最大公约数

函数入口参数:

两个整型数

函数返回值:

最大公约数;-1表示没有最大公约数

*/

intMaxCommonFactor(inta,intb)

{

if(a<=0||b<=0)/*保证输入的参数正确*/

return-1;

while(a!

=b)

{

if(a>b)

{

a=a-b;

}

elseif(b>a)

{

b=b-a;

}

}

returna;

}

5.7

#include

intCommonFactors(inta,intb);

main()

{

intsub;

while((sub=CommonFactors(100,50))>0)

{

staticintcounter=1;

printf("Commonfactor%dis%d\n",counter++,sub);

}

}

/*

函数功能:

指明计算哪两个数的公约数

函数入口参数:

两个整型数

函数返回值:

公约数

*/

intCommonFactors(inta,intb)

{

staticintnum1=-1;

staticintnum2=-1;

staticintcurFactor;

if(a<0||b<0)

return-1;

if(num1!

=a||num2!

=b)/*使用了新的参数*/

{

num1=a;

num2=b;

curFactor=a>b?

b:

a;/*curFactor置为两个数中较小的那个*/

}

while(curFactor>0)

{

if(a%curFactor==0&&b%curFactor==0)

{

returncurFactor--;/*如果不减1,则下次还会测试这个数*/

}

curFactor--;

}

return-1;

}

5.8

cmnfctr.h文件:

voidCalcCommonFactorOf(intnum1,intnum2);

intNextCommonFactor(void);

----------------------------------------------

main.c文件:

#include

#include"cmnfctr.h"

main()

{

intsub;

CalcCommonFactorOf(100,50);

while((sub=NextCommonFactor())>0)

{

staticintcounter=1;

printf("Commonfactor%dis%d\n",counter++,sub);

}

}

----------------------------------------------

cmnfctr.c文件:

staticinta,b;

staticintcurFactor;

/*

函数功能:

指明计算哪两个数的公约数

函数入口参数:

两个整型数

函数返回值:

*/

voidCalcCommonFactorOf(intnum1,intnum2)

{

a=num1;

b=num2;

curFactor=a>b?

b:

a;/*curFactor置为两个数中较小的那个*/

}

/*

函数功能:

得到下一个公约数

函数入口参数:

函数返回值:

下一个公约数;-1表示再也没有新的公约数

*/

intNextCommonFactor(void)

{

if(a<=0||b<=0)/*保证输入

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

当前位置:首页 > 教学研究 > 教学计划

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

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