请编写一个函数unsigned fun,w是一个大于10的无符号整数
时间: 2024-02-24 22:55:33 浏览: 104
好的,以下是函数unsigned fun的代码实现:
```
unsigned fun(unsigned w) {
unsigned result = 0;
for (unsigned i = 10; i <= w; i++) {
if (i % 10 == 0) {
continue;
}
unsigned j = i, k = 1;
while (j != 0) {
k *= (j % 10);
j /= 10;
}
result += (k % 3 == 0);
}
return result;
}
```
这个函数的作用是计算从10到w之间所有数字的各位数字乘积是否能被3整除的个数,并返回这个个数。函数首先初始化结果为0,然后循环遍历从10到w之间所有数字,如果当前数字的个位数为0,则跳过本次循环。对于其他数字,函数使用一个while循环计算其各位数字乘积,并将结果存储在变量k中。最后,函数判断k是否能被3整除,如果是,则将结果加1。最终返回结果。
相关问题
请编写一个函数 unsigned fun ( unsigned w): w是一个大于10的无符号整数,若w 是口(≥2位的整数,函数求出w的低口-1位的数作为函数值返回
unsigned fun (unsigned w) {
if (w < 10) {
return 0; // w不符合条件,返回0
}
unsigned num = w % 100; // 取w的低两位数
num /= 10; // 取十位数
return num; // 返回十位数
}
用C语言编写一个函数unsigned fun (unsigned w),w是一个大于10的无符号整数,若w是n(n≥2)位的整数,函数求出w的地n-1位的数作为函数值返回。
旋转编码器是一种用于测量旋转运动的传感器,它可以输出旋转方向和旋转量。在51单片机中,可以通过外部中断和定时器来驱动旋转编码器。
以下是一个简单的51单片机驱动旋转编码器的程序:
```
#include<reg51.h>
sbit EN=P3^0; //使能脚
sbit DT=P3^1; //方向脚
sbit CLK=P3^2; //时钟脚
unsigned char code KeyCharTable[]={"0123456789abcdef"}; //显示字符表
unsigned char xdata SpeedBuffer[4]; //速度缓存
unsigned int xdata Speed; //速度值
unsigned char xdata Count; //计数器
unsigned char xdata Direction; //方向标志
void main()
{
EA=1; //开总中断
EN=1; //使能脚置高
while(1)
{
//显示速度值
Speed=SpeedBuffer[0]*1000+SpeedBuffer[1]*100+SpeedBuffer[2]*10+SpeedBuffer[3];
P0=KeyCharTable[Speed/1000];
P2=0x7f;
P2=0xff;
P0=KeyCharTable[Speed%1000/100];
P2=0xbf;
P2=0xff;
P0=KeyCharTable[Speed%100/10];
P2=0xdf;
P2=0xff;
P0=KeyCharTable[Speed%10];
P2=0xef;
P2=0xff;
}
}
void Timer0() interrupt 1
{
unsigned char xdata i;
Count++; //计数器加1
if(Count==50) //计数器到50时更新速度值
{
Speed=0;
for(i=0;i<4;i++)
{
Speed+=SpeedBuffer[i]*10^i;
}
Count=0;
for(i=3;i>0;i--) //速度缓存右移一位
{
SpeedBuffer[i]=SpeedBuffer[i-1];
}
SpeedBuffer[0]=0; //清零最高位
}
}
void ExternalInterrupt0() interrupt 0
{
if(DT==CLK) //判断方向
{
Direction=1; //正向
}
else
{
Direction=0; //反向
}
if(Direction==1) //正向计数
{
SpeedBuffer[0]++;
if(SpeedBuffer[0]==10) //最低位计满
{
SpeedBuffer[0]=0; //清零最低位
SpeedBuffer[1]++; //进位
if(SpeedBuffer[1]==10) //第二位计满
{
SpeedBuffer[1]=0; //清零第二位
SpeedBuffer[2]++; //进位
if(SpeedBuffer[2]==10) //第三位计满
{
SpeedBuffer[2]=0; //清零第三位
SpeedBuffer[3]++; //进位
}
}
}
}
else //反向计数
{
SpeedBuffer[0]--;
if(SpeedBuffer[0]==255) //最低位借位
{
SpeedBuffer[0]=9; //借位
SpeedBuffer[1]--; //退位
if(SpeedBuffer[1]==255) //第二位借位
{
SpeedBuffer[1]=9; //借位
SpeedBuffer[2]--; //退位
if(SpeedBuffer[2]==255) //第三位借位
{
SpeedBuffer[2]=9; //借位
SpeedBuffer[3]--; //退位
}
}
}
}
}
```
在这个程序中,使用了一个计数器来统计旋转编码器的旋转量,每50次中断更新一次速度值。在外部中断中判断旋转方向,并根据方向进行计数。最后将速度值转换为字符并显示在数码管上。
需要注意的是,旋转编码器的引脚需要连接到51单片机的外部中断0和定时器0的时钟输入引脚,同时需要在代码中对引脚进行定义和配置。
阅读全文