7.初始化二维数组:
分行给二维数组赋初值;
将所有的元素都写在一个花括号里;
对部分元素赋值:
1)int a[3][3]={{3},{5},{9}};只讲0列元素赋值
2)int a[3][3]={{1}, {0,6},{0,0,11}};对部分元素赋值,对非0元素少使用方便
3)int a[3][3]={{1}, {5,6}};只对几行元素赋值
4)int a[3][3]={{1}, {},{9}};对第二行元素赋值
对全部元素赋值可以省略一维长度:
对部分元素赋初值,在省略一位长度时,应分行赋值:
8.二维数组的输入输出:
输入:直接定义
输出:
for(i=0;i<=2;i++)
{for(j=0;j<=1;j++)
printf(“%5d”,b[i][j]);
printf(“n”);
}
9.二维数组的行列转换:
b[j][i]=a[i][j];
10.数组中求最大值并输出行列号:
Eg:inti,row=0,colum=0,max;
inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
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;}
11.字符数组的初始化方法:
逐个字符初始化:
eg:char c[10]={„I‟, „‟, „a‟, „m‟, „‟, „h‟, „a‟, „p‟, „p‟, „y‟};
1)在定义字符数组时,不初始化,则数组中的各元素的之不可预料;
2)如果花括号中提供的初值个数(即字符个数)大于数组的长度,则按语法错误
处理;
3)如果花括号中提供的初值个数(即字符个数)小于数组的长度,其余元素自动
定为空字符即(„ ‟);
如果提供的初值个数与数组长度相同,则在定义时可以省略数组长度; 也可以定义一个二维数组:
eg:char diamond[5][5]={{},{},{},{},{}}; 用字符串常量,使字符数组初始化:
eg: char c[ ]={“I am happy”};或char c[ ]= “I am happy”;
12.字符数组的输出:
一维:二维:
for(i=0;i<=11;i++)for(i=0;i<=11;i++)
printf(“%c”,c[i]);for(i=0;i<5;i++)
printf(“n”);printf(“%c”,diamond[i][j]);
13.字符数组输出最大值:
eg:if(strcmp(string,str[1]>0)
strcpy(string,str[0]>0);
else
strcpy(string,str[1]);
if(strcmp(str[2],string>0)
strcpy(string,str[2]);
printf(“%s”,string);
求解Josephus问题实验总结
1实验题目: josephus问题可描述如下:
设有n个人围成一个环,现从第s个人开始报数,数到第m的人出列,然后从出列的下一个人从新开始报数,数到第m的人又出列,如此重复,直至所有人均出列为止。求这些人出列的顺序。
2实验目的:
熟练掌握线性表的顺序实现和链式实现的基本操作。
3实验方法:
通过运用已学的向量和循环单链表编写程序,并在电脑上运行,实现josephus问题的求解。4实验过程与结果:
(1)输入n值为6,s值为3,m值为2,输入A[i]的值为1 2 3 4 5 6 输出结 果为:4 6 2 5 3 1 截图如下:
(2)
1、输入n值为-1, s值为3,m值为2,显示:ERROR。截图如下:
2、输入n值为6, s值为0,m值为3,显示:ERROR。截图如下:
3、输入n值为6, s值为3,m值为0,显示:ERROR。截图如下
:
5试验体会与收获:
(1)写程序是要随时注意缩进,使得程序层次清晰,便于寻找错误,同时也让别人看的更加方便。(2)构造循环单链表,要以单链表为单元指针指向把最后个单元与第一个即可(3)建立好循环单链表后,通过三个指针(p,q,tmp)的指示,来确定报数,出列人的位置,得以完成。具体过程如下:p指向head头指针,通过s次循环将p指向报数的起始位置s,用q记录p的位置,再经过m次循环另p指向出列者的位置,将其数值保存在一维数组中,并将其从链表中删除,p指向下一次起始位置,结束时返回数组A[j]。(4)删除节点时,注意要释放节点。
(5)构造函数时,一定要明确函数的类型,即返回行还是不返回型,以免出现不必要的错误。