实验九 二维数组及字符数组程序设计1
第6章 二维数组和字符数组
第 6章 二维数组和字符数组
——进阶篇
内容概述
1.二维数组的定义、引用、初始化、在 计算机中的存储及其使用方法。 2.字符串的输入输出操作及常用的字符 串操作函数。
C语言程序设计
——进阶篇
教学目标
1.掌握二维数组的定义、初始化及其使用方法。 2.了解二维数组在计算机中的存储结构并对数据 进行存储和管理。 3.掌握字符串的输入输出方法,熟悉常用的字符 串操作函数。 4.学会使用数组解决实际问题的基本方法,能用 一维数组和二维数组解决简单的实际问题。
——进阶篇
4.字符串拷贝函数strcpy()
格式:strcpy (字符数组名1,字符数组名2) 功能:把字符数组2中的字符串拷贝到字符数组1中。串 结束标志‘\0’也一同拷贝。字符数名2也可以是 一个字符串常量。这时相当于把一个字符串赋予 一个字符数组。 例如: #include"string.h" void main() { char st1[15],st2[]="C Language"; strcpy(st1,st2); puts(st1); printf("\n"); } C语言程序设计
按行连续赋值可写为:
int a[5][3]={ 80,75,92,61,65,71, 59,63,70,85,87,90,76,77,85};
这两种赋初值的结果是完全相同的。
C语言程序设计
——进阶篇
对于二维数组初始化赋值还有以下说明: 可以只对部分元素赋初值,未赋初值的元素自动 取0值。 例如: int a[3][3]={{1},{2},{3}}; 如对全部元素赋初值,则第一维的长度可以不给 出, 但第二维的长度不能省略。 例如: int a[3][3]={1,2,3,4,5,6,7,8,9}; 可以写为: int a[][3]={1,2,3,4,5,6,7,8,9};
数组程序设计实验报告
数组程序设计实验报告《数组程序设计实验报告》在计算机科学领域,数组是一种非常重要的数据结构,它可以存储多个相同类型的数据,并且可以通过索引来访问和操作这些数据。
在本次实验中,我们将使用数组来设计和实现一些简单的程序,以加深对数组的理解和应用能力。
实验一:数组的基本操作在这个实验中,我们首先学习了如何声明和初始化数组,然后进行了一些基本的数组操作,比如访问数组元素、修改数组元素、以及遍历数组等。
通过这些操作,我们对数组的基本特性有了更深入的了解,并且能够更加灵活地使用数组来存储和处理数据。
实验二:数组的排序算法在这个实验中,我们学习了几种常见的数组排序算法,比如冒泡排序、选择排序和插入排序。
通过实现这些排序算法,我们深入理解了数组元素之间的比较和交换操作,以及不同排序算法的时间复杂度和空间复杂度。
同时,我们也学会了如何根据具体的需求选择合适的排序算法来优化程序性能。
实验三:数组的应用案例在这个实验中,我们将学习如何利用数组来解决实际的问题。
比如,我们可以使用数组来实现一个简单的学生成绩管理系统,或者用数组来存储和统计一组数据的频率分布。
通过这些案例,我们不仅能够加深对数组的理解,还能够提高自己的编程能力和解决问题的能力。
总结通过本次实验,我们对数组的基本操作、排序算法和应用案例有了更深入的了解,同时也提高了自己的编程能力和问题解决能力。
数组作为一种重要的数据结构,在实际的软件开发中有着广泛的应用,因此我们需要不断地学习和掌握数组的相关知识,以便更好地应用它们来解决实际的问题。
希望通过这次实验,我们能够更加熟练地使用数组,并且能够将所学到的知识应用到实际的软件开发中去。
C语言程序设计教程_第09章_二维数组的应用
构成了一个矩阵,但在物理上仍旧占据的
是一串连续的存储单元。这些元素在内存
中的排列顺序是“按行”存放,即:先放
第0行的元素,再放第1行的元素,依次类
推。
如有定义: int x[2][3]; 则数组x在内存中的存储结构如图9-1 所示:
图9-1 二维数组存储结构示意图
二维数组每个元素都具有一个名字— —带有双下标的变量。它的一般表示形式 为: 数组名[下标表达式1][下标表达式2] 如 图 9 - 1 中 所 标 出 的 x[0][0]、 x[0][1]、…… 这里每一维的下标都可以是 整型的常量、变量或表达式。如:x[i][j]、 x[0][j+1]等都是合法的。注意:C语言中二 维数组元素的两个下标是分别放在两个方 括号中的,不要误写成x[0,0]、x[i,j]这种非 法形式。
main( ) { int n[5][5]={0},i,j,k=1; for(i=0; i<5; i++) for(j=0; j<=i; j++) n[i][j]=k++; for(i=0; i<5; i++) { for(j=0; j<5; j++) printf("%3d",n[i][j]); printf("\n"); } }
二维数组元素的引用与一维数组相同, 也能够参与同类型变量允许的所有操作。 例如: scanf("%d", &x[0][0]); /* 输入 */ x[1][0]=x[0][0]; /* 赋值 */ if (x[0][0]>10) … /* 条件判断 */
《C语言程序设计》实验报告(实验1-11) 2013.3
《C语言程序设计》实验报告2012~2013学年第二学期班级姓名学号指导教师实验一实验项目名称:C程序的运行环境和运行C程序的方法所使用的工具软件及环境:Visual C++ 6.0一、实验目的:1.了解在Visual C++ 6.0环境下如何编辑、编译、连接和运行一个C程序;2.通过运行简单的C程序,初步了解C源程序的特点。
二、预习内容:教材《C语言程序设计教程》第1章。
三、实验内容:1. 在Visual C++ 6.0环境下输入并运行下面的程序:#include <stdio.h>int main( ){printf("This is a C program.\n");return 0;}2. 在Visual C++ 6.0环境下输入下面的程序(有语法错误),编译、连接、调试该程序,直至程序无语法错误,然后运行程序,并观察分析运行结果。
#include <stdio.h>int main( ){int a,b,suma=3;b=4;sun=a+b;print(“%d+%d=%d\n”,a,b,sum);return 0;}四、实验结果:1. 运行结果(或截图):2. (1) 改正后的源程序:(2) 运行结果(或截图):五、思考题:1. 一个C程序上机的步骤有哪些?答:2. 组成C程序的基本单位是函数,一个函数包括哪几个部分?答:成绩指导教师签名实验二实验项目名称:数据类型、运算符和表达式所使用的工具软件及环境:Visual C++ 6.0一、实验目的:1.掌握整型、实型与字符型这三种基本类型的概念;2.掌握常量及变量的使用方法;3. 掌握基本算术运算符及其表达式的使用方法;4. 掌握++、--运算符、赋值运算符及其表达式的使用方法。
二、预习内容:教材《C语言程序设计教程》第2章。
三、实验内容:1. 在Visual C++ 6.0环境下输入下面的程序,编译、连接、调试该程序。
二维数组应用课程设计
二维数组应用课程设计一、课程目标知识目标:1. 理解二维数组的定义、结构和存储方式,掌握其基本概念。
2. 学会使用二维数组进行数据处理,包括数组元素的访问、赋值和遍历。
3. 能够运用二维数组解决实际问题,如存储和操作表格数据、图像信息等。
技能目标:1. 培养学生运用二维数组进行编程解决问题的能力,提高代码编写技巧。
2. 培养学生分析问题、设计算法和编写程序的能力,特别是在处理多维数据方面。
3. 培养学生运用调试工具,发现并解决二维数组使用过程中的错误。
情感态度价值观目标:1. 培养学生对计算机科学和编程的兴趣,激发学生主动探索二维数组相关知识。
2. 培养学生面对问题时,具备积极思考、合作交流和解决问题的态度。
3. 培养学生严谨、细致的学术品质,注重代码规范,养成良好的编程习惯。
本课程针对初中或高中年级学生,考虑学生已具备一维数组的基础知识,通过本课程的学习,使学生在二维数组应用方面达到以上目标。
在教学过程中,注重理论与实践相结合,以实际案例为引导,激发学生学习兴趣,提高编程实践能力。
同时,关注学生个体差异,针对不同层次的学生进行分层教学,使每位学生都能在课程中取得进步。
通过本课程的学习,为学生在后续学习算法竞赛、软件开发等领域打下坚实基础。
二、教学内容1. 二维数组的定义与初始化:介绍二维数组的结构,与一维数组的关系,如何声明和初始化二维数组。
2. 二维数组的访问与遍历:讲解如何通过下标访问二维数组的元素,演示遍历二维数组的几种常见方法。
3. 二维数组的应用场景:分析二维数组在存储矩阵、图像处理等方面的应用,举例说明其优势。
4. 二维数组操作实例:结合实际案例,教授如何进行二维数组的排序、查找等操作。
5. 二维数组编程实践:布置具有挑战性的编程任务,让学生动手实践二维数组的使用,如解决迷宫问题、棋盘游戏等。
6. 二维数组错误分析与调试:分析常见的二维数组使用错误,教授调试技巧,提高解决问题的能力。
C语言程序设计实验报告数组
C语言程序设计实验报告(数组)1实验目的(1)熟练掌握一维数组,二维数组的定义,初始化和输入、输出方法;(2)熟练掌握字符数组和字符串函数的使用;(3)掌握与数组有关的常用算法(查找、排序等)。
2实验内容编写函数catStr(char str1[],char str2[])用于进行两个字符串的连接,编写函数lenStr(char str[])用于统计一个字符串的长度,并在主函数中调用。
要求:1、不允许用strcat()和strlen()字符处理库函数;2、在主函数以直接初始化的方式输入两个字符串str1和str2.调用函数strlen()计算并返回两个字符串的长度;3、调用函数catstr()连接两个字符串(将str2连接在str1后面);4、调用函数lenstr()计算并返回连接后字符串的长度;5、在主函数中输入两个原始的字符串及几个字符串的长度,以及处理后字符串及其长度。
.算法描述流程图 3catStr函数lenStr函数开始开始定义函数定义函数lenStr(char str[])catStr(char str1[],char str2[])i=0;声名变量并赋i,j声名变量i=0,j=0初值m[i]!='\0'str1[i]!='\0' 真假str2[j]!='\0'printf(%d,i);str1[i+j]=str2[j];i++str1[i+j]='\0';结i++,j+结束主函数开始声名变量s1[50]=shi,s2[50]=weiyu;调用函数lenStr();并输调用函数catStr()的s1,s2输出出连接后的字符串字符长度输出连接后字再次调用函符串的长lenStr(结束源程序4#include<stdio.h>#include<string.h>catStr(char str1[],char str2[]) void{ int i,j;for (i=0;str1[i]!='\0';i++);for(j=0;str2[j]!='\0';j++) str1[i+j]=str2[j];str1[i+j]='\0';}lenStr(char m[] ){int i;for (i=0;m[i]!='\0';i++);printf(%d,i); }void main(){char s1[50]=orever,s2[50]=more;printf(s1=%s,s2=%s,s1,s2);printf(\s1的长度:);lenStr(s1);printf(\s2的长度:);lenStr(s2);catStr(s1,s2);printf(\连接后的字符:);printf(%s\n,s1);牰湩晴尨连接后字符的长度:);lenStr(s1);printf(\);}5测试数据s1=forever, s2=more6运行结果7出现问题及解决方法在输入程序时,少写了半边引号,调试时发现存在错误,找到了错误并加以改正。
二维数组课程设计
二维数组课程设计一、教学目标本节课的教学目标是让学生掌握二维数组的概念、初始化、访问和遍历方法,以及了解二维数组在实际编程中的应用。
具体来说,知识目标包括:1.理解二维数组的概念和特点;2.掌握二维数组的初始化方法,包括静态初始化和动态初始化;3.掌握二维数组的访问和遍历方法,能熟练使用循环结构进行操作;4.了解二维数组在实际编程中的应用场景。
技能目标包括:1.能够使用二维数组解决实际问题;2.能够编写二维数组的初始化、访问和遍历代码;3.能够对二维数组进行操作和优化。
情感态度价值观目标包括:1.培养学生的团队合作意识,鼓励学生在课堂上互相讨论和分享;2.培养学生对编程的兴趣和自信心,鼓励学生主动探索和解决问题;3.培养学生的好奇心和创新精神,鼓励学生提出新的观点和思路。
二、教学内容本节课的教学内容主要包括二维数组的概念、初始化、访问和遍历方法,以及二维数组在实际编程中的应用。
具体包括以下几个部分:1.二维数组的概念和特点:介绍二维数组的定义、组成和特点,理解二维数组与一维数组的区别;2.二维数组的初始化:介绍静态初始化和动态初始化的方法,举例说明如何初始化二维数组;3.二维数组的访问和遍历:介绍访问和遍历二维数组的方法,举例说明如何使用循环结构进行操作;4.二维数组在实际编程中的应用:通过实例讲解二维数组在实际编程中的应用场景,如矩阵运算、排序等。
三、教学方法为了提高学生的学习兴趣和主动性,本节课将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。
具体包括以下几个方面:1.讲授法:通过讲解二维数组的概念、初始化、访问和遍历方法,使学生掌握基本知识;2.讨论法:学生进行小组讨论,分享彼此的学习心得和解题思路,提高学生的合作能力;3.案例分析法:通过分析实际编程中的二维数组应用场景,使学生更好地理解二维数组的作用;4.实验法:安排课堂练习,让学生动手编写代码,培养学生的实际操作能力。
四、教学资源为了支持教学内容和教学方法的实施,本节课将准备以下教学资源:1.教材:选用权威、实用的编程教材,为学生提供系统的学习资料;2.参考书:提供相关的编程参考书籍,丰富学生的知识储备;3.多媒体资料:制作精美的PPT,生动形象地展示二维数组的相关概念和实例;4.实验设备:准备计算机、编程环境等实验设备,确保学生能够进行实际操作。
二维数组的实验报告
班级:0900姓名:学号:*****
课程名称
高级语言程序设计
实验项目
一级指针与一维数组变成及函数编程练习
实验项目类型
验证
演示
综合
设计
指导教师
李养群
成绩
一、实验目的
(1)掌握一级指针的定义与使用。
(2)掌握一维数组的定义与使用,理解数组的长度与下标的范围。
(3)正确使用流程控制语句,掌握指针法与下标法访问数组元素的方法。
for(i=0;i<9;i++)
{
for(j=i+1;j<10;j++)
if(array[j]<array[i])
{ temp=array[i];
array[i]=array[j];
array[j]=temp;}
}
printf("数组从小到大的排列顺序为:\n");
for(i=0;i<10;i++)
{
sum=sum+p[i];
if(max<p[i])
max=p[i];
if(min>p[i])
min=p[i];
}
average=sum/10;
printf("数组的最大值与最小值,平均值如下\n");
printf("max=%5f\n",max);
printf("min=%5f\n",min);
printf("average=%5f\n",average);
for(i=0;i<10;i++)
实验二维数组与字符数组教程
实验8二维数组与字符数组【实验题1】程序填空,输入一个4×4矩阵,求出主对角线上的元素之和sum1、副对角线上的元素之和sum2,并输出结果。
【算法分析】:每一行只有一个主对角线元素a[i][i](特征:i==j),也仅有一个副对角线元素a[i][n-i-1](特征:i+j==n-1,即j=n-1-i)#include<stdio.h>void main(){int i,j,sum1=0,sum2=0, a[4][4];printf("Input a 4*4 matrix:\n");for(i=0;i<4;i++)for(j=0;j<4;j++)scanf("%d", &a[i][j]);for(i=0;i<4;i++){sum1+=a[i][i];sum2+=a[i][3-i] ;}printf("sum1=%d, sum2=%d\n",sum1,sum2);}【实验题2】程序填空,打印杨辉三角形前10行:11112113311464115101051……………………【算法分析】:分析一个10行的杨辉三角,需要一个10×10的二维矩阵a,则:1)杨辉三角为下三角矩阵,只需要求出第i 行(i=0,1,2,…,9)前i+1 个元素,即a[i][j]!=0 (j=0…i).2)每行的第0 列元素均为1,即a[i][0]=1?3)每行的主对角线元素也均为1,即a[i][i]=1?4)从第 2 行开始,每行夹在第0 列元素与主对角线元素之间的元素等于其左上方元素a[i-1][j-1]与正上方元素a[i][j]( i=2,3,…,9, j=1,..,i-1 )a[i-1][j]之和,即a[i][j]=a[i-1][j-1]+a[i-1][j];5)输出该矩阵的下三角,即得出杨辉三角的前10 行。
二维数组程序设计实验报告
实验报告一、实验目的(1)掌握二维数组的定义、赋值、输入和输出及二维数组元素的引用方法。
(2)掌握二维数组的相关算法(矩阵行列互换、矩阵中特定数据的查找)。
(3巩固循环嵌套的使用。
(4)学习VC环境下调试二维数组程序的方法。
二、实验内容(1)输入5×5的数组,编写程序实现:1)求出对角线上各元素的和;2)求出对角线上行、列下标均为偶数的各元素之积;3)求出对角线上其值最大的元素和它数组中的位置。
(2)在屏幕上打印出如下杨辉三角形(要求打印出10行)11 11 2 11 3 3 11 4 6 4 11 5 1010 5 1三、实验原理(包括程序源代码、图表等)#include <stdio.h>void main(){int a[5][5];int i,j,n=1,s=0,m,x,y;for(i=0;i<5;i++){for(j=0;j<5;j++)scanf("%d",&a[i][j]);}for(i=0;i<5;i++)for(j=0;j<5;j++)if(i==j)s=s+a[i][j];printf("对角线上数的和为:%d\n",s);for(i=0;i<5;i++)for(j=0;j<5;j++)if(i%2==0&&j%2==0)n=n*a[i][j];printf("行、列下标均为偶数的数的积为:%d\n",n); m=a[0][0];for(i=0;i<4;i++){for(j=0;j<4;j++)if(i==j){if(a[i][j]<a[i+1][j+1]){m=a[i+1][j+1];x=i+1;y=j+1;}}}printf("对角线上最大数为:%d,其行下标为:%d,列下标为%d.\n",m,x,y); }#include <stdio.h>void main(){int a[10][10],i,j;for(i=0;i<10;i++){a[i][0]=1;a[i][i]=1;if(i>1)for(j=1;j<i;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];}for(i=0;i<10;i++){for(j=0;j<=i;j++)printf("%-4d",a[i][j]);printf("\n");}}四、实验结果(附截图)五、思考题如何引用二维数组中的元素?二维数组元素的表示形式是数组名【下标】【下标】。
实验09 数组(二)
实验九数组(二)数组是FORTRAN90最常用的结构数据类型之一,数组是求解许多复杂问题的有效工具。
FORTRAN90不但提供静态数组,而且还新增加了动态数组,为求解复杂问题和提高程序运行效率提供了方便。
FORTRAN90提供了丰富的有关数组运算的标准函数,为问题求解带来了极大方便。
本次实验是学习和掌握多维数组、动态数组的一次系统实验活动。
通过本次实验,能够设计和编写比较复杂的数组应用程序。
一.实验目的1.进一步掌握数组声明、数组元素引用、数组输入输出、数组赋初值、数组构造器、隐含DO循环的使用规则。
2.掌握有关数组运算的常用标准函数。
3.掌握动态数组概念和动态数组的声明、存储分配的使用规则。
4.掌握设计和编写多维数组和动态数组应用程序。
二.实验内容11.问题描述在一个m×n的矩阵matrix中求绝对值最大和最小元素所在的行、列位置。
并将绝对值最小元素与第1行第1列数组元素交换,将绝对值最大元素与第m行第n列数组元素交换。
编写程序实现之。
25.5 35.2 38.5 15.3matrix= 15.2 12.0 29.5 18.520.3 14.5 30.5 17.82.算法设计已知的m×n的矩阵符合数组定义,用二维实型数组matrix保存,用数组构造器赋初值。
算法基本思想:使用“计数型”二重循环结构求绝对值最小元素min和最大元素max所在的位置。
然后将绝对值最小元素与第1行第1列数组元素matrix(1,1)交换,将绝对值最大元素第m行第n列数组元素matrix(m,n)交换。
输出绝对值最小元素和最大元素所在的行号和列号,以及交换前后矩阵数据。
根据分析,设计算法如下:算法:(1)给数组matrix赋初值;(2)给min赋初值:min=matrix(1,1), 位置赋初值:i_min=1,j_min=1;(3)给max赋初值:max=matrix(m,n),位置赋初值:i_max=m,j_max=n;(4)使用“计数型”二重循环结构求绝对值最小元素min,所在位置i_min和j_min,最大元素max,所在位置i_max和j_max;(5)输出绝对值最小元素min,所在位置i_min和j_min;(6)输出绝对值最大元素max,所在位置i_max和j_max;(7)输出交换前数组数据;(8)绝对值最小元素与数组第1行第1列元素matrix(1,1)交换;(9)绝对值最大元素与数组第m行第n列元素matrix(m,b)交换;(10)输出交换后数组数据。
实验九 二维数组及字符数组
#include "stdio.h" #include "string.h" void main() { char a[10],c[10]; strncpy(c,a,3); puts(c);
}
(4)将数组a转换成大写并输出。 #include "stdio.h" #include "string.h" void main() {char a[10]; gets(a); puts(strupr(a));
}
3. 从键盘输入一个字符串(英文字符),直到输入回车结束,将 该字符串存到数组a。完成以下操作: (1)统计字符串字符个数并输出。 (2)将数组a复制到数组b后,输出数组b。 (3)复制数组a的前3个字符到数组c中,并输出数组c。 (4)将数组a转换成大写并输出。
(1)统计字符串字符个数并输出。 #include "stdio.h" #include "string.h" void main() { char a[10]; gets(a); puts(a); printf("%d",strlen(a)); }
实验九 二维数组及字符数组
一、实验目的
二维数组的定义和引用 一维数组的初始化及输入与输出 字符数组定义及使用 字符串处理函数的应用
二、实验内容
1. 请输出如下矩阵: 1 2 3 4 5 0 1 2 3 4 0 0 1 2 3 0 0 0 1 2 0 0 0 0 1
2. 任意输入一个3×5的矩阵存入数组a,编程求出每一行的最大元素, 并按顺序存入数组b。输出数组a和数组b。
(2)将数组a复制到数 组b后,输出数组b。
#include "stdio.h" #include "string.h" void main() { char a[10],b[5]; gets(b); strcpy(a,b); puts(a); }
数据结构-二维数组基本操作的编程实现
数据结构(2013)实验报告04班级号:T 学生姓名: 实验方式:上机操作成绩:教师批阅处:【实验名称】二维数组基本操作的编程实现【实验目的】掌握二维数组的建立、读取数据、压缩存储等基本操作的编程实现,存储结构可以在顺序结构或链接结构中任选,也可以全部实现。
也鼓励学生利用基本操作进行一些应用的程序设计。
【实验分析】本次实验由于时间比较紧急,实验内容有比较多,所以老师就给了一部分源代码,然后实验过程中根据所给的代码和功能要求,修改和完善程序功能。
这次实验主要是以二维数组为主,练习和掌握二维数组的相关操作。
借助于推箱子游戏,将所学的理论知识融入其中,让学习变的不是枯燥无味的,体会学习的乐趣。
【程序运行主界面】由于老师给了大部分代码,为了练习和提高自己的阅读程序的能力,将程序函数的整体框架以框图形式表示出来。
【程序函数框架】begin()【实验过程及调试】(1)选择第一关移动小人,推动箱子,主要靠4个方向键来实现。
根据对应方向键的ASCII 码值,来调用相应函数。
对应关系如下表所示:case 72: up(); count++; break; case 80:down(); count++; break; case 75:left(); count++; break;case 77:right(); count++; break;choose_gate()输出主页面选关playing()display() 移动入口test_flag()record() review()choose()Creplay() begin()record()tack_back()T程序函数框 架图1.开始前2.结束3.提示(2)选择其他关数同理与第一关一样选择其他关数的基本操作与第一关类似,不再详细描述。
主要列出底层的移动过程。
关键代码:向左方向部分代码:if(map[positionh][positionl-1]==0) {map[positionh][positionl-1]=4;if(flag==1){map[positionh][positionl]=2; flag=0; }elsemap[positionh][positionl]=0;positionl--;}elseif(map[positionh][positionl-1]==2)//人要到目标位置上{map[positionh][positionl-1]=4;if(flag==1)map[positionh][positionl]=2;//恢复目标位置else{map[positionh][positionl]=0;//恢复原来的状态flag=1;//标志位,记录人在目标位置上}positionl--;} 向上方向部分代码:if(map[positionh-1][positionl]==0) {map[positionh-1][positionl]=4;if(flag==1){ map[positionh][positionl]=2; flag=0; }elsemap[positionh][positionl]=0;positionh--;}elseif(map[positionh-1][positionl]==2)//人要到目标位置上{map[positionh-1][positionl]=4;if(flag==1)map[positionh][positionl]=2;//恢复目标位置else{map[positionh][positionl]=0;//恢复原来的状态flag=1;//标志位,记录人在目标位置上}positionh--;}(3)反悔功能功能介绍:主要用到栈和队列的知识,用栈和队列来存放所走过的信息步骤。
C语言二维数组和字符数组程序设计实验
C语言二维数组和字符数组程序设计实验
一、实验目的
1.通过C程序的运行,强化掌握C程序在VC++6.0上的开发过程。
2.掌握C语言二维数组和字符数组程序设计。
二、实验环境
1.WIN XP、WIN7、WIN10等操作系统的PC机;
2.VC++6.0集成开发环境;
三、实验内容
1.参考第4章【例4-7】中的程序,定义4行5列的浮点型数组a并初始化,按行列格式输出,理解简单二维数组程序设计。
2.参考第4章【例4-10】中的程序,字符数组存储10个元素,输出数组中第3到第7个元素,理解简单字符数组程序设计。
3.修改第4章【例4-14】中的程序,for循环扫描字符串的结束条件,用i<输入字符串的长度进行判断,理解字符数组程序设计的应用。
4.修改第4章【例4-16】中的程序,输入一个字符串,删除字符串中某个指定字符和字符r,理解字符数组程序设计的应用。
5.参考第4章【例4-6】P102-103选择排序的程序,输入12个整数,输出由大到小的排序,理解一维数组排序应用的程序设计。
四、实验数据及处理结果
1.实验内容的源代码以及运行结果的截图;。
实验九、数组(2)
实验要求:
每次实验前,学生要先预习实验内容 ,写出分析结果或程序, 经实验指导老师检查后,上机运行、 调试程序,得出最终正确结果。
实验内容:
一. 读程序 要求:读懂程序,写出分析结果;上机运行程序,得到运行结果,比较之。 1、 include <stdio.h> main() { char s1[50]= “ I am ”; char s2[ ]=” student!” printf(“%d , \n”, strlen(s2) ); strcat(s1 , s2); printf(“ %s \n” , s1); } 分析结果 运行结果 2、 main() { char b[ 7 ] = { “ 67da12”} ; int i , s=0 ; for ( i =0 ; b [ i ] >=’ 0 ’ && b [ i ]<=’ 9 ’ ;i+ =2) s = 10*s + b [ i ] – ‘ 0 ‘ ; printf ( “ %d \n “ , s ) ; } 分析结果 运行结果
3、 # include <stdio.h> main() { int i= 0 ; char a [ ] = “cbm” ; char b [ ] = “cqid” , c [10] ; while ( a [ i ] != ‘\0’ && b [ i ] != ‘\0’ ) { if (a [ i ] >= b [ i ] ) c [ i ] = 行
2、 下面程序的功能是:将字符数组 a [6] ={ ‘a’ , ‘ b ‘ , ‘ c ‘, ‘ d ‘ , ‘ e ‘ , ‘ f ‘ } 变为 a [6] ={‘ f ‘ , ‘a’ , ‘ b ‘ , ‘ c ‘, ‘ d ‘ , ‘ e ‘ , }。 main( ) 1 { int i ;char t; 2 char a [ 6 ] = { ‘a’ , ‘ b ‘ , ‘ c ‘, ‘ d ‘ , ‘ e ‘ , ‘ f ‘ } ; 3 t = a [5 ] ; 4 for (i=5 ; a [ i ] ! = ‘ \ 0 ‘ ; i - - ) 5 a [i] =a [ i–1 ] ; 6 a [ 0 ] =t; 7 for (i=0 ;i < =5 ;i++) 8 printf (“%c” , a [ i ] ); 9 printf ( “\n”) ; 10 } 对 错 运行结果 错误在 应改为: 行
二维数组和字符数组参考程序
1、【问题描述】编写程序,计算一个矩阵的各行之和、各列之和以及所有元素之和。
【输入形式】输入分m+1行:第一行为m和n的值,分别表示矩阵的行数和列数;下面m 行,每行n个数为矩阵的数据。
【输出形式】输出分三行:第一行为各行之和,第二行为各列之和,第三行为所有元素之和。
【样例输入】2 31 2 34 5 6【样例输出】6 155 7 921【样例说明】2行3列的矩阵,矩阵中第0行元素之和为6,第1行元素之和为15;第0列元素之和为5,第1列元素之和为7,第2列元素之和为9#include <iostream>using namespace std;int main( ){int a[50][50]={0}, m, n, i, j;cin>>m>>n;for(i=0; i<m; i++)for(j=0; j<n; j++)cin>>a[i][j];for(i=0; i<m; i++)for(j=0; j<n; j++){a[i][n]+=a[i][j];a[m][j]+=a[i][j];a[m][n]+=a[i][j];}for(i=0; i<m; i++)cout<<a[i][n]<<" ";cout<<endl;for(j=0; j<n; j++)cout<<a[m][j]<<" ";cout<<endl<<a[m][n];return 0;}2、【问题描述】编写程序,找出m行n列的矩阵中每行元素的最大值以及每列元素的最小值。
【输入形式】输入分m+1行:第一行为m和n的值,下面m行代表二维数组,其中每一行包括n个数。
【输出形式】输出分两行:第一行为每行元素的最大值,第二行为每列元素的最小值。
二维数组基本操作的编程实现
实验四二维数组基本操作的编程实现一、实验目的掌握二维数组的建立、读取数据、压缩存储等基本操作的编程实现,存储结构可以在顺序结构或链接结构中任选,也可以全部实现。
也鼓励学生利用基本操作进行一些应用的程序设计。
二、实验要求1. 修改程序:补充推箱子游戏的遗缺的部分,使之能正常运行,逻辑结果正确。
之后增加至少一关自己的关数,墙体,箱子的最初位置,人的最初位置由自己设定,要求必须有解,而且有一定的破解难度。
主要的问题是部分移动方向的代码没有给出,另外计数器的整体工作不正常,更完善的修改包括启用栈结构实现后悔的机制。
2.运行程序了解二维结构:稀疏矩阵的压缩和解压缩、生命繁衍模型、迷宫问题等,通过这些程序的运行过程或结果体会二维结构在程序设计中的重要性和实用性。
原始数据构建方式最简模式为:键盘输入。
其他的方式也在鼓励之中:数据内置,计算机自动生成,文件读入。
三、程序说明程序中用于建立栈的类//节点class Reback{public:int re_key_up;int re_key_down;int re_key_left;int re_key_right;int re_count;int re_movex;int re_movey;int re_movexold;int re_moveyold;int re_peopleflag;int re_Maptemp[11][11];Reback *next;Reback *before;};Reback *headp=new Reback;//头指针Reback *tailp=new Reback;//尾指针说明:此类用于存储每一步的游戏临时数据,用于回退程序中的功能函数void myDraw(HWND hWnd,HDC &dc);//界面的绘制void Key_D(HWND &hWnd,HDC &dc,int key_value);//响应键盘void init();//初始化函数void CueatMap(int AimMap[][11]);//创建地图void rememberbefore();//保存数据(入栈)void returnbefore();//还原数据(出栈)void delrecord();//删除数据(清空栈)功能的实现:1.游戏中的鼠标操作的实现:case WM_LBUTTONDOWN://鼠标左键点击消息{int x,y,i=0,j=0,count=0;x=LOWORD(lParam);//相对于窗口的位置y=HIWORD(lParam);if(x>=775&&y<=35){delrecord();//释放资源PostQuitMessage(0);//发送窗口销毁消息用于关闭窗口}else if(x>=0&&x<=774&&y<35){SendMessage(hWnd,WM_SYSCOMMAND,SC_MOVE+HTCAPTION,0);//发送消息}else if(x>600&&y>120&&x<720&&y<160){//上一关if(Mapdatacounnt-1>=0){Mapdatacounnt--;delrecord();}CueatMap(Mapdata[Mapdatacounnt]);InvalidateRect(hWnd, NULL, true);}else if(x>600&&y>200&&x<720&&y<240){//下一关if(Mapdatacounnt+1<Checkpoint){Mapdatacounnt++;delrecord();}CueatMap(Mapdata[Mapdatacounnt]);InvalidateRect(hWnd, NULL, true);}else if(x>600&&y>280&&x<720&&y<320){//后退一步returnbefore();InvalidateRect(hWnd, NULL, true);}else if(x>600&&y>410&&x<720&&y<450){ShellExecute(hWnd,"open","about.exe","","", SW_SHOW );}}说明:此处的设计方法为,先获取鼠标在窗口中的点击坐标,然后判断该坐标点是否在设定的区域,如果是,则执行相应的操作2.游戏中键盘操作的实现:/*键盘消息处理函数*/void Key_D(HWND &hWnd,HDC &hdc,int key_value){//用于响应键盘消息的处理//限定区域if(count!=4){rememberbefore();switch(key_value){case 38:{//在key_up-40之前进行判断看执行此计算后是否还在游戏区域内其他方向相同if((key_up-40+key_down+40)/40>0){key_up-=40;}}break;case 39:{if((key_left+key_right+40+40)/40<=9){key_right+=40;}}break;case 40:{if((key_up+key_down+40+40)/40<=9){key_down+=40;}}break;case 37:{if((key_left-40+key_right+40)/40>0){key_left-=40;}}break;}keyflag=key_value;InvalidateRect(hWnd, NULL, true);}说明:获取发生键盘消息时对应的键值,判断此时是否游戏过关,如果没过关就记录当前的游戏数据,响应方向键,如果过关就响应回车键,进入下一关,同时调用屏幕刷新函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验九二维数组及字符数组程序设计
姓名:周咪咪班级:11数字媒体技术(2)学号:2011329700214 实验目的:
1、掌握二维数组的定义和引用方法。
2、掌握字符数组的定义和使用方法。
3、掌握正确使用一维数组及字符数组编程。
实验内容:
1、编写程序,输入两个正整数m和n(1≤m,n≤6),然后输入该m行n列矩阵a中的元
素,分别求出各行元素之和,并输出。
2、编写程序,输入一个正整数n(1≤n≤6)和n阶方阵a中的元素,如果找到a的鞍点(鞍
点的元素值在该行上最大,在该列上最小),就输出它的下标;否则输出“NO”(设a 最多有一个鞍点)。
3、编写程序,输入一个以回车符结束的字符串(少于80个字符),过滤去所有的非十六进
制字符后,组成一个新字符串(十六进制形式),然后将其转换为十进制数后输出。
实验过程:
一、实验一
1、算法思路:
(1)先定义数组,输入数据显示行列式。
(2)再用循环实现各行元素之和。
2、程序清单:
#include<stdio.h>
int main(void)
{
int i,j,m,n,sum;
printf("enter m,n:");
scanf("%d%d",&m,&n);
int a[6][6];
printf("enter digit:");
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
{
sum=0;
for(j=0;j<n;j++)
sum=sum+a[i][j];
printf("\n");
printf("sum=%d",sum);
}
return 0;
}
3、原始数据:
m=3,n=3
Enter digit:1 2 3 4 5 6 7 8 9
4、运行结果:
5、分析与思考:
(1)sum不要忘输初值。
(2)数组的定义为a[6][6]表示最多为6行6列。
二、实验二
1、算法思路:
先通过循环在行中找到最大数,记下此时的列数。
再根据列数,找到该列中的最小数。
判断最大数和最小数是不是相等,是的话输出该元素的下标,不是的话输出“no”。
2、程序清单:
#include<stdio.h>
int main(void)
{
int i,j,n,max,min,row,col;
printf("enter n(n<=6):");
scanf("%d",&n);
int a[6][6];
printf("enter digit:");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
{
for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
for(i=0;i<n;i++)
{
max=a[i][0];
for(j=0;j<n;j++)
{
if(a[i][j]>max)
{
max=a[i][j];
row=i,col=j;
}
}
min=a[0][col];
for(j=col,i=0;i<n;i++)
{
if(a[i][j]<min)
min=a[i][j];
}
}
if(min==max)
{
printf("the row of number is:%d\n",row);
printf("the col of number is:%d\n",col);
}
else
printf("no\n");
return 0;
}
3、原始数据:
n=3
enter digit :2 4 8 2 3 9 4 5 70
4、运行结果:
5、分析与思考:
(1)在多重循环的程序中要注意加{ }的位置,否则会出错的。
(2)注意小错误,如:等于为"=="
三、实验三
1、算法思路:
(1)先定义数组a[81](前面80个为字符,最后一个为回车符)。
(2)再用循环判断语句实现滤去所有的非十六进制字符,形成新的字符串。
(3)再将字符型转换成十进制型输出。
2、程序清单:
#include<stdio.h>
int main(void)
{
char a[81],ch;
int b,i,j,sum=0,k=0,item=1;
i=0;
printf("enter string:");
ch=getchar();
while(ch!='\n')
{
if((ch>='0'&&ch<='9')||(ch>='a'&&ch<='f'))
{
a[i]=ch;
i++;
}
ch=getchar();
}
for(j=i-1;j>=0;j--)
{
if(a[j]>='0'&&a[j]<='9')
b=a[j]-'0';
else
b=10+a[j]-'a';
sum=sum+b*item;
item=item*16;
}
printf("%d\n",sum);
return 0;
}
3、原始数据:
输入123#ap
4、运行结果:
5、分析与思考:
(1)在转换数据类型时,要先对字符分类。
(2)要清楚十六进制字符的范围为"0~f"。