You are on page 1of 5

实验报告(3)

学生姓名 学号 指导老师
实验时间 2016/3/15 地点 综合实验大楼
实验题目 实验 3 变量、字符串、元胞数组和结构体
实  掌握字符串的生成及操作

 掌握元胞数组的生成及操作

的  掌握结构体的生成及操作
实 1、使用函数 namelengthmax 查看你电脑 matlab 允许的变量名的最大长度;

2、使用 isvarname 函数判断以下变量哪些有效:

容 a b2 1a _abc abc a2b a_b_1 a-b
3、分析如下语句:
name1 = char('Liu Ying', 'Hu Xu')
name11 = ['Liu Ying'; 'Hu Xu ']
name2 = ['Liu Ying', 'Hu Xu']
name3 = ['Liu Ying'; 'Hu Xu']
4、运行并分析如下语句:
x=13.6+uint8(125),sin(double(x)) , sin(x)
13.6+int8(125)
a=uint8(125); b=13.6+double(a)
5、 分析如下语句:
num = 28;

s = ['There are ' int2str(num) 'characters here']


s = sprintf('There are %d characters here\n', num)

str='answer:'; x=1;y=2.5;
ss=sprintf('%s\n%d +%.1f=%.2f\n',str,x,y,x+y)
fprintf('%s\n%d +%.1f=%.2f\n',str,x,y,x+y)

6、已知字符串 str= 'S0619-S1914-S0388-S0348-S0392-S0429-S0436',试使


用函数 findstr 或 find 及 str2num 将字符串 str 中的 7 个数字 619、1914 …
自动存储到向量 V 中。
7、DNA 序列可以看成是由 a、c、g、t 四个字符按一定顺序排成的字符串,四
个字符在 DNA 中出现的频率可以作为 DNA 的一个特征。统计如下 DNA 序列中
a、c、g、t 各自出现的频率。
aggcacggaaaaacgggaataacggaggaggacttggcacggcattacacggaggacgag
8、已知某 3 位学生 2 门课程的成绩如下表。请创建一结构体变量 stu,使其 4
个域名分别为 Number、Name、 English、Computer,用于存储表格中数据。
Number Name English Computer

1001 Zhang san 71 68


1002 Li si 53 71
1003 Wang wu 69 80

实 1.
验 namelengthmax
结 ans =63
果 由运行结果可得我电脑 matlab 允许的变量名的最大长度为 63。
与 2.
分 isvarname a
析 ans =1
isvarname b2
ans =1
isvarname 1a
ans =0
isvarname _abc
ans =0
isvarname abc
ans =1
isvarname a2b
ans =1
isvarname a_b_1
ans =1
isvarname a-b
ans =0
由运行结果可得显示结果为 1 的为有效,显示结果为 0 的为无效,即 a ,b2 ,abc ,a2b ,
a_b_1 为有效数字;1a , _abc , a-b 为无效数字。
3. name1 = char('Liu Ying', 'Hu Xu')
name1 =
Liu Ying
Hu Xu
char 表示转换为字符串,可以直接运行,会自动分行
name11 = ['Liu Ying'; 'Hu Xu ']。
name11 =
Liu Ying
Hu Xu
功能与 char 一样,可以看到在 Hu Xu 后有空格是为保持与 Liu Ying 字符长度一致,否
则不能运行。
name2 = ['Liu Ying', 'Hu Xu']
name2 =
Liu YingHu Xu
可以看到 Liu YingHu Xu 是直接串起来的,没有分行,就像矩阵一样,可以直接运行。
name3 = ['Liu Ying'; 'Hu Xu']
??? Error using ==> vertcat
CAT arguments dimensions are not consistent.
无法运行,因为前后字符长度不一样,若将[]改为{}则可以运行如下所示。
name3 = {'Liu Ying'; 'Hu Xu'}
name3 =
'Liu Ying'
'Hu Xu'
4.
x=13.6+uint8(125)
x =139
输出结果为 139 为 14 加上 125 所得,13.6 直接转换为无符号型向上取整。
sin(x)
??? Undefined function or method 'sin' for input arguments of type 'uint8'.
Sinx 这个函数仅支持双精度型所以无法运行,要将对象转换为双精度性才可以运行,
如下:
sin(double(x))
ans =0.6961

13.6+int8(125)
ans =127
因为 int 的范围为-128 到 127,因为 13.6 加上 125 所得结果明显超过上限,所以输出结
果为 127.
a=uint8(125); b=13.6+double(a)
b =138.6000
先将 a 转换为双精度型再相加。
5.
num = 28;
s = ['There are ' int2str(num) 'characters here']
s = sprintf('There are %d characters here\n', num)
s =There are 28characters here
s =There are 28 characters here
由输出结果我们可以看出两者的区别是 28 与 characters 之间是否有空格。
str='answer:'; x=1;y=2.5;
ss=sprintf('%s\n%d +%.1f=%.2f\n',str,x,y,x+y)
fprintf('%s\n%d +%.1f=%.2f\n',str,x,y,x+y)
ss =
answer:
1 +2.5=3.50
answer:
1 +2.5=3.50
两者虽然表示方法不一样,其实功能是没什么区别的。
6.
str= 'S0619-S1914-S0388-S0348-S0392-S0429-S0436';
id=find(str=='S');
N=numel(id);
V=zeros(N,1);
for i=1:N
V(i)=str2double(str(id(i)+1:id(i)+4));
end
disp(V)
619
1914
388
348
392
429
436
7.
dna='aggcacggaaaaacgggaataacggaggaggacttggcacggcattacacggaggacgag';
N=length(dna);
pa=sum(dna=='a')/N
pc=sum(dna=='c')/N
pg=sum(dna=='g')/N
pt=sum(dna=='t')/N
pa =0.3500
pc =0.1833
pg =0.3833
pt =0.0833
8.
stu.Number=[1001,1002,1003]
stu.Name={'Zhang san','Li si''Wang wu'}
stu.English=[71,53,69]
stu.Computer=[68,71,80]

stu =

Number: [1001 1002 1003]


Name: {'Zhang san' 'Li si'Wang wu'}
English: [71 53 69]
Computer: [68 71 80]

You might also like