|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
#include<string.h>
int main(){
char a[80],*p;
int n,i,j;
printf("\n 输入一个不大于80位的正整数:\n");
gets(a);
printf("\n去除个位数:\n");
scanf("%d",&n);
for(i=0;i<n;i++){
for(p=a;*(p);p++)
if(*(p+1)>*p) break;
strcpy(p,p+1);
}
printf("\n 结果是:%s\n",a);
}
为什么输入629581732598和5,出来的结果是9873598?
我对这个程序的理解是p=a即p=629581732598,然后从6开始如果后一个数比前一个数大就将后一个数复制给前一个数,但问题是到73这,7后面的3比7小,也就是后一个数比前一个数小却输出了。想问下这个程序正确的理解是什么?
输入的是:629581732598
- /* 运行环境:Microsoft Visual C++ 2010 学习版
- * 文件名:test.c
- * 功能:了解数组与指针关系
- * 日期:2021 年 9 月 15 日
- */
- #include <stdio.h>
- #include <string.h>
- #include <Windows.h>
- int main()
- {
- char a[80], *p;
- int n, i, j;
- printf("\n 输入一个不大于 80 位的正整数:\n");
- gets(a);
- printf("\n去除个位数:\n");
- scanf("%d", &n);
- for (i = 0; i < n; i++)
- {
- for (p = a; *(p); p++)
- {
- printf("p1 = %p\n", p);
- if (*(p+1) > *p)
- {
- printf("p2 = %p\n", p);
- break;
- }
- }
- strcpy(p, p+1);
- }
- printf("\n 结果是:%s\n", a);
- system("pause");
- return 0;
- }
复制代码
第一次 if 条件为真:6 29581732598;
执行 strcpy 后:a = "6 9581732598\n??????..."
第二次 if 条件为真: 69581732598\n;
执行 strcpy 后:a = " 9581732598\n???????..."
第三次 if 条件为真:9 581732598\n??;
执行 strcpy 后:a = "9 81732598\n??????..."
第四次 if 条件为真:98 1732598\n???;
执行 strcpy 后:a = "98 732598\n??????..."
第五次 if 条件为真:9873 2598\n????;
执行 strcpy 后:a = "9873 598\n??????..."
执行 for 循环括号中判断表达式中的表达式3:i++ 后,i == 5,i == n,跳出外层循环,输出结果:
983598
|
|