☆C语言实验五(第七章一维数组:排序综合题)

合集下载

一维数组的应用举例:排序问题

一维数组的应用举例:排序问题
10
C语言程序设计
C语言程序设计
一维数组的应用举第例五:排章序问数题 组
数据的排序就是将一批数据由小大到(升序)或由 大到小(降序)进行排列。常用的有选择法、冒泡法。 1.选择法排序
算法 (升序 )
( 设有n个数,存放在数组A(1)…..A(n)中)
1)第1遍:从中选出最小的数,与第 1个数交换 位置;
(演示)
753 8 91 6 4
后面,经n-1次两两相邻比较后,最大的数已交换
到最后一个位置。
演示
2)第 2 趟:将前n-1个数(最大的数已在最后)按 上法比较,经n-2次两两相邻比较后得次大的数; 3)依次类推,n个数共进行n-1趟比较,
在第j趟中要进行n-j次两两比较。
7
一维数组的应用举例:排序问题 冒泡法排序算法的流程图:
scanf("%d",&a[i]);
for(i=0;i<N-1;i++)
/*第i遍*/
for(j=0;j<N-i-1;j++)
/*相邻2个数比较*/
if(a[j]>a[j+1])
/*如果a[j]>a[j+1]*/
{ t=a[j]; a[j]=a[j+1]; a[j+1]=t; }
/*交换a[j]和a[j+1]*/
printf("input %d numbers:\n",N);
for(i=0;i<N;i++)
scanf("%d",&a[i]); for(i=0;i<N-1;i++)
ቤተ መጻሕፍቲ ባይዱ

一维数组练习题

一维数组练习题

一维数组练习题题目一:数组元素反转描述:给定一个整数数组,将数组中的元素反转并输出。

要求:1. 输入一个整数n,表示数组的长度(1 ≤ n ≤ 100);2. 输入n个整数构成的数组;3. 输出数组中的元素,按照逆序输出。

解答:题目二:查找数组中的最大值和最小值描述:给定一个整数数组,找出数组中的最大值和最小值,并输出。

要求:1. 输入一个整数n,表示数组的长度(1 ≤ n ≤ 100);2. 输入n个整数构成的数组;3. 输出数组中的最大值和最小值。

解答:题目三:计算数组的和与平均值描述:给定一个整数数组,计算数组中所有元素的和及平均值,并输出结果。

要求:1. 输入一个整数n,表示数组的长度(1 ≤ n ≤ 100);2. 输入n个整数构成的数组;3. 输出数组中所有元素的和及平均值,结果保留两位小数。

解答:题目四:数组去重描述:给定一个整数数组,去除数组中的重复元素,并输出结果。

要求:1. 输入一个整数n,表示数组的长度(1 ≤ n ≤ 100);2. 输入n个整数构成的数组;3. 输出去除重复元素后的数组。

解答:题目五:数组元素排序描述:给定一个整数数组,对数组中的元素进行排序,并输出结果。

要求:1. 输入一个整数n,表示数组的长度(1 ≤ n ≤ 100);2. 输入n个整数构成的数组;3. 输出排序后的数组。

解答:题目六:数组元素查找描述:给定一个整数数组和一个目标值,判断目标值是否存在于数组中,并输出结果。

要求:1. 输入一个整数n,表示数组的长度(1 ≤ n ≤ 100);2. 输入n个整数构成的数组;3. 输入一个整数作为目标值;4. 若目标值存在于数组中,则输出"目标值存在于数组中",否则输出"目标值不存在于数组中"。

解答:以上为一维数组练习题的题目描述及解答,请根据题目所需完成相应的练习。

C语言实验__一维数组

C语言实验__一维数组

实验6 一维数组实验要求:使用Visual C++ 6.0开发环境,完成以下习题。

1. (此题可不使用数组)输出1~100之间的不能被7整除的数。

(要求使用continue语句,如果其能被7整除则continue)。

源程序保存为6-1.c。

运行效果截图保存为6-1p.jpg。

2. 对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出。

源程序保存为6-2.c。

运行效果截图保存为6-2p.jpg。

3. 定义一个100个元素的数组,依次赋值为1 ~ 100。

先输出其中能被3整除的数。

再输出其中能被5整除的数。

(注意数组的下标是从0开始。

)源程序保存为6-3.c。

运行效果截图保存为6-3p.jpg。

4. 让用户输入学生的人数n,然后输入这n个学生的语文成绩,保存在数组中。

然后分别计算输出:(1)统计语文成绩平均分。

(2)不及格的学生序号及成绩、并统计不及格人数。

(3)最高分的成绩及最高分的学生的序号。

源程序保存为6-4.c。

运行效果截图保存为6-4p.jpg。

5. 定义一个数组A存放6个学生的高数成绩,定义一个数组B存放这6个学生的英语成绩, 再定义一个数组C存放这6个学生的C++成绩。

在输入时,要求逐个学生的三门课成绩输入(即先输入第1个学生的三门课成绩,再输入第2个学生的三门课成绩,以此类推)。

求这6个同学三科的总分存放在数组D中,并输出。

源程序保存为6-5.c。

运行效果截图保存为6-5p.jpg。

6. 编程实现:简单版成绩管理系统1。

程序首先显示菜单,让用户选择1则添加一个学生的的记录,选择2则查看一个学生的记录,选择3则修改一个学生的记录,选择4则浏览所有学生记录。

每个学生记录由其学号、高数成绩、英语成绩、C++成绩组成。

(提示:定义一个100个元素的数组,存放学生的学号;定义一个100个元素的数组存放高数成绩,定义一个100个元素的数组存放英语成绩;定义一个100个元素的数组存放C++成绩;定义一个变量记录当前已经总共添加了多少个学生)当用户选择1之后,让用户输入要添加的学生的学号、高数成绩、英语成绩、C++成绩。

C上机作业5(数组)

C上机作业5(数组)

C上机作业5:数组
一、编程题
1、(一维数组)输入n个整数,用一维数组存放,然后将这n个整数逆序存放并输出。

提示:假设数组a[4]中4个元素a[0]~a[3]存放的值是:1,2,3,4,则逆序存放就是a[0]~a[3]存放的值是:4,3,2,1
2、(一维数组)将1-200中所有11的倍数存放到一个一维数组中,并输出。

3、(一维数组)有n个已经按由小到大排好序的整数,再输入一个整数,将其插入到这批数据中,要求插入该元素后仍然按由小到大的顺序排列。

4、(二维数组)求一个n*n矩阵二条对角线元素之和。

5、(一维字符数组)输入两个任意的字符串,编写程序实现两个字符串的链接。

(不能使用strcat()函数)
6、(一维字符数组)从键盘输入一个不超过30个字符的字符串,存储到一个字符数组中。

将下标为奇数位置上的字符按顺序复制到另外一个字符数组中并输出。

如:输入“abcdefg”,则输出”bdf”。

7、(一维字符数组,选做,可不交)在一个指定的字符串中删除指定的字符,并输出该字符串。

要求:通过习题练习
熟悉一维数组/二维数组/字符数组的使用
掌握使用数组编程基本方法
说明:
1、交作业位置:FTP://192.168.9.211
2014春学生作业/C18(C21,C26)/作业5
2、作业文件名:学号(10位)+题号,如2011109517_1.cpp,
3、特别强调:只交扩展名为.cpp的文件.
二、教材习题(此作业均有答案,不交,但要练习)
P120 单项选择题 P123 编程题 1,2,6,8,12。

一维数组和函数综合编程练习

一维数组和函数综合编程练习

实验七:一维数组和函数综合编程练习一:实验目的:1.掌握定义函数的方法;2.掌握函数实参与形参的对应关系,以及值传递的方式;3.掌握函数的嵌套调用和递归调用的方法;4.掌握全局变量和局部变量、动态变量、静态变量的概念和使用方法;5.掌握一维数组的定义、赋值和输入输出的方法;6掌握一维数组的有关算法(特别是排序算法);二:实验内容及要求:学生成绩统计从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:(1)统计不及格人数并打印不及格学生名单;(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单;(3)统计各分数段的学生人数及所占的百分比。

【思考题】在编程实现对数据的统计任务时,需要注意什么问题?三:程序源代码:#include <stdio.h>#define ARR_SIZE 30int ReadScore(long num[], float score[]);int GetFail(long num[], float score[], int n);float GetAver(float score[], int n);int GetAboveAver(long num[], float score[], int n);void GetDetail(float score[], int n);main(){int n, fail, aboveAver;float score[ARR_SIZE];long num[ARR_SIZE];printf("Please enter num and score until score<0:\n");n = ReadScore(num, score);printf("Total students:%d\n", n);fail = GetFail(num, score, n);printf("Fail students = %d\n",fail);aboveAver = GetAboveAver(num, score, n);printf("Above aver students = %d\n", aboveAver);GetDetail(score, n);}int ReadScore(long num[], float score[]){int i=0;scanf("%ld%f",&num[i],&score[i]);while(score[i]>=0){i++;scanf("%ld%f",&num[i],&score[i]);}return i;}int GetFail(long num[], float score[], int n){int i,j=0;for(i=0;i<n;i++){if(score[i]<60){printf("%ld\t%.0f\n",num[i],score[i]);j++;}}return j;}float GetAver(float score[], int n){int i,j;float sum=0,aver;for(i=0;i<n;i++){sum=sum+score[i];}aver=sum/n;return aver;}int GetAboveAver(long num[], float score[], int n){int i,j=0;for(i=0;i<n;i++){if(GetAver(score,n)<=score[i]){printf("%ld\t%.0f\n",num[i],score[i]);j++;}}return j;}void GetDetail(float score[], int n){int i,Acount=0,Bcount=0,Ccount=0,Dcount=0,Ecount=0;for(i=0;i<n;i++){switch((int)score[i]/10){case 10:case 9:Acount++;break;case 8:Bcount++;break;case 7:Ccount++;break;case 6:Dcount++;break;case 5:case 4:case 3:case 2:case 1:case 0:Ecount++;break;}printf("90-100:\t%d\t%.2f%%\n",Acount,100*(float)Acount/n);printf("80-89:\t%d\t%.2f%%\n",Bcount,100*(float)Bcount/n);printf("70-79:\t%d\t%.2f%%\n",Ccount,100*(float)Ccount/n);printf("60-69:\t%d\t%.2f%%\n",Dcount,100*(float)Dcount/n);printf("Failed:\t%d\t%.2f%%\n",Ecount,100*(float)Ecount/n); }四:运行结果、分析与讨论:Please enter num and score until score<0:09610110 9809610111 7809610112 9609610113 7509610114 6509610115 6909610116 7909610117 8709610118 8609610119 7809610120 4509610121 5809610122 -8Total students:12 9610120 459610121 58Fail students = 2 9610110 989610111 789610112 969610116 799610117 879610118 869610119 78Above aver students = 7 90-100: 2 16.67% 80-89: 2 16.67% 70-79: 4 33.33% 60-69: 2 16.67% Failed: 2 16.67% 请按任意键继续. . . 这次实验主总得来说是有些难度,特别是对数组的定义与赋值还有函数的嵌套调用和递归调用。

C语言 第七章 数组期末测试习题与答案

C语言 第七章 数组期末测试习题与答案

C语言第七章数组期末测试习题与答案1、以下对一维整型数组a的正确说明是 ( )。

A.#define SIZE 10int a[SIZE];B.int a(10);C.int n=10,a[n];D.int n; scanf(“%d”,&n); int a[n];参考答案:A2、以下能对一维数组a进行正确初始化的语句是 ( )。

A.int a[10]={ };B.int a[10]={10*1};C.int a[10]=(0,0,0,0,0);D.int a[ ]={0};参考答案:B3、不是给数组的第一个元素赋值的语句是 ( )。

A.a[1]=1;B.int a[2]={1,0};C.int a[2];scanf (“%d”,&a[0]);D.int a[2]={1};参考答案:A4、下面程序的运行结果是 ( )。

main(){int a[6],i;for(i=1;i<6;i++){ a[i]=6*(i-2+4*(i>3))%5;printf("%2d",a[i]);}}A.-1 0 4 0 3B.-1 0 1 4 3C.-1 0 1 4 2D.-1 0 1 1 2参考答案:D5、下列定义正确的是 ( )。

A.int b[3]={2,5}B.int 4e[4]C. static int a[2]={1,2,3,4,5}D.int a(10)参考答案:A6、设有char str[10],下列语句正确的是 ( )。

A.printf("%s",str);B.scanf("%s",&str);C.printf("%c",str);D.printf("%s",str[0]);参考答案:B7、下列说法正确的是 ( )。

A.在C语言中,定义了一个数组后,就确定了它所容纳的具有相同数据类型元素的个数B.在C语言中,数组元素的数据类型可以不一致C.在C语言中,数组元素的个数可以不确定,允许随机变动D.在C语言中,可以使用动态内存分配技术定义元素个数可变的数组参考答案:D8、假设array是一个有10个元素的整型数组,则下列写法中正确的是A.array[-1]=0;B.array[0]='a';C.array[10]=0;D.array[0]=0;参考答案:D9、有一数组如下定义:int a[6]={1,2,3,4,5};执行for (i=0; i<6;i++) printf ("%d ",a[i]);后输出的结果是_____( )。

C语言程序设计:第7章 一维数组

C语言程序设计:第7章 一维数组

int arr[ARR_SIZE];
{
int i = 0;
int i = 0;
float aver = 0;
float ave = 0;
for(i=0;i<ARR_SIZE;i++)
for(i=0;i<len;i++)
{
{
printf("请输入第%d个整数:",i+1);
//把数组中的所有数据加起来
{
printf("第%d 个数是:%d\n", i + 1, a[i]);
}
return 0; }
19
本次课议题
❖一维数组的定义 ❖一维数组的初始化 ❖一维数组的存储 ❖一维数组的引用 ❖一维数组作为函数参数
20
一维数组作为函数参数
1>数组作为函数参数可以理解为形参数组和实参数组共享
一块内存空间,形参数组的长度可以省略,编译器不会检查。
注意:
如有数组int arr[N];则数组的下标为:0 ~ N-1,
即最大的下标为数组长度-1。
17
一维数组的引用(cont...)
课堂练习:编写程序从键盘上接收10个整数存到一个一维数组中,之后
在屏幕上逐个输出这10个数。
#include <stdio.h>
#define ARR_SIZE 10
scanf("%d",&arr[i]);
ave += a[i];
}
}
aver = avg(arr,ARR_SIZE);
//平均值=总值/总个数;
printf("平均值是:%f\n",aver);

c语言实验报告五 一维数组

c语言实验报告五 一维数组

《C程序设计》课程实验报告学院:班级:姓名:学号:实验设备:计算机1台实验日期:2011年3月1日实验项目名称一维数组实验目的掌握一维数组的定义、初始化,以及一维数组元素的下标法引用。

实验要求:掌握一维数组的定义、初始化,以及一维数组元素的下标法引用,并能编写简单程序。

实验内容(包括步骤):1.数组a中存放10个非0整数,编写程序,将数组a中的所有正数存放在数组的前面,负数存放在数组的后面。

要求:(1)数组元素值从键盘输入。

(2)用下标法。

2.将数组a中的10个元素后移m位,移出的m位顺序存放在数组的前位。

要求:(1)数组元素值在程序中初始化。

(2)m的值从键盘输入。

(3)用下标法。

调试与结果测试:代码注释:5-1#include<stdio.h>int main(){int a[10];int i;for(i=0;i<10;i++)scanf("%d",&a[i]);printf("\n");for(i=0;i<10;i++)if(a[i]>0)printf(" %d",a[i]);for(i=0;i<10;i++)if(a[i]<0)printf(" %d",a[i]);printf("\n");return 0;5-2#include<stdio.h>int main(){ int a[10]={1,2,3,4,5,6,7,8,9,10};int m,n,r,i;printf("please input a number:\n");scanf("%d",&m);for(n=9;n>=0;n--)a[n+m]=a[n];for(r=m-1;r>=0;r--)a[r]=a[10+r];for(i=0;i<10;i++)printf("%d ",a[i]); printf("\n");return 0;}――――――――――――以下内容为教师填写―――――――――――――――教师评阅:成绩:良2011年月日。

一维数组的排序、插入

一维数组的排序、插入

项目实训一实训内容:1、定义一个数组a[11],用以存放学生的成绩。

2、从键盘输入10个学生成绩3、采用冒泡法,将学生成绩按照从高到低进行排序4、再输入一个学生的成绩,将此成绩按照排序规律插入原学生成绩数组5、将排好序的成绩单进行反序存放,即原来是从高到低,现在改为从低到高排列。

#include<stdio.h>int main(void){int arr[11];int i,j;printf("请输入10个学生的成绩:");for(i=0;i<10;i++){scanf("%d",&arr[i]);}for(i=10;i>0;i--)//冒泡排序;{for(j=0;j<i-1;j++){if(arr[j]<arr[j+1])//从大到小排;{int tmp=arr[j];// 交换数值;arr[j]=arr[j+1];arr[j+1]=tmp;}}}for(i=0;i<10;i++)//打印数组:成绩{printf("%d\t",arr[i]);}printf("\n");// 再输入一个学生的成绩;int a;printf("请再输入一个学生的成绩:");scanf("%d",&a);for(i=0;i<=10;i++){if(a>arr[i]) //数值从大到小,找到数组中比a小的;{int num_tag;num_tag=i;int t=10;while(i<t){arr[t]=arr[t-1]; // 第i位之后的数组向后,整体移一位t--;}arr[num_tag]=a;break;}}for(i=0;i<=10;i++){printf("%d\t",arr[i]);}printf("\n");for(i=11;i>0;i--)//从小到大排序{for(j=0;j<i-1;j++){if(arr[j]>arr[j+1]){int tmp=arr[j];arr[j]=arr[j+1];arr[j+1]=tmp;}}}for(i=0;i<=10;i++)//打印数组:成绩{printf("%d\t",arr[i]);}printf("\n");}结果:请输入10个学生的成绩:12 32 34 23 44 54 56 67 78 89 89 78 67 56 54 44 34 32 23 12请再输入一个学生的成绩:4089 78 67 56 54 44 40 34 32 23 12从小到大排的成绩:12 23 32 34 40 44 54 56 67 78 89我的疑点:for(i=0;i<=10;i++)//11次{if(a>arr[i]) //数值从大到小,找到数组中比a小的;{int num_tag;num_tag=i;int t=10;while(i<t){arr[t]=arr[t-1]; //第i位之后的数组向后,整体移一位t--;}arr[num_tag]=a;break;}}如:89 78 67 56 54 44 34 32 23 12假设添加70从大到小排好后(数组arr[]简称a[ ])if(a>arr[i])70>a[2] ;int t=10;while(i<t)//条件:2<10;{arr[t]=arr[t-1]; //第2位之后的数组a[2]-a[10]向后,整体移一位,将原// 来的a[2]赋给新加的数t--;}a[10]=a[9];a[9]=a[8];a[8]=a[7];…......... ….........a[3]=a[2]; a[2]赋值给a[3];最后:将a赋值给a[2]; 即a[2]=a;。

实验五一维数组

实验五一维数组
(3)在确定a[i](i=0,1,…,n-2)时,先将a[i]本身看成最小,即令k=i,并将a[k]与后面的元素a[j](j=i+1, i+2,…, n-1)一一比较,如果a[j]< a[k],则更新k的值:k =j。找出对应于下标i的最小元素a[k]后,交换a[i]与a[k]。
(4)上述排序算法可用下列流程图表示
二.实验内容
【实验题1】程序改错:源程序用数组求Fibonacci数列前20项,但在带标记的代码行存在错误,请改正错误。源程序如下:
#include<stdio.h>
voidmain()
{int i, fib[20];
fib[1]= fib[2]= 1;//错误1
for(i=3; i<=20; i++)//错误2
【实验题4】程序填空:输入整数x,要求在给定的数组a中查找x,若在a中找到了x,删除之;如果x在数组a中不出现,输出提示信息“Not Found”.
提示:要删除数组元素a[k],将a[k+1]…a[n-1]各向前移动一位:a[i-1]= a[i] (i= k,…, n-1)
源程序:
#include<stdio.h>
n2时先将ai本身看成最小即令ki并将ak与后面的元素ajji1i2n1一一比较如果ajak则更新k找出对应于下标i的最小元素ak后交换ai与ak
上机实验
一.目的要求
1.掌握一维数组的基本概念,定义和初始化方法;
2.掌握一维数组的基本操作,如输入、输出、引用数组元素;
3.掌握与数组有关的基本算法,如寻找最大/最小值、排序等。
如果要求程序实现数组元素的顺时针转动,那么Line 6、Line 7、Line 8、Line 9应该如何修改?

实验5 数组——一维数组

实验5 数组——一维数组

淮海工学院计算机科学系实验报告书课程名:《C语言程序设计A 》题目:实验5 数组——一维数组班级:软嵌151学号:2015123349姓名:陈正宁1、实验内容或题目(1)从键盘输入10个整数,输出去掉其中最大的两个数,求剩余数据的平均值。

(2)从键盘输入10个整数,分别用选择和冒泡排序对这10个数进行排序。

(4)输入一个整数,在一个有序数列中使用折半查找法查找是否存在该整数。

(5)有a,b,c,d和e共5个不同的球,准备分给甲、乙、丙、丁和戊5个小朋友。

已知小朋友甲不用a球,小朋友乙不要b球,小朋友丙不用c求。

编写程序求共有多少种不同的分法。

2、实验目的与要求(1)掌握一维数组的定义和输入输出的方法。

(2)掌握与数组有关的算法,如排序、查找。

3、实验步骤与源程序⑴实验步骤(1)、(2)、选择排序:冒泡排序:(4)、(5)、⑵源代码(1)、#include<stdio.h>void main(){int a[10];int i,k,j,temp;double p,sum=0;printf("请输入10个整数:\n");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++)if(a[j]<a[k])k=j;if(k!=i){temp=a[i];a[i]=a[k];a[k]=temp;}}printf("去掉其中最大的两个数后余下的整数:\n");for(i=0;i<8;i++){sum+=a[i];printf("%d ",a[i]);}p=sum/8;printf("\n");printf("剩余数据的平均值为:\n%lf\n",p);}(2)、#include<stdio.h>void main(){printf("下面使用选择排序:\n\n");int a[10];int i,j,t,k;printf("请输入10个待排序的整数:\n");for(i=0;i<9;i++)scanf("%d",&a[i]);printf("\n");for(i=0;i<10;i++){k=i;for(j=i+1;j<10;j++)if(a[j]>a[k])k=j;if(k!=i){t=a[i];a[i]=a[k];a[k]=t;}}printf("排序后的整数为:\n");for(i=0;i<10;i++)printf("%d ",a[i]);printf("\n");}#include<stdio.h>void main(){printf("下面使用冒泡排序:\n\n");int a[10];int i,j,t;printf("请输入10个待排序的整数:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);printf("\n");for(j=0;j<9;j++)for(i=0;i<9-j;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("排序后的整数为:\n");for(i=0;i<10;i++)printf("%d ",a[i]);printf("\n");}(4)、#include<stdio.h>void main(){int a[10]={0,1,2,3,4,5,6,7,8,9};int low=0,high=9;int mid,k;printf("请输入您想查找的数k:");scanf("%d",&k);while(low<=high){mid=(low+high)/2;if(k==a[mid])break;if(k<a[mid])high=mid-1;elselow=mid+1;}printf("\n");if(low<=high)printf("查到这个数!\n\n您想查找的数%d 是数组的第%d个元素\n",k,(low+high)/2+1);elseprintf("查无此数!\n");}(5)、#include<stdio.h>void main(){ int a,b,c,d,e,count=0;int x[6],i;for(i=1;i<=5;i++)x[i]=1;for(a=1;a<=5;a++)if(x[a]==1){ x[a]=0;for(b=1;b<=5;b++)if(x[b]){ x[b]=0;for(c=1;c<=5;c++)if(x[c]){ x[c]=0;for(d=1;d<=5;d++)if(x[d]){ x[d]=0;for(e=1;e<=5;e++)if(x[e]){ x[e]=0;if(a!=1&&b!=2&&c!=3)count++;x[e]=1;}x[d]=1;}x[c]=1;}x[b]=1;}x[a]=1;}printf("有%d种不同的分法。

C语言一维数组排序

C语言一维数组排序

C语⾔⼀维数组排序交换排序 1.冒泡排序 算法思想 1.将所有元素放⼊数组中; 2.从第⼀个元素开始,依次将相邻的两个元素⽐较,若前者⼤于后者则交换; 3.重复第2步,直到没有交换为⽌。

程序实现void sort(int *a, int n){int i, j, t, ok;for(i=0; i<n-1; i++){ok=1;for(j=0; j<n-1-i; j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;ok=0;}if(ok)break;}}void sort(int a[], int n){int i, t, ok;if(n==1)reurn;else{for(i=0;i<n-1;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;ok=0;}if(ok)return;elsesort(a,n-1);}} 2.交换排序的另⼀种⽅法void sort(int temp_array[ ],int n){int i,j,t;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(temp_array[i]> temp_array[j]){t=temp_array[i];temp_array[i]=temp_array[j];temp_array[j]=t;}}选择排序 算法思想 记住每趟⽐较中最⼩的数据下标,最后将最⼩元素与起始元素交换,这样每趟只交换⼀次。

程序实现void sort(int temp_array[ ],int n){int i,j,point,t;for(i=0;i<n-1;i++){point=i;for(j=i+1;j<n;j++)if(temp_array[point]> temp_array[j]) point=j;if(point!=i){t=temp_array[point];temp_array[point]=temp_array[i];temp_array [i]=t;}}}插⼊排序 算法思想 1.新建⼀个空列表,⽤于保存有序数列; 2.从原数列取出⼀个数插⼊有序列表中,使其仍保持有序状态; 3.重复第2步,直⾄原数列为空。

实验5数组--习题及答案

实验5数组--习题及答案

实验5 数组班级:学号:姓名:日期:一、实验目的(1)掌握一维数组和二维数组的定义、赋值和输入输出方法;(2)掌握字符数组和字符串函数的使用;(3)掌握与数组有关的算法(特别是排序算法)。

二、实验内容1.阅读下面程序,写出程序运行结果,并且上机进行验证。

(1) #include "stdio.h"void main(){int i,n[4]={0,0,0,0};for(i=1;i<4;i++){if (i==3) break;n[i]=n[i-1]+1;}printf("n[i-1]=%d n[i]=%d\n",n[i-1],n[i]);}(2)#include "stdio.h"void main(){char ch[]={'0','1','2','3','4','5','6','7','8','9'};int i=0,m=2,r,x=42; char b[80];while(x){r=x%m; x/=m;b[i++]=ch[r];}for(--i;i>=0;i--)printf("%c",b[i]);printf("\n");}(3)#include "stdio.h"void main(){int a[][3]={9,7,5,3,1,2,4,6,8};int i,j,s1=0,s2=0;for(i=0;i<3;i++)for(j=0;j<3;j++){if(i==j) s1=s1+a[i][j];if(i+j==2) s2=s2+a[i][j];}printf("s1=%d s2=%d",s1,s2);}(4)#include "stdio.h"void main(){int r[5]={1,2,3,4,5};int i,j,a[5][5];for(i=0;i<=4;i++){ for(j=i;j<=4;j++)a[i][j]=r[j-i];for(j=0;j<i;j++)a[i][j]=r[i-j];}for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%2d",a[i][j]);printf("\n");}}2.程序填空(根据题意在空白处填入适当的内容,使程序变得完整。

实验五 数组——一维数组

实验五 数组——一维数组

淮海工学院计算机科学系实验报告书课程名:《 C语言程序设计教程》题目:实验五数组——一维数组班级:学号:姓名:1、实验内容或题目(1)例:编程从键盘输入一个班C语言的成绩,统计其最高分、最低分、平均分及各分数段的人数及所占百分比,并输出统计结果。

[0,60)不及格 [60,75)及格 [75,90)良好 [90,100)优秀要求格式如下:(2)编写一个程序,用冒泡法对数组中的10个数进行排序,尽量用最少的比较次数。

2、实验目的与要求1、目的:(1)进一步学习程序设计的方法和步骤;(2)掌握循环结构程序设计与数组的结合;3、实验步骤与源程序⑴实验步骤1.建立工程,添加C++源文件,编写程序。

2.调试修改语法错误。

3.编译,链接生成可执行程序。

4.运行程序,检查试验结果。

⑵源代码(一)#include<stdio.h>void main(){int score[10],i;float yx=0,lh=0,jg=0,bjg=0,aver=0;int max=0,min=999,maxn,minn;printf("请输入10位学生的成绩:");for(i=0;i<=9;i++){scanf("%d",&score[i]);}for(i=0;i<=9;i++){if(score[i]>max){max=score[i];maxn=i;}if(score[i]<min){min=score[i];minn=i;}aver+=score[i];if(score[i]<=60)bjg=bjg+1;else if(score[i]<75)jg=jg+1;else if(score[i]<90)lh=lh+1;else yx=yx+1;}aver/=10;printf("最高分者:%d\n",score[maxn]);printf("最低分者:%d\n",score[minn]);printf("平均分为%.2f\n",aver);printf("优秀%.0f人,占比为%.0f%%\n",yx,yx*10);printf("良好%.0f人,占比为%.0f%%\n",lh,lh*10);printf("及格%.0f人,占比为%.0f%%\n",jg,jg*10);printf("不及格%.0f人,占比为%.0f%%\n",bjg,bjg*10); }法二#include<stdio.h>void main(){int i,a[10],max=0,min=100,n1=0,n2=0,n3=0,n4=0;float z=0.0;printf("请输入10位学生的成绩:");for(i=0;i<=9;i++)scanf("%d",&a[i]);for(i=0;i<=9;i++){if(a[i]>max) max=a[i];if(a[i]<min) min=a[i];}printf("最高分者:%d\n",max);printf("最低分:%d\n",min);for(i=0;i<=9;i++){z=z+a[i];}printf("平均分为%f\n",z/10);for(i=0;i<=9;i++){if(a[i]>=90&&a[i]<100) n1++;if(a[i]>=75&&a[i]<90) n2++;if(a[i]>=60&&a[i]<75) n3++;if(a[i]<60) n4++;}printf("优秀%d人,占比为%d%%\n",n1,n1*10);printf("良好%d人,占比为%d%%\n",n2,n2*10);printf("及格%d人,占比为%d%%\n",n3,n3*10);printf("不及格%d人,占比为%d%%\n",n4,n4*10); }(二)#include<stdio.h>void main(){int r[]={3,5,4,2,1,7,8,10,9,6};int i,j,tmp,exchange;printf("排序前:");for(i=0;i<10;i++){printf("%d",r[i]);}printf("\n");for(i=0;i<9;i++){for(j=8;j>=i;j--)if(r[j+1]<r[j]){tmp=r[j+1];r[j+1]=r[j];r[j]=tmp;}}printf("排序后:");for(i=0;i<10;i++){printf("%d",r[i]);}printf("\n");}4、测试数据与实验结果(可以抓图粘贴)5、结果分析与实验体会现在往后需要敲打的代码越来越多,很容易出错,要注意不能丢括号,分号等,这次学习了一堆数组,冒泡法,对c语言也越来越熟悉了,没了刚开始学的茫然。

答案解析。第七章

答案解析。第七章

第七章数组一、选择题1答案:B分析:此题考察一维数组的定义,一维数组的说明中,下标必须为正的整型常量,不能为变量,在一维数组的初始化中,指出在单纯的定义时不能省略数组的长度。

2答案:B分析:首先i=0时,判断i++〈7 成立,进入循环体,但此时i=1,p[1]=12不满足if语句,不执行j+=p[i]。

按照此方法,得到j=p[2]+p[4]+p[6]=45,即B正确。

3答案:D分析:首先i=0<7&&p[0]%2!=0,满足循环条件,执行k=k+p[0],即k=11, 然后执行i++,再进行判断,满足循环条件,k=11+p[1],所以k=24,执行i++,i=2,,再进行判断,此时不满足循环条件,循环结束,输出k值,为24。

4答案:A分析:此题主要考察循环嵌套,第一个循环体执行完是将x[0],x[1],x[2],x[3],进行从大到小排序,第二个循环体执行完是将x[4],x[5],x[6],x[7]进行从小到大排序。

5答案:B分析:此题考察二维数组的定义,单纯定义二维数组时,行和列都不能缺省。

在初始化过程中,列不能缺省,赋值的行数和列数不能超过数组的行数和列数。

6答案:D分析:同上题分析一样。

7答案:D分析:同上。

8答案:C分析:此题分别输出m[2][0],m[2][1],m[2][2]。

9答案:A分析:此题考察在for循环后,i=0,i=1时,执行if语句,使得a[1][0],a[1][1] 的值分别减1,而当i=2时,执行else语句,a[1][2]=1。

因此输出a[0][1]+a[1][1] +a[1][2]=2+4+1=7;10答案:B分析:此题考察for循环,计算aa[0][1],aa[1][1],aa[2][2],aa[3][1]的和,即为19。

11答案:C分析:由于自增加运算符(++)的优先级别高于取地址运算符(&),所以选项C无法表示aa[1]的地址,其他三个选项都可以。

C实验五_精品文档

C实验五_精品文档

实验五 一维数组和二维数组一、实验目的(1)熟练掌握一维、二维数组定义和数组元素引用, 并熟练运用数组解决实际问题。

(2)了解数组在内存中的存储方式。

二、实验内容1. 数组循环右移(C5_1.cpp )已知有n 个数组元素的一维数组a[n], 将数组a 各元素循环右移1个位置, 最后一个元素存到首位。

【输入】输入2行数据, 第一行是一个整数n, 为数组的长度。

第二行有n 个整数, 为数组元素。

【输出】输出一行, 包括n 个整数, 循环右移后的数组, 整数之间用空格隔开。

【输入输出样例1】2. 木材干燥率的计算(C5_2.CPP )输入n 批木材的干燥率 , 试计算平均含水率 和含水率的标准差s :22221)(....)()(w w w w w w s n -++-+-=。

【输入】输入2行数据, 第1行有1个整数表示木材的批数n ;第2行有n 个整数表示数组w中的各个含水率(%), 整数之间用空格隔开。

【输出】输出包含2个浮点数, 即平均含水率(%)和标准差, 要求小数点后保留2位精度。

3. 二维数组最大值求解(C5_3.cpp)输入维度为m*n的二维数组a[m][n], 输出a数组元素中的最大值。

【输入】输入m+1行数据, 第一行为两个整数, 用空格间隔, 为数组的行长和列长, 剩下的m 行为数组元素值, 每行n列, 数据间用空格间隔。

【输出】输出一个整数, 为该二维数组中的最大值。

4. 数组合并(C5_4.cpp)已知有两个排好序(升序)的一维数组a[10]和b[10], 现要求将它们合并成一个新的数组c[20], 仍保持有序。

【输入】输入2行数据, 每行都是10个升序排列的整数, 整数之间用空格隔开。

【输出】输出1行, 包含20个整数, 整数间用空格间隔。

【输入输出样例1】a,b都是整型数组。

C语言实验报告实验五参考答案

C语言实验报告实验五参考答案

C语言实验报告实验五参考答案实验五一维数值数组(参考答案)1、设计程序sy5-1.c,计算n门课程的平均分。

例如:若有5门课程的成绩是:90.5.72.80.61.5.55,则平均分是:71.80.算法分析:先求n门课的成绩总和,(累加求和),再用累和除以课程数。

参考答案:includevoid main()double score[30]。

sum=0,aver;int n,i;printf("Inputn:");scanf("%d",&n);printf("请依次输入%d门课程的成绩",n);for(i=0;i<n;i++)scanf("%lf",&score[i]);sum=sum+score[i];aver=sum/n;printf( "\nAverage scoreis: %5.2f\n"。

aver);运行结果:2、设计步伐sy5-2.c,对输入的10个整数按倒序寄存后输出成效。

算法阐发:利用“半数交流”算法,最前面的元素和末了面的元素交流,逐步向中央挨近。

可利用两个下标变量i和XXX。

参考答案:includeint main()int a[10]={1,2,3,4,5,6,7,8,9,10};int i,j,t;for( i=0,j=9.i<j。

i++,j--)//逐一向中,交换。

直到已没有元素没交换t=a[i]。

a[i]=a[j]。

a[j]=t;}// a[i]-数组前端的数,a[j]-数组后端的数printf("交流后数组元素是:");for(i=0;i<10;i++)printf("%5d",a[i]);//%5d,5透露表现宽度printf("\n");//输出完所有的数后换行return 0;运行结果:3、设计程序sy5-3.c,输入10个整数,找出其中的最大数及其所在的下标。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

【2008春上机编程题_C07】
【解题思路】:在理解上述要求基础上,只用一个主函数完成:找出Fibonacci 数列的前40个数,存放在一维数组m[40](声明长整型变量long)中,然后找出其中所有素数,存放在一维数组n[40]中(提示:n数组要求对素数总数以k计数),再选用一种排序法对一维数b进行降序排列,最后按长整型量以“%9ld”
形式、一行五个数据将满足条件的数据输出到屏幕:
【提示】:排序方法有“简单起泡法”;“双向起泡法”;“选择法”;所以要求学生在调试上述程序基础上按班组选取排序方法,编写本次作业。

(约定:起始Fibonacci数列存放在一维数组m[40]中,挑选出的素数存放在一维数组n[40]中,最后以升序排列的数组n输出,满足素数的个数设定为k)。

参考程序:
简单起泡排序法:(参考教科书P134)
{
双向起泡排序法:(参考上机指导书P54例、2010春完善程序题第15题或软件第七章填空第15题)原理为“下列程序的功能是对n数组n[0]~a[k-1]中存储的k 个整数从大到小排序。

排序算法是:第一趟通过比较将k个整数中的最小值放在a[k-1]中,最大值放在a[0]中;第二趟通过比较将k个整数中的次小值放在a[k-2]中,次大值放在a[1]中,………,依次类推,直到待排序序列为递减序列。


选择排序法:(参考上机指导书P50例)
课堂练习空余时间或课后业余时间练习知识题
【软件第七章】
选择:
1,下列一维数组的声明中,正确的是____(22)_____。

,
A. int a[];
B. int n=10,a[n];
C. int a[10+1]={0};
D. int a[3]={1,2,3,4};
5.以下程序运行后的输出结果是_____(25)___。

main()
{ char a[7]="a0\0a0\0";int i,j;
i=sizeof(a);j=strlen(a);
printf("%d %d",i,j);
}
2 B.7 2 C.7 5 2
8.以下声明中错误的是_____(27)_____。

A. int a[2];
B. int a[]={0,1};
C. int a[3]=0;
D. nt a[3][4]={0};

11. 已知有声明"int m[]={5,4,3,2,1}, i=0;",下列对数组元素的引用中,错误的是_____(27)_____。

A. m[++i]
B. m[5]
C. m[2*2]
D. m[m[4]]
参考资料:数制变换
输入一个十进制数,输出为二进制数形式的一维整型数组。

相关文档
最新文档