Datamaskiner

Computer Programmering Tutorial - Advanced C-Like

Forfatter: Laura McKinney
Opprettelsesdato: 3 April 2021
Oppdater Dato: 15 Kan 2024
Anonim
C Programming Tutorial for Beginners
Video: C Programming Tutorial for Beginners

Innhold

Charles er programvareingeniør og høyskoleprofessor interessert i teknologi, medisin, økonomi og ernæring.

Løse alle puslespillene

Du er en mellomnivå programmerer. Hvis det ikke stemmer, kan du lese denne innledende artikkelen eller denne mellomliggende artikkelen før du fortsetter.

Nå er du en mellomnivåprogrammerer, og du vil forbedre ferdighetene dine til ekspertnivå. Denne artikkelen vil bidra til å peke veien. Tidligere artikler i denne serien dekket ferdighetene som kreves for de fleste programmeringer, og utelater datastrukturer, algoritmer og noen få sjeldne variabeltyper. En ekspert programmerer er klar over alle disse tingene, selv om de blir ubrukt nesten hele tiden.

La oss komme i gang.

Alle variablene

  • boolsk - A boolsk verdien kan være sant eller usant. I tradisjonell C, boolsk verdier er representert av ints, men noen varianter (inkludert C fra og med C99) har en dedikert type kalt "bool" eller "boolean".
  • røye - I forrige artikkel introduserte jeg røye som en måte å lagre på strengs. De er også en type int, bare halvparten av størrelsen på en kort.
  • lenge lenge - A lenge lenge, eller "langt langt heltall" er akkurat som et int men større. Det betyr at den kan lagre et bredere spekter av verdier, tar mer minne i RAM eller i en fil, og sannsynligvis tar mer tid å behandle. Legger til to lenge lenges kan ta lengre tid enn å legge til to ints, men hvor mye lenger avhenger av maskinvaren din.
  • lang dobbel - A lang dobbel er akkurat som en dobbelt, men større.

I den siste artikkelen nevnte jeg epsilon og hvordan du for det meste ikke trenger å bekymre deg for det. Når du begynner å takle problemer som krever lang dobbels, du er sannsynligvis bekymret for epsilon og avrundingsfeil.


Det er et komplisert problem, og dette er en avansert artikkel, men se denne referansen for en god forklaring. Kort sagt, flytende tall har et begrenset antall sifre, så når de blir store nok, er det å legge til det samme som å legge til null.

Skriv navnStørrelse i byteOmråde

boolsk

4

sant / usant

røye

1

+/- 127 (2^7 - 1)

lenge lenge

8

+/- 2^63 -1

lang dobbel

10 til 16

+/- 1.18e4932

enum boolean {false, true};

Flere heltall med oppregnede typer

An enum eller "enumerated type" lar deg definere et sett med int konstanter som gjør programmet lettere å lese. Den første konstanten i listen er 0, den neste er 1, og så videre.

Ikke glem at de er det ints. I boolsk eksempel til høyre, false er 0 og true er 1 så "if (false)" og "if (true)" fungerer som forventet, men "if (true == (uttrykk))" er ikke det samme som "if ( uttrykk) "fordi i C er en heltallverdi som ikke er null, sant selv om du har definert et kalt enum boolsk der sant alltid er 1.


Endring av variabler med Const Extern Static

Const, ekstern, og statisk kan brukes til å endre en variabel på forskjellige måter.

En variabel erklært som konst er en konstant, noe som betyr at verdien aldri kan endres.

En variabel erklært som ekstern deles mellom kildefiler.

En variabel erklært som statisk inne i en funksjon vil den opprettholde verdien mellom funksjonsanrop. Det er som en global variabel som bare er tilgjengelig fra den funksjonen.

typedef struct BigIntegerStruct {bool negativ; char * data; int dataLength; } BigIntegerType; BigIntegerType createBigInteger (int lengde); BigIntegerType destroyBigInteger (int lengde); BigIntegerType addBigInteger (BigIntegerType a, BigIntegerType b); BigIntegerType subtractBigInteger (BigIntegerType a, BigIntegerType b);

Pushing the Limits

Hva om du vil gå utover grensene? Kanskje programmet ditt trenger veldig stort ints eller veldig presis flytes. Du kan lage en ny type data med struct. Høgskoleprogrammeringskurs gir ofte en slik oppgave det første året eller to: skriv et sett med funksjoner og datastrukturer for å støtte operasjoner på veldig store heltall (hundrevis av sifre).


For å oppnå dette kan en student definere en struct BigIntegerStruct og gjør det til en ny type BigIntegerType med typedef. I praksis trenger ikke BigIntegerStruct og BigIntegerType være forskjellige navn, og du kan kalle dem begge BigInteger: typedef struct BigInteger {...} BigInteger;

Å definere de vanlige heltalloperasjonene på denne nye typen, lar en programmerer dele det større puslespillet i mindre deler som hver enkelt blir lettere løst og testet enn det hele. Samtidig blir studentene introdusert til ideen om en algoritme (en serie trinn som til slutt løser et puslespill) og hvordan man kan analysere rekkefølgen på kjøretiden når det gjelder inngangene. Når det gjelder store heltall, tar det å ta sammen og trekke så lang tid som lengden på deres innganger, eller O (n). Multiplisering og deling vil ta like lang tid som produktet av lengden på deres innganger, eller O (n2).

desimalheksadesimal

0

0x0

1..8

0x1..0x8

9

0x9

10

0xA

11

0xB

12

0xC

13

0xD

14

0xE

15

0xF

Operasjon XOR

innganginngangproduksjon

0

0

0

0

1

1

1

0

1

1

1

0

Heltalsoperasjoner

Inntil nå var du sannsynligvis klar over at C-datatypene hver er en serie med ett eller flere byte, og at byte er hver åtte bits, og at hver bit er 0 eller 1. C lar deg manipulere og teste disse bitene direkte. For å hjelpe deg med dette kan du definere heltallverdier med en ledende 0x for å spesifisere en heksadesimal verdi, og bruke% x eller% X i printf () formatstrengen for å vise en int i base 16.

De vanlige operatørene gjelder fortsatt: + - * / % og husker testene == > >= =. Å teste et heltall i seg selv er usant hvis heltallet er 0, og ellers sant.

Legg til disse operatørene: & (OG), | (ELLER), ^(XOR), og unary ~(NOT) som gjør at alle 1s til 0s og 0s til 1s. Den bitvise OG og ELLER fungerer akkurat som deres logiske kolleger, men behandler hvert heltall som en rekke boolske. XOR (eksklusiv OR) er bare sant hvis nøyaktig en av de to inngangene er sanne. Det er 1^0 og 0^1 er begge sanne (1) og 1^1 og 0^0 er begge falske (0).

Du kan også skifte biter til høyre () og Venstre () innenfor et helt tall. Bildet øverst i denne artikkelen viser et riktig skifte i handling.

Med disse operasjonene kan du behandle en int (x) som en matrise på 32 bits og testbit n (0-31) med:

  • hvis (x & (1n))

Hvorfor vil du gjøre dette? Det meste av tiden vil du ikke. For eksempel har du kanskje lurt på hvorfor en C99-standard boolsk verdien tar like mye som en int (fire byte, eller 32 bits) når boolsk data er bare en bit verdt. Årsaken er fart. Inntil du går tom for RAM, er hastighet viktigere enn minne og å sjekke verdien på et int er vanligvis raskere enn å isolere en bit og deretter sjekke verdien.

Men ikke alltid. Hvis programmet ditt trenger nok boolsk verdier og behov for å få tilgang til dem tilfeldig, til slutt flytter flaskehalsen data i stedet for å behandle data. Selv i tilfeller der det er bedre å bruke en bit pr boolsk, det er nesten alltid ikke viktig, og det er enklere å bare bruke en int.

Dette punktet om enkelhet legger vekt. Enkelhet vinner. Når du oppnår et ekspertnivå, må du ikke bruke det så fort du kan. Gjør det på den kjedelige måten. Gjør det på den kjedelige måten til et ekspertnivå er nødvendig fordi ingen av de kjedelige alternativene er gode nok.

Fremtidige retninger

I disse tre artiklene har jeg forsøkt å behandle C-lignende språk som mer like enn de er forskjellige, men faktisk programmering gjøres på et faktisk språk med alle dets styrker og svakheter samlet.

For å få ytterligere ferdigheter, må en programmerer sette pris på språkforskjeller til tross for alle likheter. C er fremdeles latin for moderne databehandling, men renessansen er i full gang og viktige forskere studerer på fransk, italiensk, spansk, engelsk, tysk, hver med sitt eget formål om disse formålene oppnås eller ikke.

For ditt neste oppdrag bør du velge å akseptere det, fokuser på ett språk om gangen (som C). Det kan være språket du må bruke for et bestemt prosjekt, eller et som har uttrykk du ønsker å etterligne, eller rett og slett et som interesserer deg for egen interesse.

Uansett hvilken vei du velger herfra, er du allerede godt på vei til å bruke de rundt 10.000 timene med trening som det tar å være ekspert i verdensklasse.

Denne artikkelen er nøyaktig og sann etter best forfatterens viten. Innholdet er kun for informasjons- eller underholdningsformål og erstatter ikke personlig rådgivning eller profesjonell rådgivning i forretningsmessige, økonomiske, juridiske eller tekniske forhold.

Populær

Anbefales Til Deg

Vend et bilde svart-hvitt med unntak av ett område i Photoshop
Datamaskiner

Vend et bilde svart-hvitt med unntak av ett område i Photoshop

Jeg er en kot k ju tudent. Mine intere er inkluderer fotografering og mu ikk. Jeg er en tekni k nerd og el ker naturviten kap.Dette er ann ynligvi en effekt alle har ett: et bilde om er delvi i farger...
Slik sletter du søkesloggen på Internett
Internett

Slik sletter du søkesloggen på Internett

Dreamhowl beher ker datama kinpleie, inn tillinger og o iale nettverk. Henne for tåel e av grunnleggende HTML gjør temaju tering til en lek!I dag har per onvern på internett blitt mer b...