数组习题解答Word文件下载.docx
《数组习题解答Word文件下载.docx》由会员分享,可在线阅读,更多相关《数组习题解答Word文件下载.docx(24页珍藏版)》请在冰豆网上搜索。
d'
};
若执行:
printf("
%s"
ch);
结果为(B)。
A.‘abc’B.abcC.abcdD.abc\0d
charc='
⑸对数组进行初始化charcarr[]={'
s'
t'
u'
e'
n'
},barr[]="
student"
;
则正确的是(D)。
A.carr与barr长度相同B.carr比barr
C.carr与barr相同D.carr比barr短
charcarr[]={'
2.阅读下列程序,写出运行结果。
⑴
inti,j,d[4][4]={{1,2,3,4},{5,6,7,8},{4,3,2,1},{1,2,3,4}};
4;
for(j=0;
j<
i;
j++)
if(d[i][j]>
d[j][i])
d[j][i]=d[i][j];
{
\n"
if(j>
=i)
printf("
%6d"
d[i][j]);
//显示主对角线以上的元素
else
%6c"
'
}
putchar('
\n'
运行结果:
1544
678
23
4
⑵若输入十进制数3291时,下列程序输出为:
6333
inti,d,m,n;
chars[8];
scanf("
%d"
&
n);
i=0;
//存储字符数组下标
do
m=n/8;
d=n%8;
s[i]='
0'
+d;
//余数转换为数字字符
i++;
n=m;
//商作为下一轮行循环操作的被除数
}while(n!
=0);
//商不为0,继续循环
for(i--;
i>
=0;
i--)
putchar(s[i]);
3.程序填空。
⑴从键盘输入一个数,将其插入到一个升序数组中,保持数组仍然按升序排列。
intdata,temp,k;
staticinta[9]={-10,2,4,8,10,15,25,50};
\nEnteradata:
"
data);
a[8]=data;
for(k=8;
k>
k--)
if(a[k]<
a[k-1])
{
temp=a[k];
a[k]=a[k-1];
a[k-1]=data;
}
else
break;
for(k=0;
k<
=8;
k++)
%7d"
a[k]);
注:
原程序的代码有误,其核心部分有元素交换操作,这对已按升序排列各元素的数组,在插入一个元素时是没有必要的。
完整的代码如下:
intdata,k;
if(data>
a[k-1]||k==0)
a[k]=data;
运行该程序:
Enteradata:
9
-10248910152550
⑵从键盘输入一串英文字符(不含空格与其他字符),统计每个字符的个数,并输出字母及相应的个数。
inti=0,c[52]={0},m=0;
charstr[80];
Inputastring:
%s"
str);
while(str[i])
if(str[i]>
='
&
&
str[i]<
Z'
)
c[str[i]-'
]++;
z'
+26]++;
26;
if(c[i])
if(m%8==0)
putchar('
m++;
printf("
%c:
%-d"
i+'
c[i]);
if(c[i+26])
c[i+26]);
4.求一组成绩的平均分数以及高于平均分的成绩,设给定的成绩为90,85,92,77,80,62。
省略数据输入,用随机函数产生10个数,求其平均值。
stdlib.h>
time.h>
inta[10],i,sum=0;
doubleaverage;
srand((unsigned)time(NULL));
10;
a[i]=rand()%100;
sum+=a[i];
average=sum/10;
average=%lf\n"
average);
运行:
95268883573133558230
average=58.000000
5.编写程序,输入一组整数,将它们排序后由小到大输出。
[起泡法]
思路:
两个数比较,小者前移,大者后移。
intmain()
inta[10],i,j,t;
srand((unsigned)time(NULL));
//初始化rand()函数
//用随机数为数组元素赋值
Beforesorted:
for(j=0;
9;
for(i=0;
10-j;
if(a[i]>
a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
Aftersorted:
return0;
程序运行后输出:
211478573618285245
381421455257617882
[选择法]
用一个变量k保存当前最小元素的下标,不进行交换,直到完成一次内循环的比较后,把a(k)交换到希望的位置a(i):
①令k=0,a(k)与a
(1)比较,若a(k)>
a
(1),令k=1,小者的下标存放在k中;
②a(k)又与a
(2),a(3),……,直到a(10),重复①的工作,结束后,实现10个数中的最小者存放在a(k)中。
③a
(1)与a(k)交换,把最小者存放在a
(1)中。
④分别令k=1,2,3,….,9重复①②③的操作。
inta[10],i,j,t,k;
k=i;
for(j=i+1;
if(a[k]>
a[j])k=j;
t=a[i];
a[i]=a[k];
a[k]=t;
}
6.从键盘输入一个4×
4整数矩阵,以主对角线为对称轴,将左下角元素中较大元素代替右上角对应元素,并将右上角元素(含对角线元素)输出。
本题与2题的操作相同。
intd[4][4],i,j;
d[i][j]=rand()%100;
putchar('
7.通过键盘给3×
4的二维数组输入数据,然后分别按行和列输出数组元素。
intd[3][4],i,j;
3;
}
8.编写程序,将两个字符串连接起来,不要用strcat函数。
chara[80],b[40];
inti,j;
a);
b);
while(a[i])i++;
//搜索串尾元素下标
b[j];
j++,i++)
a[i]=b[j];
a[i]='
puts(a);
9.输入一行字符串,统计该字符串中字符对ab的个数。
chara[80];
inti,n=0;
a[i];
if(a[i]=='
a[i+1]=='
n++;
ab_number=%d\n"
n);
10.从键盘输入10个字符串,找出一最长的字符串。
chara[5][80];
inti,j,n,max=0;
scanf("
for(i=0,j=0;
i++,j=0)
while(a[i][j])j++;
if(j>
max)
max=j;
n=i;
Max_string:
%s\n"
a[n]);
11.已知数组a中有m个按升序排列的元素,数组b中有n个按降序排列的元素,编程将a与b中的所有元素按降序存入数组c中。
voidrisesort(inta[],intn)//升序排序
inti,j,k,t;
n;
voiddropsort(inta[],intn)//降序排序
if(a[k]<
voiddisp(inta[],intn)//显示数组中的各元素
voidf(inta[],intn)
inta[10],b[10],c[20],i,j,k;
f(a,10);
risesort(a,10);
disp(a,10);
f(b,10);
dropsort(b,10);
disp(b,10);
for(i=9,j=0,k=0;
20;
)//i,j,k分别为数组a,b,c的下标
if(a[i]>
b[j]&
i!
=-1&
j!
=10)
c[k++]=a[i--];
elseif(a[i]==b[i])
c[k++]=b[j++];
elseif(j!
elseif(i!
=-1)
disp(c,20);
实验七数组
2.填空
⑴以下程序分别在a数组和b数组中放入an+1和bn+1个由小到大的有序数,程序把两个数组中的数按由小到大的顺序归并在c数组中。
inta[10]={1,2,5,8,9,10},an=5;
intb[10]={1,3,4,8,12,18},bn=5;
inti,j,k,c[20],max=9999;
a[an+1]=b[bn+1]=max;
i=j=k=0;
while((a[i]!
=max)||(b[j]!
=max))
if(a[i]<
b[j])
c[k]=a[i];
k++;
i++;
else
c[k]=b[j];
j++;
k;
i++)printf("
%4d"
⑵以下程序以每行输出8个数据的形式输出a数组。
inta[50],i;
//for(i=0;
50;
i++)scanf("
a[i]);
i++)a[i]=rand()%100;
if(i%8==0)printf("
%3d"
⑶以下程序将数组中的数据按逆序存放。
#defineSIZE12
inta[SIZE],i,j,t;
SIZE;
i++){a[i]=rand()%100;
j=SIZE-1;
while(i<
j)
a[i]=a[j];
a[j]=t;
j--;
⑷假设a数组中的数按由小到大的顺序存放,以下程序把a数组中相同的数删得只剩下一个,然后以每行5个数的形式输出a数组中的数,请填空。
#defineMAX30
inta[MAX],i,j,k,t,n;
MAX;
i++)//为各元素赋值
t=rand()%100;
a[i++]=t;
a[i++]=t;
a[i]=t;
%3d%3d%3d"
a[i-1],a[i-1],a[i]);
MAX-1;
i++)//排序
if(k!
{t=a[i];
n=i=MAX-1;
while(i>
0)
if(a[i]==a[i-1])//删除相同元素
for(j=i;
=n;
j++)a[j-1]=a[j];
n--;
//总元素个数减1
i--;
if(i%5==0)printf("
3.编程题。
⑴用筛法求2-100以内的素数。
inti,j,k=0;
inta