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

之前发了很多有关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]的小。

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

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

原文发布于微信公众号 - IT界的小白帽(l1084504793)

原文发表时间:2019-07-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券