求助!设计一个c语言程序,要求不能用返回值return,不用〈math.h〉,用for循环。大神们

2025-05-22 22:32:21
推荐回答(3个)
回答1:

我简单的写了一个程序,不知道满足要求否?

#include 
#include 
#include 
//k是预备判断是否为素数的数字
//primes_ptr是已经找到的素数内存区的指针的地址
//n是已经找到的素数的个数
int add_prime(int k, int ** primes_ptr, int &n)
{
int i;
int prime;
int *pp;
//如果k小于已找到的最大的素数,不进行判断
if(n>0 && k < *(*(primes_ptr)+n-1))
{
return 1;
}
//如果k小于2,不进行判断
if(k<=1)
{
return 1;
}
//如果当前找到的素数个数为0,而第一个输入的素数不是2,认定调用出错
if(n==0 && k!=2)
{
return 1;
}
//判断k是否能被当前找到的素数整除
for(i=0;i {
prime=*(*(primes_ptr)+i);
if( k%prime == 0 )
{
//可被整除,终止当前子程序
return 0;
}
}
//更新素数的存储区以及素数的个数
pp=(int *)malloc((n+1)*sizeof(int));
memcpy(pp,*primes_ptr,n*sizeof(int));
free(*primes_ptr);
*(pp+n)=k;
n=n+1;
*primes_ptr=pp;
return 0;
}
//k是预备判断是否为素数的最大的
//primes_ptr是已经找到的素数内存区的指针的地址
//n是已经找到的素数的个数
int find_primes(int k, int ** primes_ptr, int &n)
{
int i;
//k小于2,终止
if(k<2)
{
return 1;
}
//初始化
free(*primes_ptr);
*primes_ptr=NULL;
n=0;
//循环,判断k之内的数是否为素数,并将素数保存到内存区
for(i=2;i<=k;i++)
{
if(add_prime(i,primes_ptr,n)!=0)
{
return 1;
}
}
return 0;
}
//找到1000以内的最大的10个素数
int find_max_10_primes_within_1000(int primes10[])
{
int i;
int * primes;
int n;
primes=NULL;
n=0;
find_primes(1000,&primes,n);
for(i=0;i<10;i++)
{
primes10[i]=*(primes+n-10+i);
}
return 0;
}
int main(int argc, char ** agrv)
{
int primes10[10];
find_max_10_primes_within_1000(primes10);
//显示
printf("%d+%d+%d+%d+%d+%d+%d+%d+%d+%d=%d", \
primes10[0], \
primes10[1], \
primes10[2], \
primes10[3], \
primes10[4], \
primes10[5], \
primes10[6], \
primes10[7], \
primes10[8], \
primes10[9], \
primes10[0]+primes10[1]+primes10[2]+primes10[3]+primes10[4]+primes10[5]+primes10[6]+primes10[7]+primes10[8]+primes10[9]
);
return 0;
}

运行结果

与http://zhidao.baidu.com/question/40237690.html中1000以内的素数表相符合

回答2:

不用return,可以用指针或者地址方式,void function(int InputData,int *return_value)或者void function (int InputData,int &return_value)的方式,
调用的时候采用int a=XX; int output;
void function(a, &output)或者void function(a, output)的方式

回答3:

定义这样:
void function(int *pResult)
for循环获取1000以内的素数,加起来,可以这么写
int sum=0;
int n=0;
for(int i=999; i>4; i -=2)
{
//循环语句

}
这样就避免了偶数的处理
剩下的就是判断i是不是素数,如果是则执行sum+=i;
然后判断n,当n=10时就终止循环,使用break;
这样就行了