首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言常见程序讲解(一)

C语言常见程序讲解(一)

作者头像
用户5935416
发布2019-08-01 10:24:33
1.8K0
发布2019-08-01 10:24:33
举报
文章被收录于专栏:IT界的小白帽IT界的小白帽

之前发了很多有关C语言知识的文章。但是对于C语言的学习,只知道知识是不行的,需要自己亲自敲一些代码才能够学好C语言。在这里讲解一下简单的C语言程序(代码),希望自己能够在自己的电脑上敲几遍。

a与b的算术运算

描述:输出a和b的初始化值的简单算术运算。

代码:

#include <stdio.h>
int main()
{
    int a=5,b=3;

    printf("a+b=%d\n",a+b);   //a与b相加
    printf("a-b=%d\n",a-b);   //a与b相减
    printf("a*b=%d\n",a*b);   //a与b相乘
    printf("a/b=%d\n",a/b);   //a与b相除
    printf("a%%b=%d\n",a%b);   //a取b的余数

    return 0;
}

输出结果:

分析:printf函数是将双引号中的内容输出到弹出框中,其中因为a和b的数据类型都是int型,所以运算结果都要用%d的形式输出,前3个运算都是正确的,符合现实生活中的运算。但是第四个就会有疑问了。其实在C语言中整数与整数相除的结果是整数,所以输出是1。最后是一个取余运算。

带有输入值(可改变a和b的值)的代码:

#include <stdio.h>
int main()
{
    int a,b;
    
    scanf("%d %d",&a,&b);
    printf("a+b=%d\n",a+b);   //a与b相加
    printf("a-b=%d\n",a-b);   //a与b相减
    printf("a*b=%d\n",a*b);   //a与b相乘
    printf("a/b=%d\n",a/b);   //a与b相除
    printf("a%%b=%d\n",a%b);   //a取b的余数

    return 0;
}

运行效果:

可以将以上的代码复制到编辑软件试运行一下。需要注意的是,在输入两个数字是只能输入整数,数字间要用空格隔开。如果想要计算一个浮点数的话,下面的代码就可以。

#include <stdio.h>
int main()
{
    double a,b;

    scanf("%lf %lf",&a,&b);
    printf("a+b=%lf\n",a+b);   //a与b相加
    printf("a-b=%lf\n",a-b);   //a与b相减
    printf("a*b=%lf\n",a*b);   //a与b相乘
    printf("a/b=%lf\n",a/b);   //a与b相除
//    printf("a%%b=%lf\n",a%b);   //a取b的余数

    return 0;
}

需要注意的是输入和输出的格式控制符;浮点数无法进行取余运算,所以在这里进行了注释,也可以用如下的代码替换,但是会有误差。

printf("a%%b=%lf\n",(int)a%(int)b);   //a取b的余数

三个数的排序

描述:输入三个整数,从小到大(或从大到小)排序输出。

代码:

#include <stdio.h>
int main()
{
    int a,b,c,t;
    scanf("%d %d %d",&a,&b,&c);  //输入要排序的三个整数
    if(a>b)
    {
        t=a;
        a=b;
        b=t;
    }
    if(a>c)
    {
        t=a;
        a=c;
        c=t;
    }
    if(b>c)
    {
        t=b;
        b=c;
        c=t;
    }
    printf("%d %d %d",a,b,c);  //输出排序后的结果
    return 0;
}

运行结果:

分析:一次将输入的三个数a,b,c进行比较。如果比较结果符合语言设定的,即符合if语句条件的,则将它们的数值进行转换。两个数值的互换一般是利用一个中间值,将某一个值赋给这个中间值,该值等于另一个值,另一个值等于这个中间值。建议在纸上一步一步的写出各个值的变换情况。

该方法虽然简单,但是一旦要求排序的数的个数多起来,难免会在写代码时造成思路的混乱。接下来介绍一种比较常用的排序算法——冒泡排序。

代码如下(以五个数的排序为例)

#include <stdio.h>
int main()
{
    int a[5],i,j,t;
    for(i=0;i<5;i++)
    scanf("%d",&a[i]);  //输入要排序的五个整数

    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
            if(a[i]>a[j])
            {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
    }

    for(i=0;i<5;i++)
    printf("%d ",a[i]);  //输出排序后的结果

    printf("\n");
    return 0;
}

输出结果

分析:该方法与之前的方法相似,都是让这些数一个一个的进行比较。其优点是代码量相对较少,而且很容易扩充。如果想对更多的数进行排序的话,可以直接修改数组的长度。但是还有一个缺点就是有重复的比较,浪费CPU的资源。可以在纸上一步一步的写出各行代码的过程,这样不仅能深刻的理会到该方法的执行过程,也能找到它的缺点。

不过还可以进行优化,优化的代码是

#include <stdio.h>
int main()
{
    int a[5],i,j,t;
    for(i=0;i<5;i++)
    scanf("%d",&a[i]);  //输入要排序的五个整数

    for(i=0;i<5;i++)
    {
        for(j=i;j<5;j++)
            if(a[i]>a[j])
            {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
    }

    for(i=0;i<5;i++)
    printf("%d ",a[i]);  //输出排序后的结果

    printf("\n");
    return 0;
}

分析:最大的变化是里层的for循环j的初始值从0变为i。这样再进行第二次循环后,不再对序列为i之前的数与a[j]进行比较。因为在此之前就已经比较过了,即序列为i之前的数一定比a[j]的小。

如果有问题的可以在公众号回复栏中写出问题描述发给我,我看到的话会进行相应的回复。如果发现文章有问题,也欢迎在公众号回复栏中提问,我会查阅资料进行确认并做出修改和回复。

既然阅读了本篇文章,顺便点一下右下边的在看按钮。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT界的小白帽 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档