第二章 M文件程序设计(matlab)

Contents

clc;
clear all;

第二章 M文件程序设计

M文件

f2c.m

一,程序控制结构

1.顺序结构

1)数据的输入input

% x = input('whats your name ', 's')

2)数据的输出disp 输出字符串或者矩阵

% A = 'Hello ,Tom' ;
% disp(A)
%
% a = [1 2 3;4 5 6 ; 7 8 9 ] ;
% disp(a)
%
% % 输入x,y的值,并将他们的值置换后输出
% x = input('请输入x矩阵');
% y = input('请输入y矩阵');
% z = x;
% x = y;
% y = z;
% disp(x);
% disp(y);

3)程序的暂停 pause Ctrl+C 延迟的秒数.

%  pause(2)

2.选择结构

1)IF语句

 % 单分支语句
%  x = 0.6
%   if fix(x) == x
%       disp(x)
%   end

  % 双分支if语句
%   P = input('请输入P的值');
%   if P>5
%       A = zeros(1,10)
%   else
%       A = ones(1,10)
%   end

  % 多分支if语句

%   disp('解方程ax^2+bx+c=0,请输入参数')
%   a = input('a=');
%   b = input('b=');
%   c = input('c=');
%   derta = b*b -4*a*c;
%   x = [((-b+sqrt(derta))/(2*a)),(-b-sqrt(derta))/(2*a)];
%  disp(['方程',num2str(a),'x^2+',num2str(b),'x+',num2str(c),'=0的根为:']);
%  disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);

2)switch 语句 | 结构体 | 结构体元素引用 | 空格blanks(n) | num2str 数字转换为字符串.

%  switch 表达式
%      case 表达式1
%          语句组1
%      case 表达式2
%          语句组2
%          ...
%      otherwise
%      语句组n
%  end

% 用switch结构来实现学生成绩管理

% switch里的case的表达式可以是数字,矩阵,字符串.
% matlab中的的结构体的组成.
% 结构体的元素的引用.
%
clear;
for i=1:10;
    a{i} = 89+i;
    b{i} = 79+i;
    c{i} = 69+i;
    d{i} = 59+i;
end;
% a = [90]    [91]    [92]    [93]    [94]    [95]    [96]    [97]    [98]    [99]
%
% b =  [80]    [81]    [82]    [83]    [84]    [85]    [86]    [87]    [88]    [89]
%
% c =  [70]    [71]    [72]    [73]    [74]    [75]    [76]    [77]    [78]    [79]
%
% d =  [60]    [61]    [62]    [63]    [64]    [65]    [66]    [67]    [68]    [69]
c = [d,c];
% c =    [60]    [61]    [62]    [63]    [64]    [65]    [66]    [67]    [68]    [69]    [70]    [71]    [72]  [73]    [74]    [75]    [76]    [77]    [78]    [79]
Name = {'Jack','Marry','Peter','Rose','Tom'};
Mark = { 72 83 56 94 100 };
Rank =cell(1,5);                                %生成一维矩阵 为空: Rank =   []    []    []    []    []
S = struct('Name',Name,'Marks',Mark,'Rank',Rank);
for i = 1:5
    switch S(i).Marks
        case 100
            S(i).Rank = '满分';
        case a
            S(i).Rank = '优秀';
        case b
            S(i).Rank = '良好';
        case c
            S(i).Rank = '及格';
        otherwise
            S(i).Rank = '不及格';
    end
end
disp(['学生姓名 ',' 得分  ',' 等级 ']);
disp('')
for i=1:5;
    disp([S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank]);
end
学生姓名  得分   等级 
Jack      72      及格
Marry      83      良好
Peter      56      不及格
Rose      94      优秀
Tom      100      满分

3)try语句

%   try
%       语句组1
%   catch
%       语句组2
%   end

% A = [1 2 3;4 5 6];
% B = [7 8 9;10 11 12];
% try
%     C1 = A*B
% catch
%     C2 = A.*B
% end
% lasterr             %Last error message

3.循环结构

1)for语句

% for 循环变量 = 表达式1:表达式2:表达式3
%     循环体语句
% end


%  for 循环变量 =矩阵表达式
%      循环体语句
%  end


% %输出1个3位数,各位数的立方和等于该数本身.
% for m = 100:1:999
%     m1 = fix(m/100);            % 求m的百位数字
%     m2 = rem(fix(m/10),10);     % 求m的十位数字
%     m3 = rem(m,10);             % 求m的个位数字
%     if m == m1*m1*m1 + m2*m2*m2 + m3*m3*m3
%         disp(m)
%     end
% end

% 已知y=1+1/2^2+...+1/n^2 ,当n为100时,求y的值.

% y = 0;
% n = input('输入n的值,求y:');
% for i = 1:n
%     y = y+1/i/i ;
% end
% disp(['当n为',num2str(n),'时,y=',num2str(y)])

% n=200;
% i = 1:n^2;
% y = sum(1./i)

% 求矩阵各行元素之和
% s = 0;
% a = [12 13 14; 15 16 17; 18 19 20;21 22 23]
% for k = a
%     s = s+k;
% end
% disp(s);

2)while语句

% while(条件)
%     循环体语句
% end


% 从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和.

% sum = 0;
% count = 0;
% val = input('输入一个数,(以0结束输入)');
% while (val ~= 0)
%     sum = sum + val;
%     count = count + 1;
%     val = input('输入一个数,(以0结束输入)');
% end
% if (count>0)
%     disp([blanks(6),'总和为',num2str(sum)]);
%     disp([blanks(6),'平均值为',num2str(sum/count)]);
% end

3)break语句和continue语句

% continue语句控制跳过循环体的某些语句.
% break 语句跳过当前循环体.

% a = 3;b = 6;
%     for i = 1:3
%         b = b+1
%         if i<2                %当if条件满足时,程序不再执行continue后面的语句,而是开始下一次的循环.
%             continue          %continue语句常用于循环体中,与if语句一起使用.
%         end
%         a = a+2
%     end

% a = 3;b = 6;
%     for i = 1:3
%         b = b+1
%         if i>2                % 当if条件不满足时,程序执行a = a +2;
%             break             % 当if条件满足时,程序执行循环体,跳出循环体.
%         end
%         a = a+2
%     end

4)循环的嵌套

% 若一个数等于它的各个真因子之和,则称之为完数.如6 = 1+2+3;所以6是完数.求[1,500]之间的完数.
% 求某个数的因子,然后累加,比较后输出.

% for m = 1:500
%     s = 0;
%     for k = 1:m/2
%         if rem(m,k) == 0
%             s = s+k;
%         end
%     end
%         if m == s
%             disp(m);
%         end
% end

二,函数文件

1)函数文件的基本结构

编写函数文件求半径为r的圆的面积和周长. [s,p] = fcircle(10)

 [s,p] = fcircle(10)
s =

  314.1593


p =

   62.8319

2)函数调用

 % 利用函数文件,实现指教坐标(x,y)和极坐标(\rho,\theta)
%函数fcircle.m
% x = input ('输入直角坐标x:');
% y = input ('输入直角坐标y:');
% [rho,theta] = tran(x,y);
% disp(['{\rho} = ',num2str(rho)]);
% disp(['{\theta} = ',num2str(theta)]);

% 利用函数的递归调用,求n!
% % 函数factor.m
% s = 0;
% for i = 1:5
%     s = s + factor(i);
% end
% s
% % 函数factor.m调用
% s = 0;
% n = input ('请输入n,以求n的阶乘.n=');
% for i = 1:n
%     s = s + factor(i);
% end
% disp([num2str(n),'!=',num2str(s)])

3)全局变量和局部变量

% 全局变量示例
% % 函数wadd.m
%  global alpha beta
%  alpha = 1;
%  beta = 2;
%  s = wadd(1,2)

三.案例分析

% % 用筛选法求某自然数范围内的全体素数.
%  m = input('m=');
%  p = 1:m;
%  p(1) = 0;
%  for i = 2:sqrt(m)
%      for j = 2*i:i:m
%          p(j) = 0
%      end
%  end
%  n  = find(p~=0)
%  p(n)

%
% m = input('m=');
% p =2:m ;
% for i = 2:sqrt(m)
%     n = find(rem(p,i) == 0 & p ~= i); %如果p对i取余为0,并且p不等于i
%     p (n) = [];
% end
% p

% % 设f(x) = exp(0.5x)*sin(x+pi/6) ,求s = [0,3*pi]f(x)dx.
% %----------------------------------------------------
% a = 0;
% b = 3*pi;
% n = 10000;
% h = (b-a)/n;
% x =a; s = 0;
% f0 = exp(-0.5*x)*sin(x+pi/6);
% for i=1:n
%     x = x +h;
%     f1 = exp(-0.5*x)*sin(x+pi/6);    %更新f1
%     s = s +(f0+f1)*h/2;              %求小矩阵的值.累加.
%     f0=f1;                           %更新f0
% end
% s
% %----------------------------------------------------
% a = 0;
% b = 3*pi;
% n =1000;
% h = (b-a)/n;
% x = a:h:b;
% f = exp(-0.5*x).*sin(x+pi/6);       %求图形上的各点.
% for i =1:n
%     s(i) = (f(i)+f(i+1))*h/2;       %求小梯形的面积.
% end
% s = sum (s)                         %累加求积分值.

% %----------------------------------------------------
% % 斐波拉契数列
% n = input('求斐波拉契数列的第n项,n=');
% resultFFIB = ffib(n)

f2c.m

clc;
clear;
F= input('输入华氏温度F:');
C = 5*(F-32)/9;
disp('华氏温度F为')
disp(F)
disp('转换为摄氏温度C是')
disp(C)

factor.m

function f = factor(n)
if n<=1
    f = 1;
else
    f = factor(n-1)*n;
end


fcircle.m

function [s,p] = fcircle(r)

% CIRCLE calculate the zrea and perimeter of a circle of radir r
% r 圆半径
% s 圆面积
% p 圆周长
s = pi*r*r;
p = 2*pi*r;

% lookfor perimeter
% fcircle                        - CIRCLE calculate the zrea and perimeter of a circle of radir r

ffib.m

function f =ffib(n)
if n >2
    f = ffib(n-1) + ffib(n-2);
else
    f =1;
end

tran.m

%% tran.m
function [rho,theta] = tran(x,y)

rho = sqrt (x*x+y*y);
theta = atan (y/x);
wadd.m

function f = wadd(x,y)
global alpha beta
f = alpha*x+beta*y;
F:\matlab\work\TongXingYuanLi\Chapter2\type>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值