C语言第七八章补充作业答案Word文档下载推荐.docx
《C语言第七八章补充作业答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言第七八章补充作业答案Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
答案:
ADE
【9】下面程序中有错误的行是 D (每行程序前面的数字表示行号)。
1main()
2{
3floata[3]={1};
4inti;
5scanf(“%d”,&
a);
6for(i=1;
i<
3;
i++)a[0]=a[0]+a[i];
7printf(“a[0]=%d\n”,a[0]);
8}
A)3B)6C)7D)5
【10】请回答下列问题。
(1)array是一个一维整形数组,有10个元素,前6个元素的初值是9,4,7,49,32,-5,请写出正确的说明语句。
___
(2)该数组下标的取值范围是从___到___(从小到大)。
(3)如何用scanf函数输入数组的第二个元素。
(4)如何用赋值语句把39存入第一个元素。
(5)如何表示把第六个和第四个元素之和存入第一个元素。
intarray[10]={9,4,7,49,32,-5};
09
scanf("
%d"
&
array[1]);
array[0]=39;
array[0]=array[5]+array[3];
【11】若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为 A 。
(假设a[0][0]位于数组的第一个位置上。
)
A)i*m+j+1B)j*m+iC)i*m+j-1D)i*m+j
【12】若有说明:
inta[][3]={1,2,3,4,5,6,7};
则a数组第一维的大小是 B 。
A)2B)3C)4D)无确定值
【13】定义如下变量和数组:
intk;
inta[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句的输出结果是 A 。
for(k=0;
k<
k++)printf("
a[k][2-k]);
A)357B)369C)159D)147
【14】若有以下程序段:
……
inta[]={4,0,2,3,1};
i,j,t;
for(i=1;
5;
i++)
{
t=a[i];
j=i-1;
while(j>
=0&
&
t>
a[j])
{a[j+1]=a[j];
j--;
}
a[j+1]=t;
则该程序段的功能是 B 。
A)对数组a进行插入排序(升序)
B)对数组a进行插入排序(降序)
C)对数组a进行选择排序(升序)
D)对数组a进行选择排序(降序)
【题15】当运行以下程序时,从键盘输入:
AhaMAAha<
CR>
(<
表示回车),则下面程序的运行结果是 D 。
#include<
stdio.h>
main()
chars[80],c=‘a’;
inti=0;
scanf(“%s”,s);
while(s[i]!
=‘\0’)
{
if(s[i]==c)s[i]=s[i]-32;
elseif(s[i]==c-32)s[i]=s[i]+32;
i++;
}
puts(s);
A)ahAMaB)AhAMaC)AhAMaahAD)ahAMaahA
【题16】设数组a包括10个整型元素。
下面程序的功能是求出a中各相邻两个元素的和,并将这些和存在数组b中,按每行3个元素的形式输出。
请填空。
inta[10],b[10],i;
for(i=0;
10;
scanf(“%d”,&
a[i]);
for(【1】;
【2】
for(i=1;
printf(“%3d”,b[i]);
if(【3】==0)printf(“\n”);
【1】i=1【2】b[i]=a[i]+a[i-1]【3】
(i%3)
【题17】下面程序将十进制整数转换成n进制。
inti,base,n,j,num[20];
printf(“Enterdatathatwillbeconverted\n”);
printf(“Enterbase\n”);
base);
do{
num[i]=n【1】base;
n=n【2】base;
}while(n!
=0);
printf(“Thedata%dhasbeenconvertedintothe%d--base
data:
\n”,n,base);
for(【3】)
printf(“%d”,num[j]);
【1】%【2】/【3】j=i;
j>
=1;
j--
【题18】下面程序的功能是将二维数组a中每个元素向右移一列,最右一列换到最左一列,移后的数组存到另一二维数组b中,并按矩阵形式输出a和b。
例如:
arraya:
arrayb:
456645
123312
inta[2][3]={4,5,6,1,2,3},b[2][3];
inti,j;
printf(“arraya:
\n”);
for(j=0;
j<
j++)
{
printf(“%5d”,a[i][j]);
【1】;
}
printf(“\n”);
for(【2】;
i++)b[i][0]=a[i][2];
printf(“arrayb:
2;
printf(“%5d”,b[i][j]);
【3】;
【1】b[i][j+1]=a[i][j]【2】i=0;
2【3】printf(“\n”)
编程答案:
[1]#defineM50
main()
{
inta[M],c[5],i,n=0,x;
printf(“Enter0or1or2or3or4,toendwith–1\n”);
scanf(“%d”,&
x);
while(x!
=-1)
if(x>
=0&
x<
=4)
{
a[n]=x;
n++;
}
scanf(“%d”,&
for(i=0;
i<
i++)
c[i]=0;
n;
c[a[i]]++;
printf(“Theresultis:
=4;
printf(“%d:
%d\n”,ic[i]);
printf(“\n”);
}
[2]main()
inta[5][5],i,j,n=1;
for(j=0;
j<
j++)
a[i][j]=n++;
=i;
printf(“%4d”,a[i][j]);
printf(“\n”);
[3]#include<
#include<
string.h>
chara[80],b[]=“ab”,max;
inti=1,j;
printf(“Inputastring\n”);
gets(a);
puts(a);
max=a[0];
while(a[i]!
=‘\0’)
if(a[i]>
max)
max=a[i];
j=i;
i++;
for(i=strlen(a)+2;
i>
j;
i--)
a[i]=a[i-2];
a[i+1]=‘a’;
a[i+2]=‘b’;
第八章 函数补充作
【题1】以下正确的说法是 B 。
建立函数的目的之一是A)提高程序的执行效率
B)提高程序的可读性
C)减少程序的篇幅
D)减少程序文件所占内存
【题2】以下正确的说法是 B 。
A)用户若需调用标准库函数,调用前必须重新定义
B)用户可以重新定义标准库函数,若如此,该函数将失去原有含义
C)系统根本不允许用户重新定义标准库函数
D)用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动去调
【题3】若调用一个函数,且此函数中没有return语句,则正确的说法是 D 。
该函数A)没有返回值
B)返回若干个系统默认值
C)能返回一个用户所希望的函数值
D)返回一个不确定的值
【题4】以下不正确的说法是 D 。
C语言规定A)实参可以是常量、变量或表达式
B)形参可以是常量、变量或表达式
C)实参可以为任意类型
D)形参应与其对应的实参类型一致
【题5】以下正确的说法是 C 。
A)定义函数时,形参的类型说明可以放在函数体内
B)return后边的值不能为表达式
C)如果函数值的类型与返回值类型不一致,以函数值类型为准
D)如果形参与实参的类型不一致,以实参类型为准
【题6】以下程序是选出能被3整除且至少有一位是5的两位数,打印出所有这样的数及其个数。
请选择填空。
sub(intk,intn)
inta1,a2;
a2=【1】;
(为:
C)
a1=k-【2】;
(为:
A)
if((k%3==0&
a2==5)||(k%3==0&
a1==5))
printf(“%d”,k);
n++;
returnn;
elsereturn-1;
intn=0,k,m;
for(k=10;
=99;
k++)
m=sub(k,n);
if(m!
=-1)n=m;
printf(“\nn=%d”,n);
【1】A)k*10B)k%10C)k/10D)k*10%10
【2】A)a2*10B)a2C)a2/10D)a2%10
【题7】折半查找法的思路是:
先确定待查元素的范围,将其分成两半,然后测试位于中间点元素的值。
如果该待查元素的值大于中间点元素,就缩小待查范围,只测试中点之后的元素;
反之,测试中点之前的元素,测试方法同前。
函数binary的作用是应用折半查找法从存有10个整数的a数组中对关键字m进行查找,若找到,返回其下标值;
返回-1。
binary(inta[10],intm)
intlow=0,high=9,mid;
while(low<
=high)
mid=(low+high)/2;
if(m<
a[mid])【1】;
elseif(m>
a[mid])【2】;
B)
elsereturn(mid);
return(-1);
【1】A)high=mid-1B)low=mid+1C)high=mid+1D)low=mid-1
【2】A)high=mid-1B)low=mid+1C)high=mid+1D)low=mid-1
【题8】以下程序的正确运行结果是 D 。
#defineMAX10
inta[MAX],i;
printf(“\n”);
sub1();
sub3(a);
sub2();
sub2()
inta[MAX],i,max;
max=5;
max;
i++)a[i]=i;
sub1()
MAX;
i++)a[i]=i+i;
sub3(inta[])
inti;
i++)printf(“%d”,a[i]);
A)024681012141618
01234
B)01234
024681012141618
C)0123456789
D)024681012141618
024681012141618
【题9】以下程序的功能是用递归方法计算五位学生的年龄,请填空。
递归公式如下:
age(intn)
intc;
if(n==1)c=10;
elsec=【1】;
return(c);
intn=5;
printf(“age:
%d\n”,【2】);
【1】age(n-1)+2【2】age(5)
【题10】以下search函数的功能是利用顺序查找法从数组a的10个元素中对关键字m进行查找。
顺序查找法的思路是:
从第一个元素开始,从前向后依次与关键字比较,直到找到此元素或查找到数组尾部时结束。
若找到,返回此元素的下标;
若仍未找到,则返回值-1。
intsearch(inta[10],intm)
=9;
i++)if(【1】)return(i);
inta[10],m,i,no;
…
no=search(【2】);
if(【3】)printf(“\nOKFOUND!
%d”,no+1);
elseprintf(“\nSorryNotFound!
”);
【1】a[i]==m【2】a,m【3】no>
=0
【题11】以下程序的运行结果是 。
intk=1;
inti=4;
fun(i);
printf(“
(1)%d,%d\n”,i,k);
fun(intm)
m+=k;
k+=m;
chark=‘B’;
printf(“
(2)%d\n”,k-‘A’);
printf(“(3)%d,%d\n”,m,k);
(2)1
(3)5,6
(1)4,6
【题12】以下程序的运行结果是 。
intn=1;
staticintx=5;
inty;
y=n;
printf(“MAIN:
x=%2dy=%2dn=%2d\n”,x,y,n);
func();
func()
staticintx=4;
inty=10;
x=x+2;
n=n+10;
y=y+n;
printf(“FUNC:
MAIN:
x=5y=1n=1
FANC:
x=6y=21n=11
MAIN:
x=5y=1n=11
x=8y=31n=21
【题13】以下程序的功能是 输出1至5的阶乘 。
intfac(intn)
staticintf=1;
f=f*n;
return(f);
=5;
printf(“%d!
=%d\n”,i,fac(i));
【题14】以下程序的输出结果是a=_36__,b=_16__,c=_19__。
/*指针*/
intfunc(inta,int*p);
voidmain()
{inta=1,b=2,c;
c=func(a,&
b);
b=func(c,&
a=func(b,&
c);
printf("
a=%d,b=%d,c=%d"
a,b,c);
intfunc(inta,int*p)
{a++;
*p=a+2;
return(*p+a);
[1]floatf2(intn)
if(n==1)
return1;
else
return(f2(n-1)*n);
floatf1(intx,intn)
inti;
floatj=1;
for(i=1;
=n;
j=j*x;
returnj;
[2]max(intarr[][4])
inti,j,max;
max=arr[0][0];
for(i=0;
for(j=0;
4;
if(arr[i][j]>
max=arr[i][j];
return(max);