前言
让我学会循环吧!!!
一、111
循环学得好烂!找道基础题中的简单题找找思路。
二、代码
1.概念程序
给定了一个x的值,推演过程中,利用取余权递增的思路先完成了倒序输出部分的设计;随后定义了mask = 10000,完成了正序输出部分的设计;最后设计了循环计算mask。
代码如下(示例):
#include <stdio.h>
int main(void) {
int x;
x = 12345;
int i = 0;
int mask = 1;
int tx = x;
//测试mask的值
while (tx > 0) {
tx /= mask;
mask *= 10;
}
printf("%d\n", mask);//重新测试时发现这个循环并不能得出正确的mask(在x非五位数时)
//我保留了这段错误代码因为在这个程序里仅从结果而言它没有导致错误
//我在下一个代码中修正了这个错误
tx = x;
//逐位正序输出
while (tx > 0) {
i = tx / mask;
printf("%d ", i);
tx = tx % mask;
mask /= 10;
}
printf("\n");
int t = 0;//逐位倒序输出
do {
t = x % 10;
printf("%d", t);
x /= 10;
if (x > 0)
printf(" ");//位与位之间输出空格
} while (x > 0);
printf("\n");
return 0;
}
2.读入数据
代码如下(示例):
#include <stdio.h>
int main(void) {
int x;
scanf("%d", &x);
int i = 0;
int mask = 1;
int tx = x;
//测试mask的值(通过删位计算位数权)
while ((tx / 10) > 0) {
tx /= 10;
mask *= 10;
}
printf("%d\n", mask);
tx = x;
//逐位正序输出
while (tx > 0) {
i = tx / mask;
printf("%d ", i);
tx = tx % mask;
mask /= 10;
}
printf("\n");
int t = 0;//逐位倒序输出
do {
t = x % 10;
printf("%d", t);
x /= 10;
if (x > 0)
printf(" ");//位与位之间输出空格
} while (x > 0);
printf("\n");
return 0;
}
3.改进代码
只需要修改第二个循环的条件即可解决有0的问题,让mask(或许将这个变量命名为digit更贴切)控制循环结束。
#include <stdio.h>
#define _CRT_SECURE_NO_WORNINGS 1 //一劳永逸地解决OJ系统snanf返回值报错
int main(void) {
int x;
scanf("%d", &x);
int i = 0;
int mask = 1;
int tx = x;
//测试mask的值
while ((tx / 10) > 0) {
tx /= 10;
mask *= 10;
}
printf("%d\n", mask);
tx = x;
//逐位正序输出
while (mask > 0) {
i = tx / mask;
printf("%d ", i);
tx = tx % mask;
mask /= 10;
}
printf("\n");
int t = 0;//逐位倒序输出
do {
t = x % 10;
printf("%d", t);
x /= 10;
if (x > 0)
printf(" ");//位与位之间输出空格
} while (x > 0);
printf("\n");
return 0;
}
总结
期中考试还有一周,祝1024们好运!