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

可重复计算

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

#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函数的声明。

其声明如下图

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

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

本文分享自微信公众号 - IT界的小白帽(l1084504793)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-17

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

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券