diff --git a/tutorial/address_in.c b/tutorial/address_in.c new file mode 100644 index 0000000000000000000000000000000000000000..6e1c25e3bcd551ba779b11d337f935ce6221fa8c --- /dev/null +++ b/tutorial/address_in.c @@ -0,0 +1,12 @@ +#include +#include + +void double_in(int *in){ + *in *= 2; +} + +int main(){ + int x= 10; + double_in(&x); + printf("x is now %i.\n", x); +} diff --git a/tutorial/assert.c b/tutorial/assert.c new file mode 100644 index 0000000000000000000000000000000000000000..9fde128301cc1b1650f75fa3bd2065e9e582312b --- /dev/null +++ b/tutorial/assert.c @@ -0,0 +1,11 @@ +#include + +int main(){ + int list[100]; + int *list2 = list; //Declares list2 as a pointer-to-int, + //pointing to the same block of memory list points to. + + *list2 = 7; //list2 is a pointer-to-int, so *list2 is an int. + + assert(list[0] == 7); +} diff --git a/tutorial/divisions.c b/tutorial/divisions.c new file mode 100644 index 0000000000000000000000000000000000000000..d277f57131320437663d867ead85decab281758e --- /dev/null +++ b/tutorial/divisions.c @@ -0,0 +1,7 @@ +#include + +int main(){ + printf("3./5=%g\n", 3./5); + printf("3/5=%i\n", 3/5); + printf("3%%5=%i\n", 3%5); +} diff --git a/tutorial/do_while.c b/tutorial/do_while.c new file mode 100644 index 0000000000000000000000000000000000000000..c178f937910f23e81cfdcfc6d6273ff3dd22b663 --- /dev/null +++ b/tutorial/do_while.c @@ -0,0 +1,15 @@ +#include + +void loops(int max){ + int i=0; + do { + printf("Hello #%i\n", i); + i++; + } while (i < max); //Note the semicolon. + +} + +int main(){ + loops(3); //prints three greetings + loops(0); //prints one greeting +} diff --git a/tutorial/error_print.c b/tutorial/error_print.c new file mode 100644 index 0000000000000000000000000000000000000000..321a45d7b0566aa4f6228c05eaf6d4006b4342ed --- /dev/null +++ b/tutorial/error_print.c @@ -0,0 +1,10 @@ +#include + +void error_print(FILE *ef, int error_code, char *msg){ + fprintf(ef, "Error #%i occurred: %s.\n", error_code, msg); +} + +int main(){ + FILE *error_file = fopen("example_error_file", "w"); //open for writing + error_print(error_file, 37, "Out of karma"); +} diff --git a/tutorial/for_loop.c b/tutorial/for_loop.c new file mode 100644 index 0000000000000000000000000000000000000000..aa2e7c88315e373470a191d805084c15cd307aed --- /dev/null +++ b/tutorial/for_loop.c @@ -0,0 +1,7 @@ +#include + +int main(){ + for (int i=0; i < 10; i++){ + printf("Hello #%i\n", i); + } +} diff --git a/tutorial/for_loop2.c b/tutorial/for_loop2.c new file mode 100644 index 0000000000000000000000000000000000000000..010c226f85fcee28d1436e4b7af9dc32c0c52f2f --- /dev/null +++ b/tutorial/for_loop2.c @@ -0,0 +1,5 @@ +#include + +int main(){ + for (int i=0; i < 10; i++) printf("Hello #%i\n", i); +} diff --git a/tutorial/hello.c b/tutorial/hello.c new file mode 100644 index 0000000000000000000000000000000000000000..e48477453e9506ef47e25b614ec4ee41e3809ec6 --- /dev/null +++ b/tutorial/hello.c @@ -0,0 +1,5 @@ +#include + +int main(){ + printf("Hello, world.\n"); +} diff --git a/tutorial/if_else.c b/tutorial/if_else.c new file mode 100644 index 0000000000000000000000000000000000000000..2a13464d7d776ab2d8df9f07b20a016323f2836c --- /dev/null +++ b/tutorial/if_else.c @@ -0,0 +1,14 @@ +#include + +int main(){ + if (6 == 9) + printf("Six is nine.\n"); + + int x=3; + if (x==1) + printf("I found x; it is one.\n"); + else if (x==2) + printf("x is definitely two.\n"); + else + printf("x is neither one nor two.\n"); +} diff --git a/tutorial/item_seven.c b/tutorial/item_seven.c new file mode 100644 index 0000000000000000000000000000000000000000..8bca9be007dbfa13d04da79aed1f285cbdd92fb2 --- /dev/null +++ b/tutorial/item_seven.c @@ -0,0 +1,12 @@ +#include + +int intlist[10]; + +int main(){ + int len=20; + char string[len]; + + intlist[7] = 7; + snprintf(string, 20, "Item seven is %i.", intlist[7]); + printf("string says: <<%s>>\n", string); +} diff --git a/tutorial/makefile b/tutorial/makefile new file mode 100644 index 0000000000000000000000000000000000000000..7d107ab946ab9c033d64b77f63ff2179b6325e83 --- /dev/null +++ b/tutorial/makefile @@ -0,0 +1,2 @@ +CFLAGS=-g -Wall -std=gnu11 -O3 +LDLIBS=-lm diff --git a/tutorial/manual_memory.c b/tutorial/manual_memory.c new file mode 100644 index 0000000000000000000000000000000000000000..0f6af12d1f51342c1861fabc77bf20fb0b045c0c --- /dev/null +++ b/tutorial/manual_memory.c @@ -0,0 +1,15 @@ +#include //malloc and free +#include + +int main(){ + int *intspace = malloc(3000*sizeof(int)); + for (int i=0; i < 3000; i++) + intspace[i] = i; + + FILE *cf = fopen("counter_file", "w"); + for (int i=0; i < 3000; i++) + fprintf(cf, "%i\n", intspace[i]); + + free(intspace); + fclose(cf); +} diff --git a/tutorial/pointer_in.c b/tutorial/pointer_in.c new file mode 100644 index 0000000000000000000000000000000000000000..dcf9630b0c2a44d4e6db1fc7fa4047b3508bba1f --- /dev/null +++ b/tutorial/pointer_in.c @@ -0,0 +1,13 @@ +#include +#include + +void double_in(int *in){ + *in *= 2; +} + +int main(){ + int *x= malloc(sizeof(int)); + *x= 10; + double_in(x); + printf("x now points to %i.\n", *x); +} diff --git a/tutorial/ratio_s.c b/tutorial/ratio_s.c new file mode 100644 index 0000000000000000000000000000000000000000..0d7ec547c97148bcf17fc535948dcb58f1c88782 --- /dev/null +++ b/tutorial/ratio_s.c @@ -0,0 +1,31 @@ +#include + +typedef struct { + int numerator, denominator; + double value; +} ratio_s; + +ratio_s new_ratio(int num, int den){ + return (ratio_s){.numerator=num, .denominator=den, .value=num/(double)den}; +} + +void print_ratio(ratio_s r){ + printf("%i/%i = %g\n", r.numerator, r.denominator, r.value); +} + +ratio_s ratio_add(ratio_s left, ratio_s right){ + return (ratio_s){ + .numerator=left.numerator*right.denominator + + right.numerator*left.denominator, + .denominator=left.denominator * right.denominator, + .value=left.value + right.value + }; +} + +int main(){ + ratio_s twothirds= new_ratio(2, 3); + ratio_s aquarter= new_ratio(1, 4); + print_ratio(twothirds); + print_ratio(aquarter); + print_ratio(ratio_add(twothirds, aquarter)); +} diff --git a/tutorial/sizeof.c b/tutorial/sizeof.c new file mode 100644 index 0000000000000000000000000000000000000000..bd3ec298cba8fca87f92fad249b767b851f3b17d --- /dev/null +++ b/tutorial/sizeof.c @@ -0,0 +1,13 @@ +#include + +typedef struct { + int numerator, denominator; + double value; +} ratio_s; + +int main(){ + printf("size of two ints: %zu\n", 2*sizeof(int)); + printf("size of two ints: %zu\n", sizeof(int[2])); + printf("size of a double: %zu\n", sizeof(double)); + printf("size of a ratio_s struct: %zu\n", sizeof(ratio_s)); +} diff --git a/tutorial/sqrt.c b/tutorial/sqrt.c new file mode 100644 index 0000000000000000000000000000000000000000..29d0be8317e711cac669640c6a7a9045d68fff58 --- /dev/null +++ b/tutorial/sqrt.c @@ -0,0 +1,8 @@ +#include //The square root function is declared here. +#include + +int main(){ + double x = 49; + printf("The truncated square root of x is %g.\n", + x > 0 ? sqrt(x) : 0); +} diff --git a/tutorial/ten_pi.c b/tutorial/ten_pi.c new file mode 100644 index 0000000000000000000000000000000000000000..52d6df591111b0a1e9332b7a69a1c8d7edea4b58 --- /dev/null +++ b/tutorial/ten_pi.c @@ -0,0 +1,7 @@ +#include + +int main(){ + double pi= 3.14159265; //POSIX defines the constant M_PI in math.h, by the way. + int count= 10; + printf("%g times %i = %g.\n", pi, count, pi*count); +} diff --git a/tutorial/while.c b/tutorial/while.c new file mode 100644 index 0000000000000000000000000000000000000000..5ed7ae064d6ebd5f8844e6ea3a3225d4d58c45a1 --- /dev/null +++ b/tutorial/while.c @@ -0,0 +1,9 @@ +#include + +int main(){ + int i=0; + while (i < 10){ + printf("Hello #%i\n", i); + i++; + } +}