顺序程序结构就是CPU从头到尾逐行执行,没有分叉(分支),也没有跳转(循环尾部跳到头部),是最简单的执行方式。
例题:三位数反转
输入一个三位数,分离出它的百位、十位和个位,反转后输出。
样例输入:
127
样例输出:
721
分析:首先读入变量n,然后进行分离。百位n/100(注意取的商的整数部分),十位等于n/10%10(这里的%是取余数操作),个位等于n%10.程序如下:
#include <cstdio>
int main() {
int n;
scanf("%d", &n);
printf("%d%d%d\n", n%10, n/10%10, n/100);
return 0;
}
注意程序中没有using namespace std; 这句,是因为我们基本使用的是c 的io库,c是不支持namespace的,所以不需要。只有c++的标准库如iosteam才是std的命名空间。
注意这个题目没有交代清楚细节,如果个位是0,反转输出格式如何?比如输入520,输出是025还是25?如果竞赛中遇到这类问题,应该向老师问清楚,避免理解错误。这两种输出的方法都应该学会。
上面程序输出025,如何输出25呢,只要判断个位n%10是否为0即可,但这需要if/else的分支语句,还没学。那就把结果存放到一个变量m中,用%d格式输出m即可得到25,如果还想输出025也容易,printf很强大,输出格式改为%03d即可。
#include <cstdio>
int main(){
int n, m;
scanf("%d", &n);
m = (n%10)*100 + (n/10%10)*10 + (n/100);
printf("%d\n", m);
printf("%03d\n", m);
return 0;
}
昨天和小同学讨论的一个作业题:交换变量
输入两个整数a和b, 交换两者的值,然后输出
样例输入:
824 16
输出:
16 824
分析:输入存入变量a,b,然后交换,如何交换,最常用的办法是通过第三个变量:
#include <cstdio>
int main() {
int a, b, t;
scanf("%d%d", &a, &b);
t=a;
a=b;
b=t;
printf("%d %d", a, b);
return 0;
}
通过t倒一下就完成了交换。
不借助变量呢?
#include <cstdio>
int main() {
int a, b;
scanf("%d%d", &a, &b);
a=a+b;
b=a-b;
a=a-b;
printf("%d %d\n", a, b);
return 0;
}
这有些难理解,其实是对赋值语句的练习,解释一下:
程序依次执行,为了避免值和变量名混淆,假定用户输入的是a0和b0,scanf语句执行完后a=a0,b=b0
执行完a=a+b后:a=a0+b0, b=b0
执行完b=a-b后:a=a0+b0, b=a0
执行完a=a-b后:a=b0, b=a0
可以通过dev c++单板跟踪看看变量的变化。单板跟踪大家会吗?就是用鼠标在行上设置断点,然后在下面选择调试按钮
当然如果竞赛是机器阅卷,不关心是否真正交互,可以直接修改输出顺序即可:
#include <cstdio>
int main() {
int a, b;
scanf("%d%d", &a, &b);
printf("%d %d\n", b, a);
return 0;
}
我们的目的是解决问题,不是为了写程序而写程序。