题目编号 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;