admin 管理员组文章数量: 1086019
2024年4月22日发(作者:struts流程图)
维普资讯
本栏目责任编辑:谢媛媛 ・・・・・・开发研究与设计技术・
C语言循环语句在二维数组中的应用
从艳,任益夫。刘喜梅
(河北农业大学海洋学院,河北秦皇岛066003)
摘要:根据循环语句遍历数组元素的具体方法,阐述相关的应用技巧.实现数组的各种应用.以指导C语言学习者对循环语句和数
组的理解和应用。
关键词:循环语句:存储格式:二维数组
中图分类号:TP301 文献标识码:A 文章编号:1009—3044(2007)13-30111—02
,
CONG Yan,KEN Yi—fu,LIU Xi~mei
Application of C Language Cycling Sentence in Two Demension Army
(Ocean Conege of Hebei Agricultural University,Qinhuangdao 066003,China)
Abstract:In this paper,based on the cychng sentence S ̄avehng through the array,various of application techniques of hem are eltaborated
SO as to instruct the C Language learner to understand and apply the cycling sentence and array.
Key words:Cycling Sentence;Storage Format;Two Demension Array
1引言
数组是一种常见的线性数据结构.在软件工程及其它各个领
域都有着广泛的应用。对于程序设计语言的初学者来说,数组和
循环结构程序设计都是重点掌握的内容.这里主要讨论如何利用
循环语句访问二维数组中的元素。
2数组的存储结构
数组是存储于一个连续存储空问中的相同数据类型的数据
元素的集合,是一种常见的线性数据结构。二维数组在实现存储
时.主要采用顺序存储方式进行存储.即将二维数组元素按照顺
序排列在一个连续的存储区域中.根据数组元素的排列顺序可以
分为按行存放和按列存放两种方式。存储示意图如下:
pfinff(“%d”,a【 】);
prinff(“\Il”); 实现换行 /11
程序中,外循环变量由0变化到2可以实现依次访问二维数
组的3行。由于C语言中二维数组的下标由0开始.为了和数组
元素的下标一致,通常情况下循环变量的初始值设置为0,要按照
行递增的顺序遍历二维数组.循环变量的增量设置为l,循环的终
值控制二维数组的行数。内循环变量由0变化到3可以实现依次
访问二维数组的4列。控制的方式同二维数组行的控制方法,由
此实现二维数组某一行各列的访问。其中内循环体为访问到的每
个数组元素的具体操作。算法的时间复杂度为O(n2)。
4循环语句在压缩存储的数组中的应用
对于一些特殊数组,可以使用压缩存储。特殊数组指的是数
组中存在大量的值相同的元素或0元素并且这些元素的分布呈
现一定的规律,。压缩存储的思想是为多个值相同的元素只分配
一
个存储空间.对0元素不分配空间。采用压缩存储可以节省大
(b)按列存储
在这种情况下,由下标确定元素存储地址非常简单.从下标
到存储地址的变换可由公式计算得出。变换公式取决于二维数组
是按行存储还是按列存储。C语言中二维数组是按行存储的,假
设每个数据元素占L个存储单元.则C语言二维数组中任意一个
元素aii的存储地址可由下列公式计算得出。
量的存储空间 因为特殊二维数组值相同的元素或0元素分布呈
现一定的规律,所以在存储时,它的下标和存储地址之间也存在
着某种转换关系,利用这种关系可以求出二维数组中任意一个元
素a 的存储地址。
例如:用二维数组表示下三角矩阵
al1 0 0… 0
Log(i,j)=loe(1,1)+(ni+j)L
3循环语句在二维数组中的应用
综合分析二维数组的应用得知.访问二维数组中的所有元素
是应用的基础。由于二维数组的存放及数组元素的下标存在一定
a21 a22 0… 0
a31 a32 a:3:3…0
的规律.可以通过双重循环语句运用这种规律实现二维数组中元
素的遍历。这里数组元素的遍历指的是按照某种线路依次访问数
组中的每个元素。
anl an2 an3 。”ann
实现方法的主要思想是:利用外循环变量控制数组元素行下
标的变化,利用内循环变量控制数组元素列下标的变化。利用循
环体实现每个访问到的数组元素的具体操作。
例如:要按行输出数组中的所有元素,程序如下:
main0
{int a[3l[4l={{1,2,3,4l,{5,6,7,8l,{9,10,ll,1211;
且初始化 /
因为矩阵中的下三角部分只有n(n+1)/2个非0元素,所以用
个连续的区域存储这些值即可。存储方式仍采用按行存储,存
储结构示意图如下:
一
1 I a21 l n-z2l a31 l a32
二维数组中任意一个元素aii的存储地址可由下列公式计算
得出。 ・
定义数组并
k=i(i一1)/2+j一1
例如:要按行输出数组中的所有非0元素.程序如下:
int i,j; /*i为外循环控制变量,i为内循环控制变量 /
for(i-O;i<=2;i++)
main0
{int a[41[41={{1,0,0,0l,{2,3,0,0l,{4,5,6,0l,{7,8,9,1011;
组并且初始化 /
定义数
{f0r6-0;j<=3 ++)
收稿日期:2007-06—11
作者简介:& ̄(1973一),女,河北秦皇岛人,助讲,主要从事C语言程序设计和数据库原理教学工作;任益夫(1974-),男,河北昌黎人,助讲
主要从事计算机原理教学工作;刘喜梅(1970一),女,河北辛集人,副教授,主要从事英语教学工作和信息技术资料翻译。
111
维普资讯
・
开发研究与设计技术・・・・・・
5结束语
本栏目责任编辑:谢媛媛
数组元素的具体操作。算法的时间复杂度为O(nz)。
遵循以上分析、设计、实现的编程思路,可以使用循环语句方
便、灵活的访问数组中的数组元素以实现各种具体的功能。
int i,j; /*i为外循环控制变量,i为内循环控制变量 ,
f0 =0;i<=3;i++)
{f0 =0 <=i ++)
printf(“%d”,a【i删);
printf(“\n”); 实现换行 川
程序中,外循环变量由0变化到3可以实现依次访问二维数
参考文献:
【11谭浩强.C语言程序设计【M】.北京:清华大学出版社,1991.
[2】尹绍宏.数据结构概论【M】.北京:清华大学出版社,北京交通
大学出版社.20o4.
组的4行。由于每列只存储了非0元素.而非0元素个数正好和
外循环变量变化同步.所以内循环变量由0变化到i可以实现依
次访问二维数组的每行的所有非0列。内循环体为访问到的每个
(上接第C023页)
由假设①和消息(4),根据规则⑥得:
U sees{(r,s),Nl ks-I;
如果P看到用自己有效公钥加密的信息,则P可以看到解
密的信息。
4.2初始信任与推证结果 ~
BAN逻辑是基于初始信任.使用推理规则来分析的。在分析
协议之前.先要假设一组初始信任,随着协议的运行,每接收到一
条消息都映射到信任集.结合初始信任(初始信任在协议运行时
是不变的),用推理公式推出新的信任.到最后信任集满足所要达
到的目标,则认为协议是正确的,如果信任集不能满足,则可以引
导发现协议的缺陷。
不同的密码协议.需要推证不同的结果。在多播数据源认证
协议中.主要的目标是消息发送者S要向消息接收者U证明其身
份,证明消息是由S发给U的。而在基于ECC的多播数据源认证
协议中.就是要U相信自己所收到的签名(r's)正是由S生成并发
送的。因此.信任达到以下目标,我们就认为源认证是完整的。
即:U believes X:U相信所收到的签名X是真实的;U be.
1ieves S believes X:B相信A相信自己生成的签名X。
4.3协议模型化
只考虑用户U是合法的情况.数据传输前的准备阶段模型化
为: ‘
再由假设③,根据规则②得:
U believes S said f(r's),Nl;
再根据假设⑤和规则⑤③得:
U believes S believes{(r,s),Nl;(a)
由假设④和fa),根据规则④得:
U believes{(r,s),Nl;(b)
因此根据(a)、(b)即有:
B believes X:B相信所收到的签名X的真实性:B believes A
elbieves X:B相信A相信自己生成的签名X。
最终的信任集表明,基于ECC的多播数据源认证协议的工作
是完整的、没有漏洞的.实现了多播环境下数据源认证的目标。
5协议性能分析
该认证协议的优点表现在:第一,由于采用以ECC为基础的
消息(1):
s—》Leade,((砌l Re quest,5r口s D 三日
s
一
ECDSA,因此协议具有很强的可认证性:第二,与其他的公钥算法
如RSA、DSA相比ECDSA的密钥规模更小(163位的ECDSA密
钥与1024位RSA密钥具有同等的安全强度),因此协议生成的签
名信息较小;第三.由于公钥签名算法本身可以完全抵抗同谋破
解,因此协议可以完全抵抗同谋破解;第四,发送方在发送端对每
则消息进行签名,因此对底层网络没有任何可靠性的要求而且
一
/D,Ⅳ)r.)i.
不会产生延时。
该协议的不足之处在于.在签名密钥频繁更换时需要计算预
存储矩阵的工作量较大.但是由于采用非在线的方式计算,所以
可以弥补这方面的不足;另外,采用公钥签名方案一般不需要频
繁更换密钥。
消息(2):
r U {{ ̄smanlD.S一119.
C
—
.
册 )‘
消息f3):
Laader-÷S.((A//ow ., ̄smonlD,册£ )南
6结束语
本文提出的基于ECDSA的多播数据源认证协议,可以有效
的实现多播数据源的认证.在军事、国防等高安全需求领域的应
数据传输阶段模型化为:
消息(4):
S_÷U:(((r,s),Ⅳ)rt)屯
由于只考虑合法用户的情况,初始化阶段就是用户合法化的
用更为有效,而且随着计算机处理能力的提高,该认证协议的效
率将越来越高。
过程,而消息传输前的准备阶段的消息(1)(2)(3)的分析与(4)完全相
同,因此此处只给出(4)的分析。
4.4协议分析 ・
参考文献:
『1]Ahmet M.Eskicioglu.Multimedia Security in Group Communi-
cations:Recent Progress in Key Management,Authentication,and Wa-
我们先给出假设:①U believes PK(u;Ku);②S believes PK(S;
KS);③U believes PK(S;KS);④U believes S controls(r's);⑤U be.
1ieves#fN)。前2个假设U相信KU是U的公钥,S相信KS是S
的公钥.因为在初始化阶段就要完成密钥生成,所以只要是合法
用户都已经有其公钥和私钥。而本文只考虑合法用户的情况,因
此所涉及的用户均有自己的公钥和私钥,所以这2个假设是可行
termarking『C IASrIED International Conference on Communications
and Computer Networks,Cambridge,M US November 4—6'2oo
【2]Mj.Moyer,J.R.Rao,P.Rohatgi.”A survey of security issues
in multicast communications”【C1.IEEE Network,1999,13(6),12-23.
『3lElsayed Mohammed,A.E.Emarah and Kh.E1一Shennawy,
Elliptic Curve Cryptosystem on Smart Cards,IEEE,Arab Academy
for Science and Technology.20o1.
的。假设③是用户u相信s的公钥是l(S,因为协议的前提条件假
设中提出当用户申请加入多播组时,表明该用户是信任Leader及
IJeader所发送的消息,而U是通过Leader获得S的公钥的,因此
【41Don Johnson,Alfred Menezes.The Elliptic Curve Digital
Signature Algorihm(tECDSA).Techical Report CORR 99—34,Dept.
of C&O.University of Waterloo,Canada.Also available from http://
w、^ .cacr.math.uwaterlo.ca.
u完全可以相信Ks是s的公钥。假设④是u相信s能够生成签
名信息X.由于签名信息X的确实由发送方S生成的,因此假设
④是合理的。假设⑤是u相信N是新鲜的,由于N本身就是新鲜
数.故而假设⑤是可行的。因此,上述的5个假设都是合理的。协
议分析的过程如下:
『5]Hankeson D,Lopezr J,Menezes A.Sofwatre implementation
of elliptic curve cryptography over binary fields【AI.Cryptographic
Hardware and Embedded Systems CHES 2000『C1. Berlin, Ger
many:Springer Verlag.200o:l一24.
『61范红,冯登国.安全协议理论与方法【M】.科学出版社,
20o3.10.
1 12 1{ 电脑知识与技术
版权声明:本文标题:C语言循环语句在二维数组中的应用 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1713744767a649570.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论