平移c語言
⑴ 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、位移位運算符的優先順序:算術運算符優先於位移位運算符優先於關系運算符,位移位運算符是同級別的,結合性是自左向右。