数组程序举例
- 格式:doc
- 大小:52.50 KB
- 文档页数:33
5 数组5.1 数组引例引例:求班级中20个学生的平均成绩和高于平均成绩的人数。
使用简单变量和循环结构,求平均成绩的程序段如下:aver=0;for(k=1; k<=20; k++){ printf("输入第%d为学生成绩",k);scanf("%d",&mark);aver+=mark;}aver=aver/20;要统计高于平均分的人数则无法实现。
因为存放成绩的变量mark只能存放一个成绩,下一个学生成绩输入后,上一个学生成绩就不存在了,也就不可能与平均成绩比较。
要解决这个问题,只能再接着编写程序,重新输入20个成绩,这就造成大量重复输入且容易出错。
当然定义20个不同的变量也不是解决问题的好办法。
需要引入一种新的数据结构,来存放20个数据,这种结构就是数组。
数组就是存放相关数据的集合。
上述问题用数组就很容易解决,程序如下:#include <stdio.h>void main( ){ int mark[20],k,c=0; // 定义有20个元素的数组markfloat aver=0;for(k=0; k<20; k++){ printf("输入第%d为学生成绩",k);scanf("%d",&mark[k]);aver+=mark[k];}aver=aver/20;for(k=0; k<20; k++)if(mark[k]>=aver) c++ ; // 逐个成绩与平均分比较printf("平均成绩:%f",aver);printf("高于平均分人数:%d",c);}mark[0]、mark[1] 、…、mark[19] 分别表示第1个、第2个、…、第20个学生的成绩。
5.2 一维数组5.2.1 一维数组的定义一维数组的定义方式为:类型说明符数组名[常量表达式];例如:int a[5];定义了名为a的整型数组,此数组有5个元素,分别是a[0],a[1],a[2],a[3],a[4]。
c语言数组小案例C语言是一种广泛应用的编程语言,数组是C语言中常用的数据结构之一。
它可以存储多个相同类型的数据,并通过索引访问和操作这些数据。
下面列举了10个关于C语言数组的小案例,以帮助读者更好地理解和掌握数组的使用。
1. 计算数组元素的总和编写一个程序,从用户输入一组整数,并计算它们的总和。
使用数组来存储输入的整数,并通过循环遍历数组来计算总和。
2. 查找数组中的最大值和最小值编写一个程序,从用户输入一组整数,并找到其中的最大值和最小值。
使用数组来存储输入的整数,并通过循环遍历数组来找到最大值和最小值。
3. 数组的逆序排列编写一个程序,从用户输入一组整数,并将它们按逆序排列。
使用数组来存储输入的整数,并通过循环遍历数组来实现逆序排列。
4. 数组的去重编写一个程序,从用户输入一组整数,并去除其中的重复元素。
使用数组来存储输入的整数,并通过循环遍历数组来去除重复元素。
5. 数组的排序编写一个程序,从用户输入一组整数,并将它们按升序或降序排序。
使用数组来存储输入的整数,并通过循环遍历数组来实现排序。
6. 数组的拷贝编写一个程序,从用户输入一组整数,并将它们拷贝到另一个数组中。
使用两个数组分别存储输入的整数,并通过循环遍历数组来实现拷贝。
7. 数组的搜索编写一个程序,从用户输入一组整数,并在数组中搜索指定的值。
使用数组来存储输入的整数,并通过循环遍历数组来搜索指定的值。
8. 数组的合并编写一个程序,从用户输入两组整数,并将它们合并为一个数组。
使用两个数组分别存储输入的整数,并通过循环遍历数组来实现合并。
9. 数组的平均值和方差编写一个程序,从用户输入一组整数,并计算它们的平均值和方差。
使用数组来存储输入的整数,并通过循环遍历数组来计算平均值和方差。
10. 数组的矩阵操作编写一个程序,从用户输入一个矩阵,并实现矩阵的转置、矩阵的相加和矩阵的乘法等操作。
使用二维数组来存储输入的矩阵,并通过循环遍历数组来实现矩阵操作。
c++数字三角形程序数组C++数字三角形程序可以通过数组来实现。
首先,我们可以使用二维数组来存储数字三角形的数据,然后通过循环来进行计算和输出。
以下是一个简单的示例程序:cpp.#include <iostream>。
using namespace std;int main() {。
int numRows;cout << "请输入数字三角形的行数,";cin >> numRows;int triangle[numRows][numRows]; // 声明二维数组来存储数字三角形数据。
// 计算数字三角形的数据并存储到数组中。
for (int i = 0; i < numRows; i++) {。
for (int j = 0; j <= i; j++) {。
if (j == 0 || j == i) {。
triangle[i][j] = 1;} else {。
triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j];}。
}。
}。
// 输出数字三角形。
cout << "数字三角形," << endl;for (int i = 0; i < numRows; i++) {。
for (int j = 0; j <= i; j++) {。
cout << triangle[i][j] << " ";}。
cout << endl;}。
return 0;}。
在这个示例程序中,我们首先通过用户输入确定数字三角形的行数,然后使用二维数组`triangle`来存储数字三角形的数据。
接着,通过嵌套的循环计算并存储数字三角形的数据,最后再次使用循环输出数字三角形的数据。
这个程序通过数组的方式实现了数字三角形的生成,展示了C++中数组的基本应用。
实验五数组一、控件属性的设置 (滚动条)1、在名称为Forml的窗体上添加一个名称为H1水平滚动条,请在属性窗口中设置它的属性值,满足下列要求:它的最小刻度值为1,最大刻度值为100,在程序运行时鼠标单击滚动条上滚动框以外的区域(不包括两边按钮),滚动框移动10个刻度。
再在滚动条下面画两个名称分别为L1、L2的标签,并分别显示1、100,运行时的窗体如图5-1所示。
工程文件名保存为sy5-1.vbp,窗体文件名为sy5-1.frm。
2、在名称为Form1的窗体上添加一个名称为HS1的水平滚动条,其刻度值范围为1 -100;添加一个命令按钮,名称为C1,标题为"移动滚动框"。
请编写适当的事件过程,使得在程序运行时,每单击命令按钮一次(假定单击次数不多于10次),滚动框向右移动10个刻度。
程序运行时的窗体如图5-2所示。
要求程序中不得使用变量,事件过程中只能写一条语句。
工程文件名保存为sy5-2.vbp,窗体文件名保存为sy5-2.frm。
3、在名称为Form1的窗体上画一个图片框,其名称为Picture1、一个水平滚动条,名称为HScroll1,和一个命令按钮,名称为Command1,标题为"设置属性",通过属性窗口在图片框中装入一个图形(文件名为pic1.jpg,位于考生目录下),图片框的高度与图形的高度相同,图片框的宽度任意(如图1所示)。
编写适当的事件过程,程序运行后,如果单击命令按钮,则设置水平滚动条的如下属性:Min 100Max 1500LargeChange 100SmallChange 10之后就可以通过移动滚动条上的滚动块来放大或缩小图片框。
程序运行后的窗体如图5-3所示。
要求程序中不得使用任何变量。
工程文件名为sy5-3.vbp,窗体文件名为sy5-3.frm。
4、在控件属性1文件夹下有一个工程文件sy5-4.vbp,窗体上有一个圆和一个矩形,还有水平和垂直滚动条各一个。
•一个班学生得学习成绩•一行文字•一个矩阵这些数据得特点就是:1、具有相同得数据类型2、使用过程中需要保留原始数据C语言为这些数据,提供了一种构造数据类型:数组。
所谓数组就就是一组具有相同数据类型得数据得有序集合.一维数组及其应用例1:一维数组元素赋值及输出练习、main(){inti,a[10]; /* 定义数组整型数组a,它含有十个元素.*/for(i=0;i<=9;i++)a[i]=i; /*通过for循环依次为数组a中得每个元素赋值.*/for(i=9;i>=0;i-—)/*通过for循环依次输出数组a中得每个元素得值。
*/printf("%3d",a[i]); /*请注意输出元素得顺序*/}运行结果:9 8 7 6 5 4 3 210总结:程序使a[0]到a[9]得值为0~9,然后按逆序输出.例2:用数组来处理求Fibonacci(菲波那契) 数列问题,求出前40个数并以每行4个数输出。
Fibonacci 数列:F1 =1ﻩn=1ﻩF2= 1ﻩn= 2Fn = Fn-1+ Fn—2 n ≥3即:1 1ﻩﻩ2 ﻩ3ﻩﻩ5ﻩ8 ﻩ13 ﻩ。
#include 〈stdio、h>main (){ﻩint i;long f [40]={1, 1}; /*定义长整型数组f存放40个Fibonacci 数,对第一个与第二个元素先赋初值1 */ﻩfor( i= 2;i〈40;i++) /*用前两个元素求与得到其值*/ﻩﻩf [i]=f [i—2]+f [i—1];for (i=0;i< 40;i++)/*利用循环依次输出40个数*/ﻩ{ﻩif(i %4== 0)printf (”\n”);/*每输出4个数输出一个换行符*/ﻩprintf("%16ld", f[i]);/* 要注意长整型数据得输出格式控制符得写法*/ﻩ}}运行结果:例3:找一批数中得最大值main(){int i,max,a[10];printf(”input10numbers:\n"); //输入提示信息“请输入10个数”for (i=0;i<10;i++)scanf(”%d”,&a[i]); //输入10个数到数组中max=a[0];for(i=1;i〈10;i++)if(a[i]>max)max=a[i];//从数组中找最大得数赋值给maxprintf("maxmum=%d\n”,max); //输出max得值}运行结果:input10numbers:8 29 4 56 3 716maxmum=9例4:冒泡法排序(从小到大排序)思路:将相邻两个数进行比较,将小得调到前头.若n个数比较,要比较n-1趟,用j表示趟数,则第j趟要比较n—j次。
main(){int a[11];int i,j,t;printf(“input10numbers :\n"); for (i=1;i〈11;i++)scanf(“%d”,&a[i]);printf(“\n”);for(j=1;j<=9;j++)for(i=1;i〈=10—j;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;} Printf(“the sortednumbers :\n”);for(i=1;i〈11;i)printf(″%d ″,a[i]);printf(″\n″);}/*程序结束*/运行结果:Input 10 numbers :10 4 81265—76 100 —45 123The sorted numbers :-76 -45 0 1 4 8 1281265 100 123本程序中,第一个for循环,就是表示要循环得趟数,第二个for循环,就是表示每一趟里面循环得次数。
例5:有一个已经排好序得数组,今输入一个整数,要求按原来排序得规律将它插入数组中。
为了把一个数按大小插入已排好序得数组中,应首先确定排序就是从大到小还就是从小到大进行得.假设排序就是从大到小进行得,则可把欲插入得数与数组中各数逐个比较,当找到第一个比插入数小得元素i时,该元素之前即为插入位置。
然后从数组最后一个元素开始到该元素为止,逐个后移一个单元。
最后把插入数赋予元素i即可。
如果被插入数比所有得元素值都小则插入最后位置.main(){int i,j,p,q,s,n,a[11]={320,260,258,154,68,57,45,16,8,2};for(i=0;i〈=10;i++)printf("%d",a[i]); /* 先输出原始排好序得数据序列*/printf(”\n Input a number:\n”);scanf(”%d”,&n);/*输入一个数插入到序列中*/if (n〈a[9])a[10]=n;else{for(i=0;i〈10;i++)if(n〉a[i]){ for(s=9;s〉=i;s——)a[s+1]=a[s];break;}a[i]=n;}printf(”\n result:\n");for(i=0;i<=10;i++)/*输出结果*/ printf("%d",a[i]);printf(”\n");}运行结果:本程序首先输入要插入得整数n。
再用一个for语句把n与数组元素逐个比较,如果发现有n>a[i]时,则由一个内循环把i以后各元素值顺次后移一个单元。
后移应按照从后向前依次进行(从a[9]开始到a[i]为止)。
后移结束跳出外循环.插入点为i,把n赋予a[i]即可。
如所有得元素均大于被插入数,则并未进行过后移工作。
此时i =10,结果就是把n赋于a[10]。
最后一个循环输出插入数据后得数组各元素值。
二维数组及其应用,存到另一个二维数组中。
例如:#include <stdio、h〉void main(){int a[2][3]={{1,2,3},{4,5,6}};int b[3][2],i,j;printf(″array a:\n″);for (i=0;i〈=1;i++){for (j=0;j<=2;j++){printf(″%5d″,a[i][j]);}printf(″\n″);}printf(″array b:\n″);for (i=0;i<=2;i++){for(j=0;j〈=1;j++)printf(”%5d″,b[i][j]);printf(″\n″);}} /*程序结束*/例7:有一个3×4得矩阵,要求编程序求出其中值最大得那个元素得值,以及所在得行号与列号。
程序:main ( ){ int i,j, row=0, colum=0, max;static int a[3][4]={{1,2,3,4},{9,8,7,6}, {–10,10, –5, 2}}max=a[0][0];for (i=0;i<=2; i++)for(j=0; j〈=3; j++)if (a[i][j]〉max){ max=a[i][j];row=i;colum=j;}printf( "max=%d,row=%d, colum=%d\n",max, r ow, colum);}输出结果为:max=10, row=2, colum=1例8:打印出以下得杨辉三角形(要求打印出10行)11 11 2 11 3 3 11 4 6 4 11 5 10 10 1。
.。
杨辉三角就是(a+b)得n次幂得展开式系数,如:(a+b)0展开后得系数就是1(a+b)1展开后得系统数就是 1 1ﻫ(a+b)2展开后得系数就是 1 2 1ﻫ(a+b)3展开后得系数就是 1 3 3 1从而我们得到杨辉三解得系数规律(指数为n):ﻫ 1、各行第一个数都就是12、各行最后一个数都就是13、若用二维数组存放系数,每行存放一组,则从第二行开始除最后一个数与第一个数外,每个数都就是其所在行得上一行同一列与前一列之与.可以这样表示:# define N 11main(){int i,j,a[N][N]; for(i=1;i<N;i++){a[i][1]=1;a[i][i]=1;}for(i=3;i〈N;i++)for(j=2;j<=i—1;j++)a[i][j]=a[i-1][j—1]+a[i—1][j];for(i=1;i〈N;i++){for(j=1;j〈=i;j++)printf(”%6d ",a[i][j]);printf("\n");}printf(”\n");}字符数组及其应用例9:输出一个字符串main(){char x[ ]={‘I', ‘‘, ‘a’, ‘m’, ‘‘, ‘a’, ‘‘, ‘b’, ‘o', ‘y’ };int i;for(i=0;i〈10;i++)printf(“%c"c[i]);printf(“%\n”);}运行结果:I am a boy例10:输出一个钻石图形#include <stdio、h>void main(){ char diamond[][5]={{′′,′′,′*′},{′′,′*′,′′,′*′},{′*′,′′,′′,′′,′*′},{′′,′*′,′′,′*′},{′′,′′,′*′}};inti,j;for (i=0;i〈5;i++)运行结果** ** * * *{ for (j=0;j〈5;j++)printf(″%c″,diamond[i][j]);printf(″\n″); }}例11:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
程序如下:#include <stdio、h〉void main(){char string[81]; /*定义一个字符型数组*/int i,num=0,word=0;/*定义几个整型常量,i用来控制循环次数,num表示单词个数,word相当于一个标志*/char c;/*定义一个字符型变量*/gets(string);/*获取用户输入得一句话,在这句话得末尾系统会自动添加一个结束标志’\0’*/for (i=0;(c=string[i])!=′\0′;i++) /*从string[0]开始判断,只要它不就是结束标志,就执行下面得语句*/if(c==′′) word=0;/*判断当前字符就是不就是空格,比如I am a boy,第一个I不就是空格,所以就不执行word=0,而执行下一句*/else if(word==0) /*判断word就是不就是等于0(word=0表示把0赋给word,word==0表示判断word等不等于0),显然就是得,因为开始时赋给word得值就是0*/{ word=1; /*所以执行语句:“把1赋给word;num++",此时num为1。