我把一个printf来检查该功能是否有效,但是我不知道为什么它不起作用。
这些数字在函数中都是正确的,但是不会执行。
我不确定为什么该功能无法正常工作,我对C的了解不多,所以如果有人可以帮助我,将不胜感激。
该程序应该通过计算教室中周围人的几率来计算您通过考试的几率。
例:
P
NXNXNXNXN
ZNZNXXXXX
XNZXNNNZX
ZNXHXXXXZ
NNNNZNNXN
P - professorZ - prepared studentN - unprepared studentX - an empty seatH - Me
输入:
3 4
2 50
X X X X
Z H N X
Z N X X
预期产量:
Sanse za prolaz su 62.50%
得到的输出:
Sanse za prolaz su -0.00
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
///FUNKCIJA POSTOTAK
float fudaljenost(int visina, int sirina,char array[visina][sirina])
{
float postotak=0;
float udaljenostx=0,udaljenosty=0,udaljenost=0;
int Hx,Hy;
int Zx,Zy;
int Nx,Ny;
for(int i=0;i<visina+1;i++)
{
for(int j=0;j<sirina;j++)
{
if(array[i][j]=='H')
{
Hx=i;
Hy=j;
}
}
}
for(int i=0;i<visina+1;i++)
{
for(int j=0;j<sirina;j++)
{
if(array[i][j]=='Z')
{
Zx=i;
Zy=j;
udaljenostx=abs(Hx-Zx);///A
udaljenosty=abs(Hy-Zy);///B
printf("Z A=%f B=%f\n",udaljenostx,udaljenosty);
udaljenost=sqrt((udaljenostx*udaljenostx)+(udaljenosty*udaljenosty));///UDALJENOST
postotak+=90/(udaljenost*udaljenost);///POSTOTAK
}
}
}
for(int i=0;i<visina+1;i++)
{
for(int j=0;j<sirina;j++)
{
if(array[i][j]=='N')
{
Nx=i;
Ny=j;
udaljenostx=abs(Hx-Nx);///A
udaljenosty=abs(Hy-Ny);///B
printf("N A=%f B=%f\n",udaljenostx,udaljenosty);
udaljenost=sqrt((udaljenostx*udaljenostx)+(udaljenosty*udaljenosty));///UDALJENOST
postotak-=30/(udaljenost*udaljenost);///POSTOTAK
}
}
}
return postotak;
}
///FUNKCIJA PROFESOR
float fprofesor(float strogost,int visina, int sirina,char array[visina][sirina])
{
float postotak=0;
int Hx,Hy;
int Px,Py;
float udaljenostx=0,udaljenosty=0,udaljenost;
for(int i=0;i<visina+1;i++)
{
for(int j=0;j<sirina;j++)
{
if(array[i][j]=='H')
{
Hx=i;
Hy=j;
}
}
}
for(int i=0;i<visina+1;i++)
{
for(int j=0;j<sirina;j++)
{
if(array[i][j]=='P')
{
Px=i;
Py=j;
udaljenostx=abs(Hx-Px);///A
udaljenosty=abs(Hy-Py);///B
udaljenost=sqrt((udaljenostx*udaljenostx)+(udaljenosty*udaljenosty));///UDALJENOST
postotak=strogost/(udaljenost*udaljenost);///POSTOTAK
}
}
}
return postotak;
}
int main()
{
int i=0,j=0;
int visina,sirina;
int prof;
float strogost;
float posto1,posto2,posto;
char Ucionica[50][50]={0};
float postotak=0;
float udaljenostx=0,udaljenosty=0,udaljenost=0;
int Hx,Hy;
int Zx,Zy;
int Nx,Ny;
scanf(" %d%d",&visina,&sirina);
scanf(" %d%f",&prof,&strogost);
///UPIS MATRICE
for(i=1;i<visina+1;i++)
{
for(j=0;j<sirina;j++)
{
scanf(" %c",&Ucionica[i][j]);
}
}
Ucionica[0][prof-1]='P';
posto1 = fudaljenost(visina,sirina,Ucionica);
posto2 = fprofesor(strogost,visina,sirina,Ucionica);
posto = posto1-posto2;
printf("Sanse za prolaz su %.2f",posto);
return 0;
}
Stackoverflow不允许我在不添加更多单词的情况下发布此内容,因此即时消息使用文本的这一部分添加了更多单词,抱歉,像这样在系统中四处走动的stackoverflow,但我有点用光了时间。
最佳答案
当前代码传递给主要变量char Ucionica[50][50]={0}
的强制转换为需要float fprofesor(float strogost,int visina, int sirina,char array[visina][sirina])
原型的函数。
从上下文看,[50],[50 []表示可能的最大输入大小,但是该程序将仅使用前几行/列(在示例中为3、4)。无论将使用多少数据,被调用函数中的定义都应与数据大小匹配。
float fprofesor(float strogost,int visina, int sirina,char array[50][50]) { ... }
float fudaljenost(int visina, int sirina,char array[50][50]) { ... }
旁注,
gcc -Wall
在未使用的变量上标记了很多警告,但在传递与次要数组大小不匹配的数组时没有警告另外,最好“ #define”最大大小,而不是对50次重复进行硬编码。
关于c - 我调用他们后,我的功能不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59128485/