input disp fprintf用法

MATLAB输入输出操作
本文介绍了MATLAB中使用input函数获取用户输入的方法及注意事项,包括处理字符串和数值输入的情况,并详细讲解了disp和fprintf函数的使用技巧,帮助读者掌握MATLAB的基本交互式编程。

 
2.2.3 用关键字input初始化变量


关键字input用来提示使用者和直接从键盘输入初始化变量.当脚本文件(Script files)时,它可以用来提示使用者输入.input函数在命令窗口(The Command Windows)显示出提示语句,并等待用户返回一个值.例如,下面的赋值语句:

my_val=input(‘enter an input value:’)

当这个语句被编译时,MATLAB打印出字符串enter an input value:,然后等待用户回复.始果要只输入一个数,那么只需要直接键入,而如果要输入一个数组,则必须带上中括号([ ]).在另一种情况下,当回车键按下时.在窗口输入的任何值都会被储入变量my_val.如果只按下回车键,那么这个变量中存储了一个空矩阵.

如果input函数中有字符’s’为它的第二个参数,那输入的数据被当字符串.因此,语句

in1=input(‘enter data’);

Enter data:1.23

把数值1.23存储到in1 中.而语句

in2=input(‘enter data:’,’s’)

把字符串1.23存储到in2中.

 

 


2.6.2  disp函数

另一种显示数据的方法是用disp函数。disp需要一个数组参数,它将它的值将显示在命令窗口(The Command Windows)中。如是果这个数组是字符型(char),那么包含在这个数组中的子符串将会打印在命令窗口(The Command Windows)中。

此函数可联合num2str(将一个数转化为字符串)和int2str(将一个整形数转化为字符串)来产生新的信息,显示在命令窗口(The Command Windows)中。例如,下面的语句将“the value of pi=3.1416”显示在命令窗口(The Command Windows)中。第一句创建了一个字符型数组,第二句用于显示这个数组。

str=[‘the value of pi=’   num2str(pi)];

disp(str);

 


2.6.3用fprintf函数格式化输出数据

用fprintf函数显示数据是一种十分简便方法。fprintf 函数显示带有相关文本的一个或多个值,允许程序员控制显示数据的方式。它在命令窗口打印一个数据的一般格式如下:

fprint(format,date)

其中format 用于代表一个描述打印数据方式的子符串,date代表要打印的一个或多个标量或数组。Format包括两方面的内容,一方面是打印内容的文本的提示;另一方面是打印的格式。例如,函数


将会打印出‘The value of pi is   3.14’,后面带有一个换行符。转义序列%6.2代表在本函数中的第一个数据项将占有6个字符宽度,小数点后有2位小数。

Fprintf函数有一个重大的局限性,只能显示复数的实部。当我们的计算结果是复数时,这个局限性将会产生错误。在这种情况下,最好用disp显示数据。

表2.4  fprintf 函数format字符中的特殊字符

format string
 结果
 
%d
 把值作为整数来处理
 
%e
 用科学记数法来显示数据
 
%f
 用于格式化浮点数,并显示这个数
 
%g
 用科学记数格式,或浮点数格式,根据那个短,并显示之
 
\n
 转到新的一行
 

 

例如,下列语句计算复数x的值,分别用fprintf和disp显示


打印的结果如下


注意frpintf 忽略了虚部。

 
function main() while true disp('====================================='); disp(' 测绘数据处理综合程序'); disp('====================================='); disp('1. 角度单位转换'); disp('2. 坐标计算'); disp('3. 图幅编号计算'); disp('4. 水准平差计算'); disp('5. 导线网平差计算'); disp('0. 退出程序'); disp('----------------------------------------'); choice = input('请选择操作 (0-5): '); switch choice case 1 angle_conversion_module(); case 2 coordinate_calculation_module(); case 3 map_sheet_number_module(); case 4 leveling_adjustment_module(); case 5 traverse_adjustment_module(); case 0 disp('感谢使用,程序已退出。'); break; otherwise disp('无效选择,请重新输入。'); end end end % 角度单位转换模块 function angle_conversion_module() disp('角度单位转换模块:'); disp('1. 度分秒转弧度'); disp('2. 弧度转度分秒'); disp('0. 返回主菜单'); choice = input('请选择操作 (0-2): '); switch choice case 1 dms = input('请输入度分秒 (格式: [度 分 秒]): '); rad = dms_to_radians(dms(1), dms(2), dms(3)); fprintf('转换结果: %.6f 弧度\n', rad); case 2 rad = input('请输入弧度值: '); dms = radians_to_dms(rad); fprintf('转换结果: %d° %d′ %.2f″\n', dms(1), dms(2), dms(3)); case 0 return; otherwise disp('无效选择,请重新输入。'); end end % 坐标计算模块 function coordinate_calculation_module() while true disp('坐标计算模块:'); disp('1. 坐标正算'); disp('2. 坐标反算'); disp('3. 前方交会'); disp('4. 后方交会'); disp('0. 返回主菜单'); choice = input('请选择操作 (0-4): '); switch choice case 1 % 坐标正算 x0 = input('请输入起点X坐标: '); y0 = input('请输入起点Y坐标: '); dist = input('请输入距离: '); azimuth = input('请输入方位角 (弧度): '); [x1, y1] = forward_coordinate(x0, y0, dist, azimuth); fprintf('终点坐标: X=%.2f, Y=%.2f\n', x1, y1); case 2 % 坐标反算 x1 = input('请输入点1的X坐标: '); y1 = input('请输入点1的Y坐标: '); x2 = input('请输入点2的X坐标: '); y2 = input('请输入点2的Y坐标: '); [dist, azimuth] = reverse_coordinate(x1, y1, x2, y2); fprintf('两点间距离: %.2f\n', dist); fprintf('方位角: %.6f 弧度\n', azimuth); case 3 disp('前方交会功能暂未实现'); case 4 disp('后方交会功能暂未实现'); case 0 break; otherwise disp('无效选择,请重新输入。'); end end end % 图幅编号模块 function map_sheet_number_module() disp('图幅编号计算模块:'); lat = input('请输入纬度 (度): '); lon = input('请输入经度 (度): '); scale = input('请输入比例尺 (如1000000表示1:100万): '); sheet_number = calculate_map_sheet_number(lat, lon, scale); fprintf('图幅编号: %s\n', sheet_number); end % 水准平差模块 function leveling_adjustment_module() disp('水准平差计算模块:'); % 示例:简单的水准网平差(具体实现需根据实际需求) heights = input('请输入高程观测值 (格式: [h1 h2 h3 ...]): '); weights = input('请输入权重 (格式: [w1 w2 w3 ...]): '); adjusted_heights = leveling_adjustment(heights, weights); fprintf('调整后的高程: '); disp(adjusted_heights); end % 导线网平差模块 function traverse_adjustment_module() disp('导线网平差计算模块:'); % 示例:简单的导线网平差(具体实现需根据实际需求) angles = input('请输入角度观测值 (格式: [a1 a2 a3 ...]): '); distances = input('请输入边长观测值 (格式: [d1 d2 d3 ...]): '); adjusted_angles = traverse_angle_adjustment(angles); adjusted_distances = traverse_distance_adjustment(distances); fprintf('调整后的角度: '); disp(adjusted_angles); fprintf('调整后的边长: '); disp(adjusted_distances); end % 辅助函数 function rad = dms_to_radians(degree, minute, second) rad = (degree + minute/60 + second/3600) * pi / 180; end function dms = radians_to_dms(rad) degrees = rad * 180 / pi; d = floor(degrees); m = floor((degrees - d) * 60); s = (degrees - d - m/60) * 3600; dms = [d, m, s]; end function [x1, y1] = forward_coordinate(x0, y0, dist, azimuth) x1 = x0 + dist * cos(azimuth); y1 = y0 + dist * sin(azimuth); end function [dist, azimuth] = reverse_coordinate(x1, y1, x2, y2) dx = x2 - x1; dy = y2 - y1; dist = sqrt(dx^2 + dy^2); azimuth = atan2(dy, dx); end function sheet_number = calculate_map_sheet_number(lat, lon, scale) % 示例:简单的图幅编号计算逻辑 lat_zone = floor(lat / 4); % 纬度分区 lon_zone = floor(lon / 6); % 经度分区 sheet_number = sprintf('L%dC%d_S%d', lat_zone, lon_zone, scale); end function adjusted_heights = leveling_adjustment(heights, weights) total_weight = sum(weights); weighted_sum = sum(heights .* weights); adjusted_heights = weighted_sum / total_weight * ones(size(heights)); end function adjusted_angles = traverse_angle_adjustment(angles) adjusted_angles = angles; % 简单示例,实际需要更复杂的算法 end function adjusted_distances = traverse_distance_adjustment(distances) adjusted_distances = distances; % 简单示例,实际需要更复杂的算法 end 将辅助函数填充到模块里面、
最新发布
05-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值