【C语言训练】计算t=1+1/2+1/3+...+1/n

本文介绍了一个简单的C++程序来计算调和级数之和t=1+1/2+1/3+...+1/n,并保留六位小数进行输出。通过for循环逐项累加实现。
ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

题目链接:http://115.28.203.224/problem.php?cid=1010&pid=30

题目描述

计算t=1+1/2+1/3+...+1/n

输入

整型变量n

输出

t(保留六位小数)

样例输入

10

样例输出

2.928968

代码

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 int main()
 5 {
 6     int n;
 7     double t = 0;
 8     cin>>n;
 9     for (int i = 1; i <= n; i++)
10         t += 1.0 / i;
11     printf("%.6f", t);
12     return 0;
13 }

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

#include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "vofa.h" #include "AD.h" #include "OLED.h" #include "key.h" #include "timer1.h" #include "inveter.h" uint32_t switch_ = 0,flag = 0,flag2 = 0,i=0; uint8_t data[4]; //定义一组大小为4的8位数组,用于串口发送浮点型给vofa float udc[10],x; //pid结构体 pfc_typedef pfc; inveter_typedef invt; int main(void) { // invt_init(&invt); get_sin_tab1(PointMax, 1.0f); pfc_init(&pfc, 0.00005f); TIM8_PWM_CHN_Init(2100-1,2 - 1); TIM1_PWM_CHN_Init(2100-1,2 - 1); KEY_Init(); LED_Init(); delay_init(168); //延时初始化 OLED_Init(); uart_init(2000000); //串口初始化波特率为115200 MyTIM3_Init(50,84); //20KHz MyADC1_Init(); MyDMA1_Init(); TIM_Cmd(TIM3,ENABLE); //使能定时器 开始触发ADC采样 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2 // while(1) { switch_ = KEY_Scan3(0, switch_); if(switch_ == 1 && flag == 1) //*>开启pwm波 { flag = 0; flag2 = 1; TIM_ARRPreloadConfig(TIM8, ENABLE); TIM_Cmd(TIM8, ENABLE); TIM_CtrlPWMOutputs(TIM8, ENABLE); TIM_ARRPreloadConfig(TIM1, ENABLE); TIM_Cmd(TIM1, ENABLE); TIM_CtrlPWMOutputs(TIM1, ENABLE); } //·< if(switch_ == 0 && flag == 0) //*>关闭pwm { flag = 1; flag2 = 0; invt_init(&invt); TIM_Cmd(TIM3,ENABLE);//// 鍚敤TIM3锛堝彲鑳芥槸ADC閲囨牱瀹氭椂鍣? TIM_ARRPreloadConfig(TIM8, DISABLE); TIM_Cmd(TIM8, DISABLE); TIM_CtrlPWMOutputs(TIM8, DISABLE); TIM8->CCR1 = 0; TIM8->CCR2 = 0; TIM8->CCR3 = 0; i=0; } //·< KEY_Calculate(0); } } void DMA2_Stream0_IRQHandler(void) { if(DMA_GetITStatus(DMA2_Stream0, DMA_IT_TCIF0)!=RESET) { static uint32_t n=0, flag3=0, k=0; int j; static float max=0,min=0,a=0; float duty1 = 0,duty2 = 0; float vofa_f[5]; //vofa传送数据数组(大小为数据曲线个数) GPIO_SetBits(GPIOB,GPIO_Pin_1);//设置为高电平 invt.eab = (ADC_Value[0] * 0.000805f - 1.65f) * 32.5f; invt.ebc = (ADC_Value[1] * 0.000805f - 1.645f) * 32.5f; invt.ea = (2.0f*invt.eab + invt.ebc)*0.333333f; invt.ec = (2.0f*invt.ebc + invt.eab)*-0.333333f; invt.ia = (ADC_Value[2] * 0.000805f - 1.65f) * 5.0f; invt.ic = (ADC_Value[3] * 0.000805f - 1.645f) * 4.9f; // if(flag2) //*> { k=i+133; if(k>=400) k-=400; j=i-133; if(j<0) j+=400; invt.envt.vref * sinData[i]; invt.ec_ref = invt.vref * a_ref = isinData[k]; invt_loop(&invt); // TIM8->CCR1 = (1 + sinData[i]) * 1050; // TIM8->CCR2 = (1 + sinData[j]) * 1050; // TIM1->CCR3 = (1 + sinData[k]) * 1050; //*spwm TIM8->CCR1 = (1 + invt.vm_a) * 1050; TIM8->CCR2 = (1 + invt.vm_b) * 1050; TIM1->CCR3 = (1 + invt.vm_c) * 1050; //*svpwm // TIM8->CCR1 = invt.svm_a * 2100; // TIM8->CCR2 = invt.svm_b * 2100; // TIM1->CCR3 = invt.svm_c * 2100; i+=1; if(i>=400) i=0; } //·< //*测试 // vofa_f[0] = invt.eab; //*> // vofa_f[1] = invt.ebc; // vofa_f[2] = sinData[k]; // vofa_f[3] = pfc.beta; // send_to_vofa2(vofa_f, data, 2); GPIO_ResetBits(GPIOB,GPIO_Pin_1);//设置为低电平 DMA_ClearITPendingBit(DMA2_Stream0, DMA_IT_TCIF0); } } 我是初学者,教我学会这些代码
08-02
#include <reg52.h> #include <stdio.h> #include <string.h> // 端口定义 sfr AUXR = 0x8E; #define LCD_DATA P1 sbit RS = P2^5; sbit RW = P2^6; sbit E = P2^7; sbit BUZZER = P2^0; sbit KEY_HR_UP = P2^1; sbit KEY_HR_DOWN = P2^2; sbit KEY_SPO2_UP = P2^3; sbit KEY_SPO2_DOWN = P2^4; // ADC0808 控制引脚 sbit ADC_CLK = P3^1; sbit ADC_OE = P3^2; sbit ADC_EOC = P3^3; sbit ADC_ST = P3^4; sbit ADC_A = P3^5; sbit ADC_B = P3^6; sbit ADC_C = P3^7; // 全局变量 unsigned char hr = 0; // 心率 unsigned char spo2 = 0; // 血氧饱和度 unsigned int hr_upper = 120; // 心率上限 unsigned int hr_lower = 24; // 心率下限 unsigned int spo2_upper = 100;// 血氧上限 unsigned int spo2_lower = 95; // 血氧下限 unsigned char ecg_buf[16]; // 滑动平均缓冲 unsigned char ppg_red_buf[16]; // 红光缓冲 unsigned char ppg_ir_buf[16]; // 红外光缓冲 unsigned char buf_idx = 0; unsigned char eeprom_addr = 0; // EEPROM 当前地址 // 报警计时 unsigned long alarm_timer = 0; bit alarm_on = 0; bit alarm_beep = 0; unsigned long alarm_beep_timer = 0; // 延时函数 void delay_ms(unsigned int ms) { unsigned int i, j; for(i = 0; i < ms; i++) for(j = 0; j < 1275; j++); } // LCD 写命令 void lcd_write_cmd(unsigned char cmd) { RS = 0; RW = 0; LCD_DATA = cmd; E = 1; delay_ms(1); E = 0; } // LCD 写数据 void lcd_write_data(unsigned char dat) { RS = 1; RW = 0; LCD_DATA = dat; E = 1; delay_ms(1); E = 0; } // LCD 初始化 void lcd_init() { delay_ms(15); lcd_write_cmd(0x38); // 8位数据接口,两行显示,5x8点阵 lcd_write_cmd(0x0C); // 开显示,关光标 lcd_write_cmd(0x06); // 光标右移,画面不动 lcd_write_cmd(0x01); // 清屏 } // ADC0808 读取指定通道 unsigned char adc_read(unsigned char ch) { unsigned char val; ADC_OE = 0; ADC_ST = 0; // 通道选择 ADC_A = (ch >> 0) & 0x01; ADC_B = (ch >> 1) & 0x01; ADC_C = (ch >> 2) & 0x01; // 启动转换 ADC_ST = 1; delay_ms(1); ADC_ST = 0; // 等待转换完成 while(ADC_EOC == 0); // 读取数据 ADC_OE = 1; val = P0; ADC_OE = 0; return val; } // 滑动平均滤波 unsigned char滑动_avg(unsigned char new_val, unsigned char *buf) { unsigned int sum = 0; buf[buf_idx] = new_val; for(unsigned char i = 0; i < 16; i++) sum += buf[i]; buf_idx = (buf_idx + 1) % 16; return (unsigned char)(sum / 16); } // 巴斯沃特低通滤波 unsigned char butterworth_filter(unsigned char x, unsigned char *y_prev) { // 简化版一阶滤波 unsigned char y = (unsigned char)( (9 * x + 7 * y_prev[0]) / 16 ); y_prev[0] = y; return y; } // R峰检测 bit detect_r_peak(unsigned char val, unsigned char prev_val) { // 简单阈值法 static unsigned char threshold = 120; if(val > threshold && prev_val <= threshold) return 1; return 0; } // 计算心率 void calc_hr(unsigned char ecg_val, unsigned char prev_ecg) { static unsigned long last_peak_time = 0; static unsigned long sample_cnt = 0; if(detect_r_peak(ecg_val, prev_ecg)) { if(last_peak_time > 0) { unsigned long diff = sample_cnt - last_peak_time; if(diff > 0) hr = (unsigned char)(60000 / (diff * 4)); // 250Hz 采样 } last_peak_time = sample_cnt; } sample_cnt++; } // 计算血氧饱和度 void calc_spo2(unsigned char red, unsigned char ir) { // 模拟比值法:spo2 = 110 - 25 * (red/ir) if(ir > 0) { float ratio = (float)red / ir; spo2 = (unsigned char)(110 - 25 * ratio); if(spo2 > 100) spo2 = 100; if(spo2 < 70) spo2 = 70; } } // EEPROM 写一个字节 void eeprom_write(unsigned char addr, unsigned char dat) { while( (AUXR & 0x01) ); // 等待写操作完成 AUXR = 0x02; // 解锁EEPROM *(unsigned char xdata *)addr = dat; AUXR = 0x00; // 上锁 } // EEPROM 读一个字节 unsigned char eeprom_read(unsigned char addr) { while( (AUXR & 0x01) ); return *(unsigned char xdata *)addr; } // 保存数据到EEPROM void save_data() { eeprom_write(eeprom_addr++, hr); eeprom_write(eeprom_addr++, spo2); if(eeprom_addr >= 100) eeprom_addr = 0; // 50组数据 } // 按键处理 void key_scan() { if(KEY_HR_UP == 0) { delay_ms(10); if(KEY_HR_UP == 0) { hr_upper++; if(hr_upper > 200) hr_upper = 200; while(KEY_HR_UP == 0); } } if(KEY_HR_DOWN == 0) { delay_ms(10); if(KEY_HR_DOWN == 0) { hr_upper--; if(hr_upper < hr_lower + 1) hr_upper = hr_lower + 1; while(KEY_HR_DOWN == 0); } } if(KEY_SPO2_UP == 0) { delay_ms(10); if(KEY_SPO2_UP == 0) { spo2_upper++; if(spo2_upper > 100) spo2_upper = 100; while(KEY_SPO2_UP == 0); } } if(KEY_SPO2_DOWN == 0) { delay_ms(10); if(KEY_SPO2_DOWN == 0) { spo2_lower--; if(spo2_lower < 70) spo2_lower = 70; while(KEY_SPO2_DOWN == 0); } } } // 报警处理 void alarm_process() { if(hr < hr_lower || hr > hr_upper || spo2 < spo2_lower) { alarm_on = 1; alarm_timer = 0; } else { if(alarm_on) { alarm_timer++; if(alarm_timer >= 60000) { // 1分钟 alarm_on = 0; alarm_beep = 0; alarm_beep_timer = 0; } } } if(alarm_on) { alarm_beep_timer++; if(alarm_beep_timer <= 60000) { // 长鸣1分钟 alarm_beep = 1; } else if(alarm_beep_timer <= 120000) { // 停1分钟 alarm_beep = 0; } else { alarm_beep_timer = 0; } } else { alarm_beep = 0; } BUZZER = alarm_beep ? 0 : 1; } // 主函数 void main() { unsigned char ecg_val, red_val, ir_val; unsigned char prev_ecg = 0; unsigned char ecg_filtered, red_filtered, ir_filtered; unsigned char ecg_bw_prev = 0, red_bw_prev = 0, ir_bw_prev = 0; lcd_init(); memset(ecg_buf, 0, sizeof(ecg_buf)); memset(ppg_red_buf, 0, sizeof(ppg_red_buf)); memset(ppg_ir_buf, 0, sizeof(ppg_ir_buf)); while(1) { // 采集数据 ecg_val = adc_read(0); red_val = adc_read(1); ir_val = adc_read(2); // 假设IN2是红外光 // 滑动平均 ecg_val =滑动_avg(ecg_val, ecg_buf); red_val =滑动_avg(red_val, ppg_red_buf); ir_val =滑动_avg(ir_val, ppg_ir_buf); // 巴斯沃特滤波 ecg_filtered = butterworth_filter(ecg_val, &ecg_bw_prev); red_filtered = butterworth_filter(red_val, &red_bw_prev); ir_filtered = butterworth_filter(ir_val, &ir_bw_prev); // 计算心率和血氧 calc_hr(ecg_filtered, prev_ecg); calc_spo2(red_filtered, ir_filtered); prev_ecg = ecg_filtered; // 显示 lcd_write_cmd(0x02); // 回到原点 printf("HR:%3d %3d-%3d", hr, hr_lower, hr_upper); lcd_write_cmd(0xC0); // 第二行 printf("SPO2:%3d%% %3d-%3d", spo2, spo2_lower, spo2_upper); // 按键处理 key_scan(); // 报警处理 alarm_process(); // 保存数据 save_data(); delay_ms(4); // 250Hz 采样 } } 帮我分析一下代码
最新发布
12-09
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值