1204 实验四 数组 讲解
- 格式:pdf
- 大小:478.36 KB
- 文档页数:16
一、实验背景本次实验旨在通过学习数组的相关知识,掌握数组的定义、初始化、赋值、引用等方法,以及数组的操作和应用。
通过本次实验,我对数组有了更深入的理解,同时也对编程思维和算法设计有了更全面的提升。
二、实验过程1. 实验一:一维数组的定义与初始化实验过程中,我首先学习了如何定义一维数组,以及如何对数组进行初始化。
通过实验,我掌握了以下知识:(1)一维数组的定义格式:类型符数组名[常量表达式];(2)一维数组的初始化方法:在定义数组时,可以在方括号内指定数组的长度,并为数组元素赋初值。
2. 实验二:二维数组的定义与初始化在实验二,我学习了二维数组的定义与初始化。
通过实验,我掌握了以下知识:(1)二维数组的定义格式:类型符数组名[常量表达式1][常量表达式2];(2)二维数组的初始化方法:可以在定义数组时,指定数组的行数和列数,并为数组元素赋初值。
3. 实验三:数组元素的引用与赋值在实验三,我学习了如何引用数组元素,以及如何为元素赋值。
通过实验,我掌握了以下知识:(1)数组元素的引用方法:数组名[下标];(2)数组元素的赋值方法:使用赋值运算符“=”。
4. 实验四:数组的操作与应用在实验四,我学习了数组的操作与应用,包括冒泡排序、选择排序等。
通过实验,我掌握了以下知识:(1)冒泡排序算法:通过比较相邻元素的大小,将较大的元素交换到后面,直到整个数组有序。
(2)选择排序算法:通过比较相邻元素的大小,选择最小(或最大)的元素放到数组的起始位置,然后继续对剩余的元素进行排序。
三、实验反思1. 数组的定义与初始化在实验过程中,我深刻体会到了数组在编程中的重要性。
数组作为一种数据结构,可以有效地存储和操作一组具有相同数据类型的元素。
通过对数组的定义与初始化,我学会了如何创建一个符合实际需求的数组,并为数组元素赋初值。
2. 数组元素的引用与赋值在实验过程中,我学会了如何引用数组元素,以及如何为元素赋值。
这使我更加熟练地掌握了数组的使用方法,为后续的编程实践打下了基础。
实验四数组的应用程序设计一、实验目的1.掌握C语言的一维数组和二维数组的应用;2.掌握常用的排序算法;3.掌握字符数组和字符串函数的使用;二、实验内容编写程序,完成如下功能1. 编写程序实现如下功能,输入了20个整数,把这些整数存放在一个数组中,并且输出其中的最大者与最小者及他们在数组中的下标、这20个数的和及它们的平均值。
2. 从键盘输入15整数,对这些数进行从大到小排序后按次序显示各个数。
3. 在整型数组M中存放12个非0 整数,使用scanf( )函数将12个整数从键盘读入到M中,并要求M中有正数和负数,编写程序,将数组M中的所有正数存放在数组的前面,负数存放在数组的后面,并显示数组M中的各个元素的值。
4.从键盘输入一个字符串并存入字符数组中,分别统计其中的数字字符、字母、空格和其它字符的个数。
5. 从键盘输入一个字符串(小于50个字符,该字符串中可以含有字母、数字和空格),并存入字符数组strArray中,将数组strArray中的字符颠倒后存入另外一个数组reverseArray 中(也就是第一个字符变成最后一个字符,第二个字符变成倒数第二个字符…,), 再把reverseArray数组中的各个字母变成其后的第5个字母(如A变成F,B变成G,…,Z变成E等),分别显示这两个数组中的各元素。
6*. 从键盘输入16个数组成一个4行4列的二维数组,(1)求对角线上的各个元素的和与积;(2)求所有靠边元素的和与积;(3)求所有不靠边元素的和与积7*. 已知有两个矩阵:求矩阵的乘积:C = AB,并按行列显示矩阵C的各个元素。
8*.使用随机函数rand( ), 产生50个[0,100]之间的整数,并把这一批整数存在一个整型数组A中,定义另外一个整形数组B,请把A数组中的数按照从大到小的顺序放入数组B中,最后,分别显示数组A和数组B的各个元素。
提示:随机函数int rand(void) 在头文件stdio.h中,该函数可以返回一个在[0,32767]之间的整数,本实验后面附有例子。
实验四串、数组一、实验目的1.理解字符串、数组的基本概念、存储表示及基本操作。
二、实验原理数组是由类型相同的数据元素构成的有序集合,每个元素称为数组元素,每个元素受n(n>=0)个线性表的约束,每个元素在n个线性关系中的序号称为该元素的下标,可以通过下标访问该数据元素。
数组中的数据元素本身还可以是具有某种结构的,但要属于同一数据类型,因此数组可以被看做线性表的推广。
对一个矩阵结构显然用一个二维数组来表示是非常恰当的,但在有些情况下,比如常见的一些特殊矩阵,如三角矩阵、对称矩阵、带状矩阵、稀疏矩阵,从节省存储空间的角度考虑,这种存储不太合适。
如果m×n矩阵中有t个非零元素且t<<m×n,这样的矩阵称为稀疏矩阵。
很多科学管理及工程计算中,常会遇到阶数很高的大型稀疏矩阵。
如果按常规分配方法,顺序分配在计算机内,那将是相当浪费内存的。
所以一般对稀疏矩阵采取三元组和十字链表的存储方式。
三元组表存储结构如下:typedef struct{ int r, c; /*行号、列号*/ElemType d; /*非零元素值*/}TupNode;typedef struct{ int rows,cols,nums; /*行数、列数、非零元素个数*/TupNode data[maxsize]; /*三元组表*/}TSMatrix;三、实验内容以三元组表形式表示稀疏矩阵,实现两个矩阵的加法、减法。
四、实验步骤1. 定义三元组存储结构2. 输入稀疏矩阵:首先应输入矩阵的行数、列数和非零项的数目,并判别给出的两个矩阵的行、列数对于所要求进行的运算是否匹配。
可设矩阵的行数和列数均不超过20。
接下来逐个输入表示非零元的三元组(i, j, a ij),程序可以对三元组的输入顺序加以限制,如按行优先。
3. 进行相关的运算,如加法或减法。
4. 输出结果矩阵(以阵列的形式输出运算结果)。
五、实验提交资料1.算法思想描述(或源代码)2.测试结果与分析3.收获与体会要求:将以上资料收集齐后,撰写实验报告。
实验四循环与数组程序综合应用(4学时)一、实验目的:掌握循环与数组程序设计的一般方法及循环与数组程序的调试方法,能够综合运用顺序、选择、循环和数组解决一般难度的实际应用问题。
二、实验要求1.仔细阅读下列实验内容,并编写出相应的C语言源程序。
2.在C语言运行环境下,编辑录入源程序。
3.调试运行源程序,注意观察调试运行过程中发现的错误及改正方法。
4.掌握如何根据出错信息查找语法错误。
5. 最后提交带有充分注释的源程序文件(扩展名为.c)。
要求该文件必须能够正确地编译及运行,并不得与他人作品雷同。
三、实验内容1.编程序实现如下功能:输入任意一个年份和月份,求出从公元1年1月1日到这个月的1日总共有多少天,并求出这个月的1日是星期几,再按以下格式输出该月份的公历日历。
要求用循环控制打印。
(提示:可以将每个月的天数存储到数组中。
)打印样例如下:9月---------------------------日一二三四五六12 3 4 5 6 7 89 10 11 12 13 14 1516 17 18 19 20 21 2223 24 25 26 27 28 2930---------------------------2.(选作题)编程序实现如下功能:输入任意一个年份,求出从公元1年1月1日到这一年每个月的1日总共有多少天,并求出这一年每个月的1日是星期几,再按以上格式输出该年份全年的公历日历。
要求用循环控制打印。
(提示:可以将每个月的天数存储到数组中。
)四、常见问题疑问1:如何控制某个月1日的打印位置?答:先由程序计算出来该月份的1日是星期几,然后控制在打印“1”之前打印相应个数的空格。
疑问2:如何控制每周和每月的打印换行?答:可以根据当前这一天的打印位置控制每周的打印换行,并根据该月份的天数控制每月的打印换行。
#include <stdio.h>main(){int i,t1,s,n,y,week,j;int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};s=0;scanf("%d%d",&n,&y);t1=0;for(i=1;i<n;i++)if(i%4==0&&i%100!=0||i%400==0)t1=t1+366;elset1=t1+365;if(n%4==0&&n%100!=0||n%400==0)a[2]=29;for(i=1;i<y;++i)s=s+a[i];s=t1+s+1;week=s%7;printf("所求截止本月1日的天数为%d\n",s);printf("日\t一\t二\t三\t四\t五\t六\n");for (i=0;i<week;i++)printf(" \t");for (j=1;j<=a[i];j++){ printf("%d\t",j); if ((i+j)%7==0)printf("\n");}printf("\n");}。
南昌大学实验报告学生姓名:学号:专业班级:实验类型:□验证□综合□√设计□创新实验日期:实验成绩:一、实验名称实验4 数组二、实验目的1.掌握数组的基本概念,包括:数组的定义、数组的类型、数组的初始化、数组的赋值、数组元素下标的范围、数组元素的正确以及引用数组元素的输入/输出。
2.掌握字符数组与字符串的使用方法。
理解字符数组与其它数组的区别、理解字符串及其特点。
掌握常用的字符串处理库函数的用法并清楚对字符串的简单处理。
3.掌握与数组相关的算法,包括排序算法和查找算法等。
三、实验内容有关数组的程序设计四、实验环境PC微机DOS操作系统或Windows 操作系统Turbo C 程序集成环境五、实验步骤1.编程实现:对任意一个一维数组,从中找出数组元素的最大值和最小值。
要求:(1)数组为整型数组(10个元素)。
(2)使用scanf函数实现数组元素的输入。
在输入前给出必要的提示。
(3)输出时给出必要的说明,首先输出原始的10个元素,换行后输出最大值以及最大值在数组中的位置、最小值以及最小值在数组中的位置。
(4)如果现改为20个元素的数组,怎样修改程序?修改程序后,运行程序进行检查。
如果需要数组元素不断改变,应怎样修改程序?2.编程实现:在给定的字符串中查找满足条件的第一个字符。
要求:(1)字符串采用初始化的方式处理。
(2)通过scanf函数读入一个任意字符。
(3)在字符串中查找该字符,如果存在该字符,输出该字符在字符串中的位置以及相应的说明。
如果不存在该字符,则要给出相应的信息。
3.编程实现:首先任意输入一个大于2且小于10的整数n,再输入一个由n决定的二维整型数组(n ⨯n),形成n ⨯n阶矩阵,将矩阵中最大元素所在的行和最小元素所在的行对调后,再输出该矩阵(注意:数组不允许动态定义)。
例如:原始数据:n=4 结果数据:1 2 3 4 8 11 14 163 5 9 10 3 5 9 108 11 14 16 1 2 3 415 2 7 6 15 2 7 6要求:(1)本题中所涉及到的循环都采用for语句。
一、实验目的1. 掌握数组的定义、声明、初始化和引用方法。
2. 熟悉数组在数据存储和操作中的优势。
3. 学习并实现一些常用的数组操作,如排序、查找、插入和删除等。
4. 提高编程能力,培养解决实际问题的能力。
二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 编程语言:C++三、实验内容1. 一维数组的定义、初始化和引用2. 二维数组的定义、初始化和引用3. 数组元素的查找4. 数组元素的排序5. 数组元素的插入和删除四、实验步骤1. 一维数组的定义、初始化和引用(1)定义一个整型一维数组,并初始化前5个元素为1、2、3、4、5。
(2)使用循环遍历数组,输出所有元素。
(3)使用指针遍历数组,输出所有元素。
2. 二维数组的定义、初始化和引用(1)定义一个整型二维数组,并初始化前3行3列的元素。
(2)使用嵌套循环遍历数组,输出所有元素。
(3)使用指针遍历数组,输出所有元素。
3. 数组元素的查找(1)定义一个整型数组,并初始化前10个元素为1、2、3、4、5、6、7、8、9、10。
(2)编写一个函数,用于查找数组中是否存在指定的元素。
(3)在主函数中调用该函数,查找元素5在数组中的位置。
4. 数组元素的排序(1)定义一个整型数组,并初始化前10个元素为1、2、3、4、5、6、7、8、9、10。
(2)编写一个冒泡排序函数,用于对数组进行排序。
(3)在主函数中调用该函数,对数组进行排序,并输出排序后的结果。
5. 数组元素的插入和删除(1)定义一个整型数组,并初始化前10个元素为1、2、3、4、5、6、7、8、9、10。
(2)编写一个插入函数,用于在数组中插入一个新元素。
(3)编写一个删除函数,用于删除数组中的指定元素。
(4)在主函数中调用插入和删除函数,对数组进行操作,并输出操作后的结果。
五、实验结果与分析1. 一维数组的定义、初始化和引用实验结果:成功定义、初始化和引用了一维数组,并输出所有元素。
实验四函数一、实验目的1.掌握函数的定义、函数的说明和调用。
2.掌握函数的参数及其传递方式,函数值的正确返回。
二、实验内容1.[目的]掌握标准库函数的说明和调用方法。
[题目内容]编写一个程序,首先显示一个菜单,然后根据用户的选择,输入数据后,执行相应的操作。
[输入]用户选择和函数自变量值[输出]如下菜单:=======MENU======1.。
sin2.。
cos3.。
pow4.。
sqrt0.。
exit==================[提示]使用标准库函数、多分支选择结构。
源代码:#include <stdio.h>#include <math.h>void main(){int choice,n;double x,z;printf ("======MUNE======\n");printf ("1..........sin\n");printf ("2..........cos\n");printf ("3..........pow\n");printf ("4..........sprt\n");printf ("0..........exit\n");printf ("请输入:");scanf ("%d",&choice);switch (choice){case '1':{printf ("请输入角度:");scanf ("%lf",&x);x=(x*3.14/180);z=sin(x);printf ("%lf的sin值为:%lf",x,z);break;}case '2':{printf ("请输入角度:");scanf ("%lf",&x);x=(x*3.14/180);z=cos(x);printf ("%lf的cos值为:%lf",x,z);break;}case '3':{printf ("请输入x和n:");scanf ("%lf%d",&x,&z);z=pow(x,n);z=sin(x);printf ("%lf的sin值为:%lf",x,z);break;}case '4':{printf ("请输入x:");scanf ("%lf",&x);if (x>=0){z=sprt(x);printf ("%lf的sqrt值为:%lf",x,z);}elseprintf ("Wrong");break;}case '0':{break;default:printf ("Wrong");}printf("\n");}2.[目的]掌握用户自定义函数的定义、函数的说明和调用方法。
一、实验背景数组是计算机科学中一种基本的数据结构,广泛应用于各类编程语言中。
数组逻辑算法是指通过对数组进行一系列操作,实现对数组元素的排序、查找、统计等操作。
本实验旨在通过设计并实现一系列数组逻辑算法,加深对数组数据结构及其相关算法的理解和应用。
二、实验目的1. 掌握数组的基本操作方法;2. 熟悉常见的数组逻辑算法,如排序、查找、统计等;3. 提高编程能力和算法设计能力;4. 分析并优化算法性能。
三、实验内容1. 数组定义与初始化2. 数组元素访问与修改3. 数组查找算法1)顺序查找2)二分查找4. 数组排序算法1)冒泡排序2)选择排序3)插入排序4)快速排序5. 数组统计算法1)求最大值2)求最小值3)求平均值四、实验过程1. 数组定义与初始化首先,定义一个整型数组,初始化为10个随机整数:```c#include <stdio.h>#include <stdlib.h>#include <time.h>#define ARRAY_SIZE 10int main() {int array[ARRAY_SIZE];int i;// 初始化随机数种子srand((unsigned int)time(NULL));// 生成随机整数并赋值给数组for (i = 0; i < ARRAY_SIZE; i++) {array[i] = rand() % 100;}// 输出数组for (i = 0; i < ARRAY_SIZE; i++) {printf("%d ", array[i]);}printf("\n");return 0;}```2. 数组元素访问与修改通过数组下标访问和修改数组元素:```cint main() {int array[ARRAY_SIZE];int i;// ...(初始化代码)// 访问数组元素printf("Array[5] = %d\n", array[5]);// 修改数组元素array[5] = 100;printf("After modification: Array[5] = %d\n", array[5]); return 0;}```3. 数组查找算法(1)顺序查找```cint sequential_search(int array[], int size, int target) { int i;for (i = 0; i < size; i++) {if (array[i] == target) {return i; // 找到目标元素,返回其索引}}return -1; // 未找到目标元素,返回-1}```(2)二分查找```cint binary_search(int array[], int size, int target) { int low = 0, high = size - 1, mid;while (low <= high) {mid = (low + high) / 2;if (array[mid] == target) {return mid; // 找到目标元素,返回其索引} else if (array[mid] < target) {low = mid + 1;} else {high = mid - 1;}}return -1; // 未找到目标元素,返回-1}```4. 数组排序算法(1)冒泡排序```cvoid bubble_sort(int array[], int size) {int i, j, temp;for (i = 0; i < size - 1; i++) {for (j = 0; j < size - 1 - i; j++) { if (array[j] > array[j + 1]) { temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;}}}}```(2)选择排序```cvoid selection_sort(int array[], int size) { int i, j, min_idx, temp;for (i = 0; i < size - 1; i++) {min_idx = i;for (j = i + 1; j < size; j++) {if (array[j] < array[min_idx]) { min_idx = j;}}temp = array[min_idx];array[min_idx] = array[i];array[i] = temp;}}```(3)插入排序```cvoid insertion_sort(int array[], int size) { int i, j, key;for (i = 1; i < size; i++) {key = array[i];j = i - 1;while (j >= 0 && array[j] > key) { array[j + 1] = array[j];j--;}array[j + 1] = key;}}```(4)快速排序```cint partition(int array[], int low, int high) { int pivot = array[high];int i = (low - 1);for (int j = low; j <= high - 1; j++) {if (array[j] < pivot) {i++;int temp = array[i];array[i] = array[j];array[j] = temp;}}int temp = array[i + 1];array[i + 1] = array[high];array[high] = temp;return (i + 1);}void quick_sort(int array[], int low, int high) {if (low < high) {int pi = partition(array, low, high); quick_sort(array, low, pi - 1);quick_sort(array, pi + 1, high);}}```5. 数组统计算法(1)求最大值```cint max_value(int array[], int size) {int max = array[0];for (int i = 1; i < size; i++) {if (array[i] > max) {max = array[i];}}return max;}```(2)求最小值```cint min_value(int array[], int size) {int min = array[0];for (int i = 1; i < size; i++) {if (array[i] < min) {min = array[i];}}return min;}```(3)求平均值```cdouble average_value(int array[], int size) {int sum = 0;for (int i = 0; i < size; i++) {sum += array[i];}return (double)sum / size;}```五、实验结果与分析通过本实验,我们掌握了数组的基本操作方法,熟悉了常见的数组逻辑算法,提高了编程能力和算法设计能力。
实验4 数组一、实验目的(1) 熟悉C语言关于“数组”的语法规则;(2) 掌握C语言程序中关于数值“数组”的应用技巧;(3) 掌握一维数组和二维数组的定义、赋值和输入输出的方法;数组元素的存储形式和引用方法;(4) 掌握与数组有关的排序(选择法、冒泡法)、有序数列的插入和删除操作等算法(特别是排序算法)。
二、实验内容步骤(一)实验准备(1) 数组的应用场合:处理有限个相同类型数据可定义为数组(2) 数组的定义、引用、初始化①定义:如int a[10]; float b[3][4]; char s1[80],s2[3][80];等。
要求用常量指定所定义的数组大小;数组定义后,编译时分配连续的存储空间,且存储空间=元素个数×sizeof(元素类型)(单位是字节),二维数组按行存放其元素;一维数组一般存储线性序列的数据,二维数组一般存储矩阵,一维字符数组一般存储一个字符串,二维字符数组一般存储多个字符串;一维数组名代表数组存储空间的起始地址,二维数组名代表首行的地址,二维数组名带一个下标表示下标所在行的首元素地址。
②引用:如a[i]、b[i][j]等。
一维数值数组通常结合单重for循环访问其所有元素,用循环变量控制元素下标,从0到长度-1;二维数组通常结合双重for循环访问其所有元素,外循环控制行(第一维)下标,内循环控制列(第二维)下标;字符数组通常用数组名引用其表示地址单元开始的所有元素。
③初始化:可全部元素初始化、部分元素初始化;二维数组可按行初始化或按元素排列顺序初始化;字符数组可逐个元素赋初值或以字符串形式赋初值。
(3) 阅读以下程序,并分析其功能,调试运行程序后再分析其运行结果。
①程序一,程序文件名为ex7-1.c。
(掌握冒泡排序算法)# include <stdio.h>void main(){int a[10],i,j,t;printf("Input 10 numbers:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);for(j=0;j<9;j++)for(i=0;i<9-i;i++)if(a[i]>a[i+1]){ t=a[i]; a[i]=a[i+1]; a[i+1]=t; }printf("the sorted numbers:\n");for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");}②程序二,程序文件名为ex7-2.c。
实验4 数组的应用实验目的1.学会使用一维数组、二维数组进行程序设计。
2.至少掌握一种排序方法。
3.理解下标与数据元素之间的对应关系。
4.学会使用字符数组对字符串进行处理。
5.学会使用字符串函数解决实际问题。
实验内容1.阅读并运行程序,写出运行结果。
(1)#include <iostream>using namespace std;int main(){ int a[5]={3,5,1,10,2},i;int s1=a[0],s2=a[0];float s3=0; //Afor(i=0;i<5;i++){ s3+=a[i];if(a[i]>s1)s1=a[i];if(a[i]<s2)s2=a[i];}cout<<"s1="<<s1<<","<<"s2="<<s2<<","<<"s3="<<(s3/5)<< "\n"for(i=0;i<5;i++)cout<<a[i]<< ",";cout<<endl;return 0;}思考:1)该程序的功能是什么?2)如果A行改为float s3;程序的运行结果会是什么?3)如果A行改为int s3=0;程序的运行结果会是什么?如何修改使程序功能不变?4)如果要求a数组中的数据从键盘输入,应如何修改程序?5)如果要求统计数组中包含的正数、负数及零的个数,该如何修改程序?(2)#include <iostream>using namespace std;int main(){ int a[3][4]={{3,5,1,10},{4,1,2,8},{9,10,6,2},i,j;int sum=0;for(i=0;i<3;i++)for(j=0;j<4;j++)if(i==0||j==0||i==2||j==3)sum+=a[i][j];cout<<"sum="<<sum <<"’\n";for(i=0;i<3;i++){ for(j=0;j<4;j++) //Acout<<a[i][j]<< "\t";cout<<endl;} //Breturn 0;}思考:1)该程序的功能是什么?2)删除A行和B行的“{”和“}”,程序的结果怎样?3)如果要求a数组的内容从键盘输入,应如何修改程序?4)如果要求计算两条对角线上的元素的和,应如何修改程序?(3)阅读并运行程序,输入:qas*+w fe f541r 3 534; ds lka,写出运行结果。
试验1:一维数组的初始化§定义一个包含10个元素的整型数据数组,其中前5个元素初始化为1、2、3、4、5,其余元素初始化为0,然后输出该数组的元素。
试验2:二维数组的初始化§定义两个3×5的二维整型数组,将第一个二维数组的第一行元素全部初始化为1,第二行的元素初始化为1、2、3、4、5,第三行元素初始化为0;第二个数组不进行初始化,分别输出这两个二维数组的各个元素。
观察第二个数组的元素的值分别是什么。
试验3:二维数组的操作§定义一个3×5的二维整型数组,将试验2中所定义的第二个二维整型数组通过用户输入的方式进行赋值,然后将二个数组的对应元素相加,并分别将结果输入到新定义的数组当中。
试验4:一维数组排序操作1§定义一个包含10个元素的一维整型数组,通过用户输入的方式进行赋值,然后分别使用冒泡排序算法对数组进行排序,最后将结果输出。
试验4:一维数组排序操作2§定义一个包含10个元素的一维整型数组,通过用户输入的方式进行赋值,然后分别使用选择排序算法对数组进行排序,最后将结果输出。
试验5:字符数组的操作§字符串输入输出:§定义一个包含20个元素的一维字符数组,使用scanf()函数来接收从键盘输入的字符串,然后用printf()函数输出。
§输入:“abcd efg”,观察输出结果。
§使用gets()作为接收函数来接收以上输入的字符,再观察输出结果。
试验6:字符串函数操作§定义两个字符数组ch1、ch2,长度为20,ch1初始化值为aaBbcC,ch2初始化为aabCc,分别使用strcat、strcpy、strcmp、strlwr、strupr对上面的两个字符串进行操作,观察输出的结果。
§试编写一个程序,实现strupr函数,将数组中的小写字母转化为大写字母。
试验7:字符串操作§定义两个字符数组ch1,接收用户输入的一个字符串,并统计字符串中元音字母的个数并输出。
实验四数组的应用实验报告班级姓名:一、设计要求实现稀疏矩阵的基本运算。
二、算法分析1、算法:将一个稀疏矩阵对应存储到一个一维数组中,然后在进行矩阵的加减运算时依次扫描矩阵的行值和列值,并以行优先。
2、稀疏矩阵的存储:以一维数组顺序存放非零元素的行号、列号和数值,行号用-1表示结束标志。
三、代码分析#include <stdio.h>#define m 2 //定义矩阵行数为2,此处可修改并进行不同规模矩阵的调试#define n 2 //定义矩阵列数为2,此处可修改并进行不同规模矩阵的调试#define max 50//转存稀疏矩阵的算法void creatematrix(int a[m][n],int b[50]){int i,j,k=0;for (i=0;i<m;i++) //m为矩阵行数for (j=0;j<n;j++) //n为矩阵列数if (a[i][j]!=0) //当元素为非零元素时{b[k]=i;k++; //存放元素的行号b[k]=j;k++; //存放元素的列号b[k]=a[i][j];k++; //存放元素的数值}b[k]=-1; //结束标志}//稀疏矩阵的加法void matrixadd(int a[max],int b[max],int c[max]){int i=0,j=0,k=0;while (a[i]!=(-1)&&b[j]!=(-1)) //结束标志未出现时进入循环{if (a[i]==b[j]) //当矩阵A中与矩阵B中两元素行号相等时{if (a[i+1]==b[j+1]) //判断两元素列号是否相等{c[k]=a[i];//矩阵相加后,行号依然为原矩阵A、B中元素的行号c[k+1]=a[i+1];//列号依然为原矩阵A、B中元素的行号c[k+2]=a[i+2]+b[j+2];//相加后元素值为矩阵A、B中元素值相加k=k+3;//依次储存存完行号、列号、数值需三个数组元素空间//储存3个值后进入下一循环i=i+3; //同上j=j+3; //同上}else if (a[i+1]<b[j+1])//当矩阵A元素列号小于矩阵B元素列号时{c[k]=a[i];//矩阵相加后,得到的矩阵行号为矩阵A元素的行号c[k+1]=a[i+1]; //列号为矩阵A元素的列号c[k+2]=a[i+2]; //相加后元素为矩阵A中的元素值k=k+3; //储存后循环i=i+3; //储存后循环}else //当矩阵A元素列号大于矩阵B元素列号时的情况{c[k]=b[j];c[k+1]=b[j+1];c[k+2]=b[j+2];k=k+3;j=j+3;}}else if (a[i]<b[j]) //当矩阵A元素行号小于矩阵B元素行号时情况{c[k]=a[i];c[k+1]=a[i+1];c[k+2]=a[i+2];k=k+3;i=i+3;}else{c[k]=b[j];c[k+1]=b[j+1];c[k+2]=b[j+2];k=k+3;j=j+3;}}if (a[i]==-1)while (b[j]!=-1)//当矩阵A行计算结束而矩阵B行计算未结束时情况{c[k]=b[j];c[k+1]=b[j+1];c[k+2]=b[j+2];k=k+3;j=j+3;}if (b[j]==-1)while (a[i]!=-1) //当矩阵B行计算结束而矩阵A行计算未结束时情况{c[k]=a[i];c[k+1]=a[i+1];c[k+2]=a[i+2];k=k+3;i=i+3;}c[k]=-1; //计算结束}//主函数void main(){int e[m][n],f[m][n],a[max],b[max],c[max];int i,j,k;for (i=0;i<m;i++)for (j=0;j<n;j++)scanf("%d",&e[i][j]); //输入矩阵A并储存for (i=0;i<m;i++)for (j=0;j<n;j++)scanf("%d",&f[i][j]); //输入矩阵B并储存creatematrix(e,a); //将矩阵A转化为一维数组creatematrix(f,b); //将矩阵B转化为一维数组matrixadd(a,b,c); //将矩阵A、B相加i=0;j=0;k=0;printf("\n数组A的内容:\n");while (a[i]!=-1){printf("%5d,%5d,%5d\n",a[i],a[i+1],a[i+2]);//依次打印矩阵A各元素的行号、列号、元素值i=i+3;}printf("\n数组B的内容:\n");while (b[j]!=-1){printf("%5d,%5d,%5d\n",b[j],b[j+1],b[j+2]); //依次打印矩阵B各元素的行号、列号、元素值j=j+3;}printf("\n数组C的内容:\n");while (c[k]!=-1){printf("%5d,%5d,%5d\n",c[k],c[k+1],c[k+2]); //依次打印矩阵A+B各元素的行号、列号、元素值k=k+3;}}四、程序调试① 2*2矩阵的相加② 3*3矩阵的相加② 5*3矩阵的相加输入状态:输出状态:五、程序编写以上已对稀疏矩阵的加法的代码进行分析,对于稀疏矩阵的基本运算也是基于这个理论进行的。
数组一维数组1. 用Array函数生成一个包含10个整数的一维数组,并在窗体上输出,然后分别统计其中正数之和与负数之和,运行效果如图所示。
2. 随机生成10个两位正整数,求其中的最大值和平均值,并将结果显示出来,运行效果如图所示。
3. 实现以下程序功能:程序运行后,在四个文本框中各输入一个整数。
然后单击命令按钮,即可使数组按升序排序,并在文本框中显示出来。
提示:可用array函数生成数组。
二维数组1. 设有一个二维数组A(5,5),给所有数组元素赋值为1-9之间的随机整数,试计算:●所有元素之和。
●所有靠边元素之和。
●正对角线上元素之和。
2. 设有一个二维数组A(5,5),试计算矩阵第三行各项的和,并在窗体上显示出来。
3. 设有一个二维数组A(5,5),试找出正对角线上最大的值。
4.产生一个二维数组A(5,5),要求中心位置值为9,对角线位置值为1,其余位置值为0。
5.设有一个二维数组A(4,4),请交换其中的第二列和第四列,并显示。
6. 实现以下程序功能:运行程序时,随机产生一个4行4列的二维数组,单击“计算”命令按钮时,将统计矩阵两个对角线的元素中能被3整除的个数,统计结果显示在标签lblfirst中;同时计算矩阵主对角线的元素之和,计算结果显示在标签lblSecond中。
列表框和组合框1. 设在窗体中有一个名称为List1的列表框,其中有若干项目。
要求选中一项后单击Command1按钮,就删除选中的项,运行效果如图所示。
点击前选中”北京”点击按钮后删除2. 窗体上有一个组合框,其中已输入了若干项目。
程序运行时,单击其中一项,即可以把该项与上面的一项交换,运行效果如图所示。
点击前选中”重庆”点击后交换3.有10位同学的VB课程的期末成绩,信息如下:82、75、91、65、57、44、78、64、95、62,请将他们的信息保存到数组中,显示在列表框中,在“优秀”、“通过”和“不通过”三个分数段的人数进行统计。
实验四数组
一、实验目的
1、理解一维数组和二维数组的概念
2、掌握一维数组和二维数组的定义、初始、数组元素引用。
3、掌握一维数组和二维数组的输入/输出。
4、掌握与数组有关的算法。
二、实验内容
1、至少用2种方法编制程序,求Fibonachi数列的前20项。
2、编写找出1-100之间能被7或11整除的所有整数,存放在数组a中,并统计其个数。
要求以每行排列5个数据的形式输出a数组中的数据。
3、从键盘任意输入10个数,要求从大到小排序输入。
4、求任意n*n矩阵的对角线元素之和。
5、输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
三、实验步骤、测试数据、结果
请根据实验内容写出相应的实验步骤、源程序、测试数据以及结果。
四、实验小结
请根据实验步骤中所出现的问题(源程序的调试、测试数据以及结果),总结本实验中应注意的细节。
实验04数组
1 定义一个5个元素组成的一维数组,对其进行赋值,再把该值输出来。
2 定义一个5个元素组成的一维数组,对其赋值,再把该数组反向输出。
3 定义一个10个元素组成的一维数组,求该数组中的最大值和最小值。
及最大值和最小值的平均值。
4定义一个10个元素组成的一维数组,求该数组中的最大值,以及最大值在该数组中的位置。
5 在一个由5个元素组成的一维数组中查找一个数字‘5’,如果该有数组中有此元素,由提示“数字5在此数组中”。
6在一个由5个元素组成的一维数组中查找一个已经定义好的数字,如果该有数组中有此元素,由提示“此数组中有***数字”,如果此数组中没有则提示“该数字不在此数组中”
7求一个由10个元素组成的一维数组中,所有元素的平均值
9 求1-1/3+1/5-1/7+1/9......的值。
,要求出前50项和值。
(循环即可)
10 将一个数组中的元素倒排过来,不能新开一个数组的临时存储空间,只能在原数组上改。
(冒泡)
11 编写一个5个元素的数组,将1-22个数随机抽取放到数组中,要求22个数不能有重复的(福彩22选5玩法)
12 编写一个二维数组(5行5列),将1-25这些数字放入数组中,要求二维数组的每一行每一列和对角线的和相加都相等(提示将1放到数组第一行的中间位置,下一个数字放到1的左上方,如果从矩阵上面出界,则放到最后一行,如果从左侧出界则放入到最后一列,如果左上
角被占用,则放到该数字的下方,类推)。
综合性、设计性实验报告姓名学号专业计算机科学与技术班级1402实验课程名称____数据结构_指导教师及职称___开课学期2016 年_上学期上课时间实验名称:数组应用实验时间:小组合作:是●否○1、实验目的:(1)掌握数组的基本应用和方法;(2)掌握字符数组和字符串函数的使用。
(3)掌握与字符串处理有关的算法。
2、实验设备及材料:机器配置:4G内存,AMD A8操作系统:windows xp开发工具:V C ++6.03、理论依据:【1】在C语言的环境,有一个四维数组,在计算机中都是以一维的形式保存。
【2】例如int cof[2][2][2][2]在计算机中保存形式与一个2*2*2*2大小的一维数组相同, 想要寻址一个数,因为编译器在看到数组的定义时就知道了数组每一维的大小.于是可以计算定位到相对于数组开始处的偏移.【3】为了容易理解,都是把多维数组分解成几行,每行中又有几列的这种形式,例如int cof [4][6][4][4],就是4行,每行中有6个元素,每个元素又是一个有4个子元素一维数组,而数组中的每个子元素仍然还是一个有4个子元素数组,【4】四维数组可视为以三维数组为数据元素的向量,四维数组中的每个元素都属于四个向量。
【5】由于计算机内存是一维的,多维数组的元素应排成线性序列后存人存储器。
数组一般不做插入和删除操作,即结构中元素个数和元素间关系不变化。
一般采用顺序存储方法表示数组。
分为行优先顺序和列优先顺序。
【6】由地址计算公式可得,数组中任一元素可通过地址公式在相同时间内存取。
即顺序存储的数组是随机存取结构。
4、算法步骤及注意事项:算法步骤:(1)首先,在定义四维数组的数据类型时,我选择了整型以方便编程及利于数据的输入和输出。
为了实现任务所要求的功能,我将程序划分为三类:功能函数,界面函数以及主函数。
另外,其中的功能函数包括以下几种函数:四维数组元素输入函数、四维数组元素输出函数、元素查找函数、功能介绍函数以及主函数。