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

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

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

可重复计算

上一个文章的程序虽然可以进行简单的计算,但是一次只能计算计算。计算第二次的话,需要再次打开程序。使用非常不便,所以最好进行修改,让它能够重复计算。但是不能让它一直执行下去,否则会一直浪费内存,所以必须有一规则让它能够自动关闭。首先看看代码。(代码不唯一,可以按照自己的想法进行修改)

#include <stdio.h>
int main()
{
    int a,b;
    scanf("%d %d",&a,&b);  //输入要进行计算的两个数
    while(a!=0&&b!=0)    //当两个数都不为0时开始计算
    {
        printf("a+b=%d\n",a+b);    //计算两个数的和
        printf("a-b=%d\n",a-b);   //计算两个数的相减结果
        printf("a*b=%d\n",a*b);    //计算两个数相乘的结果
        printf("a/b=%d\n",a/b);    //计算两个数相除的结果
        scanf("%d %d",&a,&b);  //输入下一次要进行计算的两个数
    }
    return 0;
}

程序结果

分析:利用while函数实现计算的可重复性。当a和b都不为零时进行计算;如果有一个数为0的话,则退出程序。关键的一点是在计算后要再一次进行输入,否则就会一直不停的重复输入,不信的话可以在自己的电脑上讲计算后的输入语句注释或删除掉,运行后输入两个都不为0的数。肯定是不停的输出那两个数的计算结果。这时可以直接点击左上角的关闭按钮。

可以识别运算符的计算

细心的可以发现每次输入的两个数都会输出包括加、减、乘、除的计算结果。当只需其中一个计算结果时,这样的计算比较多余,所以下面介绍一种可以进行选择的程序,代码如下。

#include <stdio.h>

int main()
{
    int a,b;
    char c;
    scanf("%d%c%d",&a,&c,&b);  //输入要进行计算的两个数
    while(a!=0&&b!=0)    //当两个数都不为0时开始计算
    {
        switch (c)
        {
            case '+':  printf("%d+%d=%d\n",a,b,a+b);    break;    //计算两个数的相减结果
            case '-':  printf("%d-%d=%d\n",a,b,a-b);    break;   //计算两个数的和
            case '*':  printf("%d*%d=%d\n",a,b,a*b);    break;   //计算两个数相乘的结果
            case '/':  printf("%d//%d=%d\n",a,b,a/b);    break;   //计算两个数相除的结果
        }
      scanf("%d%c%d",&a,&c,&b);  //输入要进行计算的两个数
    }
    return 0;
}

程序结果

分析:在输入时将输入到的字符保存在字符变量c中。然后在计算前利用switch判断输入的字符是哪个符号。如果输入错误的字符会有什么样的结果,可以自己试试。

其实还有很多其它的变换形式,可以自己试试。

判断一个数是否为素数

素数其实是小学学习的质数,2、3、5、7、11、13、17、19、23、27、29......即除1和自身外没有其它可以整除的数。C语言可以计算出无穷个素数(初学时注意数据类型的范围)。判断素数常用的方法代码如下。

#include <stdio.h>

int main()
{
    int a,i;
    scanf("%d",&a);  //输入要判断的数
    while(a)
    {
        if(a==1)
            printf("输入的数不是素数!!!\n");       //1不是素数
        for(i=2;i<a;i++)                              //从2开始判断输入的数能否整除
        {
            if(a%i==0)                                //如果能整除,输出提示信息,并跳出for循环
            {
                printf("输入的数不是素数!!!\n");  //提示输入的数不是素数
                break;
            }
        }
        if(i==a)
            printf("输入的数是素数!!!\n");      //提示输入的数是素数
        scanf("%d",&a);  //再次输入要判断的数
    }
    return 0;
}

程序结果

分析:由于需要多次判断,所以将素数判断的代码放到while循环中。当输入的数(a)为0时,结束程序。素数的判断是首先判断该数是否为1,如果是1,则直接得出结果,1不是素数。然后如果不是1的话,就从2开始除起。当有一个数能被整除的话,输出提示信息,然后跳出for循环。最后判断i的值是否等于a,如果等于a表明没有一个比它小的数能够整除。需要注意的是for循环在判断完要执行i++的代码,然后判断i是否小于a,如果等于a,则跳出for循环。其实不需要判断这么多比它小的数,只需判断比根号它小的数就行。代码如下。

#include <stdio.h>
#include <math.h>
int main()
{
    int a,i;
    scanf("%d",&a);  //输入要判断的数
    while(a)
    {
        if(a==1)
            printf("输入的数不是素数!!!\n");       //1不是素数
        for(i=2;i<=sqrt(a);i++)                              //从2开始判断输入的数能否整除
        {
            if(a%i==0)                                //如果能整除,输出提示信息,并跳出for循环
            {
                printf("输入的数不是素数!!!\n");  //提示输入的数不是素数
                break;
            }
        }
        if(i==(int)sqrt(a)+1)
            printf("输入的数是素数!!!\n");      //提示输入的数是素数
        scanf("%d",&a);  //再次输入要判断的数
    }
    return 0;
}

需要注意的是开根号函数在math文件里,需要在程序开头用include语句包含该文件。最后的if判断语句的条件是(int)sqrt(a)+1,这是需要考虑该数能够开根号后是整数的情况,如4。sqrt函数是开根号函数,可以点击右键的find declaration按钮查看sqrt函数的声明。

其声明如下图

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

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

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

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

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

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

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