练习题6参考答案.docx
《练习题6参考答案.docx》由会员分享,可在线阅读,更多相关《练习题6参考答案.docx(17页珍藏版)》请在冰豆网上搜索。
练习题6参考答案
练习题6参考答案
一、选择题
序号
1
2
3
4
5
6
7
8
9
10
参考答案
D
D
D
A
A
D
A
C
B
C
序号
11
12
13
14
参考答案
C
D
A
A
二、填空题
1.下面程序的运行结果是:
1123
581321
3455
2.以下程序的输出结果是abc。
3.若有定义:
inta[3][4]={{1,2},{0},{4,6,8,10}};,则初始化后,a[1][2]得到的初值是0,a[2][1]得到的i初值是6。
4.以下程序可求出所有水仙花数(水仙花数是指一个3位正整数,其各位数字的立方之和等于该正整数。
如:
407=4*4*4+0*0*0+7*7*7,故407是一个水仙花数)。
请填空。
#include
voidmain()
{
intx,y,z,a[8],m,i=0;
printf("Thespecialnumbersare:
\n");
for(m=100;m<1000;m++)
{x=m/100;
y=(m/10)%10;
z=m%10;
if(x*100+y*10+z==x*x*x+y*y*y+z*z*z)
{a[i]=m;i++;}
}
for(x=0;x
printf("%6d",a[x]);
}
5.下面程序的功能是:
将字符数组a中下标值为偶数的元素从小到大排列,其他元素不变,请填空。
#include
#include
voidmain()
{chara[]="clanguage",t;
inti,j,k;
k=strlen(a);
for(i=0;i<=k-2;i+=2)
for(j=i+2;jif(a[i]>a[j])
{t=a[i];a[i]=a[j];a[j]=t;}
puts(a);
printf("\n");
}
6.下面程序的功能是将二维数组a中每个元素向右移一列,最右一列换到最左一列,移后的数组存到另一个二维数组b中,并按矩阵形式输出a和b,请填空。
例如:
arraya:
arrayb:
456645
1233l2
#include
voidmain()
{inta[2][3]={4,5,6,1,2,3},b[2][3];
inti,j;
printf("arraya:
\n");
for(i=0;i<=1;i++)
{for(j=0;j<3;j++)
{printf("%5d",a[i][j]);
b[i][j]=a[i][j];
}
printf("\n");
}
for(i=0;i<=1;i++)b[i][0]=a[i][2];
printf("arrayb:
\n");
for(i=0;i<2;i++)
{for(j=0;j<3;j++)
printf("%5d",b[i][j]);
printf("\n");
}
}
7.下面程序中的数组a包括10个整数元素,从a中第二个元素起,分别将后项减前项之差存入数组b,并按每行3个元素输出数组b。
请填空。
#include
voidmain()
{inta[10],b[10],i;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=1;i<10;i++)
b[i]=a[i]-a[i-1];
for(i=1;i<10;i++)
{printf("%3d",b[i]);
if(i%3==0)printf("\n");
}
}
8.以下程序是求矩阵a,b的和,结果存入矩阵C中,并按矩阵形式输出。
请填空。
#include
voidmain()
{inta[3][4]={{3,-2,7,5},{1,0,4,-3},{6,8,0,2}};
intb[3][4]={{-2,0,1,4},{5,-1,7,6},{6,8,0,2}};
inti,j,c[3][4];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
c[i][j]=a[i][j]+b[i][j];
for(i=0;i<3;i++)
{for(j=0;j<4;j++)
printf("%3d",c[i][j]);
printf("\n");
}
}
三、程序设计题
1.从键盘输入某个班级的30名学生信息(设只含有学号),编写程序用折半查找法通过输入一个学生的学号查找某一学生(注意:
查找前要先进行排序)。
程序设计如下:
#include
#defineN30
voidmain()
{
inta[N];
inti,j,t,x,mid,low=0,high=N-1;
printf("请输入%d名学生的学号:
\n",N);
for(i=0;iscanf("%d",&a[i]);
for(j=0;jfor(i=0;iif(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("请输入需要查找的学生的学号:
\n");
scanf("%d",&x);
do
{
mid=(low+high)/2;
if(a[mid]==x)break;
elseif(a[mid]>x)
high=mid-1;
else
low=mid+1;
}while(low<=high);
if(low<=high)
printf("这个学生学号为%d\n",x);
else
printf("查找不到\n");
}
2.设有某班级35名学生的一门课程考试成绩,编写程序求超过平均的学生(包括学号和成绩),并将所有学生按成绩降序排列输出。
程序设计如下:
#include
#defineNUM35
voidmain()
{
inta[NUM][2];
floatsum=0,ave;
inti,j,t;
printf("请输入%d位同学的学号和成绩:
\n",NUM);
for(i=0;iscanf("%d%d",&a[i][0],&a[i][1]);
for(i=0;isum=sum+a[i][1];
ave=sum/NUM;
for(i=0;iif(a[i][1]>ave)
printf("超过平均分的学生学号为:
%d,成绩为:
%d\n",a[i][0],a[i][1]);
for(j=0;jfor(i=0;iif(a[i][1]{t=a[i][0];a[i][0]=a[i+1][0];a[i+1][0]=t;
t=a[i][1];a[i][1]=a[i+1][1];a[i+1][1]=t;
}
printf("所有学生成绩(降序排列):
\n");
for(i=0;iprintf("学号为:
%d,成绩为:
%d\n",a[i][0],a[i][1]);
}
3.设从3个候选人中选择1个人,10个人参加投票,编写一个统计选票的程序。
投票人编号
候选人
投票人编号
候选人
1
张华
6
李好
2
李好
7
李好
3
王娟
8
王娟
4
李好
9
李好
5
张华
10
王娟
程序设计如下:
#include
#include
voidmain()
{
inti;
charname[8];
char*p1="张华";
char*p2="李好";
char*p3="王娟";
intn1=0,n2=0,n3=0;
for(i=0;i<10;i++)
{
printf("请输入第%d个投票人选择的候选人:
\n",i+1);
scanf("%s",name);
if(strcmp(name,p1)==0)
n1++;
elseif(strcmp(name,p2)==0)
n2++;
elseif(strcmp(name,p3)==0)
n3++;
}
printf("%s的票数为%d\n",p1,n1);
printf("%s的票数为%d\n",p2,n2);
printf("%s的票数为%d\n",p3,n3);
}
4.输入一行字符串,编写程序分别统计各个英文字母出现的次数(不区分字母大小写)。
程序设计如下:
#include
voidmain()
{
intlet[26]={0};
inti;
charch;
while((ch=getchar())!
='\n')
{
if(ch>='A'&&ch<='Z')
let[ch-'A']++;
elseif(ch>='a'&&ch<='z')
let[ch-'a']++;
}
for(i=0;i<26;i++)
printf("%c:
%d\n",i+'a',let[i]);
}
5.编写程序输出以下杨辉三角形(要求打印出10行)。
1
11
121
1331
14641
15101051
……
程序设计如下:
#include
#defineN10
voidmain()
{
inti,j,k;
inta[N][N];
for(i=0;i{
a[i][0]=1;
a[i][i]=1;
}
for(i=2;ifor(j=1;j
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i{
for(j=0;j<=i;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
6.编写程序输入并求一个4×4矩阵的两条对角线元素之和、四周靠边元素之和。
程序设计如下:
#include
#defineN4
voidmain()
{
inta[N][N];
inti,j;
intsum1=0;//对角线元素之和
intsum2=0;//四周靠边元素之和
printf("请输入%d*%d矩阵:
\n",N,