#include #include int my_strlen(char * str); int main() { // Kernighan&Ritchie, pag. 36 char ch; // 1 byte // char: signed o unsigned? dipende dall'implementazione del compilatore int a; // 32 bit (4 byte); con segno float fa; // floating point, precisione singola double da; // floating point, precisione doppia ///////////////////// short int short_a; // 16 bit (2 byte); intero con segno long int long_a; // intero 64 bit (8 byte); con segno unsigned int u_int_a; // intero senza segno, 32 bit signed int s_int_a; // intero con segno unsigned char u_ch; // intero senza segno, 1 byte signed char s_ch; // intero con segno, 1 byte a = 1234; // il valore 1234 è di tipo int long_a = 123456789L; // 123456789L è di tipo long int //a = 0x0000FFFF; // 32 bit, base 16 ch = 'a'; // 1 byte; carattere 'a' , valore 97 ch = 97; // come sopra int b = 100; printf("a=%d b=%d a+b=%d\n", a, b, a+b); a = 0x0000FFFF; // 32 bit, base 16 printf("a in base esadecimale: %x \n", a); //printf("\n"); //printf("finito"); // printf scrive su un file handler specifico: 1 (stdout) // quando il programma viene eseguito dalla shell, // questa prepara tre file handler già aperti: // 0: stdin // 1: stdout // 2: stderr // voglio scrivere un carattere (char) su stdout // ch è di tipo char; intero di dimensione 1 byte ch = 'A'; // intero 65 // voglio scrivere ch come valore intero // oppure scrivo ch come carattere printf("ch come intero: %d\n", ch); printf("ch come char: %c\n", ch); printf("\n\n"); // operatore sizeof() printf("sizeof(char): %d bytes\n", sizeof(char)); printf("sizeof(int): %d bytes\n", sizeof(int)); printf("sizeof(long int): %d bytes\n", sizeof(long int)); // voglio scrivere i numeri da 0 a 9 for (int i = 0; i < 10; i++) { printf("%d\n", i); } printf("\n\n"); // voglio scrivere (su stdout) i caratteri da 'A' a 'Z' for (ch = 'A'; ch <= 'Z'; ch++) { printf("%c\n", ch); } printf("\n\n"); // lo stesso ciclo sopra, con valori int: for (ch = 65; ch <= 90; ch++) { printf("%c\n", ch); } ch = 0; ch = '\0'; // il carattere (1 byte) con valore 0 // Kernighan&Ritchie pag. 37-38 ch = '\013'; // carattere con valore in base 8: 13 => valore decimale: 11 ch = '\xb'; // carattere con con valore in base 16: // b => 11 printf("\n\n"); // scriviamo il valore minimo ed il valore massimo dei tipi dati: printf("valore minimo di char: %d\n", CHAR_MIN); printf("valore massimo di char: %d\n", CHAR_MAX); printf("sizeof(char): %d bytes\n", sizeof(char)); printf("\n\n"); // 5 / 9 // cosa viene calcolato? printf("5 / 9 = %d \n", 5 / 9); printf("5 / 9 = %f \n", 5.0 / 9.0); printf("\n"); // C = 5/9 * (F - 32) int fahr; int celsius; for (fahr = 0; fahr <= 300; fahr = fahr + 20) { celsius = 5 * (fahr - 32) / 9; printf("%d %d\n", fahr, celsius); } printf("\n\n"); char * str = "hello world!"; // \0 segnala la terminazione della stringa di caratteri // il carattere \0 è aggiunto automaticamente dal compilatore char * numero = "0123456789"; printf("str = %s \n", str); printf(str); ch = str[0]; // leggo il carattere alla posizione 0 del vettore str // ch = 'h' printf("str[0] = %c\n", str[0]); // %c: scrivi come carattere printf("str[0] = %d\n", str[0]); // %d: scrivi come intero decimale printf("str[1] = %c\n", str[1]); // .... printf("\n\n"); int position = 0; while (str[position] != '\0' ) { printf("#%d %c \n", position, str[position]); position++; } printf("\n\n"); // scrivere una funzione my_strlen() // che prende come parametro una stringa di caratteri // e restituisce la sua 'lunghezza', cioè il numero di caratteri della stringa. int result = my_strlen("123"); // mi aspetto che restituisca il valore 3 printf("result=%d\n", result); result = my_strlen(""); // stringa vuota; mi aspetto il valore 0 printf("result=%d\n", result); } // è una funzione che restituisce un valore di tipo int // prende come parametro un valore di tipo 'char *' (puntatore) int my_strlen(char * str) { int position = 0; // percorro tutta la stringa di caratteri, // a partire dalla posizione 0 // fino a quando incontro il carattere terminatore di stringa (valore 0) while (str[position] != '\0' ) { position++; } return position; }