编写函数voidfun(int*x,int n),它的功能是:删除有n个数据的数组x中所有包含数字6的数据,后续的剩余元素赋值为-1。n为数组长度,规定x中数据都为正数。如程序运行时若输入:122 1461 6234 16 11 663 911 2671 381 6 删除后输出: 122 11 911 381 -1 -1 -1 -1 -1 -1
自己的程序如下,求指正
#define N 10
#include<stdio.h>
void fun(int *x,int n)
{
int i,j;
j=N;
for(i=0;i<j;i++)
while(x[i]>0)
{
if(x[i]%10==6)
{
for(;i<j-1;i++)
x[i]=x[i+1];
x[N-1]=-1;
i=i-1;
j=j-1;
}break;
x[i]=(int)(x[i]/10);
}
}
void main()
{
int a[N],i;
for(i=0;i<N;i++)
scanf("%d",&a[i]);
fun(a,N);
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n");
}
修改了一下你的子函数fun()。
运行:
122 11 911 381 -1 -1 -1 -1 -1 -1你原先的函数,问题比较多:
① 既然是函数,就不要再把全局变量或宏,如N,代入了。 那样破坏了函数的完整性。
② 在for循环里面改变循环变量是大忌~,比如你原先的
for(i=0;i<j;i++) {
for(;i<j-1;i++) {
i=i-1; j=j-1;}
}
还是循环里面套循环的变量的改变!!!
③ 循环比较移动这块,逻辑不清,错误不少。
* 比如你改变了x[]的值,如果该值不含‘6’,是不是也改变了?
* 你的结果貌似没用让这些值改变,多亏了 for(;i<j-1;i++) ,这是你另一个错误,漏了一个{反而帮助了你,这个循环,只作了一件事:x[i]=x[i+1]; 后面的不在循环内;
* 而再后面的break就不是地方,无论if(x[i]%10==6)这句成立与否如何,都break出了while这个循环。。。;
* x[N-1]=-1;这句,除了N的问题,逻辑上也有问题,每次都是n-1这个固定位置上的数值被赋值-1了,如果前面有数据含‘6',那么 它应该前移啊~
④ 正确的逻辑应该是:从左右两头作标记,数据含‘6’,则把后面的数据依次前移,然后把右边数据赋值-1,“右边”位置向左移一位,-- ,但此时左边的位置不动,因为要判断,前移后的数据是否也含’6‘;如果数据不含’6‘,那么左边++,但右边不动;结束条件是左边>右边;
C程问题,看看我写的fun函数有什么不足的地方啊?
你这程序很“神奇”,设了宏定义N为10,然后fun有个参数n,却在fun函数体里面用直接用10。fun可以如下实现:void fun(int *x, int n){ int i, j, t; for(i=j=0; i<n; i++) { for(t=x[i]; t; t\/=10) \/\/分离各个位 if(t%10 == 6)break; if(!t...
编写函数void fun(int *x,int n)
void fun(int *x, int n){ if (n <= 0)return;else if (n == 1){ cout << x[0] << endl;return;} else if (n == 2){ if (x[0] < x[1])cout << x[1] << " " << x[0] << endl;return;} int max1 = x[0], max2 = x[0];int t, j = 0, k = ...
以下程序中函数fun(int a[],int N)的功能是删除数组中a的前N个元素中...
return N-n;} void print(int a[],int n){ for(int i=0;i<n;i++)cout<<'\\t'<<a[i];cout<<endl;} int main(){ int a[10]={4,1,3,3,1,2,4,3,4,4},b[6]={1,2,1,3,2,1};int n=fun(a,10);cout<<"数组a处理后的数组为:";print(a,n);n=fun(b,6);co...
编写函数void fun(int *x,int n)
设置两个标志位,分别用于记录最大者和次大者,然后对数组遍历,遍历结束之后根据这两个标志位分别和a[0]、a[1]交换
编写函数voidfun(int*x,intn),功能是:求出长度为n的数组x中的最大数...
void fun(int *x,int n){ int max=*x; \/*定义个最大*\/ int index1,index2;\/*最大和次最大索引号*\/ int a; \/*交换时空间*\/ int max2; \/*次大*\/ for(i=1;i<=n;i++)if(max<(*(x+i))) \/*从第一个开始往后比较,最终max存着最大值*\/ max=*(x+i);for(i=0...
2011年全国计算机等级考试2级C语言机试题库
给定程序modi1.c中函数fun的功能是:计算n!。例如,给n输入5,则输出120.000000。double fun(int n ){ double result=1.0;\/***found***\/if(n==0) return 1.0;while(n>1&&n<170)\/***found***\/result*=n--;return result;}程序设计 请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(...
编写函数int fun(int *x,int n,float *w)
int fun(int *x,int n,float *w){ int i,j;float sum;for(i=0;i<n\/5;i++){ sum=0;for(j=0;j<4;j++){ sum+=x[j];w=(float)sum\/5;w++;} } } 差不多就这样了
c语言 编写函数sort(int*x,int n)函数
include<stdio.h>#include<stdlib.h>void sort(int*x,int n){int i,j,t;for(i=0;i<n-1;i++)for(j=0;j<n-i-1;j++)if(abs(*(x+j))>abs(*(x+j+1))){t=*(x+j);*(x+j)=*(x+j+1);*(x+j+1)=t;}}int main(){int n,i;scanf("%d",&n);int x[80];for...
编写函数void fun(int *a, int n, int y
void fun(int *a,int n,int y){ for (int i=n;i>=0;i--)if (y<*(a+i)){ (a+i+1)=y;return;} else (a+i+1)=*(a+i);a=y;} void main(){int i,a[11]={20,18,16,14,12,10,8,6,4,2},x;void fun(int *,int n,int y);scanf("%d",&x);fun(a,10,x...
请编写函数fun,该函数的功能是:删去一维数组中所有相同的数,使之只...
#define MAXN = 10000 \/\/数组中最大的数字为10000\/\/dest为存放单一数字的数组\/\/src为源数组\/\/n为数组元素个数void DeleteCom(int *dest,const int *src,int n){ int temp[MAXN]; for(int i =0;i<MAXN;i++)\/\/初始化为0 temp[i] = 0; for(int i =0;i<n;i++) temp[src[i]]++; ...