① 将数组中的非零元素移到前面来,零元素移到后面去,各非零元素间的相对位置不变 c语言
/*
整理前 :
30 0 45 -20 16 0 8 0 6 13 0 12 -37 -9 18
整理后 :
30 45 -20 16 8 6 13 12 -37 -9 18 0 0 0 0
Press any key to continue
*/
#include<stdio.h>
voidChange(inta[],intn){
inti,j;
for(i=0;i<n-1;++i){
if(a[i]==0){
for(j=i;j<n-1;++j)
a[j]=a[j+1];
a[n-1]=0;
}
}
}
voidShow(inta[],intn){
inti;
for(i=0;i<n;++i)
printf("%d",a[i]);
printf(" ");
}
intmain(){
inta[]={30,0,45,-20,16,0,8,0,6,13,0,12,-37,-9,18};
intn=sizeof(a)/sizeof(a[0]);
printf("整理前: ");
Show(a,n);
Change(a,n);
printf("整理后: ");
Show(a,n);
return0;
}
② c语言编程,检测到数列中的0就移动到最后。
没有问题啊。
#include<stdio.h>
void moveZeroes(int* nums, int numsSize) {
int k=0;
int i,j=0;
for(i=0;i<numsSize;i++)
{
if (nums[i]!=0){
nums[j]=nums[i];
j++;
}
else {k++;}
}
for(i=0;i<=k;i++){
nums[numsSize-i]=0;
}
}
int main()
{
int i,a[]={0,1,0,3,12};
moveZeroes(a,5);
for(i=0;i<5;i++)
printf("%d ",a[i]);
getch();
return 0;
}
③ 用C语言编程:将整形数组中的所有元素前移一个位置,0号元素移到最后
用for循环逐步移动即可。
#include<stdio.h>
//所有元素前移一个位置,0号元素移到最后
voidloopMove(int*dat,intlen)
{
inttem=dat[0];
for(inti=0;i<len-1;i++)
dat[i]=dat[i+1];
dat[len-1]=tem;
}
voidoutput(int*dat,intlen)
{
for(inti=0;i<len;i++)
printf("%d",dat[i]);
printf(" ");
}
intmain()
{
inta[10]={0,1,2,3,4,5,6,7,8,9},len=10;
printf("原始数据:");
output(a,len);
loopMove(a,len);
printf("第一次:");
output(a,len);
loopMove(a,len);
printf("第二次:");
output(a,len);
return0;
}
④ C语言指针问题,如何进行排序是要想冒泡法一样一定需要一个空白变量进行中转吗
本人觉得这种题这样做较好:
#include"stdio.h"
voidmyfunc(int*p,intn){
inti,j;
for(j=i=0;i<n;i++)
if(p[i])
p[j++]=p[i];
while(j<n)
p[j++]=0;
}
intmain(void){//测试主函数
inta[]={1,0,3,4,0,-3,5},i;
myfunc(a,7);
for(i=0;i<7;printf("%d",a[i++]));
printf(" ");
return0;
}
⑤ 编写函数,把给定的整数数组中的0元素全部移到后面,且所有非0 元素顺序不变,用c语言编,谢谢各位大神
呵,给个特别点的方法,你拿来参考下吧。
#include "stdio.h"
void main()
{
int a[] = {1, 2, 0, 3, 4};
const iNum = sizeof(a) / sizeof(int);
int b[iNum];
int j = 0;
for(int i = 0; i < iNum; i++)
{
if(a[i] != 0)
{
b[j++] = a[i];
}
}
for(j < iNum; j++)//也可以用memset
{ b[j] = 0; }
//需要的话把数组b复制到a
}
⑥ C语言编程 一维数组元素移动
参考如下代码:
#include<stdio.h>
#defineARRAY_LENGTH101
intmain(intargc,char**argv)
{
//初始化,将第i个元素的值为i+1
intvalues[ARRAY_LENGTH];
for(inti=0;i<ARRAY_LENGTH;i++)
{
values[i]=i+1;
}
//最后一个元素为0
values[ARRAY_LENGTH-1]=0;
//元素值得和,这里用long的原因是,如果用int
//可能导致溢出(这里不会,和应该是5050)
longsum=0;
//从后向前移动,这里因为上一步设置了最后一个元素为0,
//所以这里可以不用校验索引,如果没有设置最后一个元素为
//0,应该忽略最后一个元素
for(inti=ARRAY_LENGTH-1;i>0;i--)
{
sum+=i;
values[i]=values[i-1];
}
//最后设置第0个元素为总和
values[0]=sum;
for(inti=0;i<ARRAY_LENGTH;i++)
{
printf_s("%d ",values[i]);
}
return0;
}
结果:
⑦ C语言填空题:编写函数将有n个整数的一维数组中下标从0到p(p<n-1)的数组元素平移到数组的最后
程序填空已经完成。运行正确:
#include "stdio.h"
void fun(int *w,int p,int n)
{ int i,j,t;
for(i=0; i<=p; i++)
{ t=w[0];
for(j=0; j<n-1; j++)
w[j]=w[j+1];
w[n-1]=t;
}
}
main()
{ int a[12]= {1,2,3,4,5,6,7,8,9,10,11,12};
int i,m;
scanf("%d",&m);
fun(a,m,12);
for(i=0; i<12; i++)
printf("%3d",a[i]);
printf(" ");
}
⑧ c语言程序编写:若数组中有n个整数, 要求把下标从0到p(p小于等于n-1)的数组元素平移到最后。
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语言的问题,这个程序是把数组的0~p位移到后面。例如输入3,
//只修改了void fun函数
#include <stdio.h>
#define N 80
void score();
void fun(int *w,int p,int n)
{
int a[N];
int i;
for(i=0;i<=p;i++)//保存前p个数据在数组a中
{
a[i]=w[i];
}
for(i=0;i<n-p-1;i++)//将w后n-p个数据移动到w前p个数据中
{
w[i]=w[p+i+1];
}
for(i=0;i<=p;i++)//将保存在a中的p个数据保存到w后p个数据中
{
w[n-p-1+i]=a[i];
}
}
void main()
{
int a[N]={1,2,3,4,5,6,7,8,9,10};
int i,p,n=10;
printf("The original data:\n");
for(i=0;i<n;i++)
printf("%3d",a[i]);
printf("Enter p: "); scanf("%d",&p);
fun(a,p,n);
printf("The data after moving:\n");
for(i=0;i<n;i++) printf("%3d",a[i]);
printf("\n\n");
score();
}
void score()
{
FILE *fp;
int a[N]={1,2,3,4,5,6,7,8,9,10};
int i,n=10;
fp=fopen("out.dat","w");
fun(a,5,n);
for(i=0;i<n;i++) fprintf(fp,"%-3d",a[i]);
fprintf(fp,"\n\n");
fclose(fp);
}
⑩ c语言编写函数 要求输入整数n,将数组下标到n的数都移到数组末尾
只错了一句
#include<stdio.h>
voidfun(int*w,intp,intn)
{
inti,s[100],j=0;
for(i=0;i<=n;i++)
s[i]=w[i];
for(i=n+1;i<p;i++)
w[j++]=w[i];
for(i=0;i<=n;i++)
w[p-n-1]=s[i];//这里用w[p-n-1]是不行的,这个是固定值。需要用w[p-n-1+i]
}
intmain()
{
inta[]={1,2,3,4,5,6,7,8,9,10},i,n=3,p=10;//p为数组长度
fun(a,p,n);
for(i=0;i<10;i++)
printf("%3d",a[i]);