C语言问题:已有定义int a[10]={1,2,3,4,5,6,7,8,9,10} 要求通过指针完成从一维数组中删除下标为K的元素

#include<stdio.h>
void main()
{ int i=0,k=0,a[10]={1,2,3,4,5,6,7,8,9,10},*p=NULL;
p=a;
printf("删除前:");
for(p=a;p-a<10;p++)
printf("%3d",*p);
printf("\n");
printf("请输入k值:");scanf("%d",&k);
for(i=k;i<10;i++)
*(p+i)=*(p+i+1);
printf("删除后:");
for(p=a;p-a<10;p++)
printf("%3d",*p);
printf("\n");
}

我的程序有什么毛病?

“for(p=a;p-a<10;p++)”这个循环已经让p指向了数组中最后一个元素,
所以“for(i=k;i<10;i++)”在这个循环之前应该让p重新指回数组的第一个元素,故改为for(i=k,p=a;i<10;i++)

另外 删除一个元素之后 数组中只有9个元素,所以应当把a[9]赋值为'\0'或者在最后一个循环中控制条件改为p-a<9
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-02-05
两个问题:
1.输入k之后 ,要重新将 p 指向 a 即10行前+一句 p = a;
2.最后一个for越界,i=9 时 p+i+1 就成了 p+10本回答被提问者和网友采纳

???C语言问题int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;不能表示a数组元 ...
定义数组并赋值时C语言规定下标是这样的,a[n]中的n个元素应该是a[0]...a[n-1],由此可见答案B中a[10]已经超过规定的范围,故不能表示数组a中的元素。答案A中因为指针P指向数组首地址,所以*p相当于a[0]这个元素

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[a] p+5 刚*P为() A.6 B...
选C,应指向8\/ include<stdio.h> void main(){ int a[10]={1,2,3,4,5,6,7,8,9,10};int *p=&a[2]printf("%d\\n",*(p+5));} 这里a[2]是一个下标变量,由于地址是从a[0]开始的,所以a[2]的值其实是3,P指向的位置+5位,正好是8,谢谢!

C语言编程,设a是一个有十个元素的整型数组,统计奇数和偶数个数
参考代码:include<stdio.h>#include<math.h>int main() { int i,j=0,o=0,a[10]={0,1,2,3,4,5,6,7,8,9}; for(i=0;i<10;i++) if(a[i]%2) j++; else o++; printf("奇数有%d个,偶数有%d个。\\n",j,o);return 0; }\/*运行结果:奇数有5个,偶数有5个。*\/ ...

若有以下定义,“int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a”,则值为6...
C 指针p指向a的首地址,就是存放a[0]的地址,值为6的数组名是a[5],所以A,B首先排除 之后p是指针变量存的是地址,所以为了获取值,应选C

C语言中,int a[10]={1,2,3,4,5,6,7,8,9} int b; scanf("%d",&b...
只要b的值在0和9之间,就能正确输出!否则将会威胁系统的运行!输出来的可能是一个乱码

...10}要求用C语言输出a[10]={1,2,3,4,5,6,7,8,9,10}
include<stdio.h>void printfAB(int *a,int *b);\/\/打印int main(){ int a[10]={1,3,5,7,9},b[10]={2,4,6,8,10},*pa,*pb,i=0; pa=&a[4]; pb=&b[4]; i=4; while(pa!=a)\/\/a,b先移位让出要插入的空位 { *(pa+i)=*(pa); *(pb+...

若有以下定义,“int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a”,则值为6...
这个考的是C语言里指针部分的知识,答案 A 。B表示元素a[6],即7;C是一个表达式;D表示a[5]的地址,不是元素。

...定义和语句: int a[10]={1,2,3,4,5,6,7,8,9,10},p=a; 则不能表示a...
即a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],正好10个,没有a[10],所以a[10]就是不能表达这个数组元素。C、*a ---数组名a中保存的是数组的首地址,*是取单元中的值,*a就是取数组首地址中单元中a[0]的值。D、a[p-a] --- p指向的是数组a,因为p...

编程题:用冒泡排序法将一维数组A[10]={1、2、4、3、6、5、7、8、9...
{ temp = array[j];array[j] = array[j+1];array[j+1] = temp;flag = 0;} } if(1 == flag)break;} } void main(){ int A[10]={1、2、4、3、6、5、7、8、9、10},i;bubble_sort(a,10);for(i = 0; i < 10; i++)printf("%d ",a[i]);printf("\\n");} ...

C语言:int a[10]={3,6,1,8,2,7,10,4,9,9}; 程序运行时输入一个整数n...
int temp;int a[10] = {3,6,1,8,2,7,10,4,9,9};temp = a[9];printf("输入一个数字");scanf("%d",&n);for(i=0;i<n;i++){ for(j=9;j>=0;j--){ if(j==0){ a[0] = temp;temp = a[9];}else { a[j] = a[j-1];} } } for(i=0;i<10;i++){ pri...

相似回答