Zmienne, typy, operatory
Zmienne i ich typy
Deklaracje zmiennej:
typ nazwa_zmiennej;
Zmienne przechowują wartości:
- typ zmiennej: określa rodzaj danych, zakres wartości, dozwolone operacje na wartości
- nazwa zmiennej: dozwolone znaki
a-zA-z0-9_
(cyfra nie może być pierwszym znakiem)
Przykład:
int i; // typ całkowity (4B) long j; // typ całkowity (4B) float x; // typ rzeczywisty (4B) double y; // typ rzeczywisty (8B) char znak; // typ znakowy (1B) string napis; // łańcuch znakowy (napis, kolekcja znaków)
Zmienne a pola klas
using System; // tu nie deklarujemy zmiennych !!! namespace Zmienne { // tu też nie deklarujemy zmiennych class Program { // Zmienna zadeklarowana w tym miejscu staje się polem klasy Program int a; static void Main(string[] args) { // Zmienna zadeklarowana w tym miejscu jest dostępna w funkcji Main int b; } } }
Przypisanie wartości
Operator przypisania =
zmienna = wartość;
Przykład:
i = 2; j = 4L; // wartość long x = 3.14f; // wartość float y = 4.600; // wartość double c = '*'; // znak gwiazdki napis = "Witaj Świecie"; // łańcuch znakowy
Deklaracja z inicjacją
typ zmienna = wartość;
int i = 2; long j = 4L; float x = 3.14f; double y = 4.600; char c = 'X'; string napis = "Witaj Świecie";
Domyślny typ przy inicjacji
var zmienna = wartość;
var i = 2; var j = 4L; var x = 3.14f; var y = 4.600; var c = 'X'; var napis = "Witaj Świecie";
Literały
Zapis w kodzie C# | Typ | Opis |
---|---|---|
1 | int | Liczba całkowita ze znakiem |
1U | uint | Liczba całkowita bez znaku |
1L | long | Liczba całkowita 64-bitowa |
1UL | ulong | Liczba całkowita 64-bitowa bez znaku |
1F | float | Liczba |
1.2M | decimal | Liczba całkowita ze znakiem o zwiększonej precyzji (dzięki zapisowi podobnemu do liczb zmiennoprzecinkowych) |
Zapis w kodzie C# | Typ | Opis |
---|---|---|
1.0 | double | Liczba zmiennoprzecinkowa |
1.2E3 | double | Liczba zmiennoprzecinkowa w notacji naukowej ($1.2\times 10^{3} = 12000.0$ ) |
0123 | uint | Liczba ósemkowa |
0x1a | uint | Liczba szesnastkowa |
Operatory arytmetyczne
Operator | Opis | Przykład |
---|---|---|
+ | dodawanie argumentów | x = x + 1 |
- | odejmowanie argumentów | x = y - 5 |
* | mnożenie operatorów | x = 5 * 5 |
/ | dzielenie operatorów | x = x / y |
% | operacja dzielenia modulo | x = x % 3 |
++ | zwiększanie wartości o 1 | x++ lub ++x |
-- | zmniejszanie wartości o 1 | x-- lub --x |
Kolejność operacji: mnożenie i dzielenie przed odejmowaniem i odejmowaniem.
Pierwszeństwo maja wyrażenia w nawiasach ( )
Przykład:
double x = 3.14; int k = 42; char znak = 'C'; k = k + 1; x = k - 100; x = x * x; k = x / 2; k++; --k;
Kolejność operacji
Jaki będzie wynik?
1 + 2 * 3 (1 + 2) * 3 1 / 2 1.0 / 2 1 / 2.0 1.0 / 2.0 * 3.0
int i = 1; Console.WriteLine(++i); Console.WriteLine(i++);
Ćwiczenie: pole i obwód koła
Napisz program, który wyznaczy pole oraz obwód koła o podanym promieniu $r=2$.
Liczba $\pi$ w C#
Math.PI
W jaki sposób wczytać liczbę z konsoli?
Klasa Convert
k = System.Convert.ToInt32(x); y = System.Convert.ToDouble(x);
W jaki sposób wypisac liczbę w konsili?
int a = 42; Console.WriteLine("To jest liczba " + a.ToString()); Console.WriteLine("To jest liczba {0}", a); Console.WriteLine($"Liczba wynosi {a}");
Zadanie 2: kalkulator
Napisz program, który poprosi użytkownika o podanie 2 liczb rzeczywistych a następnie wypisze ich sumę, różnicę, iloczyn oraz iloraz.
Przykładowy wynik działania programu:
Podaj dwie liczby: 1 3 Oto wynik: 1.0 + 3.00 = 4.000 1.0 - 3.00 = -2.000 1.0 * 3.00 = 3.000 1.0 / 3.00 = 0.333
Co się stanie gdy druga podana liczba będzie zerem?
Operatory relacji
Operator | Opis | Przykład |
---|---|---|
== | czy równe ? | x == y |
> | czy większe ? | x > y |
< | czy mniejsze ? | x < y |
>= | czy większe lib równe? | x >= y |
<= | czy mniejsze lub równe? | x <= y |
Przykład
if ( x == 0 ) { Console.WriteLine("Pamiętaj cholero nie dziel przez zero!"); }
Operatory logiczne
Operator | Opis | Przykład |
---|---|---|
&& | operator i (AND) | x>5 && x<10 |
|| | operator lub (OR) | x>5 || x <=-5 |
! | negacja (operator NOT) | !x |
Przykład
if ( a > 0 && b < 0 ) { Console.WriteLine("Obie wartości są dodatnie"); }
Operatory przypisania
Operator | Opis | Przykład |
---|---|---|
= | prosty operator przypisania. | x = y + z |
+= | operator dodawania i przypisywania w jednym. | x += y |
-= | operator odejmowania i przypisywania w jednym. | x -= 2.3 |
*= | operator mnożenia i przypisania w jednym. | x*=Math.PI |
/= | operator dzielenia i przypisania w jednym. | x /= 2 |
Inne operatory
sizeof() | zwraca rozmiar typu danych w bajtach | sizeof(int) , rozmiar: 4 |
typeof() | zwraca typ klasy | typeof(klasa) |
? : | wynikiem jest jedna z dwóch wartość zależnie od spełnienia warunku | x = (a < b) ? „TAK” : „NIE” |
is | sprawdzenie, czy obiekt jest danego typu | if (x is Int32) |
as | rzutowanie bez zwracania wyjątku jeżeli rzutowanie się nie uda (tylko typy referancyne i nulowalne) | y = x as string |
Rzutowanie (konwersja) typów
Rzutowanie jawne
(double)42 // wynik 42.0 (int)0.99 // wynik 0, utrata precyzji !!!
Rzutowanie niejawne
double x = 42; // Jest OK int x = 0.5; // NIE jest OK, błąd int x = (int)0.5; // Jawne rzutowanie, jest OK ale utrata dokładności
Konwersja do/z łańcuchów
Zamiana łańcuchów na typy liczbowe
- Klasa System.Convert
ToInt32(), ToDouble(), ToString(), …
double x = Convert.ToDouble(Console.ReadLine());
- Metoda
Parse()
dla każdego typu wbudowanego
double x = double.Parse(Console.ReadLine());
Zamiana na łancych znakowy:
- Metoda
ToString()
każdego obiektu
int x = 42; Console.WriteLine(x.ToString());
- Metoda
Frormat(wartosc)
klasy String
int x = 42; string s = String.Format("Liczba x = {0}", x);
Formatowanie wartości
Składnia: {indeks:format}
double x = 2.0 / 3.0; Console.WriteLine("Zmienna x = {0}", x); Console.WriteLine("Zmienna x = {0:F}", x); Console.WriteLine("Zmienna x = {0:F1}", x); Console.WriteLine("Zmienna x = {0:C}", x); Console.WriteLine("Zmienna x = {0:P1}", x);
Zmienna x = 0,6666666666666666 Zmienna x = 0,667 Zmienna x = 0,7 Zmienna x = 0,67 zł Zmienna x = 66,7%
Format | Opis | Przykład |
---|---|---|
F lub f | fixed-point liczba z przecinkiem | „F” → 1,294 |
„F1” → 1,3 | ||
E lub e | notaca naukowa | „E” → 1,123E+002 |
C lub c | waluta (zależnie od ustawień lokalizaci) | „C” → 10,10 zł |
P lub p | procent wartości ułamkowej | „P” → 10,1% |
X lub x | zapis szesnastkowy (tylko liczby całkowite) | „X” → FF |
Zobacz: Standard numeric format strings
Wyrównanie wartości
Składnia: {indeks,szerokość:format}
double x = 1.29; Console.WriteLine("|{0}|", x); Console.WriteLine("|{0,10}|", x); Console.WriteLine("|{0,-10}|", x); Console.WriteLine("|{0,-10:F1}|", x);
|1,29| | 1,29| |1,29 | |1,3 |
Użycie formatowania
String.Format(format)
- łancuchy interpolowane
$„{zmianna:format}”
- metoda
ToString(format)
double x = 1.29; var s1 = String.Format("|{0,-10:F1}|", x); var s2 = $"|{x,-10:F1}|"; var s3 = x.ToString("F1"); // tylko format wartości Console.WriteLine(s1 + '\n' + s2 + '\n' + s3 );
|1,3 | |1,3 | 1,3