在c中的一维数组中的特定位置插入元素
所以我想要这个输出:在c中的一维数组中的特定位置插入元素,c,C,所以我想要这个输出: Position you wanted to insert 2 Value You wanted to insert 34 Array after insertion: 10 5 34 46 2 100 97 但它无法显示输出,我该怎么办请帮助我,并修复它 #include <stdio.h> #include <conio.h> int main(){ int arr[100] = {10, 5, 46, 2, 100, 97};
Position you wanted to insert
2
Value You wanted to insert
34
Array after insertion:
10 5 34 46 2 100 97
但它无法显示输出,我该怎么办请帮助我,并修复它
#include <stdio.h>
#include <conio.h>
int main(){
int arr[100] = {10, 5, 46, 2, 100, 97};
int n, max, i;
n = 0;
clrscr();
if(i > n){
printf("postion you wanted to insert");
scanf("%d", &n);
}
printf("Value for position: \n");
scanf("%d", &max);
for(i=7; i>n-1; i--){
arr[i+1] = arr[i];
arr[n] = max;
}
printf("Array after insertion: \n");
for(i = 0; i < 7; i++){
printf("%d\t", arr[i]);
}
getch();
}
#包括
#包括
int main(){
int-arr[100]={10,5,46,2100,97};
int n,max,i;
n=0;
clrsc();
如果(i>n){
printf(“您希望插入的职位”);
scanf(“%d”和“&n”);
}
printf(“位置值:\n”);
扫描频率(“%d”和最大值);
对于(i=7;i>n-1;i--){
arr[i+1]=arr[i];
arr[n]=最大值;
}
printf(“插入后的数组:\n”);
对于(i=0;i<7;i++){
printf(“%d\t”,arr[i]);
}
getch();
}
您正在这样做:
if(i > n) {
printf("postion you wanted to insert");
scanf("%d", &n);
}
但是i
未初始化
试试这个:
#include <stdio.h>
#include <conio.h>
int main(){
int arr[100] = {10, 5, 46, 2, 100, 97};
int n, max, i = 7;
n = 0;
clrscr();
if(i > n){
printf("postion you wanted to insert");
scanf("%d", &n);
}
printf("Value for position: \n");
scanf("%d", &max);
for(i=7; i>n-1; i--){
arr[i+1] = arr[i];
arr[n] = max;
}
printf("Array after insertion: \n");
for(i = 0; i < 7; i++){
printf("%d\t", arr[i]);
}
getch();
}
#包括
#包括
int main(){
int-arr[100]={10,5,46,2100,97};
int n,max,i=7;
n=0;
clrsc();
如果(i>n){
printf(“您希望插入的职位”);
scanf(“%d”和“&n”);
}
printf(“位置值:\n”);
扫描频率(“%d”和最大值);
对于(i=7;i>n-1;i--){
arr[i+1]=arr[i];
arr[n]=最大值;
}
printf(“插入后的数组:\n”);
对于(i=0;i<7;i++){
printf(“%d\t”,arr[i]);
}
getch();
}
但是,如果(i>n)没有为int i分配任何值,则不需要此条件
,因此编译器会将垃圾值分配给变量i,因此无法获得输出
你需要这样做
void main()
{
int n,val,i;
int arr[100] = {10,20,30,40,50};
printf("enter the position where you want to insert the new element \n");
scanf("%d",&n);
print("Enter the value you want to insert");
scanf("%d",&val);
for(i=5,i>=n,i--)
{
arr[i+1]=arr[i];
}
arr[n]=max;
/*then print your array*/
getch();
}
如果
语句:
#include <stdio.h>
#include <conio.h>
int main() {
int arr[100] = {10, 5, 46, 2, 100, 97};
int n, max, i;
n = 0;
clrscr();
// no need for if statement here
printf("postion you wanted to insert");
scanf("%d", &n);
printf("Value for position: \n");
scanf("%d", &max);
for(i=6; i>n-1; i--) {
arr[i+1] = arr[i];
arr[i] = max;
}
printf("Array after insertion: \n");
for(i = 0; i < 7; i++) {
printf("%d\t", arr[i]);
}
getch();
}
#包括
#包括
int main(){
int-arr[100]={10,5,46,2100,97};
int n,max,i;
n=0;
clrsc();
//这里不需要if语句
printf(“您希望插入的职位”);
scanf(“%d”和“&n”);
printf(“位置值:\n”);
扫描频率(“%d”和最大值);
对于(i=6;i>n-1;i--){
arr[i+1]=arr[i];
arr[i]=最大值;
}
printf(“插入后的数组:\n”);
对于(i=0;i<7;i++){
printf(“%d\t”,arr[i]);
}
getch();
}
if
语句使用了您尚未初始化的i
。由于您希望向用户请求职位,因此不需要if
语句
您还需要修复for
循环(i
以6开头,您需要执行arr[i]=max
而不是arr[n]=max
)。更改
for(i=7; i>n-1; i--) {
arr[i+1] = arr[i];
arr[n] = max;
}
到
修正:
这应该起作用:
int main ()
{
int arr[100] = {10, 5, 46, 2, 100, 97};
int n = 6; //Number of elements in arr
int pos = 0;
int value = 0;
clrscr();
printf("postion you wanted to insert");
scanf("%d", &pos);
printf("Value for position: \n");
scanf("%d", &value);
int i;
for (i = n ; i > pos ; --i)
arr[i] = arr[i - 1];
arr[pos] = value;
++n;
printf("New array:\n");
for (i = 0 ; i < 0 ; ++i)
printf("%d ", arr[i]);
getch ();
}
int main()
{
int-arr[100]={10,5,46,2100,97};
int n=6;//arr中的元素数
int pos=0;
int值=0;
clrsc();
printf(“您希望插入的职位”);
scanf(“%d”和“&pos”);
printf(“位置值:\n”);
scanf(“%d”,和值);
int i;
对于(i=n;i>pos;--i)
arr[i]=arr[i-1];
arr[pos]=值;
++n;
printf(“新数组:\n”);
对于(i=0;i<0;++i)
printf(“%d”,arr[i]);
getch();
}
在要插入的索引(即第一个循环)之后移动项目的循环是错误的。您以六个条目开始数组(索引0
到5
),然后开始循环索引7
,这意味着您将移动arr[7]
到arr[8]
但这只是循环问题的开始。然后在每个循环中将
arr[n]
设置为要插入的值。这样,当您要移动arr[n]的原始值时
该值已被多次覆盖。这里是一个通用解决方案。您必须小心数组中已存在的元素数。
注意:如果希望能够在所有可能的位置插入,请禁用第二条if语句
帮助它将帮助您:
#include <stdio.h>
#define MAX_EL 100
int main() {
int arr[MAX_EL] = {10, 5, 46, 2, 100, 97};
int n, max, i;
int nb_elements = 6 ;
n = 0;
i = 0 ;
printf("postion you wanted to insert :\n");
scanf("%d", &n);
printf("Value for position: \n");
scanf("%d", &max);
if (nb_elements >= MAX_EL) {
fprintf(stderr,"Tab is full ! \n") ;
return -1 ;
}
if (n>nb_elements-1)
n = nb_elements ;
int arr_tmp[MAX_EL] ;
for (;i<n;i++) {
arr_tmp[i] = arr[i] ;
}
arr_tmp[n] = max ;
for (i=n;i<nb_elements+1;i++)
arr_tmp[i+1] = arr[i] ;
nb_elements++ ;
memcpy(&arr[0],&arr_tmp[0],sizeof(int)*nb_elements) ;
printf("Array after insertion: \n");
for(i = 0; i < nb_elements; i++) {
printf("%d\t", arr[i]);
}
那么我如何分配它并获得排序的数组删除if(i>n)条件,只需选择用户希望插入新值的位置,清空该位置并在该位置输入新值。这仅对第一个
if
语句重要。在循环中使用时,它会被初始化。您还犯了一个错误,即分配了arr[n]=循环模块中的max,这样每次循环运行时,位置n将具有max值,将其置于循环外部。代码中存在未定义的行为:当声明局部变量i
时,其值将变得未定义,除非对其进行初始化。在if(i>n)中使用它之前,需要对其进行初始化
statement.output无法获取我它给了我复制的元素没有像您要插入的位置那样移动:位置的2值:23插入后的数组:10 5 23 23 2 100 97不是10 5 23 46 2 100 97我要第二次输出
int main ()
{
int arr[100] = {10, 5, 46, 2, 100, 97};
int n = 6; //Number of elements in arr
int pos = 0;
int value = 0;
clrscr();
printf("postion you wanted to insert");
scanf("%d", &pos);
printf("Value for position: \n");
scanf("%d", &value);
int i;
for (i = n ; i > pos ; --i)
arr[i] = arr[i - 1];
arr[pos] = value;
++n;
printf("New array:\n");
for (i = 0 ; i < 0 ; ++i)
printf("%d ", arr[i]);
getch ();
}
#include <stdio.h>
#define MAX_EL 100
int main() {
int arr[MAX_EL] = {10, 5, 46, 2, 100, 97};
int n, max, i;
int nb_elements = 6 ;
n = 0;
i = 0 ;
printf("postion you wanted to insert :\n");
scanf("%d", &n);
printf("Value for position: \n");
scanf("%d", &max);
if (nb_elements >= MAX_EL) {
fprintf(stderr,"Tab is full ! \n") ;
return -1 ;
}
if (n>nb_elements-1)
n = nb_elements ;
int arr_tmp[MAX_EL] ;
for (;i<n;i++) {
arr_tmp[i] = arr[i] ;
}
arr_tmp[n] = max ;
for (i=n;i<nb_elements+1;i++)
arr_tmp[i+1] = arr[i] ;
nb_elements++ ;
memcpy(&arr[0],&arr_tmp[0],sizeof(int)*nb_elements) ;
printf("Array after insertion: \n");
for(i = 0; i < nb_elements; i++) {
printf("%d\t", arr[i]);
}
10 5 34 46 2 100 97