Ein Stück C-Code ohne bedingte Anweisungen oder Operatoren umschreiben?

8

Ich war in einem technischen Interview, wo der Interviewer mir einen Code wie diesen gab

%Vor%

Er sagte, ich solle diesen Code ohne Schalter umschreiben, wenn sonst oder ternärer Operator für die if-Bedingung. Wie kann es gemacht werden?

    
mrigendra 16.09.2013, 08:01
quelle

7 Antworten

21

Es ist eigentlich ganz einfach:

%Vor%

Dies wird a mit 0 multiplizieren, wenn a gleich 25 ist, sonst wird es mit 1 multipliziert.

Wenn es Ihnen auch nicht erlaubt ist, auf Gleichheit zu prüfen, dann ist dies ein vollständig arithmetischer Weg:

%Vor%     
orlp 16.09.2013, 08:04
quelle
10
___ qstnhdr ___ Ein Stück C-Code ohne bedingte Anweisungen oder Operatoren umschreiben? ___ answer18823148 ​​___

Denken Sie daran, dass die Zuweisung nur ein gewöhnlicher Ausdruck ist und als solcher als Teil eines anderen Ausdrucks verwendet werden kann. Zum Beispiel könnten Sie die Kurzschlußlogik und den Operator verwenden:

%Vor%

Sie müssen Klammern um die Zuweisung setzen, da die Zuweisung Vorrang als der Operator %code% hat .

    
___ answer18823196 ___

Die gestellte Frage gibt undefiniertes Verhalten , da Sie eine nicht initialisierte Variable verwenden. Daher können Sie jeden beliebigen Code schreiben (solange er kompiliert wird).

Siehe C-Standard 6.3.2.1p2:

  

Wenn der Wert l ein Objekt mit automatischer Speicherdauer angibt, das   hätte mit der Registerspeicherklasse deklariert werden können (hatte nie   die Adresse wurde übernommen) und das Objekt ist nicht initialisiert (nicht deklariert)   mit einem Initialisierer und keine Zuordnung dazu wurde zuvor durchgeführt   zu verwenden), das Verhalten ist nicht definiert.

Das ist meiner Meinung nach die kluge Antwort: obwohl Sie klug sein würden, wenn Sie eine Frage auf diese Weise beantworten möchten.

    
___ answer18823097 ___

Es ist eigentlich ganz einfach:

%Vor%

Dies wird a mit 0 multiplizieren, wenn a gleich 25 ist, sonst wird es mit 1 multipliziert.

Wenn es Ihnen auch nicht erlaubt ist, auf Gleichheit zu prüfen, dann ist dies ein vollständig arithmetischer Weg:

%Vor%     
___ antwort18823125 ___
%Vor%

Dies verwendet nicht "switch, if else oder ternary operator"

    
___ answer19356389 ___

Eine andere interessante Antwort könnte sein

%Vor%

Dies verwendet nicht 'if-else', 'switch' oder 'ternary operator'

    
___ answer18824327 ___

Wenn der implizierte Kontext eine Zählschleife ist, in der %code% immer den Zyklus %code% wiederholt, dann wäre vielleicht eine mathematisch attraktivere Lösung

%Vor%

Aber das würde natürlich nicht funktionieren, wenn %code% irgendetwas sein kann, und es sollte nur im Fall von %code% zurückgesetzt werden, während etwas %code% übrig bleiben sollte allein.

Die Interviewer mögen es vielleicht, wenn Sie nach einer solchen "semantischen" Lösung suchen und erklären können, wann Sie diese verwenden sollen.

    
___ qstntxt ___

Ich war in einem technischen Interview, wo der Interviewer mir einen Code wie diesen gab

%Vor%

Er sagte, ich solle diesen Code ohne Schalter umschreiben, wenn sonst oder ternärer Operator für die if-Bedingung. Wie kann es gemacht werden?

    
___ tag123c ___ C ist eine universelle Computerprogrammiersprache, die für Betriebssysteme, Bibliotheken, Spiele und andere Hochleistungsanwendungen verwendet wird. Dieses Tag sollte bei allgemeinen Fragen zur C-Sprache verwendet werden, wie in der Norm ISO 9899: 2011 definiert. Fügen Sie ggf. ein versionsspezifisches Tag wie c99 oder c90 für Fragen zu älteren Sprachstandards hinzu. C unterscheidet sich von C ++ und es sollte nicht mit dem C ++ - Tag kombiniert werden, wenn ein rationaler Grund fehlt. ___ answer18824464 ___

Ich glaube, der Interviewer wollte, dass Sie diese Zeile anstelle von %code% verwenden:

%Vor%     
___
AnT 16.09.2013 08:06
quelle
8

Die gestellte Frage gibt undefiniertes Verhalten , da Sie eine nicht initialisierte Variable verwenden. Daher können Sie jeden beliebigen Code schreiben (solange er kompiliert wird).

Siehe C-Standard 6.3.2.1p2:

  

Wenn der Wert l ein Objekt mit automatischer Speicherdauer angibt, das   hätte mit der Registerspeicherklasse deklariert werden können (hatte nie   die Adresse wurde übernommen) und das Objekt ist nicht initialisiert (nicht deklariert)   mit einem Initialisierer und keine Zuordnung dazu wurde zuvor durchgeführt   zu verwenden), das Verhalten ist nicht definiert.

Das ist meiner Meinung nach die kluge Antwort: obwohl Sie klug sein würden, wenn Sie eine Frage auf diese Weise beantworten möchten.

    
Bathsheba 16.09.2013 08:09
quelle
6
___ qstnhdr ___ Ein Stück C-Code ohne bedingte Anweisungen oder Operatoren umschreiben? ___ answer18823148 ​​___

Denken Sie daran, dass die Zuweisung nur ein gewöhnlicher Ausdruck ist und als solcher als Teil eines anderen Ausdrucks verwendet werden kann. Zum Beispiel könnten Sie die Kurzschlußlogik und den Operator verwenden:

%Vor%

Sie müssen Klammern um die Zuweisung setzen, da die Zuweisung Vorrang als der Operator && hat .

    
___ answer18823196 ___

Die gestellte Frage gibt undefiniertes Verhalten , da Sie eine nicht initialisierte Variable verwenden. Daher können Sie jeden beliebigen Code schreiben (solange er kompiliert wird).

Siehe C-Standard 6.3.2.1p2:

  

Wenn der Wert l ein Objekt mit automatischer Speicherdauer angibt, das   hätte mit der Registerspeicherklasse deklariert werden können (hatte nie   die Adresse wurde übernommen) und das Objekt ist nicht initialisiert (nicht deklariert)   mit einem Initialisierer und keine Zuordnung dazu wurde zuvor durchgeführt   zu verwenden), das Verhalten ist nicht definiert.

Das ist meiner Meinung nach die kluge Antwort: obwohl Sie klug sein würden, wenn Sie eine Frage auf diese Weise beantworten möchten.

    
___ answer18823097 ___

Es ist eigentlich ganz einfach:

%Vor%

Dies wird a mit 0 multiplizieren, wenn a gleich 25 ist, sonst wird es mit 1 multipliziert.

Wenn es Ihnen auch nicht erlaubt ist, auf Gleichheit zu prüfen, dann ist dies ein vollständig arithmetischer Weg:

%Vor%     
___ antwort18823125 ___
%Vor%

Dies verwendet nicht "switch, if else oder ternary operator"

    
___ answer19356389 ___

Eine andere interessante Antwort könnte sein

%Vor%

Dies verwendet nicht 'if-else', 'switch' oder 'ternary operator'

    
___ answer18824327 ___

Wenn der implizierte Kontext eine Zählschleife ist, in der %code% immer den Zyklus %code% wiederholt, dann wäre vielleicht eine mathematisch attraktivere Lösung

%Vor%

Aber das würde natürlich nicht funktionieren, wenn %code% irgendetwas sein kann, und es sollte nur im Fall von %code% zurückgesetzt werden, während etwas %code% übrig bleiben sollte allein.

Die Interviewer mögen es vielleicht, wenn Sie nach einer solchen "semantischen" Lösung suchen und erklären können, wann Sie diese verwenden sollen.

    
___ qstntxt ___

Ich war in einem technischen Interview, wo der Interviewer mir einen Code wie diesen gab

%Vor%

Er sagte, ich solle diesen Code ohne Schalter umschreiben, wenn sonst oder ternärer Operator für die if-Bedingung. Wie kann es gemacht werden?

    
___ tag123c ___ C ist eine universelle Computerprogrammiersprache, die für Betriebssysteme, Bibliotheken, Spiele und andere Hochleistungsanwendungen verwendet wird. Dieses Tag sollte bei allgemeinen Fragen zur C-Sprache verwendet werden, wie in der Norm ISO 9899: 2011 definiert. Fügen Sie ggf. ein versionsspezifisches Tag wie c99 oder c90 für Fragen zu älteren Sprachstandards hinzu. C unterscheidet sich von C ++ und es sollte nicht mit dem C ++ - Tag kombiniert werden, wenn ein rationaler Grund fehlt. ___ answer18824464 ___

Ich glaube, der Interviewer wollte, dass Sie diese Zeile anstelle von %code% verwenden:

%Vor%     
___
Some programmer dude 16.09.2013 08:07
quelle
3

Eine andere interessante Antwort könnte sein

%Vor%

Dies verwendet nicht 'if-else', 'switch' oder 'ternary operator'

    
Pankaj 14.10.2013 08:40
quelle
0

Wenn der implizierte Kontext eine Zählschleife ist, in der a immer den Zyklus 0..24 wiederholt, dann wäre vielleicht eine mathematisch attraktivere Lösung

%Vor%

Aber das würde natürlich nicht funktionieren, wenn a irgendetwas sein kann, und es sollte nur im Fall von a==25 zurückgesetzt werden, während etwas a==26 übrig bleiben sollte allein.

Die Interviewer mögen es vielleicht, wenn Sie nach einer solchen "semantischen" Lösung suchen und erklären können, wann Sie diese verwenden sollen.

    
firefrorefiddle 16.09.2013 09:14
quelle
-2

Ich glaube, der Interviewer wollte, dass Sie diese Zeile anstelle von if verwenden:

%Vor%     
mvp 16.09.2013 09:20
quelle

Tags und Links