先生,我是一名新的程序员。所以我面临一些我真正需要解决的新问题。就像我写代码一样
#include<stdio.h>
main(){
int ara[] ={10,20,30,40,50,60,70,80,90,100},i,temp,j;
for(i=0,j=9;i<10;i++,j--){
ara[i]=ara[j];
printf("%d\n",ara[i]); }
}
我认为结果将是100,90,80,70,60,50,40,30,20,10但结果不是这样的......有人请告诉我为什么结果显示100,90 ,80,70,60,60,70,80,90,100
答案 0 :(得分:3)
打印值60后,即当您尝试进一步访问元素时,数组的一半,实际上您将访问那些位于数组中间之后的位置的元素。因为你是用ara [i] = ara [j]来分配它们所以你最终会在一半的数组之后重复。 为: -
ara[0] = ara[9]
ara[1] = ara[8]
ara[2] = ara[7]
ara[3] = ara[6]
ara[4] = ara[5]
ara[5] = ara[4]
最简单的解决方案可能是创建一个临时数组: -
#include<stdio.h>
main(){
int ara[] ={10,20,30,40,50,60,70,80,90,100},i,temp[10],j;
for(i = 9, j = 0; i >= 0; i--, j++){
temp[j]=ara[i];
}
for(i = 0; i < 10; i++){
printf("%d\n", temp[i]);
}
}
答案 1 :(得分:1)
您在此代码中正在做什么?
反转数组
为什么要打印100,90,80,70,60,50,60,70,......
因为当你到达第6个(ara [4])时,你已经把它换成了第4个(ara [6])
答案 2 :(得分:1)
您需要在临时变量中保存首先写入的值
一些例子
char *reverse(char *str)
{
char tmp;
int len;
if (str != NULL)
{
len = strlen(str);
for (int i = 0; i < len / 2; i++)
{
tmp = *(str + i);
*(str + i) = *(str + len - i - 1);
*(str + len - i - 1) = tmp;
}
}
return str;
}
int *reverseints(int *data, size_t size)
{
int tmp;
if (data != NULL)
{
for (int i = 0; i < size / 2; i++)
{
tmp = *(data + i);
*(data + i) = *(data + size - i - 1);
*(data + size - i - 1) = tmp;
}
}
return data;
}