C语言经典100例问题,取一个整数a从右端开始的4~7位,求助,高分!

C语言经典100例问题,取一个整数a从右端开始的4~7位,求助,高分!,第1张

移位 *** 作是按二进制算的, 右移 一下相当于除2,左移乘2,说以10进制的不能通过移位实现取位,2,8,16进制的都可以哦。

不过还是有办法,就是用16进制变量存你的10进制变量,然后按16进制移位取位,最后按16进制输出,可达到你想要的效果哦~

我要上课去了,如代码还是写不出来,追问一下,我回来帮你写个

最简单的求法就是使用等差数列的求和公式,参考程序如下:

#include <stdioh>

int main(void){

int number;

number = (0+100)101/2;

printf("%d\n", number);

return 0;

}

当然,也可以使用循环来求解,样例程序:

#include <stdioh>

int main(void){

int i;

int number;

number = 0;

for (i=0; i<=100; ++i)

{

number += i;

}

printf("%d\n", number);

return 0;

}

总体来说使用等差数列求和公式的方法速度更快,但是中间过程可能超过整形范围,不过这个可以通过简单地处理解决这个问题。尽管使用循环语句不会出现中间数据超范围的问题,但是程序运行速度较慢

#include<reg51h>

#define uchar unsigned char

#define uint unsigned int

sbit lcd_rs=P2^0;

sbit lcd_rw=P2^1;

sbit lcd_en=P2^2;

sbit tempt=P3^4;

uchar code disp[]="0123456789";

uchar code disp2[]="Temperature:";

uchar code disp3[]="^C";

uint u_tempt;

float f_tempt;

void delay(uint x)

{

 uint i,j;

 for(i=0;i<x;i++)

 for(j=0;j<130;j++);

}

void write_command(uchar com)

{

 lcd_rs=0;

 P0=com;

 delay(5);

 lcd_en=1;

 delay(5);

 lcd_en=0;

 delay(5);

}

void write_data(uchar date)

{

 lcd_rs=1;

 P0=date;

 delay(5);

 lcd_en=1;

 delay(5);

 lcd_en=0;

 delay(5);

}

void lcd_init()

{

 lcd_en=0;

 lcd_rw=0;

 write_command(0x38);

 write_command(0x0c);

 write_command(0x06);

 write_command(0x01);

}

void display_tempt(uint date)

{

 uchar i,j,k;

 i=date/100;

 j=date%100/10;

 k=date%100%10;

 write_command(0xc0+5);

 write_data(disp[i]);

 write_data(disp[j]);

 write_data('');

 write_data(disp[k]);

}

void reset_tempt()

{

 uint i;

 tempt=0;

 i=90;

 while(i>0)

 i--;

 tempt=1;

 i=4;

 while(i>0)

 i--;

}

bit read_bit()

{

 uint i;

 bit dat;

 tempt=0;

 i++;

 tempt=1;

 i++;

 i++;

 dat=tempt;

 i=8;

 while(i>0)

 i--;

 return dat;

}

uchar read_tempt()

{

 uchar i,j,dat;

 dat=0;

 for(i=1;i<=8;i++)

 {

 j=read_bit();

dat=(j<<7)|(dat>>1);

 }

 return dat;

}

void write_byte(uchar dat)

{

 uint i;

 uchar j;

 bit testbit;

 for(j=1;j<=8;j++)

 {

 testbit=dat&0x01; //每次写一位数据

dat=dat>>1;

if(testbit)

{

tempt=0;

i++;

tempt=1;

i=8;

while(i>0)i--;

}

else 

{

tempt=0;

i=8;

while(i>0)i--;

tempt=1;

i++;

i++;

}

 }

}

void convert_tempt()

{

 reset_tempt();

delay(1);

write_byte(0xcc);

write_byte(0x44);

}

uint get_tempt()

{

 uchar a=0,b=0;

 //uint t=0;

 reset_tempt();

 write_byte(0xcc);

 write_byte(0x44);

 reset_tempt();

 write_byte(0xcc);

 write_byte(0xbe);

 a=read_tempt();

 b=read_tempt();

 u_tempt=b;

 u_tempt<<=8;

 u_tempt=u_tempt|a;

 f_tempt=u_tempt00625; 

 u_tempt=f_tempt10;

 return u_tempt;

}

void display()

{

 uchar i,j;

 write_command(0x80+3);

 for(i=0;i<11;i++)

 {

 write_data(disp2[i]);

 }

 write_command(0xc0+10);

 for(j=0;j<2;j++)

 {

 write_data(disp3[j]);

 }

 }

 void main()

 {

 uchar i;

lcd_init();

display();

while(1)

{

convert_tempt();

for(i=0;i<10;i++)

{

display_tempt(get_tempt());

}

}

 }

#include "stdioh"

int main()

{ long t,i;

t=1;

for(i=1;i<=100;i++)

t=ti;

printf("%ld",t);

}

c语言中long型数据范围有限,而100!结果太大,有可能显示不正确。

以上就是关于C语言经典100例问题,取一个整数a从右端开始的4~7位,求助,高分!全部的内容,包括:C语言经典100例问题,取一个整数a从右端开始的4~7位,求助,高分!、求一个c语言程序 题目是 0到100的和、单片机C语言程序设计实训100例综合设计中的用1602LCD与DS18B20设计的温度报警器中源程序,求急用!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9855250.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存