#include <stdio.h> #include <math.h> int m, n = 0; int main() { int i; void a(); for (i = 2; i <= m; i++) if (n % i == 0) break; if (i > m) printf("%d是", n); else printf("%d不是", n); printf("%d", i); return 0; } void a() { printf("shuru"); scanf("%d", & n); m = sqrt(n); }优化一下
时间: 2023-12-10 10:06:14 浏览: 55
当然,我可以帮助你优化代码。下面是经过优化的代码:
```c
#include <stdio.h>
#include <math.h>
int isPrime(int num) {
if (num < 2) {
return 0;
}
int sqrtNum = sqrt(num);
for (int i = 2; i <= sqrtNum; i++) {
if (num % i == 0) {
return 0;
}
}
return 1;
}
int main() {
int n;
printf("请输入一个整数:");
scanf("%d", &n);
if (isPrime(n)) {
printf("%d是素数\n", n);
} else {
printf("%d不是素数\n", n);
}
return 0;
}
```
在这个优化后的代码中,我将原先的全局变量m和n转为了局部变量,因为它们只在main函数中使用。此外,我还将计算是否为素数的逻辑封装成了一个名为isPrime的函数。这个函数会返回1(真)或者0(假),以表示给定的数是否为素数。最后,使用该函数进行判断,并输出结果。
希望这个优化后的代码能满足你的要求。如果有任何疑问,请随时提出。
相关问题
#include<stdio.h>#include<stdlib.h>#include<math.h>void main(){ int i; int n; for(i=100;i<=200;i++) { if(i%3==0&&i%7==0) { if(n%8==0)printf("\n"); printf("%6d",i); n++; } } printf("\nNumbers are:%d\n",n);}修改
修改后的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
int i, n = 0;
for (i = 100; i <= 200; i++) {
if (i % 3 == 0 && i % 7 == 0) {
if (n % 8 == 0) {
printf("\n");
}
printf("%6d", i);
n++;
}
}
printf("\nNumbers are: %d\n", n);
return 0;
}
```
修改的内容包括:
1. `void main()` 改为 `int main()`,因为 `main` 函数应该有一个返回值。
2. 在 printf 函数中添加空格,使输出更加美观。
3. 在程序结尾添加 `return 0;`,表示程序正常结束。
以下程序求100~200之内的素数。请填空。 #include<math.h> #include<stdio.h> void sushu(int m); void main() { int m; for (m=101;m<=200;m++) —— } void sushu(int m) {int k,i; k=sqrt(m); for(i=2;i<=k;i++) if(i>=k+1) printf("%4d",m); }
以下是填空的代码:
```c
#include <math.h>
#include <stdio.h>
void sushu(int m);
void main() {
int m;
for (m = 101; m <= 200; m++) {
sushu(m);
}
}
void sushu(int m) {
int k, i;
k = sqrt(m);
for (i = 2; i <= k; i++) {
if (m % i == 0) {
break;
}
}
if (i >= k + 1) {
printf("%4d", m);
}
}
```
需要注意的是:
1. 函数`sushu`中的判断条件需要改为判断`m`是否能被`i`整除;
2. 最后的输出语句需要放在判断语句中,只有当`m`是素数时才输出。