1.一个整型数组有10个元素,编写程序删除所有值为n的元素。
要求:
(1)主函数完成n的输入,数组元素输入以及删除后数组元素的输出。
(2)删除功能用子函数完成。
编写程序如下
#include <stdio.h>
#include <string.H>
int fun(char a[])
{
int i,j,k;
char n;
printf("请输入您要删除的数");
scanf("%c",&n);
for(i=0;i<k;i++)
if('a[i]'=='n')
{
for(j=i;j<k;j++)
a[j]=a[j+1];
}
}
int main()
{
char a[81];
printf("请输入要输入的数组元素:\n");
scanf("%s",a);
printf("删除后的数组顺序为%s",fun(a));
}
第一次写函数 还有点弄不懂 请问在原程序上还要在呢么改
#include <stdio.h>
int k =10;
void fun(int a[10])
{
int one;
printf("select one number:" );
scanf("%d",&one);
for(int i=0;i<k;i++)
{
if(a[i]==one)
{
for(int j=i;j<k;j++)
a[j]=a[j+1];
k--;
i--;
}
}
}
void main()
{
int a[10];
int i=0;
printf("input 10 number:");
while(i<10)
{
scanf("%d",&a[i]);
i++;
}
fun(a);
printf("result is:");
for(int j=0;j<k;j++)
printf("%d ",a[j]);
}
#include <string.H>
char *fun(char a[])
{
int i,j,k=strlen(a);
char n;
printf("请输入您要删除的数");
fflush(stdin);
scanf("%c",&n);
for(i=0;i<k;i++)
if(a[i]==n)
{
for(j=i;j<k;j++)
a[j]=a[j+1];
k--;
i--;
}
return a;
}
int main()
{
char a[81];
printf("请输入要输入的数组元素:\n");
scanf("%s",a);
printf("删除后的数组顺序为%s",fun(a));
}追问
是很好拉我也发现了问题,但是请问下 fflush(stdin);是什么作用 还有为什么比较是a[i]==n而不是ASCII码比较'a[i]'='n'?
追答fflush(stdin)的作用是清理输入缓存,因为在main执行scanf后,缓存里回遗留回车符,如果不清理,就会把这个回车符读给变量n。
C语言只有字符常量才用单引号,如'A','B',其他情况都按正常的变量使用方法。
所以说就算数组表示的是自负常量a[1]=A也不用加单引号!还有为什么是*fun(chara[]), 后面还有个returna;数组不是改变的是地址为什么要返回值?我试过把他们取到但是最后得到的是NULL这是为什么?第一次做函数题有点不明白,希望说说。谢谢啦
追答fun给一个返回值,是方便引用,你说的没错,也可以不要返回值。
我是按你的源代码的意思来做的。
你的main函数里,最后输出删除后的字符顺序,要求用fun的返回值来作为参数,而且前面的格式用的是%s,那这个fun必须返回char *才能匹配printf的格式。所以我把你的fun的返回值从int改成了char *,当然fun的最后就要把a的地址返回出去。
#define SIZE 10
void del(int arr[],int *counter);
int main(void)
{
int arr[SIZE];
int counter=0;
int index;
printf("请输入%d个整数:\n",SIZE);//输入数组元素
for(counter=0;counter<SIZE;counter++)
{
printf("arr[%d]:",counter+1);
scanf("%d",&arr[counter]);
}
del(arr,&counter);//删除
printf("删除后的数组:\n");
for(index=0;index<counter;index++)//删除后的输出
{
printf("%d ",arr[index]);
}
putchar('\n');
return 0;
}
void del(int arr[],int *counter)
{
int i,j;
int n;
printf("请输入n:");
scanf("%d",&n);
for(i=0;i<*counter;i++)
{
if(arr[i]==n)
{
for(j=i;j<*counter-1;j++)
{
arr[j]=arr[j+1];
}
(*counter)--;
i--;
}
}
}
题目正好用到我刚学的数组,指针了,嘿嘿
虽然简单,但是挺有意思
不过这个我没写输入控制
k = strlen(a);
另外, 内循环的条件, 改为for (j = i; j < k - i; j++); 不然就循环多了, 数组越界.