第6章 函数.docx
《第6章 函数.docx》由会员分享,可在线阅读,更多相关《第6章 函数.docx(20页珍藏版)》请在冰豆网上搜索。
第6章函数
函数
1、以下不正确的函数首部是()。
(A)f(inta)(B)fun(floata[5][])
(C)function(double*a)(D)fun(int*a[10])
2、设函数fun的定义形式为voidfun(charch,floatx){........}则以下对函数fun的调用语句中,正确的是()。
A.fun(65,32)B.fun(‘65’,2.8)C.fun(“abc”,3.0)D.t=fun(‘D’,16.5)
3、下列程序的输出结果是()。
(考点:
函数(地址参数和普通参数)、指针运算)
voidfun(char*c,intd)
{
*c=*c+1;
d=d+1;
}
voidmain()
{
chara='A',b='a';
fun(&b,a);
printf("%c,%c\n",a,b);
}
(A)B,A(B)a,B(C)A,B(D)A,b
4、有下列程序(考点:
函数(地址参数)、指针运算)
#include"stdio.h"
voidprt(int*x,int*y,int*z)
{
printf("%d,%d,%d\n",++*x,++*y,*(z++));
}
voidmain()
{
inta=10,b=40,c=20;
prt(&a,&b,&c);
prt(&a,&b,&c);
}
(1)第一次调用函数prt的运行结果是(32)。
32(A)11,42,31(B)11,41,20(C)11,21,40(D)11,41,21
(2)第二次调用函数prt的运行结果是(33)。
33(A)12,42,20(B)12,22,41(C)11,21,41(D)12,42,22
5、有下列程序(考点:
函数(地址参数)、指针运算)
#include
voidfun1(int*x,int*y)
{int*z;
z=x;x=y;y=z;
}
voidfun2(int*x,int*y)
{intz;
z=*x;*x=*y;*y=z;
(*x)++;(*y)++;
}
voidmain()
{inta=5,b=9;
fun1(&a,&b);
printf("a=%d,b=%d\n",a,b);
fun2(&a,&b);
printf("a=%d,b=%d\n",a,b);
}
main函数中第一个printf输出结果为()。
(A)a=9,b=5(B)a=5,b=9(C)a=10,b=6(D)a=6,b=10
main函数中第二个printf输出结果为()。
(A)a=9,b=5(B)a=5,b=9(C)a=10,b=6(D)a=6,b=10
1、读下面程序,回答问题。
#include"stdio.h"
voidsort(inta[],intn)
{
inti,j,t;
for(i=0;ifor(j=0;j
if(a[j]>a[i])
{t=a[j];a[j]=a[i];a[i]=t;}
}
voidmain()
{
intx[10]={1,0,-76,4,8,12,65,100,-45,123};
inti;
sort(x+5,5);
printf("%d",x[5]);
}
(1)程序中sort函数的功能是()
(A)用起泡法对含有n个元素的数组a从小到大的排序
(B)用选择法对含有n个元素的数组a从大到小的排序
(C)用二分法对含有n个元素的数组a从小到大的排序
(D)用起泡法对含有n个元素的数组a从大到小的排序()
(2)该程序的运行输出结果为()
(A)-76(B)-45(C)8(D)123
2、读程序并回答问题
#include
voidfun(int*a,intbott,inttop)
{
inti,j,t;
i=bott;j=top;
while(i{t=a[i];a[i]=a[j];a[j]=t;
i++;j--;
}
}
voidmain()
{
inta[10]={1,2,3,4,5,6,7,8,9,0},i;
fun(a,0,3);
fun(a,4,9);
fun(a,0,9);
for(i=0;i<10;i++)
printf("%d",a[i]);
}
函数fun的功能是()。
(A)将下标为bott到top之间的数组元素逆置
(B)将下标为bott到top之间数组元素进行升序排列
(C)将下标为bott到top之间数组元素进行降序排列
(D)将下标为bott和下标为top的两个元素互换
程序的运行结果为()。
(A)0987654321(B)4321098765(C)5678901234(D)0987651234
3、在下面程序中(考点:
数组、函数(地址参数)、删除字符算法)
#include
voidfun(char*s)
{
inti,j;
for(i=0,j=0;s[i]!
='\0';i++)
if(s[i]>='0'&&s[i]<='9')
{s[j]=s[i];
j++;
}
s[j]='\0';
}
voidmain()
{
chars[20]="ab12cd34";
fun(s);
printf("%3d%3d\n",sizeof(s),strlen(s));
printf("%s\n",s);
}
(1)第1个printf输出的结果为(26)。
(A)88(B)208(C)2020(D)204
(2)第2个printf输出的结果为(27)。
(A)abcd(B)ab12cd(C)1234(D)ab12cd34
1、以下程序的功能是,求出100至300之间符合下述条件的所有整数输出。
整数的百位、十位、个位数字之和为5
并在main函数中输出这些整数的个数。
请将程序补充完整。
#include
#defineN300
intfun(intn)
{
intg,s,b,i,count=0;
for(i=100;i{
g=i%10;
s=;
b=i/100;
if()
{
printf(“%5d”,i);
count++;
}
}
returncount;
}
intmain()
{
intcnt;
printf(“Numbersare:
\n”);
cnt=;
printf(“\n%dnumberstotal\n”,cnt);
return0;
}
2、用以下程序求出数组a中所有素数的和,函数fun的功能是判断形参n是否为素数,是素数返回1,不是返回0。
#include
intfun(intn)
{
inti;
if(n<=1)
return0;
else
{for(i=2;i<=n/2;i++)
if(①==0)return0;
②;
}
}
voidmain()
{
inti,a[10],sum=0;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
if(③==1)
sum=sum+a[i];//是素数,相加
printf("sum=%d\n",sum);
}
3、以下程序的功能是求出小于或等于lim的所有素数并放在数组aa中,
fun()函数返回所求的素数的个数。
#include
#defineMAX100
1fun(intlim,intaa[MAX])
{
inti,j,m=0;
for(i=2;i{
for(j=2;j
if(i%j==0)
2;
if(③)
aa[m++]=i;
}
returnm;
}
voidmain()
{
inti,m,lim,aa[MAX];
printf("lim=");
scanf("%d",&lim);
m=fum(lim,aa);
for(i=0;iprintf("%5d",aa[i]);
printf("\nm=%d",m);
}
4、下面程序中函数sort的功能是对a数组中的数据进行由大到小的排序。
#defineN10
voidsort(inta[])
{
inti,j,t;
for(i=0;ifor(j=i+1;j<①;j++)
if(a[i]②a[j])
{t=a[i];a[i]=a[j];a[j]=t;}
}
intmain(void)
{
inta[N]={1,2,3,4,5,6,7,8,9,10},i;
sort(③);
for(i=0;iprintf("%3d",a[i]);
printf("\n");
}
5、下面程序的功能是将数字字符串转换成对应的十进制整数。
#include
longfun(charstr[]);
intmain(void)
{
chardatastring[10];
longdata;
printf("Inputdatastring:
");
scanf("%s",datastring);
data=fun(datastring);
printf("outputnumber:
");
printf("%ld\n",data);
return0;
}
longfun(charstr[])
{
inti;
longdata;
___①________;
for(i=0;str[i]!
='\0';i_++)
data=data*10+(___②______);
return___③______;
}
5、下面函数fun()的功能是从NUM个字符中找出一个最长的一个字符串,并返回该串地址。
#include
#include
#defineNUM80
void*fun(char①)
{
inti;
char*max;
max=a[0];
for(i=0;iif(strlen(max)②;
return③;
}
voidmain()
{
chara[NUM][100];
inti;
for(i=0;igets(a[i]);
printf("%s\n",fun(s));
}
1.程序中函数fun()的功能是:
查找字符串str中指定字符ch出现的次数并返回,并将该字符出现时的下标位置记录于数据组bb中。
例如在字符串"1233211234567"中查找字符'1',其结果为3次,下标分别为0,5,6。
请填空。
#include"stdio.h"
#defineN20
intfun(char*str,charch,int*bb)
{
inti=0,n=0;
while(*str)
{
if()
bb[]=i;
str++;
i++;
}
return;
}
voidmain()
{
charstr[N],ch;
intbb[N]={0},i,n;
printf("\nInputtheoriginalstring:
");
gets(str);
printf("\nInputcharacter:
");
scanf("%c",&ch);
n=fun(str,ch,bb);
printf("\nThenumberofcharacteris:
%d\n",n);
printf("\nThesuffixofcharacter:
");
for(i=0;iprintf("%d",bb[i]);
}
1.函数fun的功能是:
将n×n(1例如:
123若m=2,则处理后的方阵为:
223
4568106
789141618
在main函数中调用fun函数,并分行输出处理后的方阵。
请填空。
(考点:
矩阵处理算法)
#include
voidfun(inta[][10],intn,intm)
{
inti,j;
for(i=0;ifor(j=0;j<=①;j++)
a[i][j]=a[i][j]*m;
}
voidmain()
{
intw[10][10]={{1,2,3},{4,5,6},{7,8,9}},m,i,j;
scanf("%d",&m);
fun(②,3,m);
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%4d",w[i][j]);
printf(③);
}
}
6.有如下程序(考点:
字符数组、函数(地址参数)、逻辑表达式)
#include
voidfun(char*s,char*t1,char*t2)
{
inti,j=0;
for(i=0;s[i]!
='\0';i++)
{
if(i%2&&(s[i]>='a'&&s[i]<='z'))
t1[i]=s[i]-'a'+'A';
else
t1[i]=s[i];
if(s[i]>='0'&&s[i]<='9')
{
t2[j]=s[i];
j++;
}
}
t1[i]=t2[j]='\0';
}
voidmain()
{
chars[20]="2abcde3fg45",t1[20],t2[20];
fun(s,t1,t2);
puts(t1);
puts(t2);
}
(1)程序中第一个puts的输出结果为(36)
36(A)abcdefg(B)2345(C)2AbCdE3Fg45(D)2aBcDe3fG45
(2)程序中第二个puts的输出结果为(37)
37(A)abcdefg(B)2345(C)2AbCdE3Fg45(D)2aBcDe3fG45
2.有如下程序(考点:
函数、字符数组)
#include
voidfun(char*s)
{
inti;charc;
c=s[0];
for(i=1;s[i]!
='\0';i++)
s[i-1]=s[i];
s[i-1]=c;
}
voidmain()
{
chars[10]="abcdefg";
inti;
for(i=1;i<=3;i++)
fun(s);
puts(s);
}
函数fun的功能是()。
28(A)左移一个字符,并将第一个字符放到字符串末尾
(B)右移一个字符,并将最后一个字符放到字符串开头
(C)删除第一个字符(D)删除最后一个字符
程序的运行结果是()。
29(A)bcdefga(B)defgabc(C)efgabcd(D)bcdefg
2.函数fun的功能是:
求出无符号十进制数n中包含0的个数,及各位数字的最大值。
最大值通过函数值返回,0的个数通过形参指针zero带回。
在main函数中输入n的值,调用fun函数并输出结果。
例如:
n=300800,则0的个数为4,各位数字的最大值为8。
请填空。
(考点:
求最值、整数的分解算法)
#include
intfun(unsignedintn,int*zero)
{intcnt=0,max=0,t;
while(n!
=0)
{t=;
if(t==0)cnt++;
if(maxn=n/10;
}
=cnt;
returnmax;
}
voidmain()
{unsignedintn;
intzero,max;
printf("Inputn:
");
scanf("%u",&n);
max=fun(③);
printf("max=%d,zero=%d\n",max,zero);
}
递归调用
1、阅读下面的程序:
#include
intfun(intn)
{
if(n==1)
return1;
else
return(n+fun(n-1));
}
voidmain()
{
intx;
scanf("%d",&x);
x=fun(x);fun(100)=100+fun(99)=100+99+fun(98)
printf("%d\n",x);
}
(1)执行程序时,给变量x输入100,程序的输出结果是()。
A)5050B)5040C)6050D)4050
(2)该函数的功能是()。
A)利用递归函数计算n+n+1B)利用递归函数计算n+n-1+...+1
C)利用递归函数计算n+n-1+1D)以上都不是
2、阅读下面的程序:
#include
fun(intn)
{
if(n<1)
return1;
else
return(n*fun(n-1));
}
voidmain()
{
intx;
scanf("%d",&x);
x=fun(x);
printf("%d\n",x);
}
(1)如果执行程序时给变量x输入7,则程序的输出结果是()。
A)5040B)5050C)6050D)4200
(2)该fun()函数的功能是()。
A)利用递归函数计算n*(n-1)B)利用递归函数计算n*(n-1)*1
C)利用递归函数计算n*(n-1)*...*1D)计算n的值
3、对于如下程序
#include
longfun(intn)
{
longs;
if(n==1||n==2)
s=2;
else
s=n+fun(n-1);
return(s);
}
intmain(void)
{
longx;
x=fun(4);
printf("%ld\n",x);
return0;
}()程序的运行结果是()。
(A)5(B)7(C)9(D)11
4、读程序并回答问题。
#include
longfun(intn)
{
longz;
if(n==0||n==1)z=1;
elsez=n*fun(n-2);
returnz;
}
voidmain()
{
longz;
intn;
scanf("%d",&n);
z=fun(n);
printf("%ld\n",z);
}
若输入n的值为6,则程序的输出结果为(28)。
(A)21(B)15(C)48(D)720
(B)longfun(intn)
{
inti;
longz;
for(i=n,z=0;i>0;i-=2)
z=z+i;
returnz;
}
以下哪个非递归程序与函数fun的功能相同(29)。
(A)longfun(intn)
{
inti;
longz;
for(i=n,z=1;i>0;i-=2)
z=z*i;
retrunz;
}
(D)longfun(intn)
{
inti;
longz;
for(i=n,z=0;i>0;i--)
z=z+i;
returnz;
}
(C)longfun(intn)
{
inti;
longz;
for(i=n,z=1;i>0;i--)
z=z*i;
retrunz;
5、有如下程序:
(考点:
递归函数)
#include"stdio.h"
intfun(intn)
{
inty;
if(n==1)
y=1;
elseif(n==2)
y=2;
else
y=n+fun(n-2);
returny;
}
voidmain()
{
intx;
scanf("%d",&x);
printf("%d",fun(x));
}
若输入x的值为8,则程序的输出结果为(36)。
(A)16(B)36(C)30(D)20
与函数fun等价的非递归程序为(37)。
(A)intfun(intn)(B)
{inti,s=0;
for(i=n;i>=1;i=i-2)
s=s+i;
returns;
}
(C)intfun(intn)(D)
{inti,s=0;
for(i=n;i>=1;i--)
s=s+i;
returns;
命令行参数
1、下列程序编译连接后生成可执行文件CAD.EXE,输入以下命令行:
CADFILE1FILE2(表示回车)
程序的运行结果是()。
(考点:
命令行参数)
#include"stdio.h"
voidmain(intargc,char*argv[])
{
inti;
printf("%d\n",argc);
for(i=0;i<=argc-1;i++)
printf("%s",argv[i]);
printf("\n");
}
(A)2(B)3
cadfile1file2cadfile1file2
(C)2(D)3
CAD.EXEFILE1FILE2CAD.EXEFILE1FILE2