《Perl语言入门习题答案》
练习
1、写一个程序,计算半径为的圆的周长。圆周长等于2π(π约为)乘以半径。答案为。-----------------------/home/confish/perl/girth
#!/usr/bin/perl -w
#this program calculate a circle's girth
,
$r=;
$g=*2*;
print "the girth of the circle is $g\n";
-----------------------/home/confish/perl/girth
2、修改上述程序,用户可以在程序运行时输入半径。如果,用户输入,则应得到和上题一样的结果。
-----------------------/home/confish/perl/girthpro
#!/usr/bin/perl -w
`
#a better one to calculate girth
print"enter the radius of the circle\n";
chomp($r=
if($r>0)
{
print"the girth of the circle is ".$r*2*."\n";
;
}
else
{
print"nonavailable!\n";
}
-----------------------/home/confish/perl/girthpro
3、修改上述程序,当用户输入小于0 的数字时,程序输出的周长为0,而非负数。
】
-----------------------/home/confish/perl/girthzero
#!/usr/bin/perl -w
#calculate the girth and print 0 when the radius is lower than 0
print"enter the radius of the line\n";
chomp($r=
if($r>0)
&
{
print"the girth of the circle is $r*2*\n";
}
else
{
print"the girth of the circle is 0\n";
}
-----------------------/home/confish/perl/girthzero
$
1、2、3:(一起实现的)
#!/usr/bin/perl -w
$pai=;
print "Please Input Radius:";
$r=
if ( $r lt 0 ){
print "The circumference is 0\n";
@
}else{
$l=$r*2*$pai;
printf "The circumference is %.1f\n",$l;
}
4、写一个程序,用户能输入2 个数字(不在同一行)。输出为这两个数的积。
-----------------------/home/confish/perl/product
#!/usr/bin/perl -w
、
#print the two number's
print"enter the two numbers:\n";
chomp($m=
chomp($n=
print"the product of the two numbers are ".$m*$n."\n";
-----------------------/home/confish/perl/product
5、写一个程序,用户能输入1 个字符串和一个数字(n)(不在同一行)。输出为,n 行这个字符串,1 次1 行(提示,使用“x”操作符)。例如,如果用户输入的是“fred”和“3”,则输出为:3 行,每一行均为fred。如果输入为“fred”和“299792”,则输出为299792 行,每一行均为fred
'
-----------------------/home/confish/perl/printer
#!/usr/bin/perl -w
#print a string certain times depend on the usr's
print"enter a string and a number:\n";
$str=
chomp($num=
print ${str}x$num;
-----------------------/home/confish/perl/printer
<
练习
1、写一个程序,将一些字符串(不同的行)读入一个列表中,逆向输出它。如果是从键盘输入的,那在Unix 系统中应当使用CTRL+D 表明end-of-file,在Windows 系统中使用CTRL+Z.
------------------------------------/home/confish/reprint
#!/usr/bin/perl -w
#read some input and print them in reverse
print "enter the string please:\n";
@str=reverse
]
print "\nthe reverse strings are:\n@str";
------------------------------------/home/confish/reprint
2、写一个程序,读入一串数字(一个数字一行),将和这些数字对应的人名(下面列出的)输出来。(将下面的人名列表写入代码中)。fred betty barney dino Wilma pebbles bamm-bamm 例如,当输入为1,2,4 和2,则输出的为fred, betty, dino, 和betty
------------------------------------/home/confish/num_to_name
#!/usr/bin/perl -w
#read some numbers and output the match
【
$i=0;
@names=qw /fred betty barney dino Wilma pebbles bamm-bamm/;
print"enter the numbers please:\n";
chomp(@nums=
foreach(@nums)
{
@re=@names;
while($i ne $_)
/
{
$n=shift( @re);
$i++;
}
$i=0;
print $n,"\n";
}
------------------------------------/home/confish/num_to_name
(
3、写一个程序,将一些字符串(在不同的行中)读入一个列表中。然后按ASCII 顺序将它们输出来。也就是说,当输入的字符串为fred, barney, wilma, betty,则输出为barney betty fred wilma。分别在一行或不同的行将之输出。
------------------------------------/home/confish/sort_str
#!/usr/bin/perl -w
#read some strings and sort them in
chomp(@str=sort
#@str=sort
print @str,"\n";
《
------------------------------------/home/confish/sort_str
练习
1、写一个名为&total 的子程序,返回一列数字的和。
提示:子程序不应当有任何的I/O 操作;它处理调用的参数,返回处理后的值给调用者。结合下面的程序来练习,它检测此子程序是否正常工作。第一组数组之和25。
my @fred = qw{ 1 3 5 7 9 };
my $fred_total = &total(@fred);
print "The total of \@fred is $fred_total.\n";
'
print "Enter some numbers on separate lines: ";
my $user_total = &total(
print "The total of those numbers is $user_total.\n";
--------------------------------/home/confish/perl/subr
#!/usr/bin/perl -w
#a subroutine named total returns sum of
sub total
{
】
foreach $n(0..$#_)
{
$sum+=$_[$n];
}
$sum;
}
my@fred=qw{1 3 5 7 9};
—
my $fred_total=&total(@fred);
print"The total of \@fred is $fred_total.\n";
print"Enter some numbers on separate lines:\n";
my $user_total=&total(
print"The total of those numbers is $user_total.\n";
--------------------------------/home/confish/perl/subr
2、利用上题的子程序,写一个程序计算从1 到1000 的数字的和。
[
--------------------------------/home/confish/perl/suber
#!/usr/bin/perl -w
#use the subroutine in last program to get the sum of
sub total
{
foreach $n(0..$#_)
{
$sum+=$_[$n];
;
}
$sum;
}
@num=(1..1000);
$sum=&total(@num);
print"The sum of 1..1000 is $sum\n";
--------------------------------/home/confish/perl/suber
'
3、额外的练习:写一个子程序,名为&above_average,将一列数字作为其参数,返回所有大于平均值的数字(提示:另外写一个子程序来计算平均值,总和除以数字的个数)。利用下面的程序进行测试:
my @fred = &above_average(1..10);
print "\@fred is @fred\n";
print "(Should be 6 7 8 9 10)\n";
my @barney = &above_average(100, 1..10);
print "\@barney is @barney\n";
print "(Should be just 100)\n";
--------------------------------/home/confish/perl/aver
·
#!/usr/bin/perl -w
#to print the number which is larger than the average
#in some
sub average
{
foreach $n(0..$#_)
{
$sum+=$_[$n];
(
}
$average=$sum/($#_+1);
}
sub above_average
{
@num=@_;
@aba=();
,
$av=&average(@num);
foreach $n(0..$#_)
{
if($_[$n]>$av)
{
push ( @aba,$_[$n]);
}
·
}
@aba;
}
my @fred=&above_average(1..10);
print"\@fred is @fred\n";
print"(Shuold be 6 7 8 9 10)\n";
my @barney=&above_average(100,1..10);
、
print"\@barney is @barney\n";
print"(Should be just 100)\n";
--------------------------------/home/confish/perl/aver
练习
1、写一个程序,类似于 cat,但保持输出的顺序关系。(某些系统的名字可能是 tac 。)如果运行此程序:./tac fred barney betty, 输出将是文件 betty 的内容,从最后一行到第一行,然后是 barney, 最后是 fred, 同样是从最后一行到第一行。(注意使用 ./ 确保调用的是你自己的程序,而非系统提供的)
----------------------------------/home/confish/perl/tac
#!/usr/bin/perl -w
<
#a prog same as cat but reverse the
@ARGV=reverse @ARGV;
@a=reverse<>;
print @a;
----------------------------------/home/confish/perl/tac
2、写一个程序,要求用户在不同的行中输入一些字符串,将此字符串打印出来,规则是:每一条占20 个字符宽度,右对齐。为了确保正确的输出,在开头打印出一串数字作为比较(帮助调试)。注意,不要犯19 个字符宽度的错误。例如,如果输入,hello, good-bye,则输出为:
67890
;
hello
good-bye
----------------------------------/home/confish/perl/20str
#!/usr/bin/perl -w
#a prog that print the strings as 20 words flush
@str=
while($i!=5)
{
《
foreach(0..9)
{
print;
}
$i++;
}
print"\n";
foreach(@str)
|
{
printf "%21s",$_;
}
----------------------------------/home/confish/perl/20str
3、修改上一个程序,允许用户选择宽度,如,用户输入30,hello, good-bye(在不同的行中),则每一行的宽度为30。(提示:参阅第二章相应部分)。提示,如果选择的宽度太长,可以增加比较行的长度。
----------------------------------/home/confish/perl/20strpro
?
#!/usr/bin/perl -w
#a prog print the strings as number usr apionted words flush
@str=
while($i!=5)
{
foreach(0..9)
{
print;
]
}
$i++;
}
print "\n";
$num=shift @str;
chomp $num;
$conv="%".++$num."s";
foreach(@str)
—
{
printf $conv,$_;
}
----------------------------------/home/confish/perl/20strpro
练习
1、写一个程序,提示用户输入 given name(名),并给出其对应的 family name(姓)。使用你知道的人名,或者表 6- 1(如果你在计算机上花了太多时间,以致什么人都不认识):
表 6 - 1 样本数据
输入输出
(
fred flintstone
barney rubble
wilma flintstone
-------------------------------------/home/confish/perl/hash
#!/usr/bin/perl -w
#hashs that print the name's family
$family_name{"fred"}="flintstone";
$family_name{"barney"}="rubble";
|
$family_name{"wilma"}="flintstone";
print "enter the given name please:\n";
chomp($gn=
print "family name for $gn is $family_name{$gn}\n";
------------------------------------/home/confish/perl/hash
2、写一个程序,读入一串单词( 一个单词一行) ◆,输出每一个单词出现的次数。(提示:如果某个作为数字使用值是undefined 的,会自动将它转换为 0。)如果输入单词为 fred, barney, dino, wilma , fred(在不同行中),则输出的 fred 将为
------------------------------------/home/confish/perl/counts
:
#!/usr/bin/perl -w
#hashs that counts the appearance times of the word
print "enter the word please:\n";
foreach(<>)
{
$counts{$_}++;
$counts{$_}.="\n";
、
}
sort %counts;
print %counts;
------------------------------------/home/confish/perl/counts
练习
1、写一个程序,输出所有提到 fred 的行(不要输出其它行)。如果输入字符串 Fred, f redrick, Alfred,能匹配上吗准备一个小的文本文件,其中包含如:“ fred lintsotne”以及类似的信息。使用这个文本文件作为此程序的输入,以及本节下面练习的输入。
-------------------------------------------/home/confish/perl/pfred
|
#!/usr/bin/perl -w
#prog print the line which contains "fred"
foreach(<>)
{
if(/fred/)
{
print $_;
}
-
}
-------------------------------------------/home/confish/perl/pfred
2、修改上面的程序,允许匹配 Fred。现在它能匹配,Fred, f redrick , Alfred 吗(将这些名字加入输入文件中)
-------------------------------------------/home/confish/perl/pffred
#!/usr/bin/perl -w
#prog print the line which contains "fred" or "Fred"
foreach(<>)
~
{
if(/fred|Fred/)
{
print $_;
}
}
-------------------------------------------/home/confish/perl/pffred
&
3、写一个程序,输出出现句号( . ) 的行,忽略其它行。使用前面练习中的文件进行练习:它能找到 Mr. Slate 吗
-------------------------------------------/home/confish/perl/pp
#!/usr/bin/perl -w
#prog print the line which contains a
foreach(<>)
{
if(/\./)
{
…
print $_;
}
}
-------------------------------------------/home/confish/perl/pp
4、写一个程序,输出有一个字母大写,而非所有字母都大写的行。它能匹配 Fred ,而不匹配 fred 和 FRED 吗
-------------------------------------------/home/confish/perl/plg
#!/usr/bin/perl -w
%
#print the line which contains not capitals
foreach(<>)
{
if(/[a-z][A-Z]|[A-Z]+[a-z]/)
{
print $_;
}
}
@
-------------------------------------------/home/confish/perl/plg
5、额外的练习:写一个程序,它能输出所有同时提到 wilma 和 fred 的行。
-------------------------------------------/home/confish/perl/pfw
#!/usr/bin/perl -w
#print a line which contains fred and
foreach(<>)
{
…
if(/wilma.+fred|fred.+wilma/)
{
print $_;
}
}
------------------------------------------/home/confish/perl/pfw
练习
)
1、使用模式测试程序。创造一个模式能匹配字符串 match。使用字符串beforematchafter 进行测试。输出结果将其三部分放在正确位置了吗
----------------------------------------------/home/confish/perl/mm
#!/usr/bin/perl -w
#match "match"
while(<>)
{
chomp;
if(/match/)
.
{
print "Matched:|$`<$&>$'|\n";
}
else
{
print "no match:|$_|\n";
}
}
。
---------------------------------------------/home/confish/perl/mm
2、使用模式测试程序,创造一个模式能匹配任何单词(\ w 意义下的单词),但这个单词必需以字母 a 结尾。它匹配 wilma而没匹配 barney 吗它匹配 Mrs. Wilma Flintstone 吗 wilma&fred 呢使用前一章习题的文件进行练习(如果没有上述字符串,则加上它们)
---------------------------------------------/home/confish/perl/ma
#!/usr/bin/perl -w
#match "word" ends with
while(<>)
{
)
chomp;
if(/a\b/)
print "Matched:|$`<$&>$'|\n";
}
else
{
print "no match:|$_|\n";
\
}
}
---------------------------------------------/home/confish/perl/ma
3、修改第二题的程序,使之将由 a 结尾的单词放到$1 之中。同时修改源代码,使此变量对应的值被放在单引号之中,如$1 contains ‘Wilma’。
---------------------------------------------/home/confish/perl/mapro
#!/usr/bin/perl -w
#match word end with a and storage
{
while(<>)
{
chomp;
if(/(a$)/)
{
my $temp=$1;
print "\$1 contains '$`$&$''\n";
}
%
else
{
print "no match:|$_|\n";
}
}
---------------------------------------------/home/confish/perl/mapro
4、额外练习:修改第三题程序,使之能捕捉由 a 结尾的单词之后的 5 个字符(如果有那么多),并将之放入一个独立变量中。例如,如果输入的是 I saw Wilma yester day, 则紧接的 5 个字符是 yest(前有空格)。如果输入是 I , Wilma! ,则只有一个字符。它现在还能匹配 wilma 吗
—
---------------------------------------------/home/confish/perl/mwa
#!/usr/bin/perl -w
#match a word end with a and print the next five
while(<>)
{
if(/a\b/)
my $temp=$';
【
if($temp=~/.{0,5}/)
{
my $match=$&;
print $match;
}
}
else
{
。
print "no match:|$_|\n";
}
}
---------------------------------------------/home/confish/perl/mwa
5、写一个程序(不是测试程序),能输出任何由空白结尾的输入行(非换行符)。在输出的结尾处放置一个标记符,使之能标记出空白。
---------------------------------------------/home/confish/perl/ms
#!/usr/bin/perl -w
,
#match a
while(<>)
{
if(/ +$/)
{
print;
}
}
{
---------------------------------------------/home/confish/perl/ms
练习
1、写一个模式,它能匹配$what 当前的内容的 3 份连续拷贝。也就是说,如果$what 为fred,则此模式能匹配 fredfredfred 。如果$what 为 fred|barney ,则此模式能匹配fredfredbarney, barneyfredfred, barneybarneybarney , 或者其它的变种。(提示:你应当在程序的顶端设置$what 的值,如 my $what = ‘ fred|barney’ ;)
---------------------------------------------/home/confish/perl/sfb
#!/usr/bin/perl -w
#match and replace fred three
%
my $what="fred|barney";
if("fredbarneybarney"=~/($what){3}/)
{
print $`."/".$&."/".$'."\n";
}
---------------------------------------------/home/confish/perl/sfb
2、写一个程序,它可以得到当前文本文件的一个拷贝。在拷贝的文件中,字符串
Fred( 大小写无关) 将被 Larry 替换掉。(因此,“ Manfred Mann”将变成“ ManLarry Mann” . )输入的文件名已经在命令行中指定(不需要询问用户),输出的文件名是对应的输入文件名后面加上.out。
/
---------------------------------------------/home/confish/perl/sfl
#!/usr/bin/perl -w
#match fred to
$^I=".out";
while(<>)
{
s/fred/Larry/i;
print;
[
}
---------------------------------------------/home/confish/perl/sfl
3、修改上面程序,使之将 Fred 由 Wilma 替换, Wilma 由 Fred 替换。如果输入的为fred&wilma,则输出为 Wilma$Fred。
---------------------------------------------/home/confish/perl/addc
#!/usr/bin/perl -w
#add
$^I=".out";
(
$a="/usr/bin/perl -w \n #Copyright(C) 2008 by Yours Truly confish";
while(<>)
{
s#/usr/bin/perl\s+-w#$a#i;
print;
}
---------------------------------------------/home/confish/perl/addc
?
4、额外练习:写一个程序在你所有的练习的答案前加上下面这样一行:
a) ## Copyright (C) 20XX by Yours Truly
将上面一行放在“ shebang”行(Perl 程序的第一行,#!/usr/bin/perl (可能随 Perl 安装的位置而有所不同,但是指第一行,译者注))下面。你应当在“源文件”中修改,但请备份
文件。假定你可以在命令行中同时输入程序和需要的修改的文
件名。
练习
1、写一个程序,能重复要求用户猜测某个在 1 到 100 之间的数字,直到猜对为止。你的程序应当能随机的产生一个数字,使用公式 int(1 + rand 100)。当用户猜测错误时,程序应该回应“ Too high”或者“ Too low ”。如果用户输入 quit或 exit ,或者回车时,程序应立即退出。如果用户猜测正确,程序也退出。
---------------------------------------------/home/confish/perl/gn
;
#!/usr/bin/perl -w
#a game to guess a
my $y=int(1+rand(100));
print"enter a number please:\n";
while(chomp($t=
{
if($t ne "exit"&&$t ne"quit" )
{
\
if($t>$y)
{
print"tow hig\n";
}
elsif($t<$y)
{
print"two low\n";
}
~
else
{
print "a\n";last;
}
}
else
{
]
last;
}
}
--------------------------------------------/home/confish/perl/gn
练习
1、写一个程序,读入命令行中的一串文件,报告其是否可读,可写,可执行,或不存在。(提示:如果一个函数能一次对一个文件进行所有的检测将非常有帮助。)如果一个文件被执行了 chmod 0 操作,将报告什么(在 Unix 系统中,chmod 0 some_file 将一个文件变成不可读,不可写,不可执行的)在大多数 shell 中,星号(*)表示当前目录中的所有的普通文件。也就是说,可以输入像 ./ex11 - 1 *这样的命令,返回当前目录下文件的属性。
------------------------------------------------/home/confish/perl/crw
?
#!/usr/bin/perl -w
#to check whether a file is exits have readability and
foreach(@ARGV)
{
if(-e)
{
print "$_ exits\n";
if(-r)
[
{
print "$_ readable\n";
}
else
{
print"$_ does not be readable\n";
}
if(-w)
—
{
print "$_ writeable\n";
}
else
{
print "$_ does not be writeable\n";
}
}
;
else
{
print "$_ does not exits\n";
}
}
------------------------------------------------/home/confish/perl/crw
2、写一个程序,找出命令行中存在时间最长的文件名,并报告其天数。当参数为空时,其行为如何(例如,命令行中没有输入任何的文件)
<
------------------------------------------------/home/confish/perl/et
#!/usr/bin/perl -w
#to check the longest exits
if(@ARGV)
{
foreach(@ARGV)
{
if(-M>$such)
$
{
$such=-M;
$file=$_;
}
}
print"$file has exits $such days\n";
}
else
)
{
print "no input files\n";
}
------------------------------------------------/home/confish/perl/et
练习
1、写一个程序要求用户输入一个目录名,再改变到那个目录去。如果用户输入的值是空白,则转变到他/她的主目录去。改变后,将这个目录下的普通内容(不包括有点(. )开头的项)按照字母顺序列出来。(提示:使用目录句柄还是 glob 更方便)如果没有成功改变目录,提示用户,但不要尝试输出目录里的内容。
#! /usr/bin/env perl -w
)
use strict;
#Date:2005-05-31
#ex12_1
if (@ARGV) {
chdir $ARGV[0];
}else{
chdir "~";}
@_=glob '*';
%
print @_;
2、修改程序,使之包含所有的文件,不仅仅是那些不以点( . ) 开头的文件。
#! /usr/bin/env perl -w
use strict;
#Date:2005-05-31
#ex12_1
if (@ARGV) {
、
chdir $ARGV[0];
}else{
chdir "~";}
@_=glob '.* *';
print @_;
3、如果你在前面的练习中使用的是目录句柄,使用 glob 重写它。如果使用的是 glob ,则用目录句柄重写。
#! /usr/bin/env perl -w
{
use strict;
#Date:2005-05-31
#ex12_3
print "Which directory (Default is your home directory) ";
chomp(my $dir =
if ($dir =~ /^\s*$/) { # A blank line
chdir or die "Can't chdir to your home directory:
$!";
…
} else {
chdir $dir or die "Can't chdir to '$dir': $!";
}
opendir DOT, "." or die "Can't opendir dot: $!";
foreach (sort readdir DOT) {
# next if /^\./; ## if we were skipping dot files
print "$_\n";
}
—
4、写一个类似于 rm 的程序,删除命令行中出现的任何文件。(不需要处理像 rm 中的选项)
#! /usr/bin/env perl -w
use strict;
#Date:2005-05-31
#ex12_4
#类似于rm 的程序
for (@ARGV) {
—
unlink $_;}
5、写一个类似于 mv 的程序,将命令行中的第一个参数重命名为第二个参数。(不需要处理像 mv 中的选项,或别的参数。)允许它是一个目录;如果是,使用相同的基本名字(basename) ,生成新的目录。
#! /usr/bin/env perl -w
use strict;
#Date:2005-05-31
#ex12_5
#类似于mv 的程序
#
rename $ARGV[0],$ARGV[1];
6、如果你的操作系统支持,写一个类似于 ln 的程序,能建立命令行中第一个参数的硬连接(hard link) 到第二个参数。(不需要处理 ln 的选项,或者更多的参数。)如果系统没有硬连接,那么输出一条消息,指出如果可行你将进行的操作。
提示:这个程序和前面的有类似的地方,注意到这一点能节约你编码的时间。
#! /usr/bin/env perl -w
use strict;
#Date:2005-05-31
#ex12_5
【
#类似于ln 的程序
link $ARGV[0],$ARGV[1]or warn "can't link";
7、如果你的操作系统支持,修改上一个练习的程序,使之支持– s 选项(在别的参数前面),来表明你想创建一个软连接(soft link)而非(hard link) 。( 甚至在你没有硬连接的情况,你也有可能能创建软连接。)
#! /usr/bin/env perl -w
use strict;
#Date:2005-05-31
#ex12_5
~
#类似于ln -s的程序
symlink $ARGV[0],$ARGV[1]or warn "can't symlink";
8、如果你的操作系统支持,写一个程序来查找当前目录下的符号连接(symbolic links),并将它们的值打印出来(如 ls– l 一样:name - > value )。
#!/usr/bin/perl -w
use strict;
unless(@ARGV) {
die "perl $0
:
}
my @file=glob "$ARGV[0]/*";
foreach(@file) {
chomp $_;
my $link=readlink "$_";
if(defined $link){print "$_ -> $link\n";}
}
\
@a=`ls -l|grep -e ‘->’`;
练习
1、写一个程序,读入一串数字,将它们按照数字排序,将结果按右对齐的列打印出来。使用下面的数据进行检测:
17 000 04 - 10 4 2001 90210 666
#! /usr/bin/env perl -w
use strict;
#Date:2005-05-31
~
#ex13_1
#读入一串数字,将它们按照数字排序,将结果按右对齐的列打印出来
@_=(17,000,04,,,-10,,4,2001,90210,666);
@_=sort {$a<=>$b}@_;
for (@_)
{
$_=sprintf "%8s\n",$_;
print ;
%
}
2、写一个程序,将下例 hash 数据根据姓(last name )按照大小写无关的字母顺序进行排序,并把结果打印出来。当last name 相同时,再按照名(firs t name) 排序(不用关心大小写)。因此,第一个输出的的名字是 Fred`s,最后一个是Betty`s。具有相同 family name 名字在一起。不要改变数据。输出名字的大小写应当和这里的一样。
my %last_name = qw{
fred flintstone Wilma Flintstone Barney Rubble
betty rubble Bamm- Bamm Rubble PEBBLES FLINTSONE
};
#! /usr/bin/env perl -w
(
use strict;
#Date:2005-05-31
C语言从入门到精通所需的7本书 作者:王霸羔子 1.C primer plus C primer plus作为一本被人推崇备至的c入门经典,C primer plus绝非浪得虚名。应该算得上C教材里最好的入门书了。 在知识广度上,很少有书能匹及。它能为你系统学习c提供一个良好的平台。作者对c 的见解精辟。在娓娓叙述的同时,作者辅以大量程序以分析。它让我对C有了更加系统的全新认识。决非国人所写的那些公理化的教条说教,我觉得作者把自己的心血全部吐露。书很厚,近700页,却不没有让我觉得任何的烦琐。甚至是兴趣盎然。我把上面所有的课后题目都做了。 最为重要的是,看完这本书后,我再也不觉得c很高深枯燥无味了。如果你问我,你最大收获是什么。我会告诉你,兴趣! 2.The C programming language
拿到这本薄薄的书,很多人开始怀疑,C语言是这么几百页能讲清楚的么。看完这本书,我想答案已经很明了,却真的让人感到震憾。什么是好书?无法删减的书才是真正的好书。 K&R的书一如C语言的设计理念:简单而高效里面的习题建议都认真做一遍,而且是在linux下用vi来做,用makefile来编译,用shell脚本来进行测试,本来第八章的题就是和linux 相关的计算机的大学生们不应只会在WINDOWS下用VC来编程,而都应该在linux环境下进行程序设计,因为linux本身就是为开发者准备的操作系统。 3. C和指针 这本书最大的特点就是和指针结合在一起进行讲解,通过一些经典的C例题对所学的知识进行巩固,对指针的基础和深入的探讨,有助于初学者更好的理解C语言,还有明白C 的存储机制。我之前买了《C语言详解》和《C Primer Plus》结合这本书一起学习,可以说是完美的,希望每个热爱C语言的人能够拥有这本书。 我在这里推荐给所有想学好C语言的朋友! 4.C专家编程
1.求两个数的最小公倍数: #include
《Perl语言入门实战习题》 一、计算FASTA文件中每条序列的长度; 输入文件,FASTA格式: 注:如果输入文件在windows下产生,在Linux系统下操作时,宜先用dos2unix处理: 用法:dos2unix 输入文件 输出文件: Perl代码: #!/usr/bin/perl -w use strict; unless (@ARGV==2) { # @ARGV 传给脚本的命令行参数列表 die"Usage: perl $0
my $id = $1 if($seq =~ /^(\S+)/); # 获取序列ID chomp $seq; # 去掉末尾的”>” $seq =~ s/^.+?\n//; # 删除第一行 $seq =~ s/\s//g; # 删除序列中的空白字符 my $len = length($seq); # 计算序列长度 print OUT "$id\t$len\n"; # 输出结果到输出文件 } $/="\n"; # 把输入记录分隔符改为默认值 close IN; # 关闭输入文件句柄 close OUT; # 关闭输出文件句柄 二、计算FASTA文件中每条序列的GC含量; 输入文件同上,输出文件: Perl代码: #!/usr/bin/perl -w use strict; unless (@ARGV==2) {# @ARGV 传给脚本的命令行参数列表 die"Usage: perl $0
《HTML基础试题》 一、单项选择题: 1、下面哪一个属性不就是文本的标签属性?( ) A. B.size C.color D.face 2、当链接指向下列哪一种文件时,不打开该文件,而就是提供给浏览器下载。( ) A.ASP B.HTML C.ZIP D.CGI 3、关于文本水平对齐,源代码设置不正确的一项就是:( ) A.居中对齐:
课后练习题答案 Chapter 1 1.1×√×√√×√××√ 1.2b c 1.3ad 1.4semicolon printf math.h \n Chapter 2 2.1 ×√××√√×√××√× 2.2 typedef 255 external const Chapter 3 3.1 ×√××√√×××√√√ 3.2 integer modula 6 logical sizeof paratheses typeconversion precedence 3.3 F F T F F F 3.4 F T T T F 3.5 (b) (c) 3.6 0 -2 7 10.25 false 3 3 1 3.10 0 1 1 1 1 3.11 d } 100 3.12 110 111 3.13 1 3.14 200 3.15 x<=y 3.16 TRUE 3.19 2 1 4 3.20 -40 40 Chapter 4 4.1 ×√√√√√××√√√× 4.2 %hd %x ctype.h %l %*d [^] blank 6 - %e 4.4 (a) scanf(“%d %c %d”, &a, &b, &c); (b)scanf(“%d %f %s”, &a, &b, &c); (c) scanf(“%d-%d-%d”, &a, &b, &c); (d) scanf(“%d %s %d”, &a, &b, &c);
4.5 (a)10x1.230000 (b)1234x 1.23 (c)1234 456.000000 (d) “123.40 ” (e) 1020 1222(乱码) 4.7 (a)1988 x (b)乱码(c)120 乱码(d)乱码 x 4.8 (a)1275 -23 5.740000 (b) 1275 -235.740000 (c) 0 0.000000 (d) 1275xxxx-235.74 (e)Cambridge (f)1275 Cambridge 4.10 1988 无无 Chapter 5 5.1 √×√××××××√ 5.2 && switch break if-else x=y 5.4 (a)x = 2; y = 0; (b) x = 1; y = 0; 5.5 (a) if (grade <= 59) if (grade >= 50) second = second + 1; (b) if (number > 100) printf(“out of range”); else if (number < 0) printf(“out of range”); else sum = sum + number; (c) if (T > 200) printf(“admitted”); else if (M > 60) {if (M > 60) printf(“admitted”);} else printf(“not admitted”); 5.6 F T F T 5.8 (a) x > 10 (b) (x != 10)||(y ! = 5) || (z >= 0) (c) (x + y != z) || (z > 5) (d) (x > 5) || (y != 10) || (z >= 5) 5.9 (a) x = 5; y = 10; z = 1 (b) x = 5; y = 10; z = 1 (c) x = 5; y = 0; z =0 (d) 无变化 5.10 (a) x= 0; y = 2; z = 0; (b) x = 1; y = 2; z = 0; 5.12 8 5.13 Delhi Bangalore END 5.14 2 4 4 8 5.15 0 0 2 5.16 25 5.17 Number is negative 5.18 ABC
#题2: #使用for循环打印出如下的字符。 # 1 # 12 # 123 # 12345 #*******************# Fw_Print_Step ($step++,"使用for循环打印出如下的字符。 1 12 123 12345"); my $str= ""; for (1..4) { $str= $str.$_; if ($_==4) { $str= $str.$_+1; } print " $str\n"; } #*******************# #题3: my $str1 = "abc"; my $str2 = "efg"; #将上述2个字符串连接起来,并输出合并后的字符串长度 #*******************# Fw_Print_Step ($step++,"将上述2个字符串\"$str1\"和\"$str2\"连接起来,并输出合并后的字符串长度"); my $str =$str1.$str2; my $str_length=length($str); print "新字串$str的长度为:$str_length"; #*******************# #题4: #以逆序方式打印出字符串包含的各个字符,如变量为"123456789"则输出为"9","8",..."2","1". my $str1="abc123def456"; #*******************# Fw_Print_Step ($step++,"以逆序方式打印出字符串包含的各个字符,如变量为\"123456789\"则输出为\"9\",\"8\",...\"2\",\"1\"."); my $str=$str1; print "以逆序方式打印出字符串\"$str1\"包含的各个字符:\n"; for($length=length($str1); $length>0; $length--) {
C语言程序的结构认识 用一个简单的c 程序例子,介绍c 语言的基本构成、格式、以及良好的书写风格,使小伙伴对 c 语言有个 初步认识。 例1:计算两个整数之和的c 程序: #include main() { int a,b,sum; /* 定义变量a,b ,sum 为整型变量*/ a=20; /* 把整数20 赋值给整型变量a*/ b=15; /* 把整数15 赋值给整型变量b*/ sum=a+b; /* 把两个数之和赋值给整型变量sum*/ printf( “ a=%d,b=%d,sum=%d\n” ,a,b,sum); /* 把计算结果输出到显示屏上*/ } 重点说明: 1、任何一个c 语言程序都必须包括以下格式: main() { } 这是c 语言的基本结构,任何一个程序都必须包含这个结构。括号内可以不写任何内容,那么该程序将不执行任何结果。 2、main() - 在c 语言中称之为“主函数” ,一个c 程序有且仅有一个main 函数,任何一个c 程序总是从 main 函数开始执行,main 函数后面的一对圆括号不能省略。 3、被大括号{ }括起来的内容称为main 函数的函数体,这部分内容就是计算机要执行的内容。 4、在{ }里面每一句话后面都有一个分号(; ),在c 语言中,我们把以一个分号结尾的一句话叫做一个 c 语 言的语句,分号是语句结束的标志。 5、printf( “ a=%d,b=%d,sum=%d\n” ,a,b,sum); 通过执行这条c 语言系统提供给我们直接使用的屏幕输出 函数,用户即可看到运行结果,本程序运行后,将在显示器上显示如下结果: a=20,b=15,sum=35 6、#include 注意:(1)以#号开头 (2)不以分号结尾这一行没有分号,所以不是语句,在c 语言中称之为命令行,或者叫做“预编译处理命令” 。 7、程序中以/* 开头并且以*/ 结尾的部分表示程序的注释部分,注释可以添加在程序的任何位置,为了提高程序的可读性而添加,但计算机在执行主函数内容时完全忽略注释部分,换而言之就是计算机当做注释部分不存在于主函数中。 C程序的生成过程 C程序是先由源文件经编译生成目标文件,然后经过连接生成可执行文件。 源程序的扩展名为.c ,目标程序的扩展名为.obj , 可执行程序的扩展名为.exe 。
《Perl语言入门习题答案》 练习 1、写一个程序,计算半径为的圆的周长。圆周长等于2π(π约为)乘以半径。答案为。-----------------------/home/confish/perl/girth #!/usr/bin/perl -w #this program calculate a circle's girth , $r=; $g=*2*; print "the girth of the circle is $g\n"; -----------------------/home/confish/perl/girth 2、修改上述程序,用户可以在程序运行时输入半径。如果,用户输入,则应得到和上题一样的结果。 -----------------------/home/confish/perl/girthpro #!/usr/bin/perl -w ` #a better one to calculate girth print"enter the radius of the circle\n"; chomp($r=
语言入门教程(一) ?什么是HTML语言 HTML(HyperText MarkUp Language)是使用特殊标记来描述文档结构和表现形式的一种语言,由W3C(World Wide Web Consortium)所制定和更新。我们可以用任何一种文本编译起来编辑HTML文件,因为它就是一总纯文本文件。 ?HTML语言的基本结构 下面我们来看一小段HTML语言的代码,来了解HTML语言的基本结构:
//1.成绩判断 #include
希望可以帮到大家 一、HTML基本概念 什么是HTML文件? ?HTML的英文全称是Hypertext Marked Language,中文叫做“超文本标记语言”。?和一般文本的不同的是,一个HTML文件不仅包含文本内容,还包含一些Tag,中文称“标记”。 ?一个HTML文件的后缀名是.htm或者是.html。 ?用文本编辑器就可以编写HTML文件。 这就试写一个HTML文件吧! 打开你的Notepad,新建一个文件,然后拷贝以下代码到这个新文件,然后将这个文件存成first.html。
要浏览这个first.html文件,双击它。或者打开浏览器,在File菜单选择Open,然后选择这个文件就行了。 示例解释 这个文件的第一个Tag是,这个Tag告诉你的浏览器这是HTML文件的头。文件的最后一个Tag是,表示HTML文件到此结束。 在
和之间的内容,是Head信息。Head信息是不显示出来的,你在浏览器里看不到。但是这并不表示这些信息没有用处。比如你可以在Head信息里加上一些关键词,有助于搜索引擎能够搜索到你的网页。 在习题解析与答案 第1章C语言概述 一.简答题 1.概述C语言的主要特点。 【解答】 (1)语言简洁、紧凑,使用方便、灵活。 (2)数据类型丰富,表达能力强。 (3)运算符多样。C语言中的运算符包含的范围非常广泛。 (4)具有结构化的控制语句。如if…else语句、while语句、do while语句、switch 语句、for语句。 (5)允许直接访问物理地址。C语言中含有的位和指针运算,能够直接对内存地址进行访问操作。 (6)所生成的目标代码质量高,可移植性好。 2.构成C语言程序的基本单位是什么?它由哪几部分组成? 【解答】函数是构成C语言程序的基本单位。一个完整的C程序一般由文件包含、宏定义、函数说明、变量和一个或若干个函数组成。 3.C语言程序的运行一般要经过哪几个步骤? 【解答】(1)编辑;(2)编译;(3)连接,生成EXE文件;(4)执行。 二.运行程序写结果 1.输入下面程序并运行。 main() { int a1,a2,x; a1=100; a2=50; x=a1-a2; printf(″x=%d\n″,x); } 【解答】运行结果为:x=50 2.输入下面程序并运行。 main() { int a1,a2,x; a1=10; a2=20; x=a1*a2; printf(″a1=%d,a2=%d\n″,a1,a2); printf(″x=%d\n″,x); } 【解答】运行结果为:a1=10,a2=20 x=200
三.编程题 1.参照本章例题,编写一个C程序,用于显示如下信息: ************************* I love C programs! ************************* 【分析与提示】 ①要有文件包含语句#include
最新Perl语言入门(第四版)习题答案 2.12 练习 1、写一个程序,计算半径为12.5的圆的周长。圆周长等于2π(π约为3.1415926)乘以半径。答案为78.5。 -----------------------/home/confish/perl/girth #!/usr/bin/perl -w #this program calculate a circle's girth $r=12.5; $g=12.5*2*3.1415; print "the girth of the circle is $g\n"; -----------------------/home/confish/perl/girth 2、修改上述程序,用户可以在程序运行时输入半径。如果,用户输入12.5,则应得到和上题一样的结果。 -----------------------/home/confish/perl/girthpro #!/usr/bin/perl -w #a better one to calculate girth print"enter the radius of the circle\n"; chomp($r=
语言入门教程(一) 第一课基础 Html是英文 HyperText Markup Language 的缩写,中文意思是“超文本标志语言”,用它编写的文件(文档)的扩展名是.html或.htm,它们是可供浏览器解释浏览的文件格式。您可以使用记事本、写字板或 FrontPage Editor 等编辑工具来编写Html文件。Html语言使用标志对的方法编写文件,既简单又方便,它通常使用<标志名>标志名>来表示标志的开始和结束(例如标志对),因此在Html文档中这样的标志对都必须是成对使用的。 当我们畅游Internet时,我们透过浏览器所看到的网站,是由HTML (HyperText Markup Language) 语言所构成。HTML ( 超文件标记语言 ) 是一种建立网页文件的语言,透过标记式的指令 (Tag),将影像、声音、图片、文字等连结显示出来。 HTML标记是由 < 和 > 所括住的指令,主要分为 : 单标记指令、双标记指令 ( 由 < 起始标记 >,< / 结束标记 >所构成 ) 。HTML网页文件可由任何文本编辑器或网页专用编辑器编辑,完成后 ( 以 .htm
.html 为文件后缀保存 ) 将HTML网页文件由浏览器打开显示,若测试没有问题则可以放到服务器 (Server) 上,对外发布信息。 HTML文件基本架构 文件开始
标头区开始如对你有帮助,请购买下载打赏,谢谢! 第一部分:基础词汇 1、单词 head,头body,身体block,块inline,一行内width,宽度height,高度image,图像title,标题parent,父亲blank,空白的table,表格row,行character,字符 column,列 caption,说明文字 list,列表 form,表单 type,类型 input,输入 text,文本 password,密码 value,值 select,选择 option,选项 textarea,文本域 submit,提交 button,按钮 reset,重置 action,动作 method,方法 target,目标 left,左 right,右 center,中 top,上 bottom,下 2、词语缩写 术语:HTML,HyperText Markup Language,超级文本标记语言 术语:URL,Uniform Resoure Locator,统一资源定位器 术语:HTTP,Hyper Text Transfer Protocol,超文本传输协议 术语:WWW,World Wide Web,万维网 术语:IP,Internet Protocol,网络互连协议 属性:src,source,源 属性:href,hypertext reference,超文本引用 属性:id,identification,身份证、唯一标识 属性:class,类别 属性:title,标题、字幕 属性:style,样式 标签:a,anchor,锚或超链接 标签:div,division,部分区域 标签:ul,unordered lists,无序列表 标签:ol,ordered lists,有序列表 标签:img,image,图像 标签:p,paragraph,段落 标签:meta,metadata,元数据、描述信息的数据 第二部分:HTML基本结构(以html5为例)
这是一个段落 2、有一幅鲜花图片,名称为“flower.jpg”,假设图片与网页文件在同一个文件夹内,设置鲜花图片的高度为85px,宽度为100px,并要求实现鼠标指针停留在图片上时,显示字幕“鲜花”。
C语言入门 学c++吧。 Essential C++ C++ Primer Accelerated C++: Practical Programming by Example 以上的三本书是我最推崇的C++教程,我对它们进行过细心的阅读,感觉受益匪浅,因此也不遗余力地向你推荐。 《Essential C++》(《Essential C++中文版》,华中科技大学出版社,2001)出自久负盛名的《C++ Primer》作者之一Stanley E. Lippman之手。的确有很多人对这个大师级的人物竟然写这样一本面向零基础的轻薄短小的入门教材感 到不可理解。Lippman自己的解释是在参与一部电影的制作时(他拥有艺术硕士的学位!),他由于某种需要必须学习Perl语言,在学习的过程中他“在感伤的心境中明白”,C++ Primer无法扮演初学者导师的角色,那本书太庞大复杂了——对于那些想立刻学会C++语言并进行简单应用的人来说。于是他便有了这本并不太精细却体现语言核心的著作。这本书完全面向零基础读者,您可以对编程一无所知,《Essential C++》仍会引导您走向用C++编程之路,正如它的贴切的书名中所说的,它体现了C++的精髓(脚注:essential,精髓的、本质的)。 《C++ Primer》(《C++ Primer中文版(第4版)》,人民邮电出版社,2006)是一本庞大复杂的C++书籍,由三位世界级的大师Stanley B. Lippman、Josée LaJoie、Barbara E. Moo合力打造。虽然它的书名可以翻译为《C++入门》(脚注:primer,初级读本、入门(书)),但这本书真得有点“名不副实”,这本英文版有912页的厚书详细地介绍了C++的方方面面和点点滴滴。然而,阅读C++ Primer这本讲解地很深入的教程的确也不需要什么准备知识。不过由于这本书的复杂性,读完Essential C++做基础再读本书却是更多人的选择。如果您想从零开始深入的学习C++,或者您在学习C++的道路上遇到了什么疑难,C++ Primer肯定会帮助您。另外,本书目录和正文中关于名词术语的中英文对照就是参照C++ Primer的附录完成的。 《Accelerated C++》(《Accelerated C++中文版》,中国电力出版社,2003)是另一种风格的C++教程。两位作者Andrew Koenigh和Barbara E. Moo是C++圈子里少见的夫妇搭档,Barbara的参与给本书带来了一种清新细腻的女性化风格。这本书同样也是适用于零基础的读者,同样轻薄短小,但却从最基础的程序语句一路讲到了STL的使用,知识密集度极高,并有很多例子。正如书名所说的,此书极有加速度(accelerate)。书中的某些习题也颇有难度、值得思考。但要注意的是据说本书的中文版(我没看过)的翻译有许多微瑕,请谨慎购买。
Perl语言入门实战习题[试题] 《Perl语言入门实战习题》 一、计算FASTA文件中每条序列的长度; 输入文件,FASTA格式: 注:如果输入文件在windows下产生,在Linux系统下操作时,宜先用dos2unix处理: 用法:dos2unix 输入文件 输出文件: Perl代码: #!/usr/bin/perl -w use strict; unless (@ARGV==2) { # @ARGV 传给脚本的命令行参数列表
die"Usage: perl $0