使用指针算法打印质数
Print prime numbers using pointer arithmetic
我的函数 writePrime 必须使用指针算法写入数组中的所有素数。除了 main 和 writePrime.
我不能使用任何其他函数
#include <stdio.h>
void writePrime(int arr[], int n) {
int *q = arr, *qq = arr, i, prime;
while (q < arr + n) {
while (qq < arr + n) {
i = 1;
if (*qq % i != 0)
continue;
else
prime = 1;
i++;
qq++;
}
if (prime == 1)
printf("%d ", *q);
q++;
}
}
int main() {
int arr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 92, 93, 94, 95, 96};
int n = sizeof(arr) / sizeof(*arr);
writePrime(arr, n);
return 0;
}
此代码仅打印相同的未更改数组。我该如何修改它才能工作?
变量 n
应声明为类型 size_t
size_t n = sizeof(arr) / sizeof(*arr);
因为它是带有 sizeof
运算符的表达式类型。
所以函数应该这样声明
void writePrime( const int arr[], size_t n );
在函数中使用带有两个指针的两个循环没有任何意义。
每个变量都可以被1整除。所以这个代码片段
i = 1;
if (*qq % i != 0)
continue;
else
prime = 1;
也没有任何意义。
并且您正在使用最初未初始化的变量 prime,必须在处理数组的每个元素之前重置它。
函数可以这样定义
void writePrime( const int arr[], size_t n )
{
for ( const int *p = arr; p != arr + n; ++p )
{
int prime = *p % 2 == 0 ? *p == 2 : *p != 1;
for ( int i = 3; prime && i <= *p / i; i += 2 )
{
if ( *p % i == 0 ) prime = 0;
}
if ( prime ) printf( "%d ", *p );
}
putchar( '\n' );
}
我的函数 writePrime 必须使用指针算法写入数组中的所有素数。除了 main 和 writePrime.
我不能使用任何其他函数#include <stdio.h>
void writePrime(int arr[], int n) {
int *q = arr, *qq = arr, i, prime;
while (q < arr + n) {
while (qq < arr + n) {
i = 1;
if (*qq % i != 0)
continue;
else
prime = 1;
i++;
qq++;
}
if (prime == 1)
printf("%d ", *q);
q++;
}
}
int main() {
int arr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 92, 93, 94, 95, 96};
int n = sizeof(arr) / sizeof(*arr);
writePrime(arr, n);
return 0;
}
此代码仅打印相同的未更改数组。我该如何修改它才能工作?
变量 n
应声明为类型 size_t
size_t n = sizeof(arr) / sizeof(*arr);
因为它是带有 sizeof
运算符的表达式类型。
所以函数应该这样声明
void writePrime( const int arr[], size_t n );
在函数中使用带有两个指针的两个循环没有任何意义。
每个变量都可以被1整除。所以这个代码片段
i = 1;
if (*qq % i != 0)
continue;
else
prime = 1;
也没有任何意义。
并且您正在使用最初未初始化的变量 prime,必须在处理数组的每个元素之前重置它。
函数可以这样定义
void writePrime( const int arr[], size_t n )
{
for ( const int *p = arr; p != arr + n; ++p )
{
int prime = *p % 2 == 0 ? *p == 2 : *p != 1;
for ( int i = 3; prime && i <= *p / i; i += 2 )
{
if ( *p % i == 0 ) prime = 0;
}
if ( prime ) printf( "%d ", *p );
}
putchar( '\n' );
}