c语言实验题——字符串排序,C语言中实现“三个数由小到大排序”的多种方法浅析...

本文通过一个简单示例“三个数由小到大排序”,将C语言中许多知识点融会贯通起来,这多种方法的实现可以将函数、宏、指针之间的区别和本质清晰的展示给读者,使本来很复杂难以理解的概念变得通俗易懂。

维普资讯 http://doc.xuehai.net

T技术

S ic n T cnt yC nu c nead eho g osl e o

C语言中实现“三个数由小到大排序"的多种方法浅析

史文集

(黑龙江工程学院黑龙江哈尔滨 1 0 0 ) 0 1 5

摘要:本文通过一个简单示例“三个数由小到大排序”将 C语言中许多知识点融会贯通起来,多种方法的实现可以将函数、宏、,这 指针之间的区别和本质清晰的展示给读者,使本来很复杂难以理解的概念变得通俗易懂。 关键词:函数交换数据交换地址宏指针中图分类号: 3 6 TP l 文献标识码: A文章编号:6 3 5 42 0 ) ( ) 0 2— 1 1 7 0 3 ( 0 7O b一 0 3 0 4

S a f”, d%”&, b&c; c n (%d%, d, a&, ) 则。 在学习 C语言的过程中,章节的知各 P1=&a;=&b;=&c; p2 p3 识点似乎有些彼此脱节、孤立,教师若在 1交换地址 )讲解完各章节后,做一个总结,特别是以一 I a b{= lp= 2p=; f> ) p; l p;2 p} ( p #d f es px y{=;=;=} ei wa (,) x x y y p n p I a c{= lp= 3p=; f> ) p; l p;3 p} ( p man) i( 个实际的例子作讲解,别用不同的方法分来实现,以收到一个事半功倍的效果,可以 I b c{= 2 p= 3p=; f> )p p;2 p;3 p} ( { I a, C, nt b, p, pl, p2, p3; * * * 下就以“三个数由/ N大排序”为例,别 J,分 P it”, d%”* l* 2 * 3; r f%d%, d,p,p,p ) n ( 通过“不使用函数”定义函数”使用、“、“} S a f” d%d%”&a&b& ) c n (%,, d,,, c; P1=& a; p2=& b;=&c; p3 宏”三大类方法,而每一类中又有多种不 I a b wa ( lp ) f> )s pp, 2; ( 同的方法,而讲解一下该方法的使用和 2定义一实现交换功能的函数进实现。 该程序中将三个数的地址作为实参,通过 I a c wa ( l p ) f> )s p p, 3; ( 函数调用将实参地址传给形参,从而实现实 I b

c wa ( 2 p ) f> )s pp, 3; ( 参、形参共占一段内存,正作到一改全改。真 P i t” d%, d,p, p,p ) rn f%, d%” * l * 2 * 3; ( 1不使用函数调用 1直接交换数据 )但必须遵循“向传递”的原则。单 } 源程序如下: 2交换数据 )这种方法是学生刚开始学习 C语言时,首先接受并能很快掌握的方法,这一方法需掌对, 、 C h., #df es px y{ x;=;=} ei wa (,)t x y y t n— S p p, 2 wa ( l p ) m i( an ) 握其精髓,后的多种变形都是以它为原型。其 I pl, nt p2l 源程序如下: { It n a, C, b, t; ma ( i) n { I P; nt S a f%, d%d, a&b& ) c n( d%,”&,, c;” { I b, t nt a, C,; P=* pl; pl *一 p2; p * 2=p; I a b wa (, ) f> )s p a b; ( I a c wa (,) f> )s p a C; ( S a f” d%,”&a&b& ) c n (%, d%d,,, c; } #i cu e j C n ld”h.” I b c wa (,) f> )s p b C; ( Ia b{ aa b b t} f> )=;=;=; ( t Ia c{ aa cc t} f> )=;=;=; ( t man) i( P it”, d%”a b C; r f%d%, d,,, ) n ( { } I b c{ b b cc t} f> )=;=;= l ( t I a, C, nt b, p, pl * *, p2,; Prnf” it(%d,%d”a, C;%d,, b, ) 3实参是地址, )交换数据 S a f” d%d%”&a&b& ) c n (%,, d,,, c; #d f e s p x Y{=++= y; ei wa (, )p x;x n} P=& a;=& b;=&c; pl p2 y p=} 2通过交换两数据的地址 )通过交换数据的地址来排序,这对学生来 I a bs pp p ) f> ) ( wa (, 1; m i( an ) I a c wa (, 2; f> )s pp p ) ( { 说是一个思维模式的转换,此处我们巧妙的引 I b c wa ( l p ) f> )s pp,2; ( I a

, C, P, nt b, pl, p2, p3; * * 入指针,使学生感觉指针虽然是一个很陌生的 P i t” d%, d,,,) r f%, d%”a b C; n ( S a f%, d%”&a&b& ) c n( d%, d,,, c;” 概念但它所能解决的依然是一个很简单、很 Pl=& a; p2=& b;=& c; p3 实际的问题。指针并不一定代表复杂,我们只} 是从另一个角度来描述或解决一个问题而已。 I a b w pp, 2; f> )s a ( lp ) ( I a c wa ( lp ) f> )s pp, 3; ( 本例当中,指针变量 p、p、p l 2 3经过交换后 3使用宏定义 I b )s p p, 3; f>c wa ( 2 p ) ( 将不再存放变量 a、C、b的地址,而是分别存使用宏定义既可通过交换地址、交换数据实现,也可通过实参是地址变量,交换数据 P it” d%, d,,, ) rnf%, d%” a b C; ( 放最小数、第二小数和最大数的地址。 } 源程序如下: 实现,也就是说,用宏定义与使用函数最大使的不同就是,使用宏定义既可实现实参是地址 man) i( (变量)或交换地址(变量)也可实现实参是地参考文献,{ I a, C, nt b, p, pl * *, p2, p3; * 址,换变量,交而不必遵循“向传递”的原[]谭浩强 .单 1 C语言教程

【jVP一> v r 9 eb NP} [o 1]S一> N P 一 PV } 如果有一条非活动边的形式为[ S一一> 现在分析句子“h o ma te te l d n hⅨ 0,]则接受该边作为句法分析结果。 b a”如表 l , n, O t。下面我们举例说明该算法。设句法分析线图( 1 I一 NP VP 0 5的形 2) > S ,,】式为[一>Ⅸ 0 n, S一,,]接受该线图作为句法规则如下: 分析结果。线图(4[ -> NP P 0 1) S - V,,『】d t一> t e 1 e h 3仅覆盖了“h l ma”没有覆盖整个] t e od i, l[] 一 od 2 a j一> l d句子,接受其作为句法分析结果。不 [ o n一> od 3]n u一 l如何提高句法分析器的速度是未来

工[ o n一> ma 4]n u一 n作的一个重要内容,以采用文献[]可 6的方『1v r一一> ma 5 e b n『】n u一一> b a 6 on ot法缩减句法分析规则,种方法可以在提这高句法分析器的速度的情况下,降低句不[]N 一 d t n u 7 P> e o n法分析器的性能;同时,高效的剪枝算复[ P -> d ta jn u 8]N - e d on

也是未来的重要工作内容。

参考文献

[】Ta a a 1 n k Ho u .Cu r n r n s n z mi re t te d o

pa sng: a u v y . Te hnial e r ri s r e c c r po t.

To y n tt t f Te hn l g 1 9 . k o I si e o c u o o y, 9 3

【]铁军 .器翻译原理 . 2赵机哈尔滨工业大学出版社,0 0 20 .

科技咨询导报 S in e a d T c n lg o s ln e a ce c n e h oo y C n ut g H r l i d

2 3

1-2011-png_6_0_0_0_0_852_1182_852.479_1182.96-1449-0-0-1449.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值