2016-03-10 3 views
0

, поэтому я хочу рассчитать угол и площадь треугольника, но мне нужно назначить значение ввода и вывода, используя процедуру. Я не могу найти какие-либо примеры об этом и уже пробовал некоторые варианты, но все еще имею проблему с использованием указателя.Назначить значение переменной с помощью процедуры

, что я получил до сих пор

#include <stdio.h> 
#include <math.h> 
#define pi 3.141592654 

// Declaration 
void input(void);//get user input for triangle's sides 
void calculate(int* x,int* y,int* z);//calculating area and angle 

//main program 
int main(void){ 

int x,y,z; 
double a,b,c,height; 

input(x,y,z); 
calculate(x,y,z); 
printf("angle a : %.3f degree\n",a); 
printf("angle b : %.3f degree\n",b); 
printf("angle c : %.3f degree\n",c); 
printf("Area : %.3f cm2\n",height); 


return 0; 
} 

//Definition 
void input(int* x, int* y, int* z) 
{ 
    printf("insert side x :\n"); 
    scanf("%d",*&x); 
    printf("insert side y :\n"); 
    scanf("%d",*&y); 
    printf("insert side z :\n"); 
    scanf("%d",*&z); 
} 
void calculate(int* x,int* y,int* z) 
{ 
    int s 
    s=(*x + *y + *z)*0.5; 
    *Area=sqrt(s*(s-x)*(s-y)*(s-z)); 
    *a=acos(((*x * *x)+(*z * *z)-(*y * *y))/2(*x)(*z)); 
    *b=acos(((*y * *y)+(*z * *z)-(*x * *x))/2(*y)(*z)); 
    *c=acos(((*x * *x)+(*y * *y)-(*z * *z))/2(*x)(*y)); 
} 

я получил ошибку в сканировании пользовательского ввода для х, у, г и присвоить степень и область привести к области, а, б, в

+0

«Вопросы просят нас, чтобы рекомендовать или найти книгу, инструмент, библиотеку программного обеспечения, учебник или другие пределы участка ресурсы являются вне темы для переполнения стека, как они склонны привлекать упрямые ответы и спам ». – MikeCAT

+0

им жаль, но моя основная тема - назначать переменные в основной программе, используя процедуру и функцию. это дополнение, потому что ошибка «ваш пост в основном программа» – Hary

ответ

1
  • Создать необходимые аргументы как в декларации, так и в определении.
  • Я не думаю, что использование указателей там, где они не нужны, хорошо.

Ваш код должен выглядеть так:

#include <stdio.h> 
#include <math.h> 
#define pi 3.141592654 

// Declaration 
void input(int* x,int* y,int* z); 
void calculate(double* a, double* b, double* c, double* Area, int x,int y,int z); 

//main program 
int main(void){ 

    int x,y,z; 
    double a,b,c,height; /* It maybe good to rename height to Area */ 

    input(&x,&y,&z); 
    calculate(&a,&b,&c,&height,x,y,z); 
    printf("angle a : %.3f degree\n",a); 
    printf("angle b : %.3f degree\n",b); 
    printf("angle c : %.3f degree\n",c); 
    printf("Area : %.3f cm2\n",height); 

    return 0; 
} 

//Definition 
void input(int* x, int* y, int* z) 
{ 
    printf("insert side x :\n"); 
    scanf("%d",x); 
    printf("insert side y :\n"); 
    scanf("%d",y); 
    printf("insert side z :\n"); 
    scanf("%d",z); 
} 
void calculate(double* a, double* b, double* c, double* Area, int x,int y,int z) 
{ 
    double s; /* type of s should be double, not int in this case */ 
    s=(x + y + z)*0.5; 
    *Area=sqrt(s*(s-x)*(s-y)*(s-z)); 
    *a=acos(((x * x)+(z * z)-(y * y))/(2 * x * z)); 
    *b=acos(((y * y)+(z * z)-(x * x))/(2 * y * z)); 
    *c=acos(((x * x)+(y * y)-(z * z))/(2 * x * y)); 
} 
+0

спасибо, но, кажется, что расчет степени был неправильным, я пробовал программу с 3 4 5 сторон и добавлял 180/pi * acos .......... ..... (преобразовать радиан в градус), а результат должен быть 36 53 90, но вместо этого показан 90 90 90. я уверен, что ничего плохого в этом уравнении не будет http://www.calculator.net/triangle-calculator.html. Зачем ? – Hary

+0

Вы выполнили деление в 'calculate()' в integer, поэтому значения усекаются. Измените три '2', используемые в' calculate() 'to' 2.0'. – MikeCAT

+0

О, мой, да, это работает. программирование было тяжело: ') – Hary

Смежные вопросы