La position actuelle:Accueil du site>C apprentissage des langues

C apprentissage des langues

2022-07-23 04:12:28Programmer Xuyih

CIntroduction à la langue

BCPL -> new B -> CLangues -> UNIX -> Minix -> Linux -> gcc
CLa langue est née de1970-1973Année,InKen.·Thompson.EtDennis.·Richie.Terminé sous la rédaction de,Attribuable àAmerican Bell Labs.
CLe père de la langue:Dennis.·Richie.(Aussi appelé Ken.·Thompson.Dennis.·Richie.Même chose.CLe père de la langue)

CAvantages linguistiques:

1.C Un langage de programmation inventé spécialement pour écrire un système d'exploitation , Donc C'est naturel pour la programmation matérielle 
2. Connu pour sa vitesse de fonctionnement rapide ,
3. Idéal pour réaliser des structures de données et des algorithmes 

CLacunes linguistiques:

1. Parce qu'il est arrivé trop tôt ,Il y a beaucoup de défauts, Il y a aussi beaucoup de pièges 
 Nos prédécesseurs nous ont donné quelques leçons pour éviter les pièges    
(《CPièges et défauts》《CEt pointeur》《CProgrammation spécialisée》)-> (CLanguage three Swordsman)
2.CLa grammaire de la langue est libre, Mais c'est aussi dangereux. 

La liberté vient de l'autodiscipline

CNormes grammaticales

C89Normes grammaticales		Par défautgcc Normes syntaxiques pour les compilateurs 
C99Normes grammaticales		C'est peut - être vraiCExtension et amélioration de la langue
    		Ubuntu 16.04 Par défautC99  
    		-std=gnu99  Désigné commeC99Normes grammaticales
C11Normes grammaticales		Nouvelles mises à jour

Un.、Le premierCProgrammes linguistiques

1、vim xxx.c    Création.cFichier source
2、Écrire le Code,Et enregistrer la sortie
3、gcc xxx.c    Compiler.cFichier source, Le succès va a.outFichier exécutable
4、./a.out  Exécuter l'exécutable
    Attention!:Peut être fusionné3、4Étapes
        gcc xxx.c && ./a.out

#include <stdio.h>
Le code écrit par le programmeur n'est pas standardCCode,Il faut un programme pour le traduire en standardCCode,Le programme responsable de la traduction s'appelle le préprocesseur,Le processus de traduction est appelé prétraitement, Le Code à traduire est appelé instruction de prétraitement ,Par# Le Code qui commence s'appelle l'instruction de prétraitement
#include La fonction est d'importer un fichier d'en - tête
#include <xxx.h>
<> Rechercher le fichier d'en - tête à partir du chemin spécifié par le système et importer
#include "xxx.h"
"" Trouvez d'abord le fichier d'en - tête à partir du chemin de travail actuel , Si vous ne trouvez pas et n'importez plus à partir du chemin spécifié par le système
stdio.h
Fichier d 'en - tête:Par.hFin, Il y a un code auxiliaire , Le grand nombre est une description de la fonction

int main()
{
    printf("Hello World!\n");   
    return 0;
}

mainFonctions:Fonction d'entrée
CLanguesFonctions Gérer le Code en tant qu'unit é ,Une fonction est un fragment de code qui a une fonction
mainLa fonction est l'entrée d'exécution du programme, Il doit y avoir et il ne peut y avoir qu'un seul
int Est un type de données,Il indiquemainLe résultat de l'exécution de la fonction est un entier
return Il y a deux fonctions :

1、Fin de l'exécution de la fonction
2、 Renvoie un résultat à l'appelant de la fonction 

main L'appelant de la fonction est Système d'exploitation, Sa valeur de retour est donnée au système d'exploitation , Sa valeur reflète la fin du programme ,Il existe généralement trois types de:

Nombre positif    Une exception s'est produite    (Les erreurs des autres)
0       Tout va bien
Nombre négatif    Une erreur s'est produite    (Ses propres erreurs)

printf/scanf Est une fonction dans une bibliothèque standard , Responsable de la production des données 、Saisie des données
printf(" Ce que vous voulez entrer ");

Caractère d'évasion:

Quelques caractères sur le clavier qui ne peuvent pas être imprimés directement , Utilisez des combinaisons de caractères spéciales pour représenter , Cette combinaison spéciale de caractères devient un caractère d'évasion ,\n C'est l'un d'eux.

\r  	Retour au début de la ligne
\t  	Tabulation,équivalent àTab, Pour l'alignement du format de sortie 
\b  	Backspace key
\a  	La cloche sonne.
\\  	Représente un\
%%  	Représente un%

C Fin d'une ligne de code avec un point - virgule dans la langue ,Utilisez des accolades bouclées{}Diviser la zone

2.、Compilateur

Responsable de l'enregistrement des fichiers de code lisibles par l'homme , Traduit en quelque chose que l'ordinateur peut comprendre Binaires,ParPréprocesseurCompilateurLinkerComposition
gccC'est parGNUCommunautéPour compilerLinuxUn compilateur gratuit développé à partir du Code du noyau
gcc Paramètres de compilation couramment utilisés :

-E           Afficher uniquement les résultats du prétraitement au terminal 
-std=gun99  ParamètresC99Normes grammaticales
-c          Compiler seulement sans lien
-o           Spécifiez le nom du résultat de compilation  -oname / -o name
-S     		Générer le Code d'assemblage(Langage machine)
-I          Spécifiez le chemin de chargement du fichier d'en - tête    -I Chemin de chargement     -IPriorité la plus élevée
-Wall        Générer autant d'avertissements que possible 
-Werror     Traiter les avertissements comme des erreurs
-l           Spécifiez la Bibliothèque de code à charger   -lm  En utilisant la Bibliothèque de maths 

Trois、CLe processus détaillé de transformation du Code en exécutable

1、Prétraitement   Traduction du fichier source dans un fichier préprocédé
    gcc -E code.c            Afficher les résultats du prétraitement au terminal 
    gcc -E code.c -o code.i Générer pour.iFichier de prétraitement à la fin
2、Compiler      Traduction des documents prétraités en fichiers d'assemblage 
    gcc -S code.i           Générer pour.sFichier d'assemblage à la fin
3、Compilation     Traduire le fichier d'assemblage en fichier cible binaire
    gcc -c code.s           Générer pour.oFichier cible à la fin
4、Liens      Fusionner plusieurs fichiers cibles en un seul fichier exécutable 
    gcc a.o b.o c.o ...     Construction par défauta.outExécutable pour              

Quatre、CType de fichier pour la langue

.c      Fichier source
.h      Fichier d 'en - tête  
.h.gch   Fichier de résultat de compilation pour le fichier d'en - tête , Il sera utilisé en priorité 
.i      Fichiers de prétraitement
.s      Assembler des fichiers
.o      Fichier cible
.a      Fichiers de bibliothèque statiques
.so     Partager les fichiers de la Bibliothèque

Cinq、Unités de stockage

Bit     Bits(Minimum)   Stocker un bit binaire ,Stockage seulement0Ou1,Unit é minimale de stockage des données dans un ordinateur
Byte    Octets         Stocker huit bits binaires , La mémoire de l'ordinateur décrit l'unit é de base de la capacité de stockage 
KB      1024Octets    
MB      1024KB
GB      1024MB
TB      1024GB
PB      1024TB

Six、Type de données

Pourquoi classer les données?

1、 Les données de la vie réelle sont elles - mêmes des attributs de catégorie 
2、La classification des données permet d'économiser de l'espace de stockage、Augmenter la vitesse de fonctionnement

C Les données linguistiques sont classées en deux grandes catégories :Auto - Construction( Types conçus par le programmeur lui - même :Structure、Union européenne、Catégorie)EtInterne(CLe type de langue que vous apportez)
==Attention!:==Opérateur sizeof Peut calculer le type 、 Nombre d'octets de la variable

Taille:

signed      Signé  
     11010111    Le BIT le plus élevé représente le BIT de symbole    0Positif,1Négatif
     signed char             1Octets                                                 -128~127
     signed short            2Octets                                                 -32768~32767
     signed int              4Octets                                                 ±20100 millions
     signed long             4/8Octets   Système d'exploitation32Bitwise4Octets,Système d'exploitation64Bitwise8Octets   ±20100 millions/±9Au début19Nombre entier de bits
     signed long long        8Octets                                                 ±9Au début19Nombre entier de bits
unsigned    Sans symbole  De0C'est parti.,Le plus petit est0
     11010101    Le BIT le plus élevé est le BIT de données
      unsigned char           1Octets                                                 0~255
      unsigned short          2Octets                                                 0~65535
      unsigned int            4Octets                                                 0~40100 millions
      unsigned long           4/8Octets   Système d'exploitation32Bitwise4Octets,Système d'exploitation64Bitwise8Octets    0~40100 millions/0~1Au début20Nombre entier de bits
      unsigned long long      8Octets                                                 0~1Au début20Nombre entier de bits
Attention!:signed Non, ça veut dire plus. 
 Parce qu'il est difficile de définir un entier non signé ,C La Bibliothèque standard redéfinit ces types en de nouveaux noms de type simples :
                Besoin d'importer un fichier d'en - tête<stdint.h>
            uint8_t uint16_t uint32_t uint64_t  Entier non signé
            int8_t  int16_t  int32_t  int64_t   Entier signé

Type de point flottant: Type avec partie décimale

float       Type de point flottant de précision unique    4Octets
double      Double précision flottante    8Octets
long double                12Octets/16Octets
Attention!:Valable à six décimales
Attention!: Utiliser un certain algorithme pour convertir les données flottantes réelles en données binaires , Cette procédure est plus efficace que le stockage 、 Lire les entiers est beaucoup plus lent , Essayez d'utiliser des données entières lors de la programmation 

JugementdoubleOui Non0Équivalence?

double num
if(num < 0.000001 && num > -0.000001)

Analogique:

Type de caractère:char
 Les caractères sont des symboles ou des motifs , Les entiers sont toujours stockés en mémoire , Lorsque des caractères doivent être affichés ,Sera basé surASCII Les relations correspondantes dans le tableau montrent les caractères ou modèles correspondants 
'\0'    0       Caractères spéciaux Caractère vide
'0'     48      ( Un seul caractère peut être placé dans une seule citation )
'A'     65
'a'     97

Booléen:bool

Le premierC Après la langue bool,Alors...C Il n'y a pas de vrai type booléen dans la langue ,En - têtestdbool.h Les types booléens sont simulés dans
Ajouter un fichier d'en - tête<stdbool.h>Ne pas utiliser avant bool true false

Conversion de type

Seules les données du même type peuvent être calculées , Si des données de différents types doivent être converties avant d'être calculées .

Conversion automatique de type:

Règles de conversion:Basé sur la non - perte de données, Un peu d'espace peut être sacrifié correctement

1、Moins d'octets à plus d'octets   (Priorité la plus élevée)
2、Une rotation non signée
3、 Les entiers tournent vers les points flottants 
Attention!:char short  Si vous travaillez avec différents types de données ,Sera promu en premierintParticiper à l'opération après le type

Forcer la conversion de type:

(Nouveau nom de type)Données;
De cette façon, vous risquez de perdre des données ,Utilisation prudente

Sept、Variables et constantes

Qu'est - ce queVariables: Les valeurs qui peuvent changer pendant l'exécution du programme sont appelées variables , L'équivalent d'une boîte de stockage de données
Définition:Nom du type Nom de la variable;
int num;
Règles de nommage:

1、Par les lettres、Nombre、Soulignement_Composition
2、Ne peut pas commencer par un nombre
3、Pas avecCLangues32 Mot - clé (s) double (s) nom (s) ( Demande de pouvoir écrire silencieusement )
4、Voir nom et sens (Fonction、Type、Champ d'application...)
        int sum_s_i;

Utiliser:

Affectation:       Nom de la variable = 10;
            num = 10;
Participer aux opérations:   2+(Nom de la variable*10);
           2+(num*10);   
Attention!:C Les valeurs initiales des variables dans la langue sont aléatoires ,Pour des raisons de sécurité, Généralement initialisé comme 0

Sortie et entrée des variables:

int printf(const char *format, ...);
Fonction:Données de sortie

format:"Les guillemets doubles contiennent des conseils+Placeholder"
...(Paramètre de longueur variable):Liste des noms des variables
Valeur de retour:Nombre de caractères de sortie

Substituant de type:C Dans la langue, le type de variable est passé par un substituant de type 
signed      char  short  int    long    long long
            %hhd  %hd    %d     %ld     %lld
unsigned    char  short  int    long    long long
			%hhu  %hu    %u     %lu     %llu
float       %f
double      %lf
long double %LF
Type de caractère char  %c

`int scanf(const char *format, …);``
Fonction:Saisie des données

format:"Les guillemets doubles contiennent des substituants"
...:     Liste des adresses des variables 
Valeur de retour: Nombre de variables saisies avec succès

Attention!:scanf L'adresse de la variable doit être fournie     
        &Nom de la variable == Adresse variable

Qu'est - ce queConstante: Les valeurs qui ne peuvent pas être modifiées pendant l'exécution du programme sont appelées constantes

100     Par défautintType
100l    long
100ll   long long
100u    unsigned int
100lu   unsigned long
100llu  unsigned long long
3.14    Par défautdouble
3.14f   float
3.14l   long double

Huit、Formatage des entrées / sorties

%nd     AffichernLargeur des caractères, Si ce n'est pas suffisant, ajouter un espace à gauche ,Aligner à droite
%-nd    AffichernLargeur des caractères, Si ce n'est pas suffisant, ajoutez un espace à droite ,Aligner à gauche
%0nd    AffichernLargeur des caractères, Ajouter à gauche si ce n'est pas suffisant 0,Aligner à droite
%n.mf   AffichernLargeur des caractères( Un point décimal aussi. ), Si ce n'est pas suffisant, ajouter un espace à gauche ,m Représente les décimales suivantes ( Excédent arrondi ,Pas assez.0),Aligner à droite
%g      Ne pas afficher l'excédent après le point décimal0

Neuf、Opérateur

Opérateur auto - variable: ++/--    Ajouter automatiquement la valeur de la variable 1Ou moins1
    Auto - changement avant: ++num/--num Entrée en vigueur immédiate
    Post - auto - transformation: num++/num--  La ligne suivante est valide 
Attention!:N'utilisez pas l'opérateur auto - variable plus d'une fois sur une ligne de code

Opérateur arithmétique: + - * / %
    Entier/Entier   Résultat ou entier,Pas de décimale,Ne conserver que les parties entières
      10/3    ->  3
      10%3    ->  1
	 / % Le diviseur ne peut pas être0, Sinon, il y aura une exception pour les points flottants 、(Core dumped), C'est une erreur de fonctionnement. , Une fois généré, le programme s'arrête immédiatement    ->   Il n'y a que des Adders sur l'ordinateur , Impossible de terminer l'opération 

Opérateur relationnel:  >  <  >=  <=  ==  !=
    Comparaison des résultats 0(C'est faux.)Ou1(Fondé), Les résultats de la comparaison peuvent continuer à participer aux opérations suivantes 
    int n = -100;
    if(10 < n <100)    Commencez à gauche.   ->  Le résultat est toujours vrai,Contrairement aux règles mathématiques
Attention!: ==  Constante recommandée à gauche 

Opérateurs logiques:   &&  ||  !
     Convertit d'abord l'objet d'opération en valeur logique ,0Convertir en faux,Non0 Convertir en vrai 
    A && B  Un faux est un faux
    A || B  Un vrai est vrai
    !A      Inversion
    && ||   Caractéristiques du court - circuit:
 Lorsque la valeur résultante de la partie gauche détermine le résultat de l'expression entière , La partie droite n'effectue pas le calcul 

Opérateur tridimensionnel:L'objet de calcul a trois parties
    A ? B : C   JugementA Si la valeur de est vraie ,ExécutionBLe contenu de,Sinon, exécutezC

Opérateur d'affectation:
    a = 10;
    a += 10;    a=a+10;
    a -= 10;
    a *= 10;
    a /= 10;
    a %= 10;

Opérateur de bits:   &   |   ~   ^   <<  >>

Dix、Déclaration de branche

if(Expression)  //Une branche
{
    //L'expression est vraie(Non0), Exécuter le Code ici 
}

if(Expression)  //Double branche
{
    //L'expression est vraie(Non0), Exécuter le Code ici 
}
else
{
    //L'expression est fausse(0), Exécuter le Code ici 
}

if(Expression1)  //Branches multiples
{
    //Expression1C'est vrai.(Non0), Exécuter le Code ici 
}
else if(Expression2)
{
    //Expression2C'est vrai.(Non0), Exécuter le Code ici 
}
else if(Expression3)
{
    //Expression3C'est vrai.(Non0), Exécuter le Code ici 
}
else
{
    // Si toutes les expressions ci - dessus sont fausses , Alors exécutez le Code ici en dernier 
}



switch Instruction de branche de commutation 
switch(n) // nÇa peut être numérique、Expression, Le résultat d'une expression doit être un entier 
{
    case val:   // Sival == n, Allumez l'interrupteur d'actionnement 
                // valDoit être constant
        ...
        break;  // Éteignez l'interrupteur d'actionnement,Finswitch
        // Si chaquecase Plus tard. break, Une structure ramifiée s'est formée 
        // switchImpossible d'utilisercontinueCoopération
        // case a ... b:Peut être représenté[a,b],Mais seulementGNU Le compilateur supporte cette syntaxe ,Non recommandé
    case val1:
        ...
    default:
        // Si toutcase Rien n'est ouvert , Ouvre enfin default, Et à n'importe quelle position peut être ouverte en dernier 
}

Onze、forDéclaration circulaire:

La boucle est un moyen de faire exécuter le code encore et encore ,Jusqu'à ce que vous atteigniez l'effet désiré
for La boucle est une sorte de Très flexible Variété et danger (Par rapport aux autres cycles)Cycle

for En général, une variable est utilisée pour guider l'exécution de la boucle , Cette variable est appelée variable cyclique i    index
for([1];[2];[3])
{
    [4];
}
[1]、Assigner une valeur initiale à la variable de boucle,C99 Les critères ci - dessus permettent de définir ici les variables cycliques  -std=gnu99
[2]、Déterminer si la variable cyclique atteint la limite,Si elle n'est pas arrivée,En boucle
[4]、Code exécuté à plusieurs reprises, Devenir un corps circulaire 
[3]、Changer la variable de boucle,Prévenir les cycles morts, En général, les variables cycliques sont auto - Additives 、À déduire
Ordre d'exécution:[1][2][4][3][2][4][3]...

Question des accolades:
    1、Alignement suggéré vers le haut et vers le bas
    2、 S'il n'y a qu'une seule ligne de code dans le corps de la boucle ,Les accolades bouclées peuvent être omises
        Mais ce n'est pas bon pour l'expansion, Le Code commercial général exige que les accolades ne soient pas omises 

forBouclez toutes sortes d'écriture:

1.
  for(;;)
  {
      //  Cycle mort
  }


2.
  int i=0;
  for(; i<10; i++)
  {

  }


3.
  for(int i=0; ; i++)
  {
      if(i >= 10)
      {
          break;
      }
  }

4.
  for(int i=0; i<10; )
  {
      ...
      i++;
  }

Douze、whileDéclaration circulaire

while(Expression)
{
    //  Corps circulatoire
}

 Exécuter le corps de la boucle lorsque l'expression est vraie , Re - juger l'expression après l'exécution ,Et ainsi de suite., Jusqu'à ce que l'expression soit fausse ,Fin du cycle
whileéquivalent àforVersion abrégée de    for(;Expression;)

for Les boucles sont spécialement conçues pour résoudre le problème de savoir exactement combien de boucles
while Les boucles sont spécialement conçues pour résoudre le problème du nombre indéterminé de boucles

XIII.、do-while Déclaration circulaire

do{
    //  Corps circulatoire
}while(Expression); 	// L'expression continue comme une vraie boucle ,Fin de la boucle pour le faux
Exécuter d'abord le corps de la boucle,Re - juger les conditions du cycle, Le corps du cycle effectue au moins une fois    

Pour commencer 、 Cas particuliers de post - inspection , Par exemple, saisissez un mot de passe 、Jugement du contenu du document

XIV.、Boucle imbriquée

L'instruction circulaire contient l'instruction circulaire
Le cycle externe est effectué une fois,Exécution du cycle internenUne fois

Mentions de copyright
Auteur de cet article [Programmer Xuyih],Réimpression s’il vous plaît apporter le lien vers l’original, merci
https://fra.chowdera.com/2022/204/202207221749232035.html

Recommandé au hasard