第三讲 函数理论题2.docx

上传人:b****3 文档编号:4872372 上传时间:2022-12-11 格式:DOCX 页数:16 大小:20.32KB
下载 相关 举报
第三讲 函数理论题2.docx_第1页
第1页 / 共16页
第三讲 函数理论题2.docx_第2页
第2页 / 共16页
第三讲 函数理论题2.docx_第3页
第3页 / 共16页
第三讲 函数理论题2.docx_第4页
第4页 / 共16页
第三讲 函数理论题2.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

第三讲 函数理论题2.docx

《第三讲 函数理论题2.docx》由会员分享,可在线阅读,更多相关《第三讲 函数理论题2.docx(16页珍藏版)》请在冰豆网上搜索。

第三讲 函数理论题2.docx

第三讲函数理论题2

第三讲函数(理论题)

1)P20

连续输入一批学生的成绩,直到输入成绩的数量超过50个或者输入的成绩不是有效成绩(有效成绩为0~100),将输入的有效成绩存入数组mark中,在数组中查找并输出最高分。

函数getmax(array,n)在有n个元素的一维数组array中找出并返回最大值。

运行示例:

Entermarks:

90807765-1

Max=90

【程序】

#include

#defineMAXNUM50

intgetmax((5))

{intk,max;

(6)

for(k=1;k

if(max

returnmax;}

voidmain()

{intk,x;

intmark[MAXNUM];

printf("Entermarks:

");

k=0;

scanf("%d",&x);

while((7)){

mark[k++]=x;

scanf("%d",&x);}

if(k>0)

printf("Max=%d\n",getmax((8)));

elseprintf("Nomarks!

\n");}

【供选择的答案】

(5)A、intn;intarray[]B、void

C、int*arrayD、intarray[],intn

(6)A、max=0;B、;

C、max=array[0];D、max=array[n];

(7)A、k=0&&x<=100

B、k=0&&x<=100

C、k>MAXNUM&&x>=0||x<=100

D、k>MAXNUM||x>=0||x<=100

(8)A、mark,kB、mark

C、mark[]D、mark,n

#include

#defineMAXNUM50

intgetmax((5))

{intk,max;

(6)

for(k=1;k

if(max

returnmax;}

voidmain()

{intk,x;

intmark[MAXNUM];

printf("Entermarks:

");

k=0;

scanf("%d",&x);

while((7)){/*这个循环输入数组的全部元素*/

mark[k++]=x;

scanf("%d",&x);}

if(k>0)/*表示输入的数组元素不为空,就是有元素合格,否则可能全部输入元素都不合格*/

printf("Max=%d\n",getmax((8)));

elseprintf("Nomarks!

\n");}

【供选择的答案】

(5)A、intn;intarray[]B、void

C、int*arrayD、intarray[],intn

这个题中(5)和(8)要对比来看。

根据题目中的“函数getmax(array,n)”推断此处的答案是D,注意函数调用的顺序。

(6)A、max=0;B、;

C、max=array[0];D、max=array[n];

给max赋初值,为第一个元素,然后与后面的比较。

(7)A、k=0&&x<=100

B、k=0&&x<=100

C、k>MAXNUM&&x>=0||x<=100

D、k>MAXNUM||x>=0||x<=100

注意:

题目中给出的条件:

输入成绩的数量超过50个或者输入的成绩不是有效成绩(有效成绩为0~100)

这是循环结束的条件,而要循环进行的条件是B

这里注意:

#defineMAXNUM50

(8)A、mark,kB、mark

C、mark[]D、mark,n

Mark是处理以后的数组,根据题目中的“函数getmax(array,n)”推断此处的答案是A(n是形式参数,k是实际参数,所以选A)

 

2)P29

阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。

【程序】

#include

main()

{inti,j,temp;

inta[3][3]={1,2,3,4,5,6,7,8,9};/*第3行*/

voidf(int*x,int*y);

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

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

if(i

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

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

printf("%2d",a[i][j]);}

voidf(int*x,int*y)

{intt;

t=*x;*x=*y;*y=t;}

(17)程序的输出是(17)。

A、321654987B、789456123

C、123456789D、147258369

(18)将第8行改为“f(&a[i][j],&a[j][i]);”后,程序的输出是(18)。

A、321654987B、789456123

C、123456789D、147258369

(19)将第8行改为“if(i<2)f(&a[i][j],&a[2-i][j]);”后,程序的输出是(19)。

A、321654987B、789456123

C、123456789D、147258369

(20)将第8行改为“if(j<2)f(&a[i][j],&a[i][2-j]);”后,程序的输出是(20)。

A、321654987B、789456123

C、123456789D、147258369

阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。

【程序】

#include

main()

{inti,j,temp;

inta[3][3]={1,2,3,4,5,6,7,8,9};/*第3行*/

voidf(int*x,int*y);

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

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

if(i

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

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

printf("%2d",a[i][j]);}

voidf(int*x,int*y)

{intt;

t=*x;*x=*y;*y=t;}

说明,函数f实现变量的交换。

/*第3行*/定义的数组是

1,2,3

4,5,6

7,8,9

(17)程序的输出是(17)。

A、321654987B、789456123

C、123456789D、147258369

/*第8行*/实现数组对角线左下与右上元素的交换。

数组变为:

1,4,7

2,5,8

3,6,9

(18)将第8行改为“f(&a[i][j],&a[j][i]);”后,程序的输出是(18)。

A、321654987B、789456123

C、123456789D、147258369

两次交换,又复原了!

所以数组没有变化。

(19)将第8行改为“if(i<2)f(&a[i][j],&a[2-i][j]);”后,程序的输出是(19)。

A、321654987B、789456123

C、123456789D、147258369

数组变为:

7,8,9

4,5,6

1,2,3

(20)将第8行改为“if(j<2)f(&a[i][j],&a[i][2-j]);”后,程序的输出是(20)。

A、321654987B、789456123

C、123456789D、147258369

3)P30

#include

main()

{inti,x1,x2;

inta[5]={1,2,3,4,5};

voidf1(intx,inty),f2(int*x,int*y);

x1=x2=0;

for(i=1;i<5;i++){/*语句7*/

if(a[i]>a[x1])

x1=i;

if(a[i]

x2=i;}/*语句11*/

f2(&a[x1],&a[0]);

for(i=0;i<5;i++)printf("%2d",a[i]);

printf("\n");

f1(a[x2],a[1]);

for(i=0;i<5;i++)printf("%2d",a[i]);

printf("\n");

f2(&a[x2],&a[4]);

for(i=0;i<5;i++)printf("%2d",a[i]);

printf("\n");

f1(a[x1],a[3]);

for(i=0;i<5;i++)printf("%2d",a[i]);

printf("\n");

}

voidf1(intx,inty)

{intt;

t=x;x=y;y=t;}

voidf2(int*x,int*y)

{intt;

t=*x;*x=*y;*y=t;}

(21)程序运行时,第1行输出(21)。

A、12345B、21345

C、12354D、52341

(22)程序运行时,第2行输出(22)。

A、21345B、52341

C、25341D、12345

(23)程序运行时,第3行输出(23)。

A、12354B、25314

C、12345D、52341

(24)程序运行时,第4行输出(24)。

A、52314B、12345

C、12354D、52341

#include

main()

{inti,x1,x2;

inta[5]={1,2,3,4,5};

voidf1(intx,inty),f2(int*x,int*y);

x1=x2=0;

for(i=1;i<5;i++){/*语句7*/

if(a[i]>a[x1])

x1=i;

if(a[i]

x2=i;}/*语句11*/

f2(&a[x1],&a[0]);

for(i=0;i<5;i++)printf("%2d",a[i]);

printf("\n");

f1(a[x2],a[1]);

for(i=0;i<5;i++)printf("%2d",a[i]);

printf("\n");

f2(&a[x2],&a[4]);

for(i=0;i<5;i++)printf("%2d",a[i]);

printf("\n");

f1(a[x1],a[3]);

for(i=0;i<5;i++)printf("%2d",a[i]);

printf("\n");

}

voidf1(intx,inty)

{intt;

t=x;x=y;y=t;}

voidf2(int*x,int*y)

{intt;

t=*x;*x=*y;*y=t;}

数组a的原始数据为:

a[5]={1,2,3,4,5}

也就是:

a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=5

语句7到语句11实现这样的功能:

在a[1]=2,a[2]=3,a[3]=4,a[4]=5找出最大和最小的数,所以x1=4

但是,没有比a[0]更小的数,所以x2一直没有变,x2=0

注意:

函数f1是传值方式调用,没有实现交换。

详细看课本P138.

注意:

函数f2是传址方式调用,实现交换。

详细看课本P139.

(21)程序运行时,第1行输出(21)。

A、12345B、21345

C、12354D、52341

函数f2是传址方式调用,交换a[4]和a[0]

这时:

a[5]={5,2,3,4,1}

(22)程序运行时,第2行输出(22)。

A、21345B、52341

C、25341D、12345

函数f1是传值方式调用,没有交换

这时:

a[5]={5,2,3,4,1}

(23)程序运行时,第3行输出(23)。

A、12354B、25314

C、12345D、52341

函数f2是传址方式调用,交换a[0]和a[4]

这时:

a[5]={1,2,3,4,5}

(24)程序运行时,第4行输出(24)。

A、52314B、12345

C、12354D、52341

函数f1是传值方式调用,没有交换

这时:

a[5]={1,2,3,4,5}

5)P23

阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。

【程序】

#include

intk=1;/*第2行*/

voidFun();

voidmain()

{ intj;

  for(j=0;j<2;j++)

Fun();/*第8行*/

printf("k=%d",k);}/*第9行*/

voidFun()

{ intk=1;/*第11行*/

printf("k=%d,",k);/*第12行*/

 k++;}

(17)程序的输出是(17)。

A、k=1,k=2,k=3B、k=1,k=2,k=1

C、k=1,k=1,k=2D、k=1,k=1,k=1

(18)将第11行改为“staticintk=1;”后,程序的输出是(18)。

A、k=1,k=1,k=1B、k=1,k=1,k=2

C、k=1,k=2,k=1D、k=1,k=2,k=3

(19)将第11行改为“k=1;”后,程序的输出是(19)。

A、k=1,k=2,k=1B、k=1,k=1,k=1

C、k=1,k=1,k=2D、k=1,k=2,k=3

(20)将第11行改为“;”后,程序的输出是(20)。

A、k=1,k=1,k=2B、k=1,k=2,k=3

C、k=1,k=1,k=1D、k=1,k=2,k=1

阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。

【程序】

#include

intk=1;/*第2行*/

voidFun();

voidmain()

{ intj;

  for(j=0;j<2;j++)

Fun();/*第8行*/

printf("k=%d",k);}/*第9行*/

voidFun()

{ intk=1;/*第11行*/

printf("k=%d,",k);/*第12行*/

 k++;}

(17)程序的输出是(17)。

A、k=1,k=2,k=3B、k=1,k=2,k=1

C、k=1,k=1,k=2D、k=1,k=1,k=1

函数fun()被主程序在第8行调用了2次。

每次结果一样。

第12行2次输出k=1。

然后第9行1次输出k=1。

(18)将第11行改为“staticintk=1;”后,程序的输出是(18)。

A、k=1,k=1,k=1B、k=1,k=1,k=2

C、k=1,k=2,k=1D、k=1,k=2,k=3

Staticintk=1说明k是一个静态变量,其作用在函数fun()一直有效。

当j=0第一次调用fun()时,第12行输出k=1;

然后,K++,k=2,注意,此时K的值被保留。

当j=1第2次调用fun()时,k=2保留,因此第12行输出k=2;

然后,函数fun()关闭,释放。

因此在主函数中,k的值没有变化,第9行1次输出k=1。

注意,在函数fun(),静态变量的值具有保留、继承的特点,但并不会影响主函数。

关于静态变量的详细情况,可查看课本p145到p153。

(19)将第11行改为“k=1;”后,程序的输出是(19)。

A、k=1,k=2,k=1B、k=1,k=1,k=1

C、k=1,k=1,k=2D、k=1,k=2,k=3

当j=0第一次调用fun()时,第12行输出k=1;

当j=1第2次调用fun()时,再次赋值k=1,因此第12行再次输出k=1;

然后,执行,K++,k=2,函数fun()关闭。

但是,因为k是在第2行定义的全局变量,因此,k的值在全局有效,所以此时k=2,第8行1次输出k=2。

本题的关键在于:

原来第11行的intk=1重新定义了变量k,因此在函数fun()中的K不再是第2行定义的全局变量,换句话说,这里的K可以当作一个其他变量,比如n。

但是,当把intk=1换成k=1,则把一个变量定义语句换成了赋值语句,就不是新定义的变量(不能再当作一个其他变量,比如n),只是给了一个新值。

关于全局变量的详细情况,可查看课本p145到p153。

(20)将第11行改为“;”后,程序的输出是(20)。

A、k=1,k=1,k=2B、k=1,k=2,k=3

C、k=1,k=1,k=1D、k=1,k=2,k=1

道理与上题相同,不过把一个变量定义语句换成了空语句。

当j=0第一次调用fun()时,第12行输出k=1;然后,执行,K++,k=2。

当j=1第2次调用fun()时,因此第12行再次输出k=2;然后,执行,K++,k=3。

然后第9行1次输出k=3。

4)P58

intf1(intn)

{if(n==1)return1;

elsereturnf1(n-1)+n;}

intf2(intn)

{switch(n){

case1:

case2:

return1;

default:

returnf2(n-1)+f2(n-2);}}

voidf3(intn)

{printf("%d",n%10);

if(n/10!

=0)f3(n/10);}

voidf4(intn)

{if(n/10!

=0)f4(n/10);

printf("%d",n%10);}

#include

main()

{printf("%d\n",f1(4));

printf("%d\n",f2(4));

f3(123);

printf("\n");

f4(123);

printf("\n");

}

(17)程序运行时,第1行输出(17)。

A.10B.24

C.6D.1

(18)程序运行时,第2行输出(18)。

A.1B.3

C.2D.4

(19)程序运行时,第3行输出(19)。

A.123B.3

C.321D.1

(20)程序运行时,第4行输出(20)。

A.1B.123

C.3D.321

【程序】

intf1(intn)

{if(n==1)return1;

elsereturnf1(n-1)+n;}

intf2(intn)

{switch(n){

case1:

case2:

return1;

default:

returnf2(n-1)+f2(n-2);}}

voidf3(intn)

{printf("%d",n%10);

if(n/10!

=0)f3(n/10);}

voidf4(intn)

{if(n/10!

=0)f4(n/10);

printf("%d",n%10);}

#include

main()

{printf("%d\n",f1(4));

printf("%d\n",f2(4));

f3(123);

printf("\n");

f4(123);

printf("\n");

}

(17)程序运行时,第1行输出(17)。

A.10B.24

C.6D.1

f1(4)=4+f1(3)=4+(3+f1

(2))=4+(3+(2+f1

(1)))=4+3+2+1=10

递归调用

(18)程序运行时,第2行输出(18)。

A.1B.3

C.2D.4

f2(4)=f2

(2)+f2(3)=1+(f2

(1)+f2

(2))=1+1+1=3

(19)程序运行时,第3行输出(19)。

A.123

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

当前位置:首页 > 医药卫生 > 药学

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

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