平移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、位移位运算符的优先级:算术运算符优先于位移位运算符优先于关系运算符,位移位运算符是同级别的,结合性是自左向右。