欢迎光临
我们一直在努力

C语言:自定义函数;质数判断——题解

本文旨在记录 C语言代码初学者的学习历程并表达本人对代码的理解。
本文的内容包括:C语言的自定义函数,质数判断。
涉及到的题目有:
https://www.luogu.com.cn/problem/P5736
https://www.luogu.com.cn/problem/P5723

1.C语言的自定义函数

C语言的自定义函数可以作为功能模块,减少重复代码的编写,增加C语言不自带的功能。定义格式与java类似。

void start(){
}

“void"是返回值类型,void代表无返回值,基本数据类型都可作为返回值。无返回值时无需return,有返回值时需要在函数末尾加return。不严谨地说,加不加return都可以,但追求严谨的情况下必须加return。start是函数名,调用时使用函数名即可。()是函数内参数,相当于外部参数进入函数的入口和内部专属参数。如果函数的参数与外部的变量重名,一般不会影响外部变量。

void apt(int a){
a=100;
}
int main(){
int a=10;
apt(a);
printf("%d",a);
}

这段代码的输出结果是10。要让函数影响到外部变量需要用到指针*,其本质是对内存地址的存储内容的修改,因此可以影响到。
如果需要使用到返回值,可以定义一个变量储存,也可在函数中当参数(start(a))直接使用。

2.质数判断

当一个大于一的数有且仅有1和它自己两个因数时,这个数便是质数。我采用穷举和取余的方式判断一个数的因数个数,当一个数的因数为2时,它便是质数。质数模块如下:

int judge(int i) {
int n = 0;
for (int a = 1; a <= i; a++) {
int b = i % a;
if (b == 0) {
n++;
}
}
return n;
}

判断n是否等于2即可。有了这个模块这两个题目会更简单。

3.质数筛

在这里插入图片描述
我采用三个数组解决,第一个数组记录输入数字,第二个数组用于保存输入数字中的质数,第三个数组用于去掉第二个数组的多于内容,方便后续输出。

#include <stdio.h>

int judge(int i) {
int n = 0;
for (int a = 1; a <= i; a++) {
int b = i % a;
if (b == 0) {
n++;
}
}
return n;
}

int main() {
int a;
scanf("%d", &a);
int arr1[a];
int b = 0;
int arr2[100000];
for (int i = 0; i < a; i++) {
scanf("%d", &arr1[i]);
int n = judge(arr1[i]);
if (n == 2) {
arr2[b] = arr1[i];
b++;
}
}
int arr3[b];
for (int i = 0; i < b; i++) {
arr3[i] = arr2[i];
}
for (int i = 0; i < b; i++) {
printf("%d ", arr3[i]);
}
return 0;
}

4.质数口袋

在这里插入图片描述
基本逻辑与第一题一样,只是多了累加条件判断和穷举范围。

#include <stdio.h>

int judge(int i) {
int n = 0;
for (int a = 1; a <= i; a++) {
int b = i % a;
if (b == 0) {
n++;
}
}
return n;
}
int main() {
int num = 0;
int p = 0;
int L;
scanf("%d", &L);
for (int i = 3; i < 20000; i++) {
int n = judge(i);
if (p <= L) {
if (n == 2) {
p = p + i;
if (p <= L) {
printf("%d\\n", i);
num++;
}
}
}
}
printf("%d", num);
return 0;
}

赞(0)
未经允许不得转载:171主机测评 » C语言:自定义函数;质数判断——题解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址