考查下面的程序代码,将输出什么结果?() public static void main (String argsD) tint num1 =40;int num2=5; int ans =O: if (num1/5==num2) (ans=10:}if (num2%5==0). {ans=201 if (num2==0) fans=30) else fans=40)) System.out.print (ans)i
时间: 2023-02-05 16:02:01 浏览: 107
这段程序代码会输出 40。
首先,这段程序会先将 `ans` 初始化为 0。然后它会进行三个判断:
1. `if (num1/5==num2)`:如果 `num1` 除以 5 等于 `num2`,将 `ans` 设为 10。
2. `if (num2%5==0)`:如果 `num2` 除以 5 余数为 0,将 `ans` 设为 20。
3. `if (num2==0)`:如果 `num2` 等于 0,将 `ans` 设为 30。
但是,由于 `num2` 的值为 5,所以上述所有判断均不成立,所以最后执行 `else` 分支,将 `ans` 设为 40。最后,程序会输出 `ans` 的值,即 40。
相关问题
阅读以下资料,请编写五个函数完成LED6的接口初始化,LED6的点亮和熄灭操作。假设定时器时钟源PCLK频率为200MHz,请用6818芯片定时器2进行计时,并用中断的方式完成LED6(亮1秒)-(灭1秒)-(亮1秒)的循环状态指示程序。  (1)完成LED初始化函数 void led_init(void) { ;} (2)完成led点亮函数 void led_on(void) { ; } (3)完成led熄灭函数 void led_off(void) { ;; } (4)完成定时器1初始化函数 void Timer_init(void) { // 1. Timer1,作定时器中断 // 2. 设置一级预分频值,设置TIMER0通道,设置TCFG0[7:0]位,设置为199 //f = 200M / (199+1) = 2MHz TCFG0 = ; // 3. 设置二级与分频值,设置TCFG1[3:80]位,设置为0100,进行16分频 //f =2MHz / 16 =125KHz TCFG1 = ;; // 4. 设置PTIMER1的最终周期1S,设置TCNTB1, 设置125000 TCNTB1 = ; // // 6. 打开手动加载 TCON = // 7. 关闭手动加载 TCON = ; // 8. 打开自动加载 TCON = ; TINT_CSTAT ; // 9. 使能TIMER定时器 TCON = ; } (5)完成中断处理函数 Int led_flag =0; void do_irq(void) { unsigned int num_irq; static unsigned int irq_cnt=0; num_irq = ;// 获取中断号 if(num_irq == ) {//补充代码 } GICC_EOIR = GICC_EOIR & (~(0x3FF << 0)) | num_irq;// 清除所有中断 }
以下是五个函数的代码实现:
```
// 定义LED6的控制寄存器地址
#define GPJ2CON (*((volatile unsigned int *)0xE0200280))
#define GPJ2DAT (*((volatile unsigned int *)0xE0200284))
// 初始化LED6的接口
void led_init(void)
{
// 配置GPJ2CON寄存器,使GPJ2_3引脚输出模式
GPJ2CON = (GPJ2CON & ~(0xF << 12)) | (0x1 << 12);
// 初始化GPJ2DAT寄存器,使GPJ2_3引脚输出高电平,LED6灭
GPJ2DAT |= (0x1 << 3);
}
// 点亮LED6
void led_on(void)
{
GPJ2DAT &= ~(0x1 << 3);
}
// 熄灭LED6
void led_off(void)
{
GPJ2DAT |= (0x1 << 3);
}
// 初始化定时器2
void Timer_init(void)
{
// 1. Timer2作为定时器中断
TCON &= ~(0x1 << 13);
// 2. 设置一级预分频值,设置TIMER2通道,设置TCFG0[7:0]位,设置为199
TCFG0 = (TCFG0 & ~(0xFF << 8)) | (0xC7);
// 3. 设置二级预分频值,设置TCFG1[3:0]位,设置为0,进行1分频
TCFG1 &= ~(0xF << 4);
// 4. 设置PTIMER2的最终周期1S,设置TCNTB2,设置200000000 / 200 = 1000000
TCNTB2 = 1000000;
// 6. 打开手动加载
TCON &= ~(0x1 << 22);
// 7. 关闭手动加载
TCON |= (0x1 << 22);
// 8. 打开自动加载
TCON |= (0x1 << 21);
// 9. 使能TIMER定时器
TCON |= (0x1 << 20);
}
// 中断处理函数
int led_flag = 0;
void do_irq(void)
{
unsigned int num_irq;
static unsigned int irq_cnt = 0;
num_irq = INTOFFSET;
// 判断是否是定时器2的中断
if (num_irq == 23)
{
irq_cnt++;
// LED6闪烁循环:亮1秒-灭1秒-亮1秒
if (irq_cnt == 1000000)
{
if (led_flag == 0)
{
led_on();
led_flag = 1;
}
else if (led_flag == 1)
{
led_off();
led_flag = 2;
}
else if (led_flag == 2)
{
led_on();
led_flag = 0;
}
irq_cnt = 0;
}
}
// 清除所有中断
GICC_EOIR = GICC_EOIR & (~(0x3FF << 0)) | num_irq;
}
```
#include "DSP2833x_Device.h" #include "DSP2833x_Examples.h" #define GEN_BUZZ_CLK GpioDataRegs.GPBTOGGLE.bit.GPIO35 = 1 //蜂鸣器控制IO,IO电平翻转,产生控制脉冲 #define BUZZ_OFF GpioDataRegs.GPBCLEAR.bit.GPIO35 = 1 //关闭蜂鸣器 #define MAXWARNTIMES 3 float t1=1; float t2=3; Uint16 N1=0; Uint16 N2=0; Uint16 WarnTimes=0; float freq0=1000; // 定时器0的中断频率(Hz) float prd0=0; // 定时器0的中断周期(sec)=1/freq0/2,对于方波,一个周期要中断2次 void InitBuzzGpio(void); interrupt void cpu_timer0_isr(void); void main(void) { N1=(Uint16)(t1/prd0); N2=(Uint16)(t1+t2/prd0); // Step 1. 系统控制初始化 InitSysCtrl(); // 蜂鸣器(Buzz)引脚初始化 InitBuzzGpio(); // Step 3. 清除所有中断、初始化PIE向量表,关闭cpu中断 DINT; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); // 初始化TIMER0功能 EALLOW; PieVectTable.TINT0 = &cpu_timer0_isr; EDIS; InitCpuTimers(); prd0=1/(freq0*2); // 一个时钟周期,前半为H电平,后半为L电平。 ConfigCpuTimer(&CpuTimer0, 150, prd0*1e6);//定时周期单位:us IER |= M_INT1; // 使能TINT0(TINT0在INT1的第7个) PieCtrlRegs.PIEIER1.bit.INTx7 = 1; EINT; // 使能全局中断(EINT) ERTM; // 使能实时中断(ERTM) StartCpuTimer0(); // 启动定时器0 for(;;); // 或while(1); 死循环,不能让CPU停下来 } /*****************************************初始化IO端口************************************************/ void InitBuzzGpio(void) { EALLOW; GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 0; // GPIO35 = GPIO GpioCtrlRegs.GPBDIR.bit.GPIO35 = 1; // GPIO35 = output GpioCtrlRegs.GPBPUD.bit.GPIO35 = 0; // Enable pullup on GPIO35 GpioDataRegs.GPBSET.bit.GPIO35 = 1; // Load output latch EDIS; } interrupt void cpu_timer0_isr(void) { CpuTimer0.InterruptCount++; if(CpuTimer0.InterruptCount<=N1) { GEN_BUZZ_CLK; } else if(CpuTimer0.InterruptCount<=N2) { BUZZ_OFF; } else { CpuTimer0.InterruptCount=0; } PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; }
这段代码是用来控制蜂鸣器的,主要包括初始化IO口、配置定时器、编写定时器中断服务程序等。具体来说,它通过定时器0的中断来产生控制脉冲,从而驱动蜂鸣器发声。其中使用了一些宏定义来方便代码的编写,例如GEN_BUZZ_CLK用于产生控制脉冲,BUZZ_OFF用于关闭蜂鸣器。同时,它也设置了一些变量来控制蜂鸣器的鸣叫次数和频率等参数。最后,在main函数中启动了定时器0并进入死循环,以确保程序一直运行。
阅读全文