Number 1 — 程序设计入门

Day 1 学习笔记

1、双精度浮点数的输入问题

使用 scanf 语句输入变量的值,如果是double类型的数,需要使用scanf(“%lf”,&a)。这真的是个坑,反正我每次都会掉进去。

#include<stdio.h>
int main()
{
    double a;
    scanf("%lf",&a);
    printf("%.1f",a);   //输出结果取小数点后一位
    return 0;
}

2、转换思路 —— 解决问题,不要为了写程序而写程序

从一个简单的问题入手,输入两个整数ab,交换二者的值,然后输出。

样例输入: 824 16

样例输出: 16 824

我们很容易想到引入一个新的变量来解决这个问题,但是单纯从解决问题本身的角度来讲,只要结果对解决了问题就OK了,所以就本题而言,最佳的程序为

#include<stdio.h>
int main()
{
    int a,b;
    scanf("%d %d",&a,&b);
    printf("%d %d",b,a);
    return 0;
}

3、三整数排序问题

输入三个整数,从小到大排序后输出
样例输入:20 7 33
样例输出:7 20 33
思路:我第一开始想到的是使用多个if语句的嵌套,写出了代码后发现,这样做很繁琐,而且极其容易搞错。

#include<stdio.h>
int main()
{
    //三个数排序 
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c); 
    if(a>=b) 
    {
        if(b>=c)
            printf("%d %d %d",c,b,a);
        else{
            if(a>=c)
               printf("%d %d %d",b,c,a);
            else
               printf("%d %d %d",b,a,c);
        }
    }
    else{
        if(b<=c)
        printf("%d %d %d",a,b,c);
        else{
            if(a>=c)
                printf("%d %d %d",c,a,b);
            else
                printf("%d %d %d",a,c,b);
        }
    }
    return 0;

换个角度思考问题,a,b,c是要进行排序的数,我们可以依次把较小的数往前挪,达到排序的目的

#include<iostream>
using namespace std; 
int main()
{
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    if(b<a)   swap(a,b);
    if(c<b)   swap(b,c);
    if(b<a)   swap(a,b);
    printf("%d %d %d",a,b,c);
    return 0;
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 1
秦晓武

虽然我没写C,但这个思路不错

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!