2024年1月16日发(作者:)
同步训练6-1答案
一、单项选择题
1.已定义:float a[5];则数组a可引用的元素有( D )。
A.a[1]~a[5]
A.15
A.[0,10]
B.a[0]~a[5]
B.30
B.[0,9]
C.a[1]~a[4]
C.60
C.[1,10]
D.a[0]~a[4]
D.120
D.[1,9]
2.已定义:int a[15];则数组a占用的内存单元数是( C )。
3.若有以下定义:double w[10];则数组w 的元素下标范围是( B )。
4.设有程序,则在程序中的两个括号中应填入( C )。
#include
int main()
{
int i,a[5]; printf{"Please input number:n"};
for (i=0;i<=4;i++) scanf("%d",());
… …
printf("输出数组:n");
for (i=0;i<4;i++) printf("%d",());
return 0;
}
A.a[i]和&a[i]
C.&a[i]和a[i]
B.&a[i]和&a[i]
D.a[i]和a[i]
5.阅读程序,以下程序的输出结果是( D )。
f(int b[],int n)
{
int i,r=1;
}
int main()
{
int x,a[]={2,3,4,5,6,7,8,9};
x=f(a,3);
printf("%dn",x);
for (i=0;i<=n;i++) r=r*b[i];
return r;
return 0;
}
A.720 B.6 C.24 D.120
6.已知int类型变量在内存中占用4个字节,定义数组int b[8]={2,3,4};则数组b在内存中所占字节数为( D )。
A.5 B.12 C.16 D.32
7.以下程序段给数组所有元素输入数据,应在圆括号中填入的是( D )。
#include
int main()
{
int a[10],i=0;
while (i<10)
scanf("%d",( ));
… …
}
A.&a[++i] B.&a[i+1] C.&a[i] D.&a[i++]
8.若有以下说明:int a[10]={1,2,3,4,5,6,7,8,9,10};char c='a';则数值为4的表达式是( D )。
A.a['f'-c] B.a[4] C.a['d'-'c']
B.int n=5,a[n];
D.char a[5]={ '0','1' ,'2' ,'3' ,'4'};
D.a['d'-c]
9.以下定义语句中,错误的是( B )。
A.int a[]={6,7,8};
C.char a[]="string";
10.以下描述中正确的是( D )。
A.数组名后面的常量表达式用一对圆括弧括起来
B.数组下标从1开始
C.数组下标的数据类型可以是整型或实型
D.数组名的规定与变量名相同
A.数组首地址
C.数组中全部元素的值
B.数组的第一个元素值
D.数组元素的个数
11.用数组名作为函数调用时的实参,实际上传送给形参的是( A )。
12.若定义数组并初始化char a[10]= { '0','1' ,'2' ,'3' ,'4' ,'5' ,'6' ,'7' ,'8','9'};
以下正确语句是( C )。
A.scanf("%c",a[0]);
C.printf("%c",a[3]);
B.scanf("%s",&a);
D.printf("%s",a);
13.若定义数组int a[10],其数组元素的下标下限为( B )。
A.1
A.a[0]
B.0
B.a[1]
C.9
C.a[9]
D.10
D.a[10]
14.若定义数组int a[10],其最后一个数组元素为( C )。
15.若定义数组并初始化int a[10]={1,2,3,4},以下语句不成立的是( B )。
A.a[8]的值为0 B.a[1]的值为1 C.a[3]的值为4 D.a[9]的值为0
A.若引用a[10],编译时警告
C.若引用a[10],运行时出错
A.int n=10,a[n];
C.int a[10]={1,2,3};
B.若引用a[10],连接时报错
D.若引用a[10],系统报错
B.int n,a[10];
D.int a[10]={1,2,3,4,5,6,7,8,9,10};
16.若定义数组并初始化int a[10]={1,2,3,4},以下叙述成立的是( A )。
17.指出以下错误语句( A )。
18.若定义数组并初始化int a [10]={1,2,3,4},以下叙述不成立的是( A )。
A.a[10]是a数组的最后一个元素的引用
B.a数组中有10个元素
C.a数组中每个元素都为整数
D.a数组是整型数组
int k=3,s[2];s[0]=k;k=s[1]*10;
A.不定值 B.33 C.30 D.10
20.若有以下的定义和语句:int str[12]= {1,2,3,4,5,6,7,8,9,10,11,12}; char c=
'e',则数值为2的表达式是( C )。
A.str[ 'g'-c] B.str[2] C.str[ 'd'-'c'] D.str['d'-c]
21.设已定义:int x[2][4]={1,2,3,4,5,6,7,8};则元素x[1][1]的正确初值是( A )。
A.6 B.5 C.7 D.1
22.设有int x[2][4]={1,2,3,4,5,6,7,8};
printf("%d",x[2][4]);则输出结果是( C )。
A.8
A.9
B.1
B.20
C.随机数
C.40
D.语法检查出错
D.80
23.设有: int a[4][5]; 则数组a占用的内存字节数是( D )。
24.以下程序的输出结果是( C )。
#include
int main()
{
int i,a[3][3]={1,2,3,4,5,6,7,8,9};
19.执行下面的程序段后,变量k中的值为( A )。
for (i=0;i<3;i++)
printf("%d,",a[i][2-i]);
return 0;
B.1,4,7 C.3,5,7 D.3,6,9
}
A.1,5,9
25.指出以下错误语句( C )。
A.int a[2][3]={{1,2,3},{4,5,6}};
C.int a[][]={{1,2,3},{4,5,6}};
B.int b[2][3]={1,2,3,4,5,6};
D.int a[][3]={{1,2,3},{4,5,6}};
二、程序填空题
1.若有定义语句:char s[100],d[100]; int j=0, i=0;,且s中已赋字符串,请填空将字符串s拷贝到d中。(注:不得使用逗号表达式)
while(s[i])
{
d[j]= s[i++] ;
j++;
}
d[j]=0;
2.下列程序中,将k的值插入到有序数组a中,使数组依然保持升序,请填空。
#include
void insert(int a[],int x)
{
}
int main()
{
int a[5] ={1,4,5},i;
int x;
scanf("%d",&x);
insert(a,x);
for (i=0;i<4;i++)
printf("%3d",a[i]);
int i=0,j;
while( a[i] for( j=2;j>=i;j-- ) a[j+1]=a[j]; a[i]=x; printf("n"); return 0; } 3.程序定义了N×N的二维数组,并在主函数中自动赋值。请在函数fun( ) 填空,该函数的功能是:使数组左下半三角元素中的值全部置成0。例如a数组中的值为 a= 1 9 7 2 3 8 4 5 6 则返回主程序后a数组中的值应为 0 9 7 0 0 8 0 0 0 #include #include #define N 9 int fun ( int a[][N] ) { int i,j; for(i=0;i for(j=0; j<=i ;j++) a[i][j]=0; return 0; } int main() { int a[N][N],i,j; printf("*****The array*****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("THE RESULTn"); for(i=0;i { for(j=0;j printf("%4d",a[i][j]); printf("n"); } return 0; } 4.计算两个矩阵的乘积。程序如下,请填空。 说明:1.当矩阵A的列数等于矩阵B的行数时,A与B可以相乘。 2.矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。 3.乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。 #include< stdio.h> #define M 2 #define P 3 #define N 4 void fun(int a[M] [P], int b[P] [N],int c[M] [N]) { } int main() { int a[M] [P], b[P] [N],c[M] [N]; int i,j,k; printf("Input array a[2][3];n"); for( i=0;i { } for( k=0;k scanf("%d",&a[i][k]); //输入数组A的值 int i,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; } printf("Input array b[3][4];n"); for( i=0;i { } fun(a,b,c); for( k=0;k scanf("%d",&b[i][k]); //输入数组B的值 printf("Output array c[2][4]:n"); //输出数组C的值 for(i=0;i { } return 0; for(j=0;j { } printf("n"); printf("%5d",c[i][j]); 三、程序阅读题 1.以下程序运行后的输出结果是( abc )。 #include int main() { char s[]="abcdef"; s[3]= '0'; printf("%sn",s); return 0; } 2.以下程序运行后的输出结果是( Hello )。 #include int main() { char b[]="Hello,you"; b[5]=0; printf("%s n", b ); return 0; } 3.以下程序运行后的输出结果是( 1,3,7,15, )。 #include int main() { } 4.以下程序运行后的输出结果是( 1 2 3 )。 0 5 6 0 0 9 int i,n[ ]={0,0,0,0,0}; for(i=1;i<=4;i++) { } return 0; n[i] =n[i-1]*2+1; printf("%d,", n[i]); #include int main ( ) { int i,j,a[][3] ={1,2,3,4,5,6,7,8,9}; for (i= 0;i<3;i++) { } for (i=0;i<3;i++) { } for (j=0;j<3;j++) { } printf("n"); printf("%d ",a[i][j]); for (j=i+1; j<3;j++) { } a[j][i]=0; } return 0; 5.以下程序运行后的输出结果是(2650)。 #include int main() { } 四、程序设计题 1. 求一个N*N矩阵对角线元素之和。 程序代码: #include #define N 5 float sum(float a[N][N]) { } int main() { float a[N][N],s; int i,j; printf("请输入N*N个元素:n"); for(i=0;i { } s=sum(a); printf("对角线元素之和为%n",s); for(j=0;j scanf("%f",&a[i][j]); float s=0; for(i=0;i s=s+a[i][i]; return s; int i; int a[4][4]={{1,3,5},{2,4,6},{3,5,7}}; printf("%d%d%d%dn",a[0][4],a[1][2],a[2][1],a[3][0]); return 0; } return 0; 2.将一个数组首尾互换后输出。 程序代码: #include #define N 6 void conv(int a[]) { } int main() { } 3.输入N个整数,分析每个整数的每一位数字,求出现次数最多的数字。 //把数组的下标0-9,和数字0-9对应起来,数组元素作为出现的个数 #include void count(int a[]); #define N 5 int main() int a[N]={11,9,8,2,1,0},i; printf("n交换前:n"); for(i=0;i printf("%4d", a[i]); int i,temp; for(i=0;i { } temp=a[i]; a[i]=a[N-i-1]; a[N-i-1]=temp; conv(a); printf("n交换后:n"); for(i=0;i printf("%4d", a[i]); printf("n"); return 0; { } void count(int a[]) { } 4.输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出“fu”字。 程序代码: #include int write(int n); int main() int i,maxnum; maxnum=a[0]; for(i=1;i<10;i++) if(a[i]>maxnum) maxnum=a[i]; //查找出现次数最多的个位数字 //查找出现的最大次数 int i,d,gw,a[10]={0}; printf("请输入%d个整数:n",N); for(i=0;i { } count(a); return 0; scanf("%d",&d); while(d>0) { } gw=d%10; d=d/10; a[gw]++; printf("出现%d次数字有:",maxnum); for(i=0;i<10;i++) if(a[i]==maxnum) printf("%d ",i); printf("n"); { } int write(int n) { } 5.一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3,找出100以内的所有完数。 程序代码: char a[][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; int t,mask=1; t=n; while(t>=10) { } while(mask>0) { } printf("n"); return 0; t=n/mask; n=n%mask; mask=mask/10; //得到最高位的值 //得到除最高位的值 printf("%s ",a[t]); t=t/10; mask=mask*10; //得到位权 int n; printf("请输入一个整数:"); scanf("%d",&n); if(n<0) { } write(n); return 0; printf("fu "); n=-n; #include int wanshu(int t,int k[]) { } int main() { int i,j; int k[11]; for(i=2;i<=100;i++) { if(wanshu(i,k)) { } printf("%d 是一个完数,其因子是:",i); for(j=0;j printf("%d,",k[j]); printf("%dn",k[k[10]]); int i,s; int flag=0; k[10]=-1; s=t; for(i=1;i { } if(s==0) { } return flag; flag=1; if((t%i)==0) { } k[10]++; s=s-i; k[k[10]]=i; } } return 0;


发布评论