ch5例题习题实验.docx
- 文档编号:12101968
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:39
- 大小:82.33KB
ch5例题习题实验.docx
《ch5例题习题实验.docx》由会员分享,可在线阅读,更多相关《ch5例题习题实验.docx(39页珍藏版)》请在冰点文库上搜索。
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)/*保证输入
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ch5 例题 习题 实验