11月17日问题 E: 矩阵加法

本文介绍了一个简单的矩阵加法程序实现,通过定义足够大的数组来解决输入问题,并提供了完整的C语言代码示例。

题目描述

输入两个n行m列的矩阵A和B,输出它们的和A+B。

输入

第一行包含两个整数n和m,表示矩阵的行数和列数(1≤n≤100,1≤m≤100)。

接下来n行,每行m个整数,表示矩阵A的元素。

接下来n行,每行m个整数,表示矩阵B的元素。

相邻两个整数之间用单个空格隔开,每个元素均在1~1000之间。

输出

n行,每行m个整数,表示矩阵加法的结果。相邻两个整数之间用单个空格隔开。

样例输入

3 3
1 2 3
1 2 3
1 2 3
1 2 3
4 5 6
7 8 9

样例输出

2 4 6
5 7 9
8 10 12

今天做作业学到了一个新知识,题目看花,定义了一个1010大小的数组,结果不能输入,如果把这个数组放到main前面全局变量空间分配不一样,结果就能输入。 

int a[1010][1010],b[1010][1010];
#include <stdio.h>
int main(){
	int n,m;
	scanf("%d %d",&n,&m);
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			scanf("%d",&a[i][j]);
		}
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			scanf("%d",&b[i][j]);
		}
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			printf("%d ",a[i][j]+b[i][j]);
		}
		printf("\n");
	}
} 

 

from math import sqrt, sin, cos, atan2, pi from datetime import datetime, timedelta import os import numpy as np # ---------------------- 卫星坐标计算函数 ---------------------- def calculate_satellite_position(row, observation_time=None): """根据星历参数计算CGCS2000坐标系中的卫星位置""" # GNSS系统常量 GM = 3.986004418e14 # 地球引力常数 (m³/s²) Omega_E = 7.2921150e-5 # 地球自转角速度 (rad/s) DayToSecond = 24 * 3600 # 一的秒数 # 提取星历参数 toe = float(row['toe']) # 星历参考时间 (s) sqrtA = float(row['sqrtA']) # 轨道长半轴平方根 (m^1/2) e = float(row['e']) # 偏心率 i0 = float(row['i']) # 初始轨道倾角 (rad) Omega0 = float(row['Omega0']) # 升交点赤经 (rad) w = float(row['w']) # 近地点角距 (rad) M0 = float(row['M']) # 平近点角 (rad) deltaN = float(row['deltaN']) # 平均运动速率校正 OmegaDot = float(row['OmegaDot']) # 升交点赤经变化率 i_dot = float(row['i_dot']) # 轨道倾角变化率 # 解析时间信息 epoch_str = row['Epoch'] date_time = epoch_str.split(" ") date_parts = date_time[0].split("-") time_parts = date_time[1].split(":") year, month, day = int(date_parts[0]), int(date_parts[1]), int(date_parts[2]) hour, minute, second = int(time_parts[0]), int(time_parts[1]), float(time_parts[2]) # 计算观测时间与星历参考时间的差值(秒) if observation_time is None: # 使用星历时间作为观测时间 tk = 0.0 else: # 计算儒略差值 EpochT = calculate_julian_day(year, month, day, hour, minute, second) reference_julian_day = calculate_julian_day(2006, 1, 1, 0, 0, 0) EpochT -= reference_julian_day # 计算时间差 tk = (EpochT - float(row['WN']) * 7) * DayToSecond - toe # 1. 计算轨道长半轴和平均运动速率 A = sqrtA ** 2 n0 = sqrt(GM / (A ** 3)) n = n0 + deltaN # 校正后平均运动速率 # 2. 计算平近点角 Mk = M0 + n * tk # 3. 迭代求解偏近点角Ek Ek = solve_kepler_equation(Mk, e) # 4. 计算真近点角vk sin_vk = (sqrt(1 - e ** 2) * sin(Ek) / (1 - e * cos(Ek)) cos_vk = (cos(Ek) - e) / (1 - e * cos(Ek)) vk = atan2(sin_vk, cos_vk) # 5. 计算升交距角φk phi_k = vk + w # 6. 计算校正后的轨道参数 u_k = phi_k # 纬度幅角 r_k = A * (1 - e * cos(Ek)) # 轨道半径 i_k = i0 + i_dot * tk # 轨道倾角 # 7. 计算升交点赤经Ωk Omega_k = Omega0 + (OmegaDot - Omega_E) * tk - Omega_E * toe # 8. 坐标转换至CGCS2000坐标系 X = r_k * (cos(Omega_k) * cos(u_k) - sin(Omega_k) * sin(u_k) * cos(i_k)) Y = r_k * (sin(Omega_k) * cos(u_k) + cos(Omega_k) * sin(u_k) * cos(i_k)) Z = r_k * sin(u_k) * sin(i_k) return X, Y, Z def calculate_julian_day(year, month, day, hour, minute, second): """ 计算儒略 :param year::param month::param day: :param hour::param minute::param second::return: 儒略 """ a = (14 - month) // 12 y = year + 4800 - a m = month + 12 * a - 3 julian_day = day + ((153 * m + 2) // 5) + 365 * y + y // 4 - y // 100 + y // 400 - 32045 julian_day += (hour - 12) / 24 + minute / 1440 + second / 86400 return julian_day def solve_kepler_equation(M, e, tolerance=1e-12, max_iterations=100): """ 使用牛顿迭代法解开普勒方程 :param M: 平近点角 :param e: 偏心率 :param tolerance: 容差 :param max_iterations: 最大迭代次数 :return: 偏近点角 """ E = M if e < 0.8 else pi for _ in range(max_iterations): delta_E = (E - e * sin(E) - M) / (1 - e * cos(E)) E -= delta_E if abs(delta_E) < tolerance: break return E # ---------------------- 数据处理函数 ---------------------- def read_ephemeris(file_path): """读取星历数据文件并返回卫星列表""" if not os.path.exists(file_path): raise FileNotFoundError(f"文件不存在: {file_path}") satellites = [] with open(file_path, 'r', encoding='utf-8') as f: # 读取表头 f.readline() # 处理数据行 for _ in range(13): # 假设13颗卫星 line = f.readline().strip() if not line: continue # 分割数据行(处理多空格分隔) values = line.split() # 创建卫星数据字典 satellite = { 'Epoch': f"{values[0]} {values[1]}", # 完整期时间 'PRN': values[2], 'WN': float(values[3]), 'toe': float(values[4]), 'sqrtA': float(values[5]), 'e': float(values[6]), 'i': float(values[7]), 'Omega0': float(values[8]), 'w': float(values[9]), 'M': float(values[10]), 'deltaN': float(values[11]), 'OmegaDot': float(values[12]), 'idot': float(values[13]), 'Crs': float(values[14]), 'Crc': float(values[15]), 'Cus': float(values[16]), 'Cuc': float(values[17]), 'Cis': float(values[18]), 'Cic': float(values[19]), 'toc': float(values[20]), 'a0': float(values[21]), 'a1': float(values[22]), 'a2': float(values[23]) } satellites.append(satellite) return satellites # ...(保留原有的process_ephemeris、save_results、print_preview函数不变)... # ---------------------- 主函数 ---------------------- def main(): input_file = 'badata.txt' # 星历数据文件路径 output_file = 'satellite_positions.csv' # 结果保存路径 try: # 读取数据 print(f"正在读取星历数据: {input_file}") satellites = read_ephemeris(input_file) if not satellites: print("未读取到有效卫星数据") return print(f"成功读取 {len(satellites)} 颗卫星数据") # 计算卫星位置(使用星历参考时间) print("正在计算卫星位置...") processed_satellites = [] for sat in satellites: try: X, Y, Z = calculate_satellite_position(sat) sat['X(m)'] = X sat['Y(m)'] = Y sat['Z(m)'] = Z sat['距离(m)'] = sqrt(X**2 + Y**2 + Z**2) processed_satellites.append(sat) except Exception as e: print(f"计算卫星 {sat['PRN']} 位置失败: {str(e)}") # 打印结果预览 print_preview(processed_satellites) # 保存结果 save_results(processed_satellites, output_file) except Exception as e: print(f"程序执行出错: {e}") if __name__ == "__main__": main() ``` 修改代码让它不包含numpy库
最新发布
06-11
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值