c语言数组逆序问题 求助大佬

作者&投稿:陆龙 (若有异议请与网页底部的电邮联系)
C语言字符串数组逆序问题~

是的,字符串数组实际大小包括 '\0'
看来想冒泡来实现, 不过冒泡需要第k次将前k-1个数字两两交换, 如下
#include int main(){ char str1[20]; scanf("%s",str1); int i,m,n,temp; int len = strlen( str1 ); for(i=0;str1[i] != '\0';i++) { for(m=0,n=len-i-1;m<n;m++) { temp=str1[m]; str1[m]=str1[m+1]; str1[m+1]=temp; } } puts(str1); return 0;}

首先来分析下你的代码
第一处错误for(;i>j;i--,j--),在这里你的j是赋的初值是0,再--,这不是你想要的吧,细心点。
第二处错误,我们知道用字符数组接收字符串的时候,系统会在最后自动加上空字符'\0'以标志字符串结束,当采用你的程序交换时,没有考虑空字符,会连同空字符一起与前面的字符交换,你的i是从9开始减,而你定义的字符数组是str[10],所以交换后最后一个字符肯定是你输入的第一个字符,而不是一个空字符,当你用puts()输出字符串后,就会出现错误了。
解决:在头文件加上
#include
//调用处理字符串的函数的需要
再给i赋初值改为
int
i=strlen(str)-1
//-1原因是数组从str[0]开始的,strlen()
//作用就不用我说了吧
再把for语句中j--改成j++就OK了
也可以用指针来做的,自己试试吧,不过也大同小异

#include <stdio.h>

#define N 20

int main()

{

    int i = 0, a[N];

    do

    {

        scanf("%d", a + i);

    } while (a[i++] > 0);

    {

        int j,t;

        for(j=0,i-=2;j<i;j++,i--)

        {

            t=a[i];

            a[i]=a[j];

            a[j]=t;

        }

        /* 请在这里填写答案 */

    }

    for (i = 0; a[i] > 0; i++)

        printf("%5d", a[i]);

    return 0;

}



编写一个程序,读入一组整数(不超过20个),并把它们保存在一个整型数组中。当用户输入0时,表示输入结束。然后程序将把这个数组中的值按逆序重新存放,并打印出来。要求:(1)只能定义一个数组;(2)在交换两个数组元素的值时,必须使用单独定义的一个函数swap。例如:假设用户输入了一组数据:7 19 -5 6 2 0,那么程序将会把前五个有效数据保存在一个数组中,即7 19 -5 6 2,然后把这个数组中的值按逆序重新存放,即变成了2 6 -5 19 7,然后把它们打印出来。输入格式:输入只有一行,包括若干个整数,最后一个整数是0。输出格式:输出只有一行,包括若干个整数,即逆序排列后的结果。

为了实现数组的逆序,在读入循环结束以后,先把变量i的值减2,让它指向最后一个有效的数据。然后再另设一个变量j=0,当i>j时进行循环{交换a[i]和a[j]的值,然后i--;j++;}

已经有正确的回答了,可以参考1991的回答。

将一个从键盘输入的整数存放到一个数组中,通过程序的运行按照数组中的逆序输出该整数,利用递归的方法解决问题。 算法思想 设计函数实现数据的逆序存放,设定形参数组接收实参数组的地址,来存储数据.


开江县17592609132: C语言编程:将一个数组中的元素逆序怎么写?求高手解答. -
仉溥胃苏: #include <stdio.h> #define N 5 void main() { int a[N],i,temp; printf("enter array a:\n"); for (i=0;i<N;i++) scanf("%d",&a[i]); printf("array a:\n"); for (i=0;i<N;i++) printf("%4d",a[i]); for (i=0;i<N/2;i++) //循环的作用是将对称的元素的值互换 { temp...

开江县17592609132: c语言一道关于数组逆序排列的问题 -
仉溥胃苏: 根据你的题目,程序如下: #include <stdio.h> #include <string.h>void swap(int * data,int len) {int i = 0;int temp = 0; for(i = 0; i < len/2; i++){temp = data[i];data[i] = data[len-i-1];data[len-i-1] = temp;} }void main() {int buff[20];int count = 0...

开江县17592609132: 初学C语言,求助高手,将一个数组中元素逆序 -
仉溥胃苏: 在最上面定义一个int常量 NUM 为 5 int a[NUM] = {9,2,5,7,8}; for(int i = 0;i<(NUM/2);i++) {int temp = 0;temp = a[i];a[i] = a[NUM-i-1];a[NUM-i-1] = temp; } 最后输出

开江县17592609132: 用C语言实现数组中的数据逆序输出 -
仉溥胃苏: 可以将这个功能封装为一个函数. 传入数组首地址,以及数组长度. 以循环方式,对数组逆序遍历即可. 代码:1 2 3 4 5 6 7 8voidrevers_print(int*a, intl) {inti;for( i = l-1; i >=0; i -- )printf("%d,",a[i]); return0; }

开江县17592609132: c语言已知一组数据,要求逆序存放 -
仉溥胃苏: #include<stdio.h> main() { int a[5], i, temp; /*定义数组及变量为基本整型*/ printf("please input array a:\n"); for (i = 0; i < 5; i++) /*逐个输入数组元素*/ scanf("%d", &a[i]); printf("array a:\n"); for (i = 0; i < 5; i++) /*将数组中的元素逐个输出*/ ...

开江县17592609132: c语言编程,将一个数组中的值按逆序排列.望解答.谢谢. -
仉溥胃苏: void swap(int x,int y) { int z; z=x; x=y; y=z; }用循环将数组首尾放进自定义函数互换就行,一个递增下标,一个递减下标,循环的次数为下标+1再除以2.

开江县17592609132: C语言,输入一个若干个整数,然后要求逆序输出,求程序 -
仉溥胃苏: //数组 #include<stdio.h> #define N 100 void main() {int a[N],i,n;printf("您要输入几个整数:");scanf("%d",&n);while(1){ if(n>0&&n<=100)break;printf("\n您的输入有误,请重新输入0-100之间的整数:");scanf("%d",&n);} ...

开江县17592609132: C语言编程中一个数组里的数逆序排列,但数组里的数不确定有几个 -
仉溥胃苏: 首先正向遍历这个数组 记录这个数组的元素个数 在逆序交换 int a[100], b[100];//设置数组空间 要足够大 因为数组空间一旦确定不能更改 int count = 0; int* p = a; int i , j = 0;while(*p)//若所指向的数组空间有值 则循环 {p++;// 指针自加 指向下一个元素count++;//记录数组元素个数 }for(i = 0; i <= count; i++) {b[i] = a[count - i];//用数组a逆序给数组b赋值 }

开江县17592609132: 求助!!!用C语言的 指 针 法 将数组A中元素按逆序重新排列. -
仉溥胃苏: fun(){int a[10],*p,*q; //定义数组和指针int temp; //定义一个临时变量p=a; //将数组a的地址赋值给指针变量q=p+10; //初始化指针qwhile(p<q){temp=*p; //交换数组中的值*p=*q;*q=*p;p++; //p指针后移q--; //q指针前移} } 这个函数的功能就是实现数组元素的逆序排列

开江县17592609132: C语言:下列程序将数组a中的数据按逆序存放,通过函数实现,编写invert()函数.(麻烦大神帮忙解答下) -
仉溥胃苏: void invert(int x[] int n) {int *a;int i;a=(int*)malloc(n*sizeof(int));for(i=0;i<n;i++)a[i]=x[n-i-1];for(i=0;i<n;i++)x[i]=a[i]; }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网