Hochzahlen In C-Programmierung - Gutefrage
Wie lässt sich die dritte Potenz einer Zahl in der Programmiersprache C ausgeben? (jedoch ohne Verwendung der mathematischen Bibliothek)
Mein Source-Code(fehlerhaft):
**#include<stdio.h>
main() { double x
printf("Geben Sie bitte eine Zahl ein:"); scanf("%lf", &x);
y = x³;
printf("Dreierpotenz davon = %lf", y); } **
...kompletten Beitrag anzeigen Antworten4 Antworten
wolfgang1956 08.03.2012, 08:12Die plumpe Lösung wäre x = n * n * n.
Dann gibt es die ^-Variante: x = n^3.
Richtig elegant wird es, wenn man die „Basis“ und den „Exponenten“ in einer Variablen ablegt und dann folgendes schreibt:
result = base^exponent.
Dann könnte man noch Kernighan/Ritchie um Rat fragen oder hier nachlesen: http://openbook.galileocomputing.de/c_von_a_bis_z/
Fitje 19.09.2013, 18:17Normal macht man das mit
pow(x,y);
Beispiel:
'#include <stdio.h>
'#include <math.h>
void main(void)
{
double x , y, ergebnis;
printf("\nx hoch y :");
printf("\nBitte x eingeben: ");
scanf("%lf", &x);
printf("\nBitte y eingeben:");
scanf("%lf", &y);
ergebnis =pow(x,y);
printf("\nergebnis: %lf", ergebnis);
printf("\nProgrammende");
}
Der Grund: Weil man pow( x hoch y) auch zum Wurzelziehen verwenden kann:
x hoch (1/y) ist die y-Wurzel aus x
2 hoch 0.5 ist die zweite Wurzel aus 2.
morphesus 07.03.2012, 22:58Selbst die Funktion schreiben ;) Z.B.
int pot(int base, int potval) { for (int i = 0; i < base; i++) // C99 Standard!! { base *= base; } return base; }So, hoffe ich hab jetzt nichts durcheinander gebracht^^
Grüße - Morph 8)
8 Kommentare 8 Kommentar schreiben… cjohnson 27.03.2014, 09:25C++ Programmierer hier, geht nicht
base=base^potvalauch?
morphesus 07.03.2012, 23:02Korrigiere: Da war n Fehler drin! Asche auf mein Haupt ^^ Hier nochmal die korrekte Funktion:
int potenz(int base, int potval) { int i; for (i = 0; i < potval; i++) // C99 Standard!! { base *= base; } return base; }Varianten wie
int i = y³;funktionieren leider nicht. Dafür ist es ja auch C ;) In anderen Sprachen könnte es vielleicht funktionieren ...
Grüße - Morph 8)
etmetm Beitragsersteller 07.03.2012, 23:05 @morphesuswas bedeutet dieses i++? und base *=base bedeutet ja die basis wird mit der basis multipliziert. stimmts? wenn du auch die variablen erklären könnten würdest wäre ich dankbar...
cat64k 07.03.2012, 23:13 @morphesusfunktioniert aber nur, wenn die potenz >= 1 ist
morphesus 07.03.2012, 23:15 @etmetmNatürlich, kein Thema :) Ich gehe das mal Stück für Stück durch.
Also als erstes ist da natürlich die Funktionsdeklaration. Diese soll einen int-Wert zurückgeben, eben unser gewünschtes Ergebnis. Du übergibst der Funktion zwei Werte: Die Basis und die Potenz (bei 10³ ist 10 die Basis und ³ die Potenz).
Das "int i" hatte ich jetzt nachgerüstet, damit auch nicht C99-konforme Compiler das Programm schlucken ^^ Es dient für die for-Schleife. In der Schleife wird dann die Potenz errechnet. 10³ entspricht ja nicht mehr als 10 * 10 * 10. Ist also an sich sehr leicht zu errechnen.
Das base *= base multipliziert den aktuellen Wert von Base ... Upps, da ist n Fehler ^^ Hier eine nochmals korrigierte Version (Sry, ist wohl schon ein wenig zu spät heute ...)
int potenz(int base, int potval) { int i, tmp_base = base; for (i = 0; i < potval; i++) // C99 Standard!! { base *= tmp_base; } return base; }So. base *= tmp_base macht jetzt also nichts anderes als base mit dem ursprünglichen Wert von base zu multiplizieren.
Wenn du also z.B. das hier schreibst:
int ergebnis = potenz( 10, 3 );Dann wird an sich diese Rechnung durchgeführt: 10 * 10 * 10
Soweit dazu, ich hoffe ich konnte es einigermaßen verständlich erläutern ... :) Und sry wegen der hohen Fehlerquote, ist sonst nicht der Fall -.-
Grüße - Morph 8)
morphesus 07.03.2012, 23:21 @cat64kHabe auch gerade noch einen Fehler gefunden ... Ich bin urlaubsreif -.-
int potenz(int base, int potval) { int i, tmp_base = base; for (i = 1; i < potval; i++) // C99 Standard!! { base *= tmp_base; } return base; }DAS MUSS jetzt aber funktionieren x_x
Grüße - Morph 8)
lethys 09.03.2012, 02:37 @morphesusin perl schreibt man "n**p"
nur so zur information :)
morphesus 09.03.2012, 16:50 @lethysLesekompetenz, mein Freund. Es geht hier um C, nicht um Perl ...
Grüße - Morph 8)
Weitere Kommentare zur Antwort anzeigen Fitje 20.07.2013, 18:04Da muss du zuerst die include <math.h> einbinden. Mit einer extra Funktion dafür: pow(); Mit pow(a,b) wird zum Beispiel die b-te Potenz zu a berechnet. Ein Tipp: a hoch (1/3) zieht die dritte Wurzel aus a. pow(x, (1/ 7)); liefert die siebte Wurzel aus x pow(x,(1/n)); liefert die n-te Wurzel aus x. Beispiel: wurzel = pow( a, (1/b); Dabei ist a der Radikand und b der Wurzelexponent. Die Funktion sqrt() dagegen liefert nur die Quadratwurzel einer Zahl.
Weitere Antworten zeigenÄhnliche Beiträge
Ist dieser Taschenrechnercode richtig (in C)?
Er ist einfach gehalten, ich habe es das erste Mal versucht. Natürlich mit ein bisschen Hilfe. Ich fange gerade erst an:
#include <stdio.h> int main() { double zahl1; double zahl2; char operator; printf(“zahlenwert1: “); scanf(“%lf“, zahl1); printf(“\nzahlenwert2: “); scanf(“%lf“, zahl2); printf(“Operator: “); scanf(“%c“, operator); printf(“\n\n“); if (operator == ‘+‘) { printf(“%lf + %lf =%lf“, zahl1, zahl2, zahl1 + zahl2) } return 0: }Ich musste alles am Handy neu schreiben, da ich es nicht kopieren kann. Deshalb könnten ein paar Klammern, vor allem die einzelnen unten, nicht in richtiger Position sein.
...zum BeitragGlobale Variablen durch Zeiger ersetzen?
Hallo,
bei der folgenden Programmieraufgabe würde ich gerne die globalen variablen durch Zeiger ersetzten, da man mit den globalen Variablen ja etwas vorsichtig sein sollte.
include include includedouble x0; //globale variablen int ok, anzit;
double fct (int fn, double x){ // Funktion fct mit 2 Parametern
double y; switch (fn) { // switch case funktion zum Auswählen der Funktion case 1: y = sin(x); break; case 2: y = exp (x) - 5.0 * x + 1.0; break; case 3: y = x * x - 2.0; break; case 4: y = (1.0 / 7.0) + (1.0/x); break; case 5: y = 2.0 * x - 2.0; break; default: y = 0.0; break; } return y;}
void nullstelle (int fn, double a, double b, double g) { // Prozedur Nullstelle
double fa, fb, fm, m; // Verarbeitung der Parameter und Variablen fa = fct (fn, a); fb = fct (fn, b); while ((b-a) > g) { m = (a+b) / 2.0; fm = fct (fn, m); if ((fa*fm) < 0) { b = m; fb = fm; } else { a = m; fa = fm; } anzit++; } x0 = m; ok = 1;}
int main(){ // Hauptprogramm // Fordert den Benutzer auf Befehle einzugeben int fn; double a, b, g;
printf ("1) f(x) = sin (x) \n"); printf ("2) f(x) = e^x - 5x + 1 \n"); printf ("3) f(x) = x^2 - 2 \n"); printf ("4) f(x) = (1/7) + (1/x) \n"); printf ("5) f(x) = 2x - 2 \n"); while (1) { printf ("\nWaehlen Sie eine Funktion aus: "); scanf ("%d", &fn); printf ("Linker Grenzwert: "); scanf ("%lf", &a); printf ("Rechter Grenzwert: "); scanf ("%lf", &b); while (fct (fn, a) * fct (fn, b) > 0.0){ printf ("\nf(a) und f(b) haben gleiches Vorzeichen, bitte andere Grenzen eingeben!"); printf ("\nLinker Grenzwert: "); scanf ("%lf", &a); printf ("\nRechter Grenzwert: "); scanf ("%lf", &b); } printf ("Genauigkeit: "); scanf ("%lf", &g); nullstelle (fn, a, b, g); if (ok == 1) printf ("x0 \t = %.15f\n", x0); printf("f(x0) \t = %.15f\n", fct(fn, x0)); printf("%d Iteration\n", anzit); } return 0;}
...zum BeitragWieso bekomme ich keine Ausgabe in meinem Programm in C?
Das ist mein Code
#include <stdio.h>
int main()
{
int Zahl1,Zahl2;
int y=3^9;
int i=Zahl1^Zahl2;
printf("Geben Sie eine Zahl für die Basis ein");
scanf("%i",&Zahl1);
printf("Geben Sie eine Zahl für den Expnenten ein");
scanf("%i",&Zahl2);
for (i=0; i=y; i += 1);
{
printf("%y");
}
printf("%y");
return 0;
}
...zum BeitragZylindervolumen und Zylinderoberflächenberechnung in C
Hallo, ich habe die Aufgabe bekommen, ein Programm zu erstellen, welches die Oberfläche und das Volumen eines Zylinders aus dem Radius und der Höhe berechnet und die Ergebnisse auf dem Bildschirm (Konsole) ausgibt. Hierbei sollen die Variablen Radius und Höhe selbst eingegeben werden (mit Hilfe von scanf). Mein Text sieht im Moment wie folgt aus:
include <stdio.h>int main()
{ double O, V, Pi=3.14, h, r;
O=2*Pi*r*h+2*Pi*(r*r); V=Pi*(r*r)*h; printf ("Bitte hier den Radius eintragen: "); scanf ("%lf",&r); printf ("Bitte hier die Höhe eintragen: "); scanf ("%lf",&h); printf ("Oberfläche: %lf\n", O); printf ("Volumen: %lf\n", V);return 0; }
Mein Problem hierbei ist, dass es als Ergebnis für das Volumen und die Oberfläche ständig den Wert 0.0000 ausgibt.
Ich wäre unglaublich Dankbar wenn mir jemand meinen Fehler zeigen könnte! Bin schon total am verzweifeln -.-
Danke im voraus!
...zum BeitragChudnovsky Algorithmus in C?
Ich versuche gerade den Chudnovsky Algorithmus in C zu implementieren um die nachkommastellen von Pi zu rechnen. Jedoch sind die häufigsten Ergebnisse immer nan, -nan, inf oder was wie 3.827783e-647. Ich hab auch verschiene print formate verwendet um das ergebnis auszugeben, aber da kam entweder 0.0000 oder inf raus.
Wie bekomm ich es hin das eine 'normale' Zahl rauskommt, quasi 3.14159...... usw.
#include <stdio.h> #include <stdlib.h> #include <math.h> long double fact(long double n) { long double fac = 1.00; for (int i = 1; i<=n; i++) { if (i) { fac = fac * i; } } return fac; } int main(int argc, char* argv[]) { long double n, i; long double sum, pi, term; sum = 0.00; pi = 0.00; n = (atoi(argv[1])); for (i=0; i < n; i++) { term = (powl((-1.00), n) * fact(6.00*n) * (545140134.00*n + 13591409)) / (fact(3.00*n) * powl(fact(n), 3.00) * powl(640320.00, 3*n+3/2)); sum += term; } sum = sum * 12; pi = 1 / sum; printf("PI: %Lf\n", pi); return 0; } ...zum BeitragIn C: Celsius in Fahrenheit?
Moin,
ich habe ein Programm geschrieben, welches Celsius in Fahrenheit umrechnet. Jedoch bekomme ich nicht die richtigen Ergebnisse, da ich ja rein theoretisch die Ergebnisse der Rechnung (Formel für Umrechnung: Temp(in Celsius) * 9/5 + 32 in einer float-Variable speichern müsste, oder?
Hier meine Header:
#ifndef TEMPERATURE #define TEMPERATURE #define MAX_LENGTH 10 #define converter(c)((c * (9 / 5)) + 32) double output_temperatures(double temp[]); int string_length(double temp[]); double widening(double temp2[]); /* double appendix(double temp3[], temp4[]); */ #endifHier meine Funktionen:
#include "aufgabe2930b.h" #include <stdio.h> double output_temperatures(double temp[]) { int i; printf("Temperaturen in Fahrenheit: "); for (i = 0; i < string_length(temp); ++i) { if (temp[i] <= 100 && temp[i] >= -273.15) { printf("%f ", converter(temp[i])); } else { printf("Falsche Eingabe! "); break; } } printf("\n"); return 0; } int string_length(double temp[]) { int i = 0; int length = 0; while (temp[i] != '\0') { ++length; ++i; } return length; } double widening(double temp[]) { int i = 0; while (i < MAX_LENGTH - 1) { if (temp[i] == '\0') { printf("Bitte anzuhängende Temperatur eingeben: "); scanf("%lf", &temp[i]); temp[i + 1] = '\0'; break; } else { ++i; } } for (i = 0 ; i < string_length(temp); ++i) { if (temp[i] <= 100 && temp[i] >= -273.15) { printf("%f ", converter(temp[i])); } else { printf("Falsche Eingabe! "); break; } } return 0; }Hier meine main:
#include <stdio.h> #include "aufgabe2930b.h" int main(void) { double temp[MAX_LENGTH] = { 1, 2 }; output_temperatures(temp); widening(temp); return 0; } ...zum BeitragInformatik Trapezregel programmieren?
Hallo zusammen,
ich sollte diese Funktion in C programmieren und komme da nicht mehr weiter.
Mein bisheriger Code sind folgendermaßen aus:
#include <stdio.h> #include <math.h> double f(int x) { double erg; erg = exp(x)/x; return erg; } double trapez(double a, double b, double n) { double xi; double integral, h, i_n; h = (b - a) / n; for(int i = 0; i <= n; i++) { xi = a + i * h; i_n = (h / 2) * (f(xi)); } return i_n; } int main() { double a, b, n; double integral; printf("Geben Sie die Werte fuer a ein. \n"); scanf("%f", &a); printf("Geben Sie die Werte fuer b ein. \n"); scanf("%f", &b); printf("Geben Sie die Werte fuer n ein. \n"); scanf("%f", &n); integral = trapez(a, b, n); printf("%f", integral); }Wenn ich diesen Code mit a = 3, b = 4 und n = 5 aufrufe bekomme ich als Ausgabe nur
1.#INF00
Danke im Vorraus.
...zum BeitragC Programmierung- Maximal und Minimal Wert ermitteln
Hi! Ich möchte den Maximal und Minimalwert innerhalb der selbst eingegebenen Zahlen bestimmen. Den Quellcode habe ich auch soweit fertig und es funktioniert FAST alles. Wie kann ich den minimal und maximalwert richtig bestimmen? Hier der Code: #include #include stdlib.h #define N 5 int main() { int wert[N],i,min,max; printf("Bitte geben Sie 5 Zahlen ein! \n"); for(i=0;i<N;i++) scanf("%i",&wert[i]);//Eingabe der Werte printf("Wiederholung: \n"); for(i=0;i<N;i++) printf("\n %i \n",wert[i]);//Aushabe der Werte for(i=0;i<N;i++) if (wert[i]max) wert[i]=max; printf("Maximalwert: %i",max); printf("Minimalwert: %i",min); return 0;
Die Pfeile bei stdlib.h hab ich weggelassen, da diese nicht korrekt angezeigt werden.
...zum Beitragscanf wird ignoriert?
#include <stdio.h> int main() { int a; int error; printf("Geben sie eine Zahl ein: \n"); do { error = scanf("%d", &a); printf("error: %d\tZahl:%d\n", error, a); } while (error == 0); return 0; }Die Schleife soll solange durchlaufen werden, bis eine Zahl eingegeben wurde.
Stattdessen wird scanf einfach nach dem ersten Durchlauf nicht mehr aufgerufen und man landet in einer Endlosschleife. Warum?
...zum BeitragWas ist der Tastaturpuffer?
Hallo,
Ich lerne gerade C für mein Studium und wir arbeiten mit scanf. Unser Prof hat das Thema Tastaturpuffer aber leider nicht richtig erklärt und ich stehe dementsprechend auf dem Schlauch.
Hier ist die ganze Sache ja noch sehr verständlich.
Eine Zahl wird eingelesen. Diese Eingabe wird mit \n bestätigt. Das in der letzten Zeile eingegeben \n befindet sich in diesem Tastaturpuffer und wird jetzt automatisch im zweiten scanf eingegeben. Damit wird dieses scanf "Übersprungen" und der Variable "Dummy" das \n zugewiesen.
EIne Zahl und ein Zeichen wird eingelesen. Wenn jetzt sowohl das Zeichen als auch das \n in dem Tastaturpuffer gespeichert ist, dann müsste ich eine 7 ein A und einen Zeilenumbruch aus Ausgabe bekommen. Das Passiert aber nicht.
Wenn nur das A in dem Tastaturpuffer gespeichert ist, dann müsste ich eine 7 ein A und die möglichkeit erhalten, ein neues Zeichen einzugeben. Das Passiert aber auch nicht.
Stattdessen erhalt ich einfach nur eine 7 und ein A und der Code wird beendet. Warum?
Hier die beiden Codes:
#include <stdio.h>
int main(){
int Zahl;
char Dummy;
printf("geben Sie bitte eine ganze Zahl ein:");
scanf("%d", &Zahl); .
scanf("%c", &Dummy);
printf("%c", Dummy);
return 0;
}
Und
#include <stdio.h>
int main(){
int Zahl;
char Dummy2;
char Dummy;
printf("\ngeben Sie bitte eine ganze Zahl und ein Zeichen ein:");
scanf("%d", &Zahl);
printf("%d", Zahl);
scanf("%c", &Dummy);
printf("%c", Dummy);
scanf("%c", &Dummy2);
printf("%c", Dummy2);
return 0;
}
...zum BeitragC-Programmierung, printf() und scanf() trotz include nicht erkannt; Woran kann es liegen?
Hallo,arbeite grade an einem C-Programm. Das Programm selbst ist recht simpel, es sollen zwei Zahlen eingelesen werden die dann in jeweils einer Funktion addiert und multipliziert werden. Eigentlich nicht besonders schwer.
Das Problem ist, wie im Titel schon beschrieben, dass scanf() und printf() nicht erkannt werden.
Die genaue Fehlermeldung ist, "error: ‘scanf’ was not declared in this scope".
Was ich bisher als Lösung im Netz gefunden lief am Ende immer auf dasselbe hinaus -> "#include <cstdio>"
Tja, dieser Include ist aber bereits unzweifelhaft vorhanden, inder selben Datei in der printf() und scanf() zum Einsatz kommen. Trotzdem kommt beim Kompilieren die besagte Fehlermeldung.
Das Besondere an diesem eigentlich simplen Program ist, dass hier SGX zum Einsatz kommen soll. Die Addition soll als normaler Programmablauf stattfinden, was auch funktioniert. Die Multiplikation in einer SGX-Enclave ablaufen soll. scanf() und printf() stehen in der Funktion der Multiplikation für das Einlesen der Zahlen.
Woran könnte es liegen?
...zum BeitragScanf wird übersprungen (C-Programmierung)?
Ich habe ein C-Programm geschrieben, welches einen string einlesen soll, darin nach einem vom User festgelegten Zeichen suchen soll und es durch ein vom User festgelegten Zeichen ersetzt werden soll. Nun ist mein Problem, dass das 2. und 3. scanf, also die abfragen nach dem Zeichen welches gesucht werden soll und durch was es ersetzt werden soll, übersprungen werden. Hier ist der Code:
#include<stdio.h>
#include<string.h>
char str[256];
char ptr;
int i;
char ersetze;
char durch;
int laenge;
int main()
{
system("clear");
printf("\nGeben Sie etwas ein: ");
scanf(" %[\n]s", &str);
ptr = str;
laenge = strlen(str);
printf("\nBuchstabe zu ersetzen: ");
scanf(" %c", &ersetze);
printf("\nErsetze durch: ");
scanf(" %c", &durch);
for(i=0; i<=laenge; i++)
{
if(ptr == ersetze)
{
ptr = durch;
}
ptr++;
}
printf("\n%s\n", str);
}
...zum BeitragWie verbiete ich Buchstaben einfach und simpel in C?
Ich habe vor ein paar tagen mit dem Programmieren angefangen und arbeite gerade and einem Taschenrechner. Da wo die Zahlen eingegeben werden können soll kurz und simpel ein Code stehen der Buchstaben und Sonderzeichen verbietet.
Bis jetzt funktioniert alles.
Der Code sieht gerade so aus:
#include <stdio.h> #include <stdlib.h> #include <math.h> int main() { float a,b; char l; printf("Tippe Y um zuzustimmen das sie keine ungefragten angaben verwenden werden und tippen sie L um dem nicht zu zustimmen!:"); scanf("%c",&l); switch(l){ case 'Y': printf("Vielen Dank das sie Kooperation!\n"); break; case 'L': printf ("Keine Gnade!\n"); exit(0); break; default: printf ("\n"); exit(0); break; } printf("Erste Zahl eingeben:"); scanf("%f",&a); printf("Zweite Zahl eingeben:"); scanf("%f",&b); float erga,ergs,ergd,ergm; /* Ein Kommentar */ char r; printf("Gebe eine Rechenart an +,-,/,%,*:"); scanf("\n%c",&r); switch(r) { case '+': erga = a + b; printf("Ergebnis Addition: %f + %f = %f\n", a,b,erga); break; case '-': ergs = a - b; printf("Ergebnis Subtraktion: %f - %f = %f\n",a,b, ergs); break; case '/': if (b==0){ printf("Division durch 0 ist nicht definiert!\n"); break;} else { ergd = a / b; printf("Ergebnis Division: %f / %f = %f\n",a,b, ergd); break;} case '*': ergm = a * b; printf("Ergebnis Multiplikation: %f * %f = %f\n",a,b, ergm); break; default: printf("Ihre Angabe ist keine der erlaubten Rechenarten, erlaubt sind +,-,%,/,* \n versuchen sie es erneut:\n"); exit(0); break; } int ss; printf("Um abzubrechen tippen sie die 1 um den vorgang zu wiederholen tippen sie die 2:"); scanf("\n%d",&ss); switch(ss){ case 1: printf("Auch wiedersehen!"); break; case 2: return main(); break; default: printf("Angabe nicht definiert, automatischer Abbruch"); break; } return 0; } ...zum Beitragc programm bricht prötzlich ab?
Hallo, ich habe ein kleines Problem. bei einem kleinen Programm für die Schule bricht mein Programm nach dem ersten scanf einfach ab, obwohl es eigentlich weitergehen müsste. ich programmiere in c in visual studio 2017.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int main() { char name[1000]; char geschlecht[1]; float monatslohn = 0; int alter = 0; int groesse = 0; printf("Eingabe Name XXXXXXXX: "); fflush(stdin); scanf("%c", &name); //hier bricht das programm ab printf("Eingabe Geschlecht (m/w): "); fflush(stdin); scanf("%c", &geschlecht); printf("Eingabe Monatslohn XXX.XX: "); fflush(stdin); scanf("%d", &monatslohn); printf("Eingabe Alter XX: "); fflush(stdin); scanf("%d", &alter); printf("Eingabe Groesse in cm XXX: "); fflush(stdin); scanf("%d", &groesse); printf("%c; %c; %d; %d; %d", &name, &geschlecht, &monatslohn, &alter, &groesse); fflush(stdin); getchar(); return 0;}
...zum BeitragTừ khóa » C Hoch 2
-
Wie Schreibe Ich Hoch 2? - C, C++, C#, Java Und ...
-
Glycolaldehyde - Wikipedia
-
Glycolonitrile - Wikipedia
-
Ambulante Chirurgie Im Musikerviertel
-
Math.Pow(Double, Double) Method (System) - Microsoft Docs
-
2 Hoch N: Wie In C?
-
A² + B² = C² : Erklärung Und Umstellen - Auf Frustfrei
-
1,2-Ethanediol | CH2OHCH2OH - PubChem
-
Hoch 2 - Translation From German Into English - PONS