中学信息奥赛第五课--顺序结构程序设计

顺序程序结构就是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;
}

我们的目的是解决问题,不是为了写程序而写程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值