当前位置:首页 » 编程语言 » rr算法c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

rr算法c语言

发布时间: 2022-08-02 00:11:27

Ⅰ 编写两个函数lrmove,rrmove分别实现左,右循环移位。求完整c语言程序。

#include <stdio.h>


int lrmove(int value, int n)

{

int size = sizeof(value) * 8;

int part1 = (unsigned int)value >> (size - n);

return (value << n) | part1;

}


int rrmove(int value, int n)

{

int size = sizeof(value) * 8;

int part1 = value << (size - n);

return ((unsigned int)value >> n) | part1;

}


int main(int argc, char *argv[])

{

int x = 0xffabcdef;

printf("lrmove(0x%x, 4)=0x%x ", x, lrmove(x, 4));

printf("rrmove(0x%x, 4)=0x%x ", x, rrmove(x, 4));

return 0;

}

Ⅱ C语言编程实践-求解求解求解!!!!!!

不知道为什么没有代码模式,只能这样复制给你了。也不知道你的T跟R字符串多少个字符,能不能用字符串库函数,程序里就假设它们相等了,没用到字符串库函数。

#include<stdio.h>

char str_compare(char *p1,char *p2);

void str_change(char *p1,char *p2);

char *p=0;

int main()

{

char SS[]="China American Russian Japan England Japan American",TT[]="American",RR[]="12345678";

char *ps=SS,*pt=TT,*pr=RR;

printf("原来字符串:");

for(;*ps!='';)

{

printf("%c",*ps);

ps++;

}

ps=SS;//指针复位

printf(" ");

for(;*ps!='';)

{

if(str_compare(ps,pt))

str_change(ps,pr);

ps++;

}

ps=SS;//指针复位

printf("替换后符串:");

for(;*ps!='';)

{

printf("%c",*ps);

ps++;

}

printf(" ");

return 0;

}

char str_compare(char *p1,char *p2)//判断字符串P1中是否含有字符串P2

{

int i=0;

for(;*p2!='';i++)

{

if(*p2!=*p1) return 0;

else

{

p2++;

p1++;

}

}

p=p1-i;//记录下有相同字符串的位置

return 1;

}

void str_change(char *p1,char *p2)//将字符串P2写入到P1中

{

p1=p;

for(;*p2!='';)

{

*p1=*p2;

p1++;

p2++;

}

}

Ⅲ 颜色空间RGB与 色调、饱和度、亮度(ESL)转换的完整C语言算法

你把0-240 按比例 缩放 一下 到 HSL 的 范围,用 HSL-RGB 转换。

HSL--H是色相(0到360度),S是饱和度(0到1),L是亮度(0到1)

规1化的 HSL到RGB颜色值算换子程序:
// nomorized h,s,L 0-1.0
void HSL2RGB(double h, double s, double L,unsigned char *rr, unsigned char *gg,
unsigned char *bb)
{
double v,m,sv, vs0, c1, c2,xiaoshu,r,g,b;
int ih;
r = L; g = L;b = L;
if (L <= 0.5) v = L * (1.0 + s); else v = L + s - L * s;
if (v > 0) {
m = L + L - v; sv = (v - m ) / v;
h = h * 6.0; ih = (int)h;
xiaoshu = h - ih;
vs0 = v * sv * xiaoshu; c1 = m + vs0; c2 = v - vs0;
switch (ih) {
case 0: r = v; g = c1; b = m; break;
case 1: r = c2; g = v; b = m; break;
case 2: r = m; g = v; b = c1; break;
case 3: r = m; g = c2; b = v; break;
case 4: r = c1; g = m; b = v; break;
case 5: r = v; g = m; b = c2; break;
default: break;
}
}
*rr = (int) (r * 0xff); *gg = (int) (g * 0xff); *bb = (int) (b * 0xff);
}

把你3个数值,各除以240,代入子程序即可。
详见:http://hi..com/svjvcfwticdkmse/item/e6c43a21e385b10977272c0e
彩虹光谱RGB值自动生成程序 (L_o_o_n_i_e == 金色潜鸟)

Ⅳ C语言用头文件实现复数加减法

1、_Complex是一种新增的数据类型,用来表示复数。C99 新增了复数类型(_Complex)和虚数类型(_Imaginary)。简单来说,C99 提供了三种复数类型:float _Complex,double _Complex,和 long double _Complex。对于 float _Complex类型的变量来说,它包含两个 float类型的值,一个用于表示复数的实部(real part),另一个用于表示虚部(imaginary part)。类似地,double _Complex 包含两个 double类型的值。C99 也提供了三种虚数类型:float _Imaginary,double _Imaginary,以及 long double _Imaginary。虚数类型只有虚部,没有实部。

2、包含标准头文件 complex.h 后,就可以用 complex来代表 _Complex,用imaginary来代表 _Imaginary,以及用 I来代表虚数单位 i,也就是 -1的平方根。例如:
#include <complex.h>
double _Complex x = 5.2;
double complex y = 5.0 * I;
double complex z = 5.2 – 5.0 * I;

3、注意:_Complex类型对于独立式环境(freestanding environment)来说是可选的。可选的意思是,不强制必须支持这种类型。而所谓独立式环境,是指 C 程序可以在没有操作系统的情况下运行。_Imaginary类型在任何环境下都是可选的。目前的编译器对这两种类型的支持都不太好。

Ⅳ void RRMove(ElemType A[],int k,int n) { ElemType e; int i=0,j,p; while(i<n-k){ p=i/k+1; for(j=0;j<k

这个问题提得有点惊人了,算法思路说得很清楚了,蛋还是没有看懂代码,那么只能说明你还需要学学C语言哈

Ⅵ 求C语言的大神帮我解释下这个程序吧,最好每句标注下。谢谢~~

是自适应滤波器算法的C语言程序,在DSP芯片VC5509上,用CCS


Ⅶ 求这道c语言的编程题

#include<stdio.h>

int main()

{

int n;

float sum=0,a=2,b=1,t;

scanf("%d",&n);

for(int i=0;i<n;i++)

{

t=a/b;

sum+=t;//累加

t=a+b;

b=a;//前一次的分子,变成下一次的分母

a=t;//前一次的分子与分母的和,变成下一次的分子

}

printf("%.2f",sum);

return 0;

}

Ⅷ C语言编程实现时间片轮转算法,尽量写得简单易懂,谢谢

#include<stdlib.h>
#define MAX 5 //进程数量
#define RR 2 //时间片大小

/*时间片轮转算法*/

struct pro
{
int num;
int arriveTime;
int burst;
int rt; //记录进程被运行的次数
struct pro *next;
};

int TOTALTIME; //记录所有进程的总时间

//函数声明
struct pro* creatList();
void insert(struct pro *head,struct pro *s);
struct pro* searchByAT(struct pro *head,int AT);
void del(struct pro* p);
int getCount(struct pro *head,int time);
struct pro* searchEnd(struct pro *head);
void move(struct pro *headF,struct pro *headT,int n);

struct pro* creatList() //创建链表,按照进程的到达时间排列,记录所有进程的信息
{
struct pro* head=(struct pro*)malloc(sizeof(struct pro));
head->next=NULL;
struct pro* s;
int i;
TOTALTIME=0;
for(i=0;i<MAX;i++)
{
s=(struct pro*)malloc(sizeof(struct pro));
printf("请输入进程名:\n");
scanf("%d",&(s->num));
printf("请输入到达时间:\n");
scanf("%d",&(s->arriveTime));
printf("请输入运行时间:\n");
scanf("%d",&(s->burst));
TOTALTIME+=s->burst; //计算总时间
s->rt=1; //rt的初始值为1
s->next=NULL;
insert(head,s);
}
return head; //到达队列中的进程按照其到达时间的先后顺序排列
}

void insert(struct pro *head,struct pro *s) //插入节点
{
struct pro *p=searchByAT(head,s->arriveTime);
s->next=p->next;
p->next=s;
return;
}

struct pro* searchByAT(struct pro *head,int AT) //查找第一个到达时间大于等于AT的节点,返回其前一个指针
{
struct pro *p,*q;
p=head;
q=head->next;
while(q!=NULL&&q->arriveTime<=AT)
{
p=q;
q=q->next;
}
return p;
}

void del(struct pro* p) //删除p的下一个节点
{
struct pro *tmp;
tmp=p->next;
p->next=tmp->next;
free(tmp);
return;
}

int getCount(struct pro *head,int time) //察看在time之前到达但未移动到运行队列的进程数量
{
int count=0;
struct pro *s,*t;
s=head;
t=s->next;
while(t!=NULL&&t->arriveTime<=time)
{
s=t;
t=t->next;
count++; //count记录当前时刻到达的进程数
}
return count;
}

struct pro* searchEnd(struct pro *head) //查找并返回循坏队列的尾节点的前一个节点
{
struct pro *p,*q;
p=head;
q=head->next;
while(q->next!=head)
{
p=q;
q=q->next;
}
return p;
}

void move(struct pro *headF,struct pro *headT,int n) //将headF后的n个节点移动到循环队列headT中
{
struct pro *r,*s,*t;
s=headF;
t=s->next;
r=t; //r记录要移动的第一个节点
while(n>1)
{
t=t->next;
n--;
}
s->next=t->next; //以上完成从原队列中摘除相关节点,r,t分别为第一个和最后一个节点
s=searchEnd(headT);
t->next=s->next;
s->next=r;
}

void run(struct pro *head)
{
int time=0; //记录当前时间
int newarrive;//新到达进程数
struct pro *runhead=(struct pro*)malloc(sizeof(struct pro));
runhead->next=runhead; //创建新的循环链表,存放当前就绪队列中的进程
struct pro *p,*q;
p=runhead;
q=p->next; //q记录当前应当运行的进程
while(time<=TOTALTIME)
{
newarrive=getCount(head,time);
if(newarrive>0)
move(head,runhead,newarrive); //将head后的newarrive个节点移动到runhead队列中
if(runhead->next==runhead) //就绪队列中没有进程
time++;
else if(q==runhead)
{
p=q;
q=q->next;
}
else
{
printf("进程名:%d\n",q->num);
printf("到达时间:%d\n",q->arriveTime);
if(q->rt==1)
printf("响应时间:%d\n",time-q->arriveTime);
else
printf("第%d次运行开始时间:%d\n",q->rt,time);
if(q->burst<=RR)
{
time+=q->burst;
printf("第%d次运行结束时间:%d\n",q->rt,time);
printf("周转时间:%d\n",time-q->arriveTime);
printf("************************************\n");
struct pro *tmp=q;
q=q->next;
p->next=q;
free(tmp);
}
else //q->burst>RR
{
time+=RR;
printf("第%d次运行结束时间:%d\n",q->rt,time);
printf("************************************\n");
q->burst-=RR;
q->rt++;
p=q;
q=q->next;
}
}
}
}

void main()
{
struct pro *head=creatList();
printf("当前时间片大小为:%d\n",RR);
run(head);
}

Ⅸ 急求一个c语言程序后天就要用了麻烦各位好心高手帮帮忙。谢谢。

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

uint Tcounetr=0;
unsigned long int mm=0;
sbit P1_6=P1^6;
sbit P1_7=P1^7;

uchar code table[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,}; //设置字符代码

delay(uint m) //延时1ms程序
{ uint i,j;
for(i=m;i>0;i--)
for(j=60;j>0;j--);
}

xian_shi() //显示程序
{ uchar ,shi,ge,xiaoshu;
unsigned long int k=14,h=36;
unsigned long int jj;
jj=mm*k*h;
=jj/1000000;
shi=jj%1000000/100000;
ge=jj%100000/10000;
xiaoshu=jj%10000/1000;

P2=0xE0;
P0=table[];
delay(1);
P2=0XF0;

P2=0xD0;
P0=table[shi];
delay(1);
P2=0XF0;

P2=0xB0;
P0=table[ge];
delay(1);
P2=0XF0;

P2=0x70;
P0=table[xiaoshu];
delay(1);
P2=0XF0;
}
timer_init() //定时器计数器初始化函数
{ EA=1;
ET0=1;
ET1=1;
TMOD=0X51;
TH0=0XB1;
TL0=0XE0;
TH1=0;
TL1=0;
TR0=1;
TR1=1;
}
main() //主函数
{
timer_init();
P0=0; //开始数码管不显示
while(1)
{
xian_shi();
delay(2); //数码管刷新时间单位毫秒
}
}
void timer0() interrupt 1 //定时器0中断
{ uchar a;
TR0=0;
TH0=0XB1;
TL0=0XE0;
Tcounetr++;
if(Tcounetr>=50)
{ TR1=0;
Tcounetr=0;
a=TH1;
mm=a*256+TL1;
if(mm>=1984)
if(mm>=3000)
P1_7=0,
P1_6=0;
else
P1_7=0;
else
P1=0XFF;
TH1=0;
TL1=0;
TR1=1;
}
TR0=1;
}
void timer1() interrupt 3 //计数器1中断时出错
{ TR1=0;
TR0=0;
mm=0;
TH0=0XB1;
TL0=0XE0;
TH1=0;
TL1=0;
TR0=1;
TR1=1;

Ⅹ 那你知道RR指令(右移)跟RRC(右移包括CY位)指令用c语言分别怎么表达吗能举个例子吗先谢啦~

你好,
我了解C语言对51单片机的编程,对汇编不是很了解。我粗略看了一下,发现汇编的位移操作比C语言复杂很多,c语言的位移操作无非两个运算符:>>(右移)和<<(左移)
比如:
0x1<<2 得到 0x4
0xf>>3 得到 0x2
(C语言中0x开头表示十六进制)
可见左操作数是被操作的对象,右操作数是位移的位数。
一般来说我们在C51中都是对unsigned char类型进行位操作,所以移出的位都是补0(如果是对有符号整数>>,最高位也即符号位会保持不变),因此C语言在这方面能够实现的不如汇编。
当然你可以如楼上所说联合编程,也可以在C语言函数中直接插入汇编语句,这一点Keil C 编译器早已支持。联合编程我不了解,而C语言中插入汇编语句应这样进行:
1、在含有汇编语句的函数前声明:#pragma src;
2、在汇编语句的起始和末尾加#pragma asm 和 #pragma endasm标识始末位置。

如果希望进一步讨论欢迎hi我。