《C语言程序设计》李学刚数字资源9章 参考答案 2同步训练答案 同步训练61答案.docx
《《C语言程序设计》李学刚数字资源9章 参考答案 2同步训练答案 同步训练61答案.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》李学刚数字资源9章 参考答案 2同步训练答案 同步训练61答案.docx(16页珍藏版)》请在冰豆网上搜索。
《C语言程序设计》李学刚数字资源9章参考答案2同步训练答案同步训练61答案
同步训练6-1答案
一、单项选择题
1.已定义:
floata[5];则数组a可引用的元素有(D)。
A.a[1]~a[5]B.a[0]~a[5]C.a[1]~a[4]D.a[0]~a[4]
2.已定义:
inta[15];则数组a占用的内存单元数是(C)。
A.15B.30C.60D.120
3.若有以下定义:
doublew[10];则数组w的元素下标范围是(B)。
A.[0,10]B.[0,9]C.[1,10]D.[1,9]
4.设有程序,则在程序中的两个括号中应填入(C)。
#include
intmain()
{
inti,a[5];printf{"Pleaseinputnumber:
\n"};
for(i=0;i<=4;i++)scanf("%d",());
……
printf("输出数组:
\n");
for(i=0;i<4;i++)printf("%d",());
return0;
}
A.a[i]和&a[i]B.&a[i]和&a[i]
C.&a[i]和a[i]D.a[i]和a[i]
5.阅读程序,以下程序的输出结果是(D)。
f(intb[],intn)
{
inti,r=1;
for(i=0;i<=n;i++)r=r*b[i];
returnr;
}
intmain()
{
intx,a[]={2,3,4,5,6,7,8,9};
x=f(a,3);
printf("%d\n",x);
return0;
}
A.720B.6C.24D.120
6.已知int类型变量在内存中占用4个字节,定义数组intb[8]={2,3,4};则数组b在内存中所占字节数为(D)。
A.5B.12C.16D.32
7.以下程序段给数组所有元素输入数据,应在圆括号中填入的是(D)。
#include
intmain()
{
inta[10],i=0;
while(i<10)
scanf("%d",());
……
}
A.&a[++i]B.&a[i+1]C.&a[i]D.&a[i++]
8.若有以下说明:
inta[10]={1,2,3,4,5,6,7,8,9,10};charc='a';则数值为4的表达式是(D)。
A.a['f'-c]B.a[4]C.a['d'-'c']D.a['d'-c]
9.以下定义语句中,错误的是(B)。
A.inta[]={6,7,8};B.intn=5,a[n];
C.chara[]="string";D.chara[5]={'0','1','2','3','4'};
10.以下描述中正确的是(D)。
A.数组名后面的常量表达式用一对圆括弧括起来
B.数组下标从1开始
C.数组下标的数据类型可以是整型或实型
D.数组名的规定与变量名相同
11.用数组名作为函数调用时的实参,实际上传送给形参的是(A)。
A.数组首地址B.数组的第一个元素值
C.数组中全部元素的值D.数组元素的个数
12.若定义数组并初始化chara[10]={'0','1','2','3','4','5','6','7','8','9'};
以下正确语句是(C)。
A.scanf("%c",a[0]);B.scanf("%s",&a);
C.printf("%c",a[3]);D.printf("%s",a);
13.若定义数组inta[10],其数组元素的下标下限为(B)。
A.1B.0C.9D.10
14.若定义数组inta[10],其最后一个数组元素为(C)。
A.a[0]B.a[1]C.a[9]D.a[10]
15.若定义数组并初始化inta[10]={1,2,3,4},以下语句不成立的是(B)。
A.a[8]的值为0B.a[1]的值为1C.a[3]的值为4D.a[9]的值为0
16.若定义数组并初始化inta[10]={1,2,3,4},以下叙述成立的是(A)。
A.若引用a[10],编译时警告B.若引用a[10],连接时报错
C.若引用a[10],运行时出错D.若引用a[10],系统报错
17.指出以下错误语句(A)。
A.intn=10,a[n];B.intn,a[10];
C.inta[10]={1,2,3};D.inta[10]={1,2,3,4,5,6,7,8,9,10};
18.若定义数组并初始化inta[10]={1,2,3,4},以下叙述不成立的是(A)。
A.a[10]是a数组的最后一个元素的引用
B.a数组中有10个元素
C.a数组中每个元素都为整数
D.a数组是整型数组
19.执行下面的程序段后,变量k中的值为(A)。
intk=3,s[2];s[0]=k;k=s[1]*10;
A.不定值B.33C.30D.10
20.若有以下的定义和语句:
intstr[12]={1,2,3,4,5,6,7,8,9,10,11,12};charc='e',则数值为2的表达式是(C)。
A.str['g'-c]B.str[2]C.str['d'-'c']D.str['d'-c]
21.设已定义:
intx[2][4]={1,2,3,4,5,6,7,8};则元素x[1][1]的正确初值是(A)。
A.6B.5C.7D.1
22.设有intx[2][4]={1,2,3,4,5,6,7,8};printf("%d",x[2][4]);则输出结果是(C)。
A.8B.1C.随机数D.语法检查出错
23.设有:
inta[4][5];则数组a占用的内存字节数是(D)。
A.9B.20C.40D.80
24.以下程序的输出结果是(C)。
#include
intmain()
{
inti,a[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)
printf("%d,",a[i][2-i]);
return0;
}
A.1,5,9B.1,4,7C.3,5,7D.3,6,9
25.指出以下错误语句(C)。
A.inta[2][3]={{1,2,3},{4,5,6}};B.intb[2][3]={1,2,3,4,5,6};
C.inta[][]={{1,2,3},{4,5,6}};D.inta[][3]={{1,2,3},{4,5,6}};
二、程序填空题
1.若有定义语句:
chars[100],d[100];intj=0,i=0;,且s中已赋字符串,请填空将字符串s拷贝到d中。
(注:
不得使用逗号表达式)
while(s[i])
{
d[j]=s[i++];
j++;
}
d[j]=0;
2.下列程序中,将k的值插入到有序数组a中,使数组依然保持升序,请填空。
#include
voidinsert(inta[],intx)
{
inti=0,j;
while(a[i]for(j=2;j>=i;j--)
a[j+1]=a[j];
a[i]=x;
}
intmain()
{
inta[5]={1,4,5},i;
intx;
scanf("%d",&x);
insert(a,x);
for(i=0;i<4;i++)
printf("%3d",a[i]);
printf("\n");
return0;
}
3.程序定义了N×N的二维数组,并在主函数中自动赋值。
请在函数fun()填空,该函数的功能是:
使数组左下半三角元素中的值全部置成0。
例如a数组中的值为
a=197
238
456
则返回主程序后a数组中的值应为
097
008
000
#include
#include
#defineN9
intfun(inta[][N])
{
inti,j;
for(i=0;ifor(j=0;j<=i;j++)
a[i][j]=0;
return0;
}
intmain()
{
inta[N][N],i,j;
printf("*****Thearray*****\n");
for(i=0;i{
for(j=0;j{
a[i][j]=rand()%10;/*产生一个随机的N*N矩阵*/
printf("%4d",a[i][j]);
}
printf("\n");
}
fun(a);
printf("THERESULT\n");
for(i=0;i{
for(j=0;jprintf("%4d",a[i][j]);
printf("\n");
}
return0;
}
4.计算两个矩阵的乘积。
程序如下,请填空。
说明:
1.当矩阵A的列数等于矩阵B的行数时,A与B可以相乘。
2.矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
3.乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。
#include
#defineM2
#defineP3
#defineN4
voidfun(inta[M][P],intb[P][N],intc[M][N])
{
inti,j,k,s;
for(i=0;i{
for(j=0;j{
s=0;
for(k=0;k
s+=a[i][k]*b[k][j];
c[i][j]=s;
}
}
}
intmain()
{
inta[M][P],b[P][N],c[M][N];
inti,j,k;
printf("Inputarraya[2][3];\n");//输入数组A的值
for(i=0;i{
for(k=0;k
scanf("%d",&a[i][k]);
}
printf("Inputarrayb[3][4];\n");//输入数组B的值
for(i=0;i
{
for(k=0;kscanf("%d",&b[i][k]);
}
fun(a,b,c);
printf("Outputarrayc[2][4]:
\n");//输出数组C的值
for(i=0;i{
for(j=0;j{
printf("%5d",c[i][j]);
}
printf("\n");
}
return0;
}
三、程序阅读题
1.以下程序运行后的输出结果是(abc)。
#include
intmain()
{
chars[]="abcdef";
s[3]='\0';
printf("%s\n",s);
return0;
}
2.以下程序运行后的输出结果是(Hello)。
#include
intmain()
{
charb[]="Hello,you";
b[5]=0;
printf("%s\n",b);
return0;
}
3.以下程序运行后的输出结果是(1,3,7,15,)。
#include
intmain()
{
inti,n[]={0,0,0,0,0};
for(i=1;i<=4;i++)
{
n[i]=n[i-1]*2+1;
printf("%d,",n[i]);
}
return0;
}
4.以下程序运行后的输出结果是(123)。
056
009
#include
intmain()
{
inti,j,a[][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)
{
for(j=i+1;j<3;j++)
{
a[j][i]=0;
}
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%d",a[i][j]);
}
printf("\n");
}
return0;
}
5.以下程序运行后的输出结果是(2650)。
#include
intmain()
{
inta[4][4]={{1,3,5},{2,4,6},{3,5,7}};
printf("%d%d%d%d\n",a[0][4],a[1][2],a[2][1],a[3][0]);
return0;
}
四、程序设计题
1.求一个N*N矩阵对角线元素之和。
程序代码:
#include
#defineN5
floatsum(floata[N][N])
{
floats=0;
inti;
for(i=0;is=s+a[i][i];
returns;
}
intmain()
{
floata[N][N],s;
inti,j;
printf("请输入N*N个元素:
\n");
for(i=0;i{
for(j=0;jscanf("%f",&a[i][j]);
}
s=sum(a);
printf("对角线元素之和为%\n",s);
return0;
}
2.将一个数组首尾互换后输出。
程序代码:
#include
#defineN6
voidconv(inta[])
{
inti,temp;
for(i=0;i{
temp=a[i];
a[i]=a[N-i-1];
a[N-i-1]=temp;
}
}
intmain()
{
inta[N]={11,9,8,2,1,0},i;
printf("\n交换前:
\n");
for(i=0;iprintf("%4d",a[i]);
conv(a);
printf("\n交换后:
\n");
for(i=0;iprintf("%4d",a[i]);
printf("\n");
return0;
}
3.输入N个整数,分析每个整数的每一位数字,求出现次数最多的数字。
//把数组的下标0-9,和数字0-9对应起来,数组元素作为出现的个数
#include
voidcount(inta[]);
#defineN5
intmain()
{
inti,d,gw,a[10]={0};
printf("请输入%d个整数:
\n",N);
for(i=0;i{
scanf("%d",&d);
while(d>0)
{
gw=d%10;
d=d/10;
a[gw]++;
}
}
count(a);
return0;
}
voidcount(inta[])
{
inti,maxnum;
maxnum=a[0];
for(i=1;i<10;i++)//查找出现的最大次数
if(a[i]>maxnum)
maxnum=a[i];
printf("出现%d次数字有:
",maxnum);
for(i=0;i<10;i++)//查找出现次数最多的个位数字
if(a[i]==maxnum)
printf("%d",i);
printf("\n");
}
4.输入一个整数,输出每个数字对应的拼音。
当整数为负数时,先输出“fu”字。
程序代码:
#include
intwrite(intn);
intmain()
{
intn;
printf("请输入一个整数:
");
scanf("%d",&n);
if(n<0)
{
printf("fu");
n=-n;
}
write(n);
return0;
}
intwrite(intn)
{
chara[][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
intt,mask=1;
t=n;
while(t>=10)
{
t=t/10;
mask=mask*10;//得到位权
}
while(mask>0)
{
t=n/mask;//得到最高位的值
printf("%s",a[t]);
n=n%mask;//得到除最高位的值
mask=mask/10;
}
printf("\n");
return0;
}
5.一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如6=1+2+3,找出100以内的所有完数。
程序代码:
#include
intwanshu(intt,intk[])
{
inti,s;
intflag=0;
k[10]=-1;
s=t;
for(i=1;i{
if((t%i)==0)
{
k[10]++;
s=s-i;
k[k[10]]=i;
}
}
if(s==0)
{
flag=1;
}
returnflag;
}
intmain()
{
inti,j;
intk[11];
for(i=2;i<=100;i++)
{
if(wanshu(i,k))
{
printf("%d是一个完数,其因子是:
",i);
for(j=0;jprintf("%d,",k[j]);
printf("%d\n",k[k[10]]);
}
}
return0;
}