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;