重庆建站网络公司,专业自适应网站建设极速建站,上海代理注册公司,网站优化推广平台【题目描述】
读入一些整数#xff0c;逆序输出到一行中#xff0c;数中间用空格隔开。已知整数不超过100个。
【样例输入】
94 95 27
【样例输出】
27 95 94
【题目来源】
刘汝佳《算法竞赛入门经典 第2版》程序3-1 逆序输出 【解析】
原书代码#xff1a;
#inc…【题目描述】
读入一些整数逆序输出到一行中数中间用空格隔开。已知整数不超过100个。
【样例输入】
94 95 27
【样例输出】
27 95 94
【题目来源】
刘汝佳《算法竞赛入门经典 第2版》程序3-1 逆序输出 【解析】
原书代码
#includestdio.h
#define maxn 105
int a[maxn];
int main(){int x, n 0;while(scanf(%d, x) 1)a[n] x;for(int i n-1; i 1; i--)printf(%d , a[i]);printf(%d\n, a[0]);return 0;
}
代码中先是将输入的数赋给一个int型变量x再将x赋值给数组。其实可以直接将输入的数赋给数组这就需要用到指针。修改后的代码如下
#includestdio.h
#define maxn 105
int a[maxn];
int main(){int n 0;while(scanf(%d, an) 1)n;for(int i n-1; i 1; i--)printf(%d , a[i]);printf(%d\n, a[0]);return 0;
}
因为数组名a起到指向数组首元素的指针的作用所以可以通过a加上一个自加的n来返回数组各元素的地址从而将输入的数据直接存入对应的地址中。
根据n先返回自加前的值然后再自加的特点可以将上面的while循环进一步改写如下
#includestdio.h
#define maxn 105
int a[maxn];
int main(){int n 0;while(scanf(%d, an) 1);for(int i n-2; i 1; i--)printf(%d , a[i]);printf(%d\n, a[0]);return 0;
}
注意相比之前的代码这时n会多自加1次因为n写在while语句的循环条件判断中当输入CTRLZ结束时n又被执行了1次所以for循环的初始值应改为n-2。
需要特别说明的是虽然数组名起到指针的作用但它本质上只是一个常量指针。因为是常量所以不能改变自己的值因而改变地址时要用an不能写成a。
不过咱们可以创建一个指针让它指向数组的首元素再对这个指针进行自加操作代码如下
#includestdio.h
#define maxn 105
int a[maxn];
int main(){int *p a; //定义指针指向数组首元素while(scanf(%d, p) 1);for(pp-2; p a; p--)printf(%d , *p);printf(%d\n, *p);return 0;
}
必须提醒的是指针加来加去非常容易出错所以能不用还是尽量不要用。