2009-04-24 6 views
2

Je suis une personne qui essaie d'apprendre C, mais je suis resté bloqué à quelques points tout en faisant mes projets:Plusieurs questions C de base

1) Comment puis-je mettre en œuvre exactement génération entier au hasard? J'ai googlé et trouvé le code pour 0 à x génération avec le code ci-dessous, mais qu'en est-il entre 2 entiers que je décide (comme entre X et Y)?

int random; 
random = random(100); 

2) Comment puis-je définir une variable à NULL au début (comme en Java) et de le manipuler si elle est NULL? Par exemple, je veux obtenir les résultats suivants:

int a = null; 
if (a == null){ 
    a = 3; 
} 

Répondre

9

1) int r = aléatoire (Y - X) + X;

2) Les entiers ne peuvent pas être NULL en C ou en Java. En C, seuls les pointeurs peuvent être NULL, représentés en les pointant vers zéro. Cependant, je suggère que vous n'entriez pas dans le désordre entier de pointeur avant d'obtenir les bases vers le bas.

+0

Il n'y a pas de fonction 'random' dans C. – dirkgently

+0

En effet, il y a un' rand' dans 'stdlib.h', mais pas de fonction standard nommée' random'. – ephemient

+1

Actuellement, Integer (java.lang.Integer) peut être null en Java. C'est le natif int celui qui ne peut pas être nul. – Tom

0

Pour obtenir la plage que vous voulez (y-x) multiplier chaque numberby aléatoire (y-x). Pour les faire commencer à x et finir à y, ajouter x à chaque nombre (déjà multiplié par (y-z)). Supposons que y> x.

int i; 

for (i = 0; i < NrOfNumers; i++) 
{ 
    randomNumberSequence[i] = randomNumberSequence[i]*(y-x) + x; 
} 
+0

Si randomNumberSequence() est une fonction, pourquoi lui attribuez-vous? Si c'est une liste, pourquoi utilisez-vous() au lieu de []? –

+0

Oups, utilisé trop matlab. – AnnaR

1

1- Comment exactement puis-je mettre en œuvre une génération entière au hasard [...]

Voir FAQ 13.15 et FAQ 13.16 - celui-ci répond explicitement à cette question.

2- Comment puis-je mettre une valeur nulle variable dans le début

Pour flotteurs et types entiers de les affecter à la valeur magique 0. Pour des pointeurs vous pouvez les assigner à 0 (à nouveau) ou la macro NULL.

+0

Avec les downvotes? – dirkgently

0

En C vous voyez souvent les éléments suivants:

int x = -1; 
if (x == -1) { x = 3; } else { /* do nothing */ } 

Cela suppose que le type de valeur est en fait non signé ou au moins que -1 est pas une valeur valide. Vous pouvez également faire:

#define UNINITIALIZED ((int8_t) -128) /* -128 has no inverse with 8-bit */ 
... 
int8_t x = UNINITIALIZED; 
if (x == UNINITIALIZED) { x = 3; } else { /* do nothing */ }