C语言程序设计知识点与错误分析

这次说的主要是循环结构,加上清明补课刚好两节课都在学循环结构,不过都是围绕while的,还没学到for循环,while 和 do while用法。

首先while后加的条件,一旦不满足就停止循环,但是do while 是先执行再判断,所以在一些问题下用do while 会好一点,但是也可以利用while 并在最后加一行来单独输出(这样的话能输出正确答案,但在结构上会略输do while。

平均数问题注意下用float或者double来定义,可能会出现小数。

第一个题:

7-3 统计数字字符和空格 (15 分)

本题要求编写程序,输入一行字符,统计其中数字字符、空格和其他字符的个数。建议使用switch语句编写。

输入格式:

输入在一行中给出若干字符,最后一个回车表示输入结束,不算在内。

输出格式:

在一行内按照

blank = 空格个数, digit = 数字字符个数, other = 其他字符个数

的格式输出。请注意,等号的左右各有一个空格,逗号后有一个空格。

输入样例:

在这里给出一组输入。例如:

Reold 12 or 45T

输出样例:

在这里给出相应的输出。例如:

blank = 3, digit = 4, other = 8
#include <stdio.h>

int main()
{
    char a;
    int blank,digit,other;
    blank=0;
    digit=0;
    other=0;
    while ((a=getchar())!='\n')                    /*getchar*/
    {
        if (a==' '){                      /*==*/
            blank++;
        }
        else if (a>='0'&&a<='9'){          /*格式样例*/
            digit++;
        }
        else{
            other++;
        }
    }
    printf("blank = %d, digit = %d, other = %d",blank,digit,other);
    return 0;
}

这里有刚学的getchar,使用getchar在一些题目上优于scanf不用定义,且可以输入字符。

第二个题:

7-4 求给定精度的简单交错序列部分和 (15 分)

本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps。

输入格式:

输入在一行中给出一个正实数eps。

输出格式:

在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。

输入样例1:

4E-2

输出样例1:

sum = 0.854457

输入样例2:

0.02

输出样例2:

sum = 0.826310

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

int main()
{
    int i=1,flag=1;
    double eps,sum=0.0,term=1.0;
    scanf("%lf",&eps);
    while (fabs(term)>eps)   /*一开始写成sum*/
    {
        sum=sum+term;
        i=i+3;
        flag=-flag;
        term=flag*1.0/i;
    }
     sum=sum+term; 
    printf("sum = %.6lf",sum);
    return 0;
}

精度的问题

第三个题:

7-5 寻找250 (10 分)

对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字。

输入格式:

输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”。

输出格式:

在一行中输出第一次出现的“250”是对方扔过来的第几个数字(计数从1开始)。题目保证输出的数字在整型范围内。

输入样例:

888 666 123 -233 250 13 250 -222

输出样例:

5
#include <stdio.h>

int main()
{
    int zhengshu,num=1;
    scanf("%d",&zhengshu);
    
    while (zhengshu!=250)
    {
    num++;
    scanf("%d",&zhengshu);    
    }
    printf("%d",num);
    return 0;
}

一开始用\n来判断循环结束,所以错了,因为定义的zhengshu是整形

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定谔的猫695

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值