① 將數組中的非零元素移到前面來,零元素移到後面去,各非零元素間的相對位置不變 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]);