第八章函数程序设计一.docx
《第八章函数程序设计一.docx》由会员分享,可在线阅读,更多相关《第八章函数程序设计一.docx(21页珍藏版)》请在冰点文库上搜索。
![第八章函数程序设计一.docx](https://file1.bingdoc.com/fileroot1/2023-7/9/33e2e1cf-9bff-4d03-a65c-79a2cfc0411e/33e2e1cf-9bff-4d03-a65c-79a2cfc0411e1.gif)
第八章函数程序设计一
第八章:
函数程序设计
(一)
实验时间:
2009年4月27日实验地点:
实验人:
专业:
班级:
实验题目:
函数程序设计
(一)
实验目的:
通过实验认识一些常见的系统库函数,能编写自定义函数。
实验过程:
1、例8.4实参求值顺序(从右到左)
main()
{inti=2,p;
p=f(i,++i);
printf(“%d”,p);
}
intf(inta,intb)
{intc;
if(a>b) c=1;
elseif(a==b) c=0;
elsec=-1;
return(c);
}
2、关于函数原型声明的例子:
1)例7.5
main()
{floatadd(floatx,floaty);函数声明
floata,b,c;
scanf(“%f,%f”,&a,&b);输入20,30逗号不要忘了
c=add(a,b);
printf(“sumis%f”,c);
}
floatadd(floatx,floaty)函数定义
{floatz;
z=x+y;
return(z);
}
2)例7.5
floatadd(floatx,floaty)
{floatz;
z=x+y;
return(z);
}
main()
{
floata,b,c;
scanf(“%f,%f”,&a,&b);
c=add(a,b);
printf(“%f”,c);
}
补充:
:
选择题
1.关于C语言函数的描述中,正确的是(B)P167
A.函数的定义可以嵌套,但函数的调用不可以嵌套
B.函数的定义不可以嵌套,但函数的调用得意嵌套
C.函数的定义和函数的调用都可以嵌套
D.函数的定义和函数的调用都不可以嵌套
2.已知chara;使用scanf()函数输入一个字符给变量a,不正确的函数调用是(B)
A.scanf(“%d”,&a);B.scanf(“%lf”,&a);
C.scanf(“%c“,a);D.scanf(”%u”,&a);整型和字符型可互相转换,但浮点型不可以
3.putchar()函数的功能是向终端输出(B)
A.多个字符B.一个字符C.一个实型变量值D.一个整型变量表达式
4、已知inta;使用scanf()函数输入一个整数给变量a,正确的函数调用是(B)
A、scanf(“%d”,a);B、scanf(“%d”,&a);
C、scanf(“A”,&a);D、scanf(“%df”,&a);
5.C语言的函数体由(B)括起来
A.()B.{} C.[] D./**/
6.如下fun函数的类型是(C)
fun(floatx)
{
doubley;
intz;
y=x*x;
z=(int)y;
return(z);
}
A.voidB.doubleC.intD.float
7.以下程序的屏幕输出为(B)
#include
voidf(inti)
{
inta=2;
a=i++;
printf(“%d”,a);
}
main()
{
inta=1,c=3;
f(c);
a=c++;
printf(“%d”,a);
}
A.4,3B.3,3C.4,5D.3,5
8.若有以下函数定义:
intfun()
{
staticintk=0;
return++k;
}
以下程序段运行后屏幕输出为(D)
inti;
for(i=1;i<=5i++)
fun();
printf(“%d”,fun());
A.0B.1C.5D.6
9.以下程序运行的结果是(A)
intfun(intarray[4][4])
{
intj;
for(j=0;j<4;j++)
printf(“%2d”,array[2][j]);
printf(“\n”);
}
main()
{
inta[4][4]={0,1,2,0,1,0,0,4,2,0,0,5,0,4,5,0};
fun(a);
}
A.2005B.1004C.0120D.0450
10.以下程序运行后屏幕输出为(D)
#include〈stdio.h〉
inta=2,b=3;
intmax(inta,intb)
{
intc;
c=a>b?
a:
b;
return(c);
}
main()
{
inta=4;
printf(“%d”,max(a,b));
}
A.2,3B.2C.3D.4
11.以下程序运行后屏幕输出为(B)
#include
intf(intx,inty)
{
return(x+y);
}
main()
{
inta=2,b=3,c;
c=f(a,b);
printf(“%d+%d=%d\n”,a,b,c);
}
A.0B.2+3=5C.2+3=0D.3+2=5
改错题:
1.计算大于10的最小n个能被3整除的正整数倒数之和.
程序Cmody012.c中函数fun(intn)的功能是:
根据参数n,计算大于10的最小n个能被3整除的正整数之和.例如:
fun(8)=
fun(8)求大于10的最小8个能被3整除的正整数的倒数之和
答案:
#include
#include
#include
#include
#defineM50
doublefun(intn)
{doubley=0.0;
inti,j;
j=0;
for(i=1;;i++)
{
/**/if((i>10)&&(i%3==0))/**/i>10
{
/**/y+=1/i;/**/1.0%i
j++;
}
if(j==n)break;
}
returny;
}
voidmain()
{clrscr();
printf("fun(8)=%8.3lf\n",fun(8));
}
2.输出201~300之间的所有素数,统计总个数素数怎么判断?
程序cmody032.C的功能是:
输出201~300之间的所有素数,统计总个数。
答案:
#include
#include
voidmain()
{intnum;
printf("\n");
num=fun();
printf("\nThetotalofprimeis%d",num);
getch();
}
intfun()
{intm,i,k,n=0;
for(m=201;m<=300;m+=2)
{k=sqrt(m+1);
for(i=2;i<=k;i++)
/**/if(m/i==0)/**/m%i
break;
/**/if(i>k)/**/
{printf("%-4d",m);
n++;;
if(n%10==0)printf("\n");
}
}
returnn;
}
3.百元买百鸡
程序cmody022.c的功能是求解百元买百鸡问题:
设一只公鸡2元,一只母鸡1元,一只小鸡0.5元。
问一百元买一百只鸡,公鸡、母鸡、小鸡数可分别为多少?
有多少种分配方案?
答案:
#include
#include
/**/intfun();/**/分号去掉
{inthen,cock,chicken,n=0;
for(cock=0;cock<=50;cock+=1)
for(hen=0;hen<=100;hen=hen+1)
{chicken=2*(100-hen-2*cock);
/**/if(cock+hen+chicken=100)/**/=改为==
{n++;
printf("%d-->hen:
%d,cock:
%d,chicken:
%d\n",n,hen,cock,chicken);
if(n==20)getch();
}
}
returnn;
}
voidmain()
{intnum;
num=fun();
printf("\nThereare%dsolutions.\n",num);
getch();
}
填空题:
:
?
1.歌德巴赫猜想
补充程序Ccon023.c,该程序可测试歌德巴赫猜想:
从键盘上输入一个大于6的偶数,总
能找到两个素数,使得这两素数之和正好等于该偶数.
答案:
#include
#include
intprime(intn)
{intk,flag=1;
for(k=2;k<=n/2+1;k++)
if(n%k==0){flag=/**/0/**/;break;}
returnflag;
}
voidmain()
{intnum,a;
//clrscr();
do
{printf("Pleaseinputanevennumber:
");
scanf("%d",&num);
}while(num<=6||num%2==1);
for(a=2;a<=num/2+1;a++)
if(prime(a)&&prime(/**/num-a/**/))
printf("\n%d=%d+%d",num,a,num-a);
}
2.冒泡排序法
补充程序con042.c程序中的insort()函数用冒泡法对数组
中m个元素从大到小排序。
答案:
#include
#include
voidsort(inta[],intm)
{inti,j,t,swap;
for(i=0;i**/m-1/**/;i++)
{
swap=0;
for(j=0;j{
if/**/a[j]{
swap=1;
t=a[j];
a[j]=/**/a[j+1]/**/;
a[j+1]=t;
}
}
if(!
swap)break;
}
}
voidmain()
{
inta[]={23,55,8,32,18,2,9};
inti,k=sizeof(a)/sizeof(int);
sort(a,k);
for(i=0;iprintf("%d",a[i]);
printf("\n");
getch();
}
起3.用所给公式计算三角形面积
补充程序ccon053.c,使程序中的fun()函数,能根据三角形三边长a,b,c,用公式
计算这个三角形的面积,(规定:
若这三条边不能构成三角形,返回-1)。
答案:
#include
#include
/**/float/**/fun(floata,floatb,floatc)
{
floats,area;
s=/**//**/;
s=s*(s-a)*(s-b)*(s-c);
if(s<0)
area=-1;
else
area=sqrt(s);
returnarea;
}
main()
{
floata,b,c,area;
printf("Pleaseinputthreenumbers:
\t");
scanf("%f%f%f",&a,&b,&c);
area=fun(a,b,c);
printf("Areais:
%.2f\n",area);
getch();
}
4.求函数值
补充程序ccon071.c,对函数f(x)=x2-2x+6,分别计算f(x+8)和f(sinx)的值。
如x=2.0,则输出:
f(x+8)=86.000
f(sinx)=5.008
答案:
#include
/**/#include/**/
doublefun(doublex)
{
/**/floaty;
y=x*x-2*x+6;
returny;
/**/
}
voidmain()
{
doublex,y1,y2;
clrscr();
printf("Pleaseinputx:
");
scanf("%lf",&x);
y1=fun(x+8);
y2=fun(/**/sinx/**/);
printf("\nf(x+8)=%.3lf",y1);
printf("\nf(sinx)=%.3lf",y2);
getch();
}
5.计算已知公式的值
补充程序ccon072.c,计算
其中m,n为整数且m>n>=0。
答案:
#include
doublefun(unsignedm,unsignedn)
{
unsignedi;
doublep=1.0;
for(i=1;i<=m;i++)
/**//**/
for(i=1;i<=n;i++)
/**//**/
for(i=1;i<=m-n;i++)
p=p/i;
returnp;
}
voidmain()
{
clrscr();
printf("p=%f\n",fun(13,7));
getch();
}
编程题:
1.输入数字,求已知公式的值
打开程序Cprog041.c,其中的fun()函数,使其计算:
f(x)=
输入:
12
32.25
0.113
输出:
f(12.000)=10.387
f(32.250)=12.935
f(0.113)=1.568
答案:
#include
#include
doublef(floatx)
{
/**/
/**/
}
voidmain()
{
floatx;
doubley;
printf("Pleaseinputanumber:
\n");
scanf("%f",&x);
y=f(x);
printf("f(%.3f)=%.3f\n",x,y);
getch();
}
2.函数求值
打开Cprog031.c,完成其中的函数fun1,该函数的数学表达式是:
fun1(x)=
例如:
fun1(0.76)=1.200
fun1(3.00)=10.000
fun1(3.76)=8.520
答案:
#include
#include
doublefun1(doublex)
{
/**/
/**/
}
voidmain()
{
clrscr();
printf("fun1(0.76)=%8.3lf\n",fun1(0.76));
printf("fun1(3.00)=%8.3lf\n",fun1(3.00));
printf("fun1(3.76)=%8.3lf\n",fun1(3.76));
}
3.求已知函数的值
Cprog021.c,完成其中的函数fun1,该函数的数字表达式是:
fun1(x)=
答案:
#include
#include
doublefun1(doublex)
{/**/
/**/
}
voidmain()
{
clrscr();
printf("fun1(0.76)=%8.3lf\n",fun1(0.76));
printf("fun1(3.00)=%8.3lf\n",fun1(3.00));
printf("fun1(3.76)=%8.3lf\n",fun1(3.76));
}
4.将三个字符串a,b,c从小到大排序后输出.
Cprog022.c,完成其中函数fun2{chara[],charb[],charc[]),实现:
将三个字符串a,b,c从小到大排序后输出.
答案:
#include
#include
#include
#include
voidfun2(chara[],charb[],charc[])
{
/**/
chart[10];
if(strcmp(a,b)>0)
{
strcpy(t,a);
strcpy(a,b);
strcpy(b,t);
}
if(strcmp(a,c)>0)
{
strcpy(t,a);
strcpy(a,c);
strcpy(c,t);
}
if(strcmp(b,c)>0)
{
strcpy(t,c);
strcpy(c,b);
strcpy(b,t);
}
/**/
}
voidmain()
{charstr1[15]="Fuzhou",str2[15]="Fujian",str3[15]="China";
clrscr();
fun2(str1,str2,str3);
printf("Theorderedstringsis:
%s,%s,%s\n",str1,str2,str3);
getch();
}
5.按要求实现函数功能
打开考生文件夹中的cprog012.c,完成其中的函数
实现:
(1)将数组a中大于-20的元素,依次存放到数组b中。
(2)将数组b中的元素按照从小到大的顺序存放到数组c中;
(3)函数返回数组b中的元素个数。
答案:
#include
#include
#include
#include
intfun2(inta[],intn,intb[],intc[])
{
/**/
/**/
}
voidmain()
{intn=10,i,nb;
intaa[10]={12,-10,-31,-18,-15,50,17,15,-20,20};
intbb[10],cc[10];
//clrscr();
printf("Thereare%2delementsinaa.\n",n);
printf("Theyare:
");
for(i=0;iprintf("\n");
nb=fun2(aa,n,bb,cc);
printf("Elementsinbbare:
");
for(i=0;iprintf("\n");
printf("Elementsinccare:
");
for(i=0;iprintf("\n");
printf("Thereare%2delementsinbb.\n",nb);
}