C语言网刷题日记 Day4

题目编号 1054: 二级C语言-计算素数和

题目描述

输入两个正整数m和n(m<n),求m到n之间(包括m和n)所有素数的和,要求定义并调用函数isprime(x)来判断x是否为素数(素数是除1以外只能被自身整除的自然数)。

样例输入

2 3

样例输出

5

我的解法

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

_Bool isprime(int x) {
	int i;
	float a;
	a = sqrt(x);
	if (x <= 1)
		return false;
	for (i = 2; i <= a; i++) {
		if (x % i == 0)
			return false;
	}
	return true;
}

int main() {
	int i, m, n, sum = 0;
	scanf("%d%d", &m, &n);
	for (i = m; i <= n; i++) {
		if (isprime(i))
			sum += i;
	}
	printf("%d", sum);
	return 0;
}

本题反思

细节之一:这是一道简单题,但是细节十分多。if (x <= 1)这个条件很重要,是我一开始没有考虑到的,1既不是素数也不是合数。
细节之二:此外就是本题要求用函数写,以bool类型作返回值的正确写法_Bool,包含在头文件stdbool.h中。详情参见布尔类型详解
细节之三:sqrt只支持double和float类型,详情可以参考下面这篇文章。sqrt函数详解

题目编号 1063: 二级C语言-统计字符

题目描述

输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

样例输入

a 1,

样例输出

1
1
1
1

优质解法

//方法一
#include <stdio.h>
#include <ctype.h>
int main()
{
    int letter = 0,number = 0,blank = 0,others = 0,c;        //分别为字母、数字、空格、其他
    while((c = getchar()) != '\n'){
        if(isalpha(c))              //判断是否为字母
            letter++;
        else if(isdigit(c))         //判断是都为数字
            number++;
        else if(c == ' ')           //判断是否为空格
            blank++;
        else                        //其他
            others++;
    }
    printf("%d\n%d\n%d\n%d\n",letter,blank,number,others);
    return 0;
}
//方法二
#include<stdio.h>
int main()
{
	int a, b, c, d;//相应的四个参数;
	a = b = c = d = 0;//并且赋予初始值;
	char ch;
	while ((ch=getchar()) != '\n')//循环输入直到遇见回车键;
	{
	if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z')//判断是否为字母,大小写字母都算;
		a++;
	else if (ch == ' ')//判断是否为空格;
		b++;
	else if (ch >= '0' && ch <= '9')//判断是否为数字;
		c++;
	else//不是上面三种就都为其他字符;
		d++;
}
	printf("%d\n%d\n%d\n%d\n",a,b,c,d);//最后输出;
	return 0;
}

本题反思

while ((ch=getchar()) != ‘\n’)这个录入的方法要学会,输入完一定要回车一下,不然不会停止。头文件:<ctype.h>函数:
(1)int isalpha(int ch);
判断ch是否为字母,如果是返回非0,反之返回0;
(2)int isdigit(int ch);
判断ch是否为数字,如果是返回非0,反之返回0;
(3)int islower(int ch);
判断ch是否为小写字母,如果是返回非0,反之返回0;
(4)int isupper(int ch);
判断ch是否为大写字母,如果是返回非0,反之返回0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值