Info2/2008tavasz/kuka

A MathWikiből
(Változatok közti eltérés)
 
1. sor: 1. sor:
=== A nyelv ===
+
=== A C nyelv ===
  
* Története
+
* története
 
** C programozási nyelv: Dennis Ritchie 1972, Bell Telephone Laboratories
 
** C programozási nyelv: Dennis Ritchie 1972, Bell Telephone Laboratories
** K&R C 1978
+
** K&R C 1978 (Brian Kernighan, Dennis Ritchie: The C Programming Language)
 
** ANSI (American National Standards Institute) 1989 -> C89
 
** ANSI (American National Standards Institute) 1989 -> C89
 
** ISO (International Organization for Standardization) ISO/IEC 9899:1990 -> C90 (lényegében azonos)
 
** ISO (International Organization for Standardization) ISO/IEC 9899:1990 -> C90 (lényegében azonos)
 
** ISO 9899:1999 (ANSI 2000) -> C99
 
** ISO 9899:1999 (ANSI 2000) -> C99
** hatás, utódok: C++, Java, perl, C#
+
** hatás, utódok: Objective-C, C++, C#
* Tulajdonságai
+
* tulajdonságai
 
** általános célú, blokkstruktúrált, imperatív (utasításokból áll, melyek megváltoztatják a program állapotát), procedurális (az előbbi megvalósítása eljáráshívásokkal) nyelv
 
** általános célú, blokkstruktúrált, imperatív (utasításokból áll, melyek megváltoztatják a program állapotát), procedurális (az előbbi megvalósítása eljáráshívásokkal) nyelv
 
** Unixra készült, ma szinte minden platformon
 
** Unixra készült, ma szinte minden platformon
16. sor: 16. sor:
  
  
{| class="wikitable"
+
~/info2/bajtszamlalo.c:
|-
+
 
! style="text-align: left" | Művelet
+
/* Megszámolja és kiírja, hogy a bemenet hány bájtból áll.
! style="text-align: left" | Leírás
+
  * `n=n+1' helyett `n++'-ot írtunk.
! style="text-align: left" | Asszociativitás
+
  */
|-
+
#include <stdio.h>
| <code>++</code> <code>--</code><br /><code>()</code><br /><code>[]</code><br /><code>.</code><br /><code>-&gt;</code><br /><code>typeid()</code><br /><code>const_cast</code> <code>dynamic_cast</code><br /><code>reinterpret_cast</code> <code>static_cast</code>
+
int main(void) {
| Postfix increment and decrement<br />Function call<br />Array subscripting<br />Element selection by reference<br />Element selection through pointer<br />[[Run-time type information]] (C++ only)<br />Type cast (C++ only)<br />Type cast (C++ only) | balról jobbra
+
  int n=0;
|-
+
  while (0<=getchar()) n++;
| <code>++</code> <code>--</code><br /><code>+</code> <code>-</code><br /><code>!</code> <code>~</code><br /><code>(''type'')</code><br /><code>*</code><br /><code>&</code><br /><code>sizeof</code><br /><code>new</code> <code>new[]</code><br /><code>delete</code> <code>delete[]</code>
+
  printf("%d\n", n);
| Prefix increment and decrement<br />Unary plus and minus<br />Logical NOT and bitwise NOT<br />Type cast<br />Indirection (dereference)<br />Address-of (reference)<br />Size-of<br />Dynamic memory allocation (C++ only)<br />Dynamic memory deallocation (C++ only)
+
  return 0;
| style="vertical-align: top" | Right-to-Left
+
}
|-
+
 
| <code>.*</code> <code>->*</code>
+
Kipróbálás:
| Pointer to member (C++ only)
+
 
| style="vertical-align: top" rowspan="11" | Left-to-Right
+
$ echo sok | ./bajtszamlalo
|-
+
4
| <code>*</code> <code>/</code> <code>%</code>
+
$ echo -n sok | ./bajtszamlalo
| Multiplication, division, and modulus (remainder)
+
3
|-
+
 
| <code>+</code> <code>-</code>
+
~/info2/sorszamlalo.c:
| Addition and subtraction
+
 
|-
+
/* Megszámolja és kiírja, hogy a bemenet hány sorból áll.
| <code>&lt;&lt;</code> <code>&gt;&gt;</code>
+
  * Az utolsó sor nem számít, ha nincs a végén soremelés.
| [[Bitwise operation|Bitwise]] left shift and right shift
+
  */
|-
+
#include <stdio.h>
| <code>&lt;</code> <code>&lt;=</code><br /><code>&gt;</code> <code>&gt;=</code>
+
int main(void) {
| [[Relational operator|Relational]] “less than” and “less than or equal to”<br />Relational “greater than” and “greater than or equal to”
+
  int c, n=0;
|-
+
  while (0<=(c=getchar())) {
| <code>==</code> <code>!=</code>
+
    if (c=='\n') n++;
| Relational “equal to” and “not equal to”
+
  }
|-
+
  printf("%d\n", n);
| <code>&amp;</code>
+
  return 0;
| Bitwise AND
+
}
|-
+
 
| <code>^</code>
+
Kipróbálás:
| Bitwise XOR (exclusive or)
+
 
|-
+
  $ ls /bin/bash /usr/bin/id /dev/null /etc/inputrc | ./sorszamlalo
| <code><nowiki>|</nowiki></code>
+
  4
| Bitwise OR (inclusive or)
+
 
|-
+
~/info2/szoszamlalo.c (ld. K&R)
| <code>&amp;&amp;</code>
+
 
| Logical AND
+
/* Megszámolja és kiírja, hogy a bemenet hány bájtból,
|-
+
  * hány szóból és hány sorból áll. Szó a bemenet olyan
| <code><nowiki>||</nowiki></code>
+
  * maximális része, melyben nincs szóköz, tabulátor és
| Logical OR
+
  * újsor karakter.
|-
+
  */
| <code>''c''?''t'':''f''</code>
+
#include <stdio.h>
| [[Ternary operator|Ternary]] conditional (see [[?:]])
+
#define KINN 0
| style="vertical-align: top" rowspan="2" | Right-to-Left
+
#define BENN 1
|-
+
int main(void) {
| <code>=</code><br /><code>+=</code> <code>-=</code><br /><code>*=</code> <code>/=</code> <code>%=</code><br /><code>&lt;&lt;=</code> <code>&gt;&gt;=</code><br /><code>&amp;=</code> <code>^=</code> <code><nowiki>|</nowiki>=</code>
+
  int c, bajtok_sz, szavak_sz, sorok_sz, allapot;
| Direct assignment<br />Assignment by sum and difference<br />Assignment by product, dividend, and remainder<br />Assignment by bitwise left shift and right shift<br />Assignment by bitwise AND, XOR, and OR
+
  while ((c=getchar()) != EOF) {
|-
+
    ++bajtok_sz;
| <code>throw</code>
+
    if (c == '\n') sorok_sz++;
| Throw operator (exceptions throwing, C++ only)
+
    if (c == ' ' || c == '\n' || c == '\t')
| Not available<!-- Please replace when available -->
+
      allapot = KINN;
|-
+
    else if (allapot == KINN) {
| <code>,</code>
+
      allapot = BENN;
| [[Comma operator|Comma]]
+
      szavak_sz++;
| Left-to-Right
+
    }
|}
+
  }
 +
  printf("%d %d %d\n", bajtok_sz, szavak_sz, sorok_sz);
 +
  return 0;
 +
}

A lap 2008. február 15., 00:03-kori változata

A C nyelv

  • története
    • C programozási nyelv: Dennis Ritchie 1972, Bell Telephone Laboratories
    • K&R C 1978 (Brian Kernighan, Dennis Ritchie: The C Programming Language)
    • ANSI (American National Standards Institute) 1989 -> C89
    • ISO (International Organization for Standardization) ISO/IEC 9899:1990 -> C90 (lényegében azonos)
    • ISO 9899:1999 (ANSI 2000) -> C99
    • hatás, utódok: Objective-C, C++, C#
  • tulajdonságai
    • általános célú, blokkstruktúrált, imperatív (utasításokból áll, melyek megváltoztatják a program állapotát), procedurális (az előbbi megvalósítása eljáráshívásokkal) nyelv
    • Unixra készült, ma szinte minden platformon
    • rendszerprogramok, beágyazott rendszerek, alkalmazási programok
    • alacsony szintű memóriahozzáférés, hatékonyan fordul gépi kódra
    • támogatja a gépfüggetlen programozást


~/info2/bajtszamlalo.c:

/* Megszámolja és kiírja, hogy a bemenet hány bájtból áll.
 * `n=n+1' helyett `n++'-ot írtunk.
 */
#include <stdio.h>
int main(void) {
  int n=0;
  while (0<=getchar()) n++;
  printf("%d\n", n);
  return 0;
}

Kipróbálás:

$ echo sok | ./bajtszamlalo
4
$ echo -n sok | ./bajtszamlalo
3

~/info2/sorszamlalo.c:

/* Megszámolja és kiírja, hogy a bemenet hány sorból áll.
 * Az utolsó sor nem számít, ha nincs a végén soremelés.
 */
#include <stdio.h>
int main(void) {
  int c, n=0;
  while (0<=(c=getchar())) {
    if (c=='\n') n++;
  }
  printf("%d\n", n);
  return 0;
}

Kipróbálás:

 $ ls /bin/bash /usr/bin/id /dev/null /etc/inputrc | ./sorszamlalo
 4

~/info2/szoszamlalo.c (ld. K&R)

/* Megszámolja és kiírja, hogy a bemenet hány bájtból,
 * hány szóból és hány sorból áll. Szó a bemenet olyan 
 * maximális része, melyben nincs szóköz, tabulátor és
 * újsor karakter.
 */
#include <stdio.h>
#define KINN 0
#define BENN 1
int main(void) {
  int c, bajtok_sz, szavak_sz, sorok_sz, allapot;
  while ((c=getchar()) != EOF) {
    ++bajtok_sz;
    if (c == '\n') sorok_sz++;
    if (c == ' ' || c == '\n' || c == '\t')
      allapot = KINN;
    else if (allapot == KINN) {
      allapot = BENN;
      szavak_sz++;
    }
  }
  printf("%d %d %d\n", bajtok_sz, szavak_sz, sorok_sz);
  return 0;
}
Személyes eszközök