C加加问题,下面要求用void和指针,但是在下面的主函数调用上应该怎么弄?急急

题目内容:

编写函数void isprime(int n,int *f),判断n是否为素数,如是通过形参f返回1,否则通过f返回0。在主函数中输入一个三位整数,如果该数是素数,则将它的个位数字和百位数字互换。如果不是素数,将它的个位和十位数字互换,最后输出互换以后的数。
题目内容:
#include<iostream>
using namespace std;
void isprime(int n,int *f)
{int i;
for(i=2;i<n;i++)
if(n%i==0)
* f=0;
else
*f= 1;
}
int main()
{ int x ,a,y;
cin>>x;

if(isprime(x,&a)==1)
cout<<(x%10)*100+(x/10)*10+(x/100)<<endl;
if(isprime(x,&a)==0)
cout<<(x/100)*100+(x%10)*10+(x/10%10)<<endl;

楼主问题不少!

1、isprime 函数 有问题

2、调用 这个函数很简单,不过,他没有返回值,void

3、取十位 数字 有错误

具体见程序截图

温馨提示:内容为网友见解,仅供参考
第1个回答  2020-04-22
isprime单独写一行。下行if语句判断保存在a中的返回值实现分支
第2个回答  2020-04-22
#include<iostream>
using namespace std;
void isprime(int n,int *f) { int i; for(i=2,*f=1;i<=n/2;i++) if ( n%i==0 ) { *f=0;break; } }
int main() { int x ,a,y;
cin>>x; isprime(x,&a);
if ( a==1 ) cout<<(x%10)*100+(x/10)*10+(x/100)<<endl;
else cout<<(x/100)*100+(x%10)*10+(x/10%10)<<endl;
return 0; }追问

为什么if中直接用a呢

追答

因为调用函数的结果已经被函数保存在变量a中了,因此在调用完函数后,a就已经存放了结果,拿来用即可。

追问

还有就是想问一下上面的函数定义好像不对,为什么要先写出*f=1呢

谢谢啦,麻烦解答一下

追答

预先假定返回值是1,也就是没有满足下面循环中的if条件时默认是素数,只要有一个因之能整除之,再赋值为0(不算素数)并直接返回,否则经过所有判断都不满足if时,这个1都不会变,也就是最终判定是素数了,也可以写成这样好理解些:
int i,b;
for(i=2,b=1;i<=n/2;i++) if ( n%i==0 ) { b=0;break; }
if ( b==1 ) *f=1; else *f=0;

追问

好的,谢谢

追答

ok

本回答被提问者采纳

有编程高手吗? C加加
提很简单,只是需要建立数据库,这里说起来不太方便。如果是一些程序段你到是可以请教一下。一个程序是包括很多程序段的。简单的回答不了。

C语言函数调用返回问题
一、return命令的含义 return命令的意思是返回调用者百。如果return后面有值(如你函数中的10),则将该值返回给调用者。但是,在调用者函数(度如:main)中,如果想得到f()函数的返回值,需要有个变量来接收这个值,否则,这个数值将被程序忽略。二、变量的定义、赋值与引用问 int main(void){ int...

程序的终止代码有哪些?
\/*总结一下,结束自己的方法:1、在main里return2、调用void exit(int status)函数3、安装信号,来结束自己\/\/这个新人还是不用的好,其实也不能,只要你安装一个信号,然后抛出信号就可以了。4、调用系统函数system()来kill自己的进程。*\/ \/*下面是我写的类子,main函数里最后是"Not end",如果没...

C加加中是否要编写对基类和成员对象的析构函数的调用?
不需要编写对基类和成员对象的析构函数的调用 基类的析构函数会自动被调用。成员对象的析构函数在对象生存期结束时会自动调用。看看下面程序的输出结果:derived member base 源码如下 include <iostream> using namespace std;class member { public: ~member() { cout << "member" <<endl; } };c...

指针作为函数参数时,采用的是什么传送方式
C\/C++都是传值的,所以传指针时传的是指针值,从而你可以对指针指向的内容进行修改,你理解这点,C就会一半了。 本回答由网友推荐 举报| 答案纠错 | 评论(2) 6 2 lougx 采纳率:52% 来自团队:C加加爱好者 擅长: C\/C++ VC++ 股票 基金 创业投资 为...

下面这个程序哪里出问题了呢?该怎样修改? 不许用数组和指针_百度...
首先,iostream是C++的不要加.h 而且要在主函数下面加一句:using namespace std;原因很简单,iostream是在std命名空间中定义的 (以上只是语法错误)

c++是哪个公司出的
在使用兼容C++ STL的编译器时,应当是: #include <iostream> using namespace std; int main() { cout<<"Hello,world!"<<endl; return 0; } 根据ISO C++的规定,main函数的形式只能是 int main(void) { ... } 以及int main(int argc,char * argv[]) { ... } 尽管如此,但在Visual C++ 2003以前...

C语言,以下如何理解,谢谢!
C语言的模块化程序结构用函数来实现,即将复杂的C程序分为若干模块,每个模块都编写成一个合法的C函数,然后用主函数调用函数及函数调用函数实现一大C程序:C程序=主函(main)+若干个函数。 在程序设计中,常将一些常用的功能模块写成函数,也可以将大程序段分割成若干函数,前者目的在于减少重复编写程序段的工作量,后者...

一道C语言数组的题目。求指点
1.首先一点是主函数写int main(),写void main()的话是错的,至于为什么就不要深究了吧,以后会懂的,现在给你说你也搞不懂,这就是规律,没办法。2.你这个地方肯定就是想从键盘输入一个数,而这个数也就是数组的长度。但是这样是不可以的,静态数组定义的时候必须指出它的大小,不然肯定会出错,你这个地方使用了...

大一上学期没怎么学C加加期末考试还考的不错,在专业总排名第二,可是这...
其实学好跟考好完全是两码事,对于考试来说,突击还是蛮重要且有效的,不用担心,希望能够帮到您

相似回答