C语言循环练习,建议练练手

写在前面:这里是小王成长日志,一名在校大学生,想在学习之余将自己的学习笔记分享出来,记录自己的成长轨迹,帮助可能需要的人。欢迎关注与留言。

1. 分析下列程序,若输入:123456,输出结果是多少?请上机验证并回答如下问题。

#include <stdio.h>
int main()
{
    int  data;
    printf("请输入一个数:");
    scanf("%ld",&data);
    while(data)
    {
        printf("%d,",data%10);
        data=data/10;
    }
    printf("\n");
    return 0;

}

回答:

1).上面的程序实现的功能是什么?
答:倒序输出输入的数字的每一位,例如输入123456则输出6,5,4,3,2,1,

2).如果要求程序不输出最后一个逗号,应该如何修改?
答:将while循环体修改如下:

   while (data)

   {

       printf("%d", data % 10);

       data = data / 10;

       if (data > 0)

           printf(",");

   }
  1. 下列程序的功能为:计算1020个西瓜几天后能卖完(第一天卖了一半多两个,以后每天卖剩下的一半多两个),请在横线处填空,使程序实现其功能并上机调试。
#include <stdio.h>

int main()
{
    int day,x1,x2;
    day=0;
    x1=1020;
    while(x1>0)
    {
        x2= x1/2-2  ;
        x1=x2;
        day++;
    }

    printf("day=%d\n",day);
    return 0;

}

3.程序填空,以下程序的功能是计算并输出s=1+1/2+1/3+…+1/10的结果。请将程序填充完整,并上机调试运行验证,然后回答如下问题。

提示:输出结果是:2.928968,填写时要注意类型。

#include <stdio.h>
#include <math.h>

int main()
{
    int i;
    float s=0;
    for(i=1;i<=10;i++)
        s=s+1/(float)i;

    printf("%f\n",s);
    return 0;
}

回答:

1).若将计算公式改为s=1-1/2+1/3-1/4+1/5…-1/10,程序应该如何修改。(结果为:0.645635,可以增加新的标志变量(如t)来表示每一项的正负号,初值设置为1)
答:将for循环体修改如下

 for (i = 1; i <= 10; i++)

 {

     int t = 1;

     if ((i + 2) % 2 == 0)//将i放大以规避1%2==0

         t = -1;

     else

         t = 1;

     s = s + t / (float)i;

 }

2).若将计算公式改为s=1-1/2+1/3-1/4+1/5…-1/10,程序应该如何填空。(注意不能增加新行和增加新的变量,结果为:0.645635)
答:将for循环体修改如下

for (i = 1; i <= 10; i++)
        s = s + 1 / (float)i * pow(-1, i + 1);//乘以 (-1)^(i+1)

  1. 编程实现:输入一行字符,以回车键作为结束标志,分别统计出大写字母、小写字母、数字字符、空格和其它字符的个数。
    答:
#include <stdio.h>

int main()
{
    char a;
    int small = 0, big = 0, num = 0, space = 0, other = 0;
    while ((a = getchar()) != '\n')
    {
        if (a >= 'a' && a <= 'z')
            small++;
        else if (a >= 'A' && a <= 'Z')
            big++;
        else if (a >= '0' && a <= '9')
            num++;
        else if (a == ' ')
            space++;
        else
            other++;
    }
        printf("小写字母个数是:\t%d\n\
大写字母个数是:\t%d\n\
数字个数是:\t%d\n\
空格个数是:\t%d\n\
其他字符个数是:\t%d",small, big, num, space, other);

    return 0;
}

在这里插入图片描述

扫描二维码关注公众号,回复: 11353544 查看本文章
  1. 编程实现:求序列2/1+3/2+5/3+8/5+…前20项之和。

答:

#include <stdio.h>
int main()
{
    double x = 1, y = 2, sum = 0;
    for (int i = 0; i < 20; i++, y = x + y, x = y - x)
        sum += y / x;
    printf("%lf", sum);
    return 0;

}


在这里插入图片描述


都看到这里了,各位哥哥姐姐叔叔阿姨给小王点个赞 关个注 留个言吧,和小王一起成长吧,你们的关注是对我最大的支持。
有事没事进来看看吧 : 小王的博客目录索引
C语言专栏看这 : C语言学习专栏


如果以上内容有任何不准确或遗漏之处,或者你有更好的意见,就在下面留个言让我知道吧-我会尽我所能来回答。

猜你喜欢

转载自blog.csdn.net/weixin_45761327/article/details/106585999