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>
请发表评论