首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

本人的c语言不太好,一道题目求答案,该怎么解决

2012-04-17 
本人的c语言不太好,一道题目求答案设有一数列,包含10 个数,已按升序排好。现要求编一程序,它能够把从指定位

本人的c语言不太好,一道题目求答案
设有一数列,包含10 个数,已按升序排好。现要求编一程序,它能够把从指定位置开始的n个数按逆序重新排列并输出新的完整数列。进行逆序处理时要求使用指针方法。(例如:原数列为2,4,6,8,10,12,14,16,18,20,若要求把从第4个数开始的5个数按逆序重新排列,则得到新数列为2,4,6,16,14,12,10,8,18,20。)

[解决办法]

C/C++ code
int fun(int a[], unsigned int start, unsigned int n){    int tmp;    int i;    for (i = 0; i < n; i++)    {           tmp = a[start + n - 2 - i];         a[start + n - 2 - i] = a[start - 1 + i ];        a[start - 1 + i] = tmp;    }           return 0;}
[解决办法]
这个无非就是指针的偏移数问题,比如需要把第四个开始后的5个逆序,输入为 4 5
那么在1-4直接输出,然后把指针只想a+4+4-2处,倒这输出,完成之后再输出最后一部分
C/C++ code
  1 #include<stdio.h>  2   3 int main(){  4   5     int begin,end,*p;  6   7     int a[] = {2,4,6,8,10,12,14,16,18,20};  8   9     scanf("%d %d",&begin,&end); 10     p = a; 11     while(p<=a+begin-2) 12         printf("%d ",*p++); 13     p = a+begin+end-2; 14     while(p>=a+begin-1) 15         printf("%d ",*p--); 16     p = a+begin+end-1; 17     while(p<a+sizeof(a)/sizeof(int)) 18         printf("%d ",*p++); 19     printf("\n"); 20     return 0; 21 }
[解决办法]
C/C++ code
#include <stdio.h>void local_sort(int *a,int pos,int len){     int i;     for(i=0;i<len>>1;++i)     {           a[pos+i]^=a[pos+len-i];             a[pos+len-i]^=a[pos+i];             a[pos+i]^=a[pos+len-i];      }}  int main(void){    int array[10]={2,4,6,8,10,12,14,16,18,20};    int i;    local_sort(array,3,5);    for(i=0;i!=10;++i)    printf("%d ",array[i]);    getchar();    return 0;} 

热点排行