当前位置:
文档之家› 大学生C语言程序设计(第四版 谭洪强)实验4 答案
大学生C语言程序设计(第四版 谭洪强)实验4 答案
printf("输出交换前数组的值:");
for(i=0;i<10;i++) printf("%3d",a[i]);
for(i=0, j=9 ; i<j ; i++ , j--) //逐一交换 a[0]和 a[1],a[1]和 a[8], … a[4]和 a[5] { t=a[i]; a[i]=a[j]; a[j]=t; }
printf("10 个同学成绩为:");
for(i=0;i<10;i++)
//输出数组中 10 个成绩
printf("%g ",score[i]);
for(i=0;i<10;i++) //求 10 个成绩之和
sum=sum+score[i];
aver=sum/10;
// 求出平均值
for(i=0,j=0;i<10;i++) //遍历每个成绩
if(m==a[mid])
//如果中间元素等于被查找数,找到,跳出循环
{ k=mid; break; }
else if(m<a[mid]) //m 比中间元素小
high=mid-1; //m 应该在中间元素的左边,修改查找范围
else low=mid+1; //m 应该在中间元素的右边,修改查找范围
a[i]=a[i]*x; printf("数组每个元素乘以 x 后的值为:"); for(i=0;i<10;i++)
printf("%5d",a[i]); printf("\n"); return 0; } 运行结果:
2、设计程序 sy4-2.பைடு நூலகம்,对输入的 10 个整数按倒序存放后输出结果。 算法分析:
printf("\n 输出交换后数组的值:"); for(i=0;i<10;i++)
printf("%3d",a[i]); printf("\n");
return 0; }
运行结果:
3、设计程序 sy4-3.c,输入 10 个整数,找出其中的最大数及其所在的下标。 算法分析:
首先:把下标为 0 的数看成最大数,即 max=a[0],k=0; 然后:逐一遍历 a[0]后面的每个 元素,如果当前元素值比 max 大,就改写 max,并记录其下标。
# include <stdio.h>
void main()
{ int a[10],k,i,j,t;
printf("Input 10 numbers:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
//选择排序法
{ k=i;
for(j=i+1;j<10;j++)
最后:输出结果。 参考答案: #include<stdio.h> int main() { int a[10]={12,21,35,10,54,31,24,58,43,11},i,k,max; //max 存放最大值,k 记最大值的下标
printf("输出数组的每个元素:"); for(i=0;i<10;i++)
4、设计程序 sy4-4.c,在一个 5 个整数的升序排列的序列中,任意输入一个数插入其中, 要求保持原来的排列顺序。输出结果。
算法分析:(方法一)
分析: 假如 int a[6]初值如下表,需插入的数据 x=10;插入算法如下:
下标
0
1
2
3
4
5
元素的值
5
9
15
20
24
1)首先应遍历数组找到插入的位置 p=2;2)然后应从数组最后一个元素到下标为 p 的
外循环:10 个数,需要 9 趟循环,第 i 趟从未排序数列(a[i],a[i+1],---a[9])里找出最小 数和 a[i]交换。内循环:(第 i 趟里找最小数的方法)1)首先把第 i 个数看成最小数记下它 的下标(k=i);2)然后从下标为 j=i+1 的元素开始一直到 j=9,逐一去比较,如果当前的元素 a[j]比最小数 a[k]还小,就用它的下标去改写 k;3)如果 k 的值发生了变化,就交换最小值 a[k]和未排序元素里的第一个元素 a[i]。 参考答案:
if(a[j]<a[k]) k=j;
if(k!=i)
{ t=a[k]; a[k]=a[i]; a[i]=t; }
}
printf("\n 排序后的数为:");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
运行结果:
6、设计程序 sy4-6.c,计算 scroe 数组中 10 个人的平均成绩 aver,将低于 aver 的成 绩放在 below 数组中。输出 aver 和 below 数组中的数据。 算法分析:
实验四 参考答案
1、设计程序 sy4-1.c,输入 10 个整数存入一个数组 a,输入 x,使数组 a 中各元素值都乘以 x 后输出。 算法分析:
用循环输入 10 个数,分别赋给 a[0],a[1],------a[9],然后再输入 x 的值,重新给每个元 素 a[0],a[1],------,a[9]赋值为他们乘以 x 的值;最后结果输出。 参考答案: #include<stdio.h> int main() { int a[10], x , i ;
printf("Input insert number:");
scanf("%d",&x);
for(p=5,i=0;i<5;i++) //p 的初值为 5,找查找的位置
if(x<a[i]) //找到第一个比 x 大的元素,该位置即为要插入的位置
{ p=i;
break;
}
for(i=4;i>=p;i--) //从最后一个元素到找到的插入位置移动数据,空出位置
首先用循环求出 10 同学的成绩总和,成绩总和除以总人数得到平均值 aver,
参考答案:
#include<stdio.h>
int main()
{ float score[10]={78,98,65,45,68,94,81,86,57,96},below[10],sum=0,aver;
int i,j=0;
printf("请输入 10 个整数:"); for(i=0;i<10;i++)
scanf("%d",&a[i]); printf("输出数组中原来的值:"); for(i=0;i<10;i++)
printf("%5d",a[i]); printf("\n 请给 x 输入值:"); scanf("%d",&x); for(i=0;i<10;i++)
a[i+1]=a[i];
a[p]=x;
//写入待插入的数据
printf("The after insert score:\n");
for(i=0;i<6;i++)
printf("%6d",a[i]);
printf("\n");
}
运行结果:
算法分析:(方法二)
分析: 假如 int a[6]初值如下表,需插入的数据 x=10;插入算法如下:
printf("%3d",a[i]); max=a[0]; k=0; //首先把 a[0]看成最大值,k 记它的下标 for(i=1;i<10;i++) //逐一遍历其后的每个元素
if(max<a[i]) //如果当前值比最大值大 { max=a[i] ; k=i; } //就改写最大值和最大值的下标 printf("\n 最大值=%d,最大值的下标=%d\n",max, k); return 0; } 运行结果:
插入 x( a[i+1]=x; )。
参考答案:
# include <stdio.h>
void main()
{ int a[10],i,x,p;
printf("Input 5 numbers:"); /*5 个数按由小到大的顺序输入*/
for(i=0;i<5;i++)
scanf("%d",&a[i]);
#include < stdio.h >
#define N 10
void main( )
{ int i,a[N]={-3,4,7,9,13,24,67,89,100,180},k,m,low,high,mid;
//low,high-查找数组元素范围的下标
printf("a 数组中的数据如下:");
printf("Input insert number:");
scanf("%d",&x);
for(i=4;i>=0;i--) //从最后一个元素开始往前找插入位置