c语言:有哪位大侠可以帮我解释一下下面这道题目???
发布网友
发布时间:2023-06-28 16:50
我来回答
共4个回答
热心网友
时间:2024-09-03 08:32
Flag是 被调函数prime里面定义的一个局部变量flag变量 下面的return(flag)这行里面的flag和前面定义的flag是一样的、、、flag也可以自己随意修改、、、
下面分析下这个程序具体的步骤
#include <stdio.h> //第一行、调取头文件stdio.h
int main() //表示一下内容为主函数
{int prime(int); //这个用途是前置函数声明、因为被调哈数prime是在主函数后面的所以需要函数声明
printf("input an integer:"); //这个作为人机交互、在执行之后输出input an integer具体自己翻译
scanf("%d",&n); //这里作为n变量的取值、功能是手动键入n变量的大小
if (prime(n)) //if是如果、、()里面的prime(n)是掉用被调函数prime因为前面有函数声明所以可以调用prime函数、n为实参、将n的值发送给被调函数的形参进行运算、如果返回值为真(1)则运行fi里面的东西,如果为假(0)则运行else里面的东西。运行顺序从这里直接跳到后面的int prime(int n)这行往下运算
printf("%d is a prime.\n",n);//这里是将n以10进制输出 %d是输出控制符表示10禁止 is a prime为非输出控制符、原样输出、
else //否则
printf("%d is not a prime.\n",n); //吧n以10进制输出、后面同上上行
return 0;//return用来终止函数、0表示没有返回值
}
int prime(int n) // 这里为定义被调函数prime int表示被调函数返回值类型为整形prime为函数名称int n表示定义一个形参n
{int flag=1,i;//这里有定义了一个flag的整形变量和一个i变量
for (i=2;i<n/2 && flag==1;i++)//i=2表示i从2开始进行循环、因为1不为素数i<b/2 && flag==1判断&&(并且)两边的表达式是否成立成立则往下执行、i++表示i变量的值每次循环之后+1
if (n%i==0)//如果n对i取余等于0则返回值为0也就是假后面的自己理解吧都很简单、
flag=0;
return(flag);//对主调函数返回flag的值
}
这个程序很多地方编译不太好、
例如被调函数int prime(int n)这行、返回值的类型真假也有专门的真假的数据类型、bool prime(int n) 前面的int main()主调函数一般没有返回值的话括号里面须注明void变成int main(void)
热心网友
时间:2024-09-03 08:32
指出几点错误的地方: 1.j,k要进行初始化,不然会引起错误的 2.*p1=a这是一维数组和指针的赋值方法,二维数组这样不正确 3.g=*(p1+e+i); *(p1+e+i)=*(p1+f+i); *(p1+f+i)=g; 这样行不通 4.printf("\n");c 后边的这个c多余修改后的程序(可以正确运行): #include "stdio.h" #define N 4 void main() { int a[N*N],i,j=0,k=0,*p1=a,b=0,c=0,e,f,g; for(i=0;i<N*N;i++) scanf("%d",p1+i); c=*p1; b=*p1; for(i=1;i<N*N;i++) { if(c<*(p1+i)) { c=*(p1+i); j=i; } } for(i=1;i<N*N;i++) { if(b>*(p1+i)) { b=*(p1+i); k=i; } } e=j/N; f=k/N; if(e!=f) { for(i=0;i<N;i++) { g=*(p1+e*N+i); *(p1+e*N+i)=*(p1+f*N+i); *(p1+f*N+i)=g; } } for(i=0;i<N*N;i++) { printf("%d ",a[i]); if((i+1)%N==0)printf("\n"); } }lanren910822G2!
热心网友
时间:2024-09-03 08:33
判断是不是素数,flag是返回值,0是假 1是真
热心网友
时间:2024-09-03 08:33
这个被调函数是用来判断是否为素数的,i从2到n/2,如果标志位flag为1(假)i就自加。判断n是否能够被i整除,如果能,置flag为0,返回,否则循环。最后返回flag,flag=0,则是素数,反之,不是素数。