当前位置:文档之家› C语言 数组 实验题目及答案

C语言 数组 实验题目及答案

实验六数组程序设计【实验目的】1、掌握使用一维数组编程方法2、掌握使用二维数组进行程序设计【实验内容】一、上机验证程序,并分析结果要求:读懂程序,写出分析结果;上机运行程序,得到运行结果,比较之。

1、#include <stdio.h>int main(){ int a[ ]={1,2,3,4,5} , i, j, s=0 ;j = 1;for ( i = 4 ; i>=0 ; i--){s = s+ a[i] * j ;j = j * 10 ;}printf(" s= %d \n" , s );return 0;}二、程序改错题1.下面程序的功能,是从键盘输入一个数组(数组长度为10),查找数组中正数的个数。

源代码如下,程序中存在错误,请将其改正。

#include <stdio.h>int main(){int a(10);/*定义数组*/int count,i;/* i循环变量 count 正数个数*/for(i=0;i<=10;i++){/*循环输入*/scanf("%d",a[i]);}count=1;for(i=0;i<=10;i++){/*查找正数*/if(a(i)>0)count++;}printf("数组中正数有:%d个\n",count);return 0;}三编写程序1.编写程序要求输入30个学生的单科成绩,输出高于平均分的成绩。

#include <stdio.h>#define N 30int main(){float score[N],sum=0,aver;int i;for(i=0;i<30;i++){scanf("%f",&score[i]);sum=sum+score[i];}aver=sum/30;printf("平均分为:%.2f\n",aver);for(i=0;i<N;i++)if(score[i]>aver)printf("%.2f ",score[i]);printf("\n");return 0;}2.编写程序:假设有13位评委参与评分工作。

计算每位歌手最终得分的方法是:去掉一个最高分和一个最低分,然后计算剩余11个分数的平均值,所得结果就是选手的最终得分。

#include<stdio.h>#define N 13int main(){int score[N],sum=0,i,high,low;for(i=0;i<N;i++){printf("请输入第%d位评委成绩:",i+1);scanf("%d",&score[i]);sum+=score[i];}high=score[0];low=score[0];for(i=0;i<N;i++){if (high<score[i]) high=score[i];if (low>score[i]) low=score[i];}printf("歌手最后得分为:%g\n",(float)(sum-high-low)/(N-2));}3. 假设给定一个书籍编号的数组(数组大小和数据自己设定),查找某本书是否在此数组中个,如果有,显示查找成功以及该书在数组中的下标,否则显示查找失败。

#include<stdio.h>#define N 5int main(){int a[N],i,flag=0,s;printf("请输入书籍编号:\n");for (i=0;i<N;i++)scanf("%d",&a[i]);printf("请输入需要查找的书籍编号:\n");scanf("%d",&s);for (i=0;i<N;i++){if(a[i]==s){ flag=1; break;}}if(flag)printf("查找成功!编号为%d的书籍的位置是%d\n",s,i+1);elseprintf("查找失败!请确认书籍编号是否正确!\n");return 0;}4. 编写程序验证冒泡法排序#include <stdio.h>int main(){ int a[11],i,j,t;printf("Input 10 numbers:\n");for(i=1;i<11;i++)scanf("%d",&a[i]);printf("\n");for(i=1;i<=9;i++)for(j=1;j<=10-i;j++)if(a[j]>a[j+1]){t=a[j]; a[j]=a[j+1]; a[j+1]=t;}printf("The sorted numbers:\n");for(i=1;i<11;i++)printf("%d ",a[i]);return 0;}5. 编写程序验证选择法排序方法一:#include <stdio.h>int main(){ int a[11],i,j,k,temp;printf("Input 10 numbers:\n");for(i=1;i<11;i++)scanf("%d",&a[i]);for(i=1;i<10;i++){ k=i;for(j=i+1;j<11;j++)if(a[j]<a[k]) k=j;if(i!=k){ temp=a[i]; a[i]=a[k]; a[k]=temp;}}printf("The sorted numbers:\n");for(i=1;i<11;i++)printf("%d ",a[i]);return 0;}方法二:#include <stdio.h>#define NUM 10 /* 参与排序的数据个数*/int main(){int data[NUM]; /* 存放参与排序的所有整数*/int i, j, minValue, temp;/* 通过键盘输入待排序的整型数列*/printf("\nEnter %d integers.", NUM);for (i=0; i<NUM; i++) {scanf("%d", &data[i]);}/* 选择排序*/for (i=0; i<NUM-1; i++) {minValue = i;for (j=i+1; j<NUM; j++) { /* 选择i~NUM-1之间的最小数值*/ if (data[j]<data[minValue])minValue = j;}if (minValue!=i) { /* 交换*/temp = data[i];data[i] = data[minValue];data[minValue] = temp;}}/* 输出排序后的结果*/printf("\nOrdering list is:\n");for (i=0; i<NUM; i++) {printf("%5d", data[i]);}return 0;}6. 编写程序验证二分查找#include <stdio.h>#define NUM 10int main( ){int value[NUM] = {12, 23, 30, 45, 48, 50, 67, 82, 91, 103}; /* 非递减整型数列*/int low, high, mid, key;printf("\nEnter a key:"); /* 输入查找的数值*/scanf("%d", &key);/* 利用二分查找在有序数列中查找key */low = 0; high = NUM-1;while (low<=high) {mid = (low+high)/2;if (value[mid]==key) break;if (value[mid]<key)low = mid+1;elsehigh = mid-1;}/* 输出查找结果*/if (low<=high)printf("\n%d is found at %d.", key, mid); /* 确认break出口*/ elseprintf("\n%d is not found.", key); /* 确认循环正常出口*/return 0;}7.将一个数组的值按逆序重新存放,例如,原来顺序为:8,10,4,23,1。

要求改为:1,23,4,10,8。

方法一#include <stdio.h>#define N 10int main(){int a[N],i,j,temp;for(i=0;i<N;i++)scanf("%d",&a[i]);for(i=0,j=N-1;i<j;i++,j--){temp=a[i];a[i]=a[j];a[j]=temp;}for(i=0;i<N;i++)printf("%d ",a[i]);printf("\n");return 0;}方法二:#include <stdio.h>#define N 10int main(){int a[N],i,temp;for(i=0;i<N;i++)scanf("%d",&a[i]);for(i=0;i<N/2;i++){temp=a[i];a[i]=a[N-i-1];/*第一个和最后一个交换,第二个和倒数第二个交换,......一直到N/2的时候,也就是数组的一半的时候*/a[N-i-1]=temp;}for(i=0;i<N;i++)printf("%d ",a[i]);printf("\n");return 0;}8. 输入n×n阶,编程计算其两条对角线上各元素之和。

相关主题