當前位置:首頁 » 編程語言 » 平移c語言

平移c語言

發布時間: 2022-04-27 05:46:33

c語言改錯,要求實現數據平移。謝謝哈。

mov 函數中使用了指針 b,但未對它賦值,它指向的內存是未知的,因此出錯。
要實現數據平移,比較簡單的方法是先將它復制一份,再平移。這樣, mov 函數可寫為
void mov(int *x,int n,int m)
{
int *b, i, j;
b = (int *)calloc(n, sizeof(int));
if (b == NULL) {
printf("allocate memory failed!\n");
exit(0);
}
memcpy(b, x, n*sizeof(int));
for (i=0; i<n; i++) {
j = (i+n-m)%n;
x[i] = b[j];
}
free(b);
}
程序中用到了內存分配的函數及內存復制函數,因此需要包含 stdlib.h 和 string.h 庫。

⑵ c語言程序編寫:數組元素移動

void fun(int *w, int p, int n)
{ //只需要完成此部分功能即可
int b[N],i,j;
for(i = 0; i <= p;i++)
{
b[i] = w[i];
}
for(i = 0; p+1+i < n;i++)
{
w[i] = w[p+1+i];
}
for(j = 0;j <= p;j++)
{
w[i++] = b[j];
}

}

⑶ c語言中一維數組的平移交換

#include<stdio.h>

intmain(){
//1,2,3,4,5,6,7,8,9,10輸入4->5,6,7,8,9,10,1,2,3,4
inta[10]={1,2,3,4,5,6,7,8,9},i,b[10],c=0,m;
scanf("%d",&m);
for(i=m;i<10;i++){
b[c++]=a[i];
}
for(i=0;i<m;i++){
b[c++]=a[i];
}

for(i=0;i<10;i++){
a[i]=b[i];
}
for(i=0;i<10;i++)
printf("%d ",a[i]);

return0;
}

⑷ C語言 圖形的移動

第一種方法:
#include<graphics.h>
#include<stdio.h>
void main()
{
int gd=DETECT,gm,i,j,size;
void *buffer;
initgraph(&gd,&gm,"");
registerbgidriver(EGAVGA_driver);
setcolor(BROWN);
circle(100,100,5);
circle(80,100,5);
setfillstyle(1,RED);
bar(72,88,107,95);
setfillstyle(1,GREEN);
bar(80,80,100,88);
size=imagesize(71,79,108,106);
buffer=malloc(size);
getimage(71,79,108,106,buffer);
cleardevice();
putimage(1,1,buffer,COPY_PUT);
do
{
for(j=0;j<=450;j+=90) /*改變90,可以改變下降的大小*/
{
cleardevice();
for(i=0;i<=640;i++)
putimage(i+1,j+1,buffer,COPY_PUT);
cleardevice();
}
}while(!kbhit()); /*按任意鍵退出,不過要等全部走完一遍才會退出*/
closegraph();
}

第二種方法(用背景色覆蓋):
#include<stdio.h>
#include<graphics.h>
void main()
{
int gd=DETECT,gm,i;
registerbgidriver(EGAVGA_driver);
initgraph(&gd,&gm,"");
setfillstyle(1,GREEN);
bar(50,230,60,240);
while(!kbhit())
{
for(i=0;i<30;i++)
{
delay(10000);
bar(50+(i+1)*10,230,60+(i+1)*10,240);
setfillstyle(1,0);
bar(50+i*10,230,60+i*10,240);
setfillstyle(1,GREEN);

}
cleardevice();
}
closegraph();
}

⑸ 如何用C語言實現圖像平移

請檢查一下你提出問題的文字是否敘述正確
請您詳細的說說你電腦目前出現哪些問題呢,這樣我才能根據您的問題,給出針對性的解決方案,所以請補充一下你的提問吧。

⑹ C語言寫一個程序,使八位數數組前四位後四位平移交換得到一個新的數列。

#include<stdio.h>
main()
{longlongn;
while(1){
scanf("%lld",&n);
if(n>=10000000&&n<=99999999)
printf("交換後=%lld ",n%10000*10000+n/10000);
else
printf("wrong! ");
}
}

如圖所示,望採納。。。。。。

⑺ C語言數組平移問題

int a[8] = {xxxxxx};
int b[8];
int m;
int i, j = 0;
scanf("%d",&m);
for(i = m;i<8;i++)

{
b[j++] = a[i];

}
for(i = 0;i<m;i++)

{
b[j++] = a[i];

}

⑻ C語言中的「--」的用法

1、左移運算符(<<):按二進制形式把所有的數字向左移動對應的位數,高位移出(舍棄),低位的空位補零。

格式:需要移位的數字 << 移位的次數

例如:3<<2

3轉換為二進制是0011,所有數字左移2個位置,空位補0,得到1100,即十進制數12。

2、右移運算符(>>):按二進制把所有的數字向右移動對應位移位數,低位移出(舍棄),高位的空位補符號位(正數補零,負數補1)。

格式:需要移位的數字 >> 移位的次數

例如:11 >> 2

11的二進制為1011,所有數向右移2個位置,因為11是正數,所以高位補0,得0010,是十進制的2。

(8)平移c語言擴展閱讀:

移位運算符是位操作運算符的一種。移位運算符可以在二進制的基礎上對數字進行平移。按照平移的方向和填充數字的規則分為三種:<<(左移)、>>(帶符號右移)和>>>(無符號右移)。

數學意義:

1、在數字沒有溢出的前提下,對於正數和負數,左移一位都相當於乘以2的1次方,左移n位就相當於乘以2的n次方。

2、右移一位相當於除2,右移n位相當於除以2的n次方。

⑼ 利用c語言怎樣對bmp圖像進行平移的操作

點陣圖平移沒有這方面的庫函數,必須自己來實現,下面是點陣圖平移的參考代碼:


#include "stdafx.h"

#include<windows.h>

#include<stdio.h>

#include<math.h>

int _tmain(int argc, _TCHAR* argv[])

{

int width;

int height;

RGBQUAD *pTableColor;

unsigned char *pBmpBuf1,*pBmpBuf2;

BITMAPFILEHEADER bfhead;

BITMAPINFOHEADER bihead;

//讀出源圖像的信息

FILE *fpr=fopen("E:\picture\dog.bmp","rb");

if(fpr==0)

return 0;

fread(&bfhead,14,1,fpr);

fread(&bihead,40,1,fpr);

width=bihead.biWidth;

height=bihead.biHeight;

int LineByte=(width*8/8+3)/4*4;

pTableColor=new RGBQUAD[256];

fread(pTableColor,sizeof(RGBQUAD),256,fpr);

pBmpBuf1=new unsigned char[LineByte*height];

fread(pBmpBuf1,LineByte*height,1,fpr);

fclose(fpr);

//將處理後的圖像賦值為白色

pBmpBuf2=new unsigned char[LineByte*height];

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

for(int j=0;j<width;j++)

{

unsigned char *p;

p=(unsigned char*)(pBmpBuf2+LineByte*i+j);

(*p)=255;

}

//左右平移功能的實現

int t;

printf("請輸入左平移或右平移的大小t(左移t<0,右移t>0):");

scanf("%d",&t);

int k=abs(t);

printf("%d",k);

if(t<0)

{

if(t>=(-width))

{

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

for(int j=0;j<(width-k);j++)

{

unsigned char *p1,*p2;

p1=pBmpBuf1+LineByte*i+j+k;

p2=pBmpBuf2+LineByte*i+j;

(*p2)=(*p1);

}

}

}

else

{

if(t<=width)

{

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

for(int j=k;j<width;j++)

{

unsigned char *p1,*p2;

p1=pBmpBuf1+LineByte*i+j-k;

p2=pBmpBuf2+LineByte*i+j;

(*p2)=(*p1);

}

}

}

//保存處理後的圖像

FILE *fpw=fopen("dog.bmp","wb");

fwrite(&bfhead,14,1,fpw);

fwrite(&bihead,40,1,fpw);

fwrite(pTableColor,sizeof(RGBQUAD),256,fpw);

fwrite(pBmpBuf2,LineByte*height,1,fpw);

fclose(fpw);

return 0;

}

⑽ C語言中>>和<<如何使用

C語言中<< 代表左移運算符,>> 代表右移運算符,位移位運算符是將數據看成二進制數,對其進行向左或向右移動若干位的運算。

<< 代表左移運算符:左移運算符用來將一個數的各二進制位全部左移若干位,移動的位數由右操作數指定,右操作數必須是非負值,其右邊空出的位用0填補,高位左移溢出則舍棄該高位。

例如:設無符號短整型變數a為0111(對應二進制數為0000000100010001),則:a<<3 結果為0888(對應二進制數為0000100010001000)。

>> 代表右移運算符:右移運算是將一個二進制位的操作數按指定移動的位數向右移動,移出位被丟棄,左邊移出的空位或者一律補0,或者補符號位,這由不同的機器而定。在使用補碼作為機器數的機器中,正數的符號位為0,負數的符號位為1。

例如:var temp = 56 >> 2 變數temp的值為 14,因為56 (即二進制的 00111000)向右移兩位等於14 (即二進制的 00001110) 。

(10)平移c語言擴展閱讀:

相關運算規則:

1、在移位運算時,byte、short和char類型移位後的結果會變成int類型,對於byte、short、char和int進行移位時,規定實際移動的次數是移動次數和32的余數,也就是移位33次和移位1次得到的結果相同。

2、移動long型的數值時,規定實際移動的次數是移動次數和64的余數,也就是移動66次和移動2次得到的結果相同。

3、位移位運算符的優先順序:算術運算符優先於位移位運算符優先於關系運算符,位移位運算符是同級別的,結合性是自左向右。

熱點內容
電腦我的世界伺服器游戲幣 發布:2025-05-16 05:27:25 瀏覽:487
索尼手機為什麼不能用安卓10 發布:2025-05-16 05:18:46 瀏覽:784
蔚來es6選擇哪些配置實用 發布:2025-05-16 05:18:05 瀏覽:130
小米如何掃碼wifi密碼 發布:2025-05-16 05:13:38 瀏覽:807
樓層密碼是什麼意思 發布:2025-05-16 05:13:37 瀏覽:13
創建文件夾失敗 發布:2025-05-16 05:12:59 瀏覽:396
電腦上如何查詢自己的配置 發布:2025-05-16 05:06:36 瀏覽:105
sql中去重 發布:2025-05-16 04:55:06 瀏覽:893
dwr上傳圖片 發布:2025-05-16 04:49:46 瀏覽:122
base64加密的圖片 發布:2025-05-16 04:35:46 瀏覽:356