Programming in C
John Samuel
CPE Lyon
                        Year: 2017-2018
                        Contact: john(dot)samuel(at)cpe(dot)fr
                        
| Class | Dates | 
|---|---|
| Class 1 | 12th September | 
| Class 2 | 13th September | 
| Class 3 | 19th September | 
| Class 4 | 20th September | 
| Class 5 | 26th September | 
| Class 6 | 3rd October | 
				Note: No classes (Not an object-oriented programming
				language!!!)
                        
                             
		        
			/* File: hello1.c 
 * prints message on the output screen. 
				 * author: John Samuel 
 * This is a multiline comment 
				 */ 
 
 #include
				<stdio.h> // headers 
 
 // This is a
				single-line comment 
 int main()
				{ 
   printf("Hello
					World!!!");
   return
				0;
 }
			
		
				/* File: hello2.c 
 * prints message on the output screen
				using a variable. 
 * author: John Samuel 
 * This
				is a multiline comment 
 */ 
 
 #include <stdio.h> // headers 
				
 int main()
				{ 
   int year = 2017;
				//variable declaration 
   printf("Hello World!!! This is year %d", year);
   return 0;
 }
			
		$ gcc hello1.c
			
				$./a.out 
 Hello World!!!
			
		
				$ gcc -o hello hello2.c
			
			
				$./hello 
 Hello World!!! This is year 2017
			
		// This is a single line comment
                        
			/* This is a multi-line 
			        * comment 
				    */
		| Data Type | C keyword | Examples | 
|---|---|---|
| characters | char | 'h', 'a', ... | 
| integers | short, int, long, long long | ...,-1,0,1,... | 
| floating point numerals | float, double, long double | 3.14, 3.14e23 | 
| enumeration | enum | STUDENT, INTERN | 
| C keyword | Range | 
|---|---|
| characters | signed char, unsigned char | 
| integers | signed short, signed int, signed long, signed long long, unsigned short, unsigned int, unsigned long, unsigned long long | 
Size limits of basic data types are machine-dependent!
			  char my_char_var = 'a';
			
			Note: See the use of underscores in naming variables
			  char my_char_var = 'a';
			  unsigned char my_uchar_var = 234;
			  short my_short_var = -12;
			  unsigned short my_ushort_var = 65535;
			  int my_int_var = 12;
			  unsigned int my_uint_var = 3456;
			  long my_long_var = -1234553;
			  unsigned long my_ulong_var = 234556;
			  long long my_llong_var = 1123345;
			  unsigned long long my_ullong_var = 1234567;
			  float my_int_var = 3.14;
			  double my_uint_var = 3.14E-12;
			  long double my_long_var = 3.14E-22;
			
		
			  enum status {STUDENT, INTERN};
			  enum status  s = STUDENT;
			
			
			  enum status {STUDENT=1, INTERN};
			
			
			  enum boolean {FALSE=0, TRUE};
			
			Note: enum: unsigned int
| C keyword | Range | 
|---|---|
| signed char | [SCHAR_MIN, SCHAR_MAX] | 
| unsigned char | [UCHAR_MIN, UCHAR_MAX] | 
| C keyword | Range | 
|---|---|
| (signed) short int | [SHRT_MIN, SHRT_MAX] | 
| unsigned short int | [0, USHRT_MAX] | 
| (signed) int | [INT_MIN, INT_MAX] | 
| unsigned int | [0, UINT_MAX] | 
| (signed) long | [LONG_MIN, LONG_MAX] | 
| unsigned long | [0, ULONG_MAX] | 
| (signed) long long | [LLONG_MIN, LLONG_MAX] | 
| unsigned long long | [0, ULLONG_MAX] | 
| C keyword | Range | 
|---|---|
| float | [FLT_MIN, FLT_MAX] | 
| double | [DBL_MIN, DBL_MAX] | 
| long double | [LDBL_MIN, LDBL_MAX] | 
			  sizeof  (char) //data type 
			  sizeof  (my_uchar_var) //variable
			
		
			  printf("%d", 
			  	my_int_var);
			  printf("%f", 
			  	my_float_var);
			
                         
			| C keyword | Format string | 
|---|---|
| char | c | 
| unsigned char | hhu | 
| short | hd | 
| unsigned short | hu | 
| int | d, i | 
| unsigned int | u | 
| long int | ld | 
| unsigned long int | lu | 
| C keyword | Format string | 
|---|---|
| long long int | lld | 
| unsigned long long int | llu | 
| float | f, F | 
| double | g, G | 
| long double | Lf | 
| string of characters | s | 
| Character | Format string | 
|---|---|
| Newline | \n | 
| Tab | \t | 
			  
                                 int
                              value = 0b10100100;
                          
                        
			  
                                 int
                              value = 0b10100100;
                              
                        
   printf("octal value: %o\n", value);
                          
			  
                                 int
                              value = 0b10100100;
                              
                        
   printf("hexadecimal value: %x\n", value);
                          
| Operator | Purpose | 
|---|---|
| + | addition | 
| - | subtraction | 
| * | multiplication | 
| / | division | 
| % | modulus operation | 
			int 
                            a = 20,
			    b = 10;
                
			| Operator | Example | Result | 
|---|---|---|
| + | a + b | 30 | 
| - | a - b | 10 | 
| * | a * b | 200 | 
| / | a / b | 2 | 
| % | a % b | 0 | 
| Operator | Purpose | 
|---|---|
| < | less than | 
| <= | less than or equal to | 
| > | greater than | 
| >= | greater than or equal to | 
| == | equal to | 
| != | not equal to | 
			int 
                            a = 20,
			    b = 10;
                
			| Operator | Example | Result | 
|---|---|---|
| < | a < b | 0 | 
| <= | a <= b | 0 | 
| > | a > b | 1 | 
| >= | a >= b | 1 | 
| == | a == b | 0 | 
| != | a != b | 1 | 
			int 
                            a = 20,
			    b = 0;
                
			| Operator | Purpose | Example | Result | 
|---|---|---|---|
| ! | Not | !a | 0 | 
| && | And | a && b | 0 | 
| || | Or | a || b | 1 | 
			int 
                            a = 20,
			    b = 0;
                
			| Operator | Example | Result | 
|---|---|---|
| a++ | b = a++ | a = 21, b = 20 | 
| ++a | b = ++a | a = 21, b = 21 | 
| a-- | b = a-- | a = 19, b = 20 | 
| --a | b = --a | a = 19, b = 19 | 
			int 
                            a = 0x01000100;
                
			| Operator | Purpose | Example | Result | 
|---|---|---|---|
| ~ | NOT | ~a | 0xffffffbb | 
| & | AND | a & 0x4 | 0x4 | 
| | | OR | a | 0x2 | 0x46 | 
| ^ | XOR | a ^ 0x4 | 0x40 | 
| << | left shift | a << 1 | 0x88 | 
| >> | right shift | a >> 1 | 0x22 | 
			int 
                            a = 20,
			    b = 0;
                
			| Operator | Purpose | Example | 
|---|---|---|
| = | equal | a = b | 
| += | addition assignment | a += b | 
| -= | substraction assignment | a -= b | 
| *= | multiplication assignment | a *= b | 
| /= | division assignment | a /= b | 
| %= | modulo assignment | a %= b | 
Note: a op = b ::- a = a op b
| Operator | Purpose | Example | 
|---|---|---|
| &= | bitwise AND assignment | a &= b | 
| |= | bitwise OR assignment | a |= b | 
| ^= | bitwise XOR assignment | a ^= b | 
| <<= | bitwise left shift assignment | a <<= b | 
| >>= | bitwise right shift assignment | a >>= b | 
Note: a op = b ::- a = a op b
if (condition) {
			 ...
			}
		
			int 
                            a = 20,
			    b = 0;
                        if (a >
                            b) {
			 printf("a is greater than b");
			}
		if (condition1) {
			 ...
			} else if (condition2) {
			 ...
			} else {
			 ...
			}
			
			
				Note: Non-zero values are considered true-value statements 
				Note: else is optional
			
			int 
                            a = 20,
			    b = 0;
                        if (a >
                            b) {
			 printf("a is greater than b");
			} else if (a <
                            b) {
			 printf("a is less than b");
			} else {
			 printf("a is equal to b");
			}
			
			Note: Non-zero values are considered true-value statements
				switch (expression) { 
				 case value1 : statements1 
				 case value2 : statements2 
				 ...
				 default : statementsn 
				}
			
                        Note: expression must be one of char, short, int or long
			    int 
                                a = 20;
				switch (a) { 
				 case 10 : statement1 
                                  break;
				 case 20 : statement2 
				 case 30 : statement3 
                                  break;
				 ...
				 default : statementn 
				}
			
			Note: Both statement2 and statement3 will be executed.
if (1) {
			  printf("Hi");
			} else {
			  printf("Hello");
			}
			
		for(initialization;condition;updation){
			 ...
			} 
			
		
			int 
                                a = 0;
                        for( a = 0;
                                a > 10;
                                a++){
			 ...
			} 
			
		
			int 
                                a = 0;
                        for(; 
                                a > 10;
                                ){
			 ...
			} 
			
			Note: Any or all of initialization, condition or updation statements can be missing.
                 	int 
                                a = 0;
                        for( a = 0;
                                a > 10;
                                a++){
			 ...
			  a += 2 ;
			 ...
			} 
			
		while(condition){
			 ...
			} 
			
		
                 	int 
                                a = 20;
                        while(a > 0){
			 ...
			 a--;
			 ...
			} 
			
		
                	int 
                                a = 0;
                        while(a < 20){
			 ...
			 a++;
			 ...
			} 
			
		do{
			 ...
			} while(condition);
			
		
                	int 
                                a = 20;
                        do{
			 ...
			  a --;
			 ...
			} while(a > 0);
			
		
                	int 
                                a = 0;
                        do{
			 ...
			  a ++;
			 ...
			} while(a < 20);
			
		do{
			 ...
			 if (condition1) {
			  ...
			  break;
			 }
			 ...
			} while(condition);
			
		do{
			 ...
			 if (condition1) {
			  ...
			  continue;
			 }
			 ...
			} while(condition);
			
		while(condition){
			 ...
			 if (condition1) {
			  ...
			  break;
			 }
			 ...
			};
			
		while(condition){
			 ...
			 if (condition1) {
			  ...
			  continue;
			 }
			 ...
			};
			
		for(initialization;condition;updation){
			 ...
			 if (condition1) {
			  ...
			  break;
			 }
			 ...
			};
			
		for(initialization;condition;updation){
			 ...
			 if (condition1) {
			  ...
			  continue;
			 }
			 ...
			};
			
		are a collection of homogeneous elements
are rectangular arrays
are rectangular arrays
 
                        
				char name[20];
			
                        Note: C doesn't have a special data type called 'string'.
				int iarray[20];
				float farray[20];
				double darray[20];
			
		
				int i; 
				int array[20];
				for ( i = 0; 
					i < 20; i++) {
				 array[i] = 
					i;
				}
			
		
				int prices[5] = {
				11, 12, 13, 14, 15 }; 
				int rooms[] = {
				301, 302, 303 };
				char message[] = "Hello World!!";
			
                        Note: We didn't specify size of rooms and message.
				int prices[2][2] = {
				    {11, 12}, 
				    {13, 14} 
				 }; 
				int rooms[][] = {
				    {201, 202}, 
				    {301, 302} 
				 }; 
				char message[2][8] = 
					{"Hello", "World!!"};