當前位置:首頁 » 編程語言 » 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我。