Introduction
Basic info about the course Aim: To teach basic programming skills Course web site: http://www.cmpe.boun.edu.tr/courses/cmpe150/fall2008 There is no difference between the sections. There are some changes in the organization of the course. 5 hours of class every week 1 hour lecture and 2 hours PS (lectured by the instructor) 2 hours lab (taught by an assistant; student assistants will also help the assistant) Fall 2008 CMPE 150 – Introduction to Computing
VERY IMPORTANT NOTICE All announcements are made through the CMPE150 e-mail list. The list has been constructed using your e-mail addresses in the Registration system. Make sure that your address in the Registration system is: your BOUN address, you check it every day, its quota is not exceeded and it is functional. (We will re-construct the list after the add-drop period is over, so change it now if your Registration e-mail address is not from BOUN.) Note that Yahoo, GMail, Hotmail, and similar addresses frequently have problems or the messages may go to the spam folder. It is completely your responsibility to make sure that your account receives the messages properly. We will send the announcements via the mailing list and assume you read it the same day. There are more than 350 students in this course and we do not have any additional means to contact you if your e-mail address is not working. NO EXCUSES WILL BE ACCEPTED FOR AN ANNOUNCEMENT ALREADY MADE THROUGH THE MAILING LIST. Fall 2008 CMPE 150 – Introduction to Computing
Basic info about the course You will have 2 midterms 1 final 3 projects throughout the semester. The projects are NOT mandatory  (except for CMPE students) . However, there will be a question closely related with the project in every exam. Fall 2008 CMPE 150 – Introduction to Computing
Grading Midterm 1 30% Midterm 2 30% Final 40% CMPE students start with -15 points   To compensate for this, they have to submit all of their projects. Fall 2008 CMPE 150 – Introduction to Computing
Exams and labs The exams are in front of the computer. You will use our online compiler in the exams. You will use the same online compiler also in the labs. THEREFORE, YOU  MAY  CONCLUDE THAT  YOU  WILL  NOT  DO  WELL  IN  THE EXAMS  IF  YOU  DO  NOT  ATTEND  THE LABS. No attendance taken in class or lab. However, we  STRONGLY  recommend that you attend the labs. Fall 2008 CMPE 150 – Introduction to Computing
Exams and labs You will be assigned a username and password for the online compiler. In the exams, you will receive an additional password. It is your responsibility to ensure that no one else sees this password. NO MERCY ABOUT CHEATING. We do not increase (or even decrease) your letter grades at the end of the semester. Don’t ask for it. Fall 2008 CMPE 150 – Introduction to Computing
Course outline 1- Introduction, printf, scanf, variables, operators, constants 2- Data types, assignment type conversions, type casting, post/pre-increment, type casting  3- If, nested if, logical operators, switch 4- While, for, do-while 5- Nested loops, break, continue 6- Functions, scope, macro-substitution 7- Pointers, variable parameters (aka. call by reference or pointers as function arguments) 8- Arrays, passing arrays to functions, sorting and binary search 9- Strings 10- Multi-dimensional arrays 11- Structs 12- Review Note that pointers (except for variable parameters) are not included) in CMPE150 anymore. Fall 2008 CMPE 150 – Introduction to Computing
Let’s get started ! We will first learn how a computer operates. Fall 2008 CMPE 150 – Introduction to Computing
A computer system A computer system is composed of: a monitor, a keyboard, a mouse, and a case (that contains several controlling components such as processor and alike), and also other peripherals like CD player (might have been included in the case), printer,  scanner, modem, etc. all connected together Fall 2008 CMPE 150 – Introduction to Computing
Input and output devices Fall 2008 CMPE 150 – Introduction to Computing Input Input Input Input Input Output Output /Output /Output
A computer system Note that everything could be packed in a single box, but the concepts are the same. Fall 2008 CMPE 150 – Introduction to Computing
A computer system Everything we had in the previous slide is  hardware . i.e., physical components that implement what is requested by the  software . Fall 2008 CMPE 150 – Introduction to Computing HARDWARE OPERATING SYSTEM (Windows, Linux, MacOS, etc.) APPLICATIONS (Eg: Word, Excel, Explorer, MSN, C Compiler,  your own programs, etc.) SOFTWARE
A computer system In this course, we will learn how to develop our own software (using C language), but we need to understand how our programs will be executed by the hardware. Fall 2008 CMPE 150 – Introduction to Computing
CPU: Central Processing Unit In terms of hardware, what is important for us is the CPU. It does all processing and control. Everything is controlled and executed by the CPU. Fall 2008 CMPE 150 – Introduction to Computing
CPU: Central Processing Unit Fall 2008 CMPE 150 – Introduction to Computing Control Unit Registers Arithmetic & Logic Unit R1 R2 . . . Rm IR ...
How are the instructions executed? Fall 2008 CMPE 150 – Introduction to Computing Central Processing Unit (CPU) Control Unit Registers Arithmetic & Logic Unit instr  2 instr  3 ... instr  n instr  1 Program Main Memory R1 R2 . . . Rm IR ...
How do we write programs? Fall 2008 CMPE 150 – Introduction to Computing We write our programs in &quot;C language&quot;  (which is an English-like language) #include <stdio.h> int main() { printf(&quot;Hello world!&quot;); return 0; } We use a compiler (such as GCC, Visual C, Borland C, etc.) to translate our program from &quot;C language&quot; to  &quot;machine language&quot; Compile & Link This is the executable code in &quot;machine language.&quot; This is the only thing the computer can understand and run (execute). 1110101011001001010001010100101000010010100101010101000101001000100101001 (source code) (object code) (machine code or executable code)
Statement vs. Instruction Our source code (in C) is composed of  statements . Eg:  a=b+c/2; The corresponding machine code is composed of  instructions . Eg:  1101001010110010 (divide c by 2) 0110100100100101 (add it to b) 1010110110111011 (put the result in a) CPU is capable of executing instructions, not statements. Statements may be too complex. Compiler  implements   each statement using several instructions. Eg: The statement &quot; a=b+c/2; &quot; can be implemented as temp1 = c/2 a = b + temp1 Fall 2008 CMPE 150 – Introduction to Computing
Why have input/output? A program should not always produce the same output. O/w, you may keep the result and delete the program after you run it for the first time. A program should be consistent; i.e., it should not produce random results. Therefore, a program should take some  input , process it, and produce some  output  as the result of that input. Fall 2008 CMPE 150 – Introduction to Computing
Execution of an instruction Let’s see how an instruction like &quot; a=b+2 &quot; is executed. Assume initially  a  is  4  and  b  is  6 . Fall 2008 CMPE 150 – Introduction to Computing Central Processing Unit (CPU) Control Unit Registers Arithmetic & Logic Unit ... a=b+2 Main Memory R1 R2 . . . Rm IR ... b 6 6 ... a=b+2 2 8 a 4 Program
Welcome to C Programming Language Now that we have an overall understanding of the computer, we can start writing C programs. Remember: Fall 2008 CMPE 150 – Introduction to Computing We write our programs in &quot;C language&quot;  (which is an English-like language) #include <stdio.h> int main() { printf(&quot;Hello world!&quot;); return 0; } We use a compiler (such as GCC, Visual C, Borland C, etc.) to translate our program from &quot;C language&quot; to  &quot;machine language&quot; Compile & Link This is the executable code in &quot;machine language.&quot; This is the only thing the computer can understand and run (execute). 1110101011001001010001010100101000010010100101010101000101001000100101001 (source code) (object code) (machine code or executable code)
Our first C program: Hello World Every C program has a  main()  function. It wraps all the statements to be executed. We make use of previously written functions. They are provided by header files. Typically, we include the  standard input/output header  file, named  stdio.h . We write all statements inside the  main()  function. #include <stdio.h> int main() { printf(&quot;Hello world&quot;); return 0; } Fall 2008 CMPE 150 – Introduction to Computing
Need for input Note that the Hello World program has no input. Therefore, it always produces the same output: Hello World So, after we run this program once, we know what it will always produce. Therefore, we don’t need the program anymore; we can safely delete it. Definitely this is not what we want. (O/w, nobody will pay us   )  We want to write programs that can take input and produce different results according to the input. (Details of I/O functions will be covered in the labs.) Fall 2008 CMPE 150 – Introduction to Computing
A program that also performs input #include <stdio.h> int main() { int a, b, c; printf(&quot;Enter two numbers: &quot;); scanf(&quot;%d%d&quot;, &a, &b); c=a+b; printf(&quot;Result is %d  &quot;, c); return 0; } Enter two numbers: Result is 13 Fall 2008 CMPE 150 – Introduction to Computing C Program User screen _ _ _ \n 5   8 _ Read two integers (decimals) into variables a and b Display the value of variable c after the text &quot;Result is&quot;
Variables Operations (such as addition, subtraction, etc.) operate on operands. You need some space to store the value of each operand. A variable provides storage space for a value. Fall 2008 CMPE 150 – Introduction to Computing
Variables IMPORTANT:  The value of a variable can never be empty. The value is represented via multiple bits, each of which is either 0 or 1. So, the variable always has a value. When a local variable is defined, its initial value is undefined. In other words, it has an arbitrary value. (For the moment, we will not use global variables.) So, make sure that the variable has a valid value before you perform any operation based on that value. Fall 2008 CMPE 150 – Introduction to Computing
Variables Each variable consists of multiple bits. E.g.: Thus, every value is actually stored as a sequence of bits (1s and 0s) in the computer. The number of bits is called the size of the variable. The size of a variable depends on the type of the variable, the hardware, the operating system, and the compiler used. So, in your programs NEVER make assumptions about the size of a variable. The size may change due to the factors listed above, and your program will not work. Fall 2008 CMPE 150 – Introduction to Computing    2 13 +2 10 +2 9 +2 7 +2 5 +2 4 +2 2 +2 1 +2 0 =9911 0 0 1 0 0 1 1 0 1 0 1 1 0 1 1 1 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Variables #include <stdio.h> int main { int a, b, c; a=10; b=3; c=a-b; a=b+2; } Fall 2008 CMPE 150 – Introduction to Computing Program 10 7 3 5 a ... b ... c ...
Rules for identifier names While defining names for variables (and also functions, user-defined types, and constants in the future) you should obey the following rules: The first character of a name must be a letter or underscore (‘_’). The remaining characters must be letters, digits, or underscore. Only the first 31 characters are significant. Avoid reserved words such as int, float, char, etc. as identifier names. However, it is better to avoid starting identifier names with underscore. Also remember that C language is case-sensitive. It is a very good practice to use meaningful names. Fall 2008 CMPE 150 – Introduction to Computing
Rules for identifier names Valid: a, a1, count, no_of_students, B56, b_56 Invalid: 1a, sayı, int, $100 Valid but not recommended: _b56, Tuna, FB, GS, BJK, I_dont_remember_what_this_variable_means, a_very_very_long_identifier_name_1, a_very_very_long_identifier_name_2 Fall 2008 CMPE 150 – Introduction to Computing
Standard data types You have to specify the type of a variable when you define it. There are three standard data types: Integer (i.e., whole numbers) Float (i.e., real or floating-point numbers) Characters We will discuss user-defined types later in the course. Fall 2008 CMPE 150 – Introduction to Computing
Integers Syntax: int  variable_list; where  variable_list  is a comma-separated list of variable names. Each variable name may be followed by an optional assignment operator and a value for initialization. Eg: int a, b=10, c; Integer is a class of variable types. The most basic one is  int . The size may change, but the leftmost bit is used for the sign. The remaining bits represent the value in binary. Though the size of an int variable may vary, it is always limited, i.e., it contains a limited number of bits. Therefore, the maximum and minimum values that can be represented by an int variable is limited. Fall 2008 CMPE 150 – Introduction to Computing
Integers For example, assume in your system an integer has 16 bits. Leftmost bit is used for the sign, so 15 bits are left for the value. So, you have 2 15 =32,768 positive values, ranging from 0 to 32,767. Similarly, you have 32,768 negative values, this time ranging from -1 to -32,768. If you have 32 bits (4 bytes) for an integer, than the maximum value is 2 31 =2,147,483,647. Fall 2008 CMPE 150 – Introduction to Computing sign bit value 0 0 1 0 0 1 1 0 1 0 1 1 0 1 1 1
Integers There are variations of  int  such as  long int ,  short int ,  unsigned int . For each one of these types, you may ignore the word &quot;int&quot; and use  long ,  short , and  unsigned , respectively. The sizes of these types are ordered as follows: short int ≤ int ≤ long int Fall 2008 CMPE 150 – Introduction to Computing
Floating-point numbers Syntax: float  variable_list; Float type is used for real numbers. Note that all integers may be represented as floating-point numbers, but not vice versa. Fall 2008 CMPE 150 – Introduction to Computing
Floating-point numbers Similar to integers, floats also have their limits: maximum and minimum values are limited as well as the precision. Fall 2008 CMPE 150 – Introduction to Computing Lower limit Upper limit The value you want to store Due to loss of precision, what you actually store might be this , or this
Floating-point numbers There are two variations of  float :  double  and  long double . They have wider range and higher precision. The sizes of these types are ordered as follows: float ≤ double ≤ long double Fall 2008 CMPE 150 – Introduction to Computing
Characters Syntax: char  variable_list; Character is the only type that has a fixed size in all implementations: 1 byte. All letters (uppercase and lowercase, separately), digits, and signs (such as +,-,!,?,$,£,^,#, comma itself, and many others) are of type character. Fall 2008 CMPE 150 – Introduction to Computing
Characters Since every value is represented with bits (0s and 1s), we need a mapping for all these letters, digits, and signs. This mapping is provided by a table of characters and their corresponding integer values. The most widely used table for this purpose is the ASCII table. Fall 2008 CMPE 150 – Introduction to Computing
Characters The ASCII table contains the values for 256 values (of which only the first 128 are relevant for you). Each row of the table contains one character. The row number is called the  ASCII code  of the  corresponding character. (The topic of character encoding is beyond the scope of this course. So, we will work with the simplified definition here.) Fall 2008 CMPE 150 – Introduction to Computing
Characters Never memorize the ASCII codes. They are available in all programming books and the Internet. (Eg:  http://www.ascii-code.com ) What is important for us is the following three rules: All lowercase letters (a,b,c,...) are consecutive. All uppercase letters (A,B,C,...) are consecutive. All digits are consecutive. Fall 2008 CMPE 150 – Introduction to Computing
ASCII table (partial) Fall 2008 CMPE 150 – Introduction to Computing ASCII code Symbol ASCII code Symbol ASCII code Symbol ASCII code Symbol ... ... 66 B 84 T 107 k 32 blank 67 C 85 U 108 l 37 % 68 D 86 V 109 m 42 * 69 E 87 W 110 n 43 + 70 F 88 X 111 o ... ... 71 G 89 Y 112 p 48 0 72 H 90 Z 113 q 49 1 73 I ... ... 114 r 50 2 74 J 97 a 115 s 51 3 75 K 98 b 116 t 52 4 76 L 99 c 117 u 53 5 77 M 100 d 118 v 54 6 78 N 101 e 119 w 55 7 79 O 102 f 120 x 56 8 80 P 103 g 121 y 57 9 81 Q 104 h 122 z ... ... 82 R 105 i ... ... 65 A 83 S 106 j    
Characters A character variable actually stores the ASCII value of the corresponding letter, digit, or sign. I/O functions (printf(), scanf(), etc.) do the translation between the image of a character displayed on the screen and the ASCII code that is actually stored in the memory of the computer. Fall 2008 CMPE 150 – Introduction to Computing
Characters Note that  a  and  A  have different ASCII codes ( 97  and  65 ). You could also have a variable with name  a . To differentiate between the variable and the character, we specify all characters in single quotes, such as  ‘a’ . Variable names are never given in quotes. Example: char ch; ch=‘a’; Note that using double quotes makes it a string (to be discussed later in the course) rather than a character. Thus,  ‘a’  and  &quot;a&quot;  are different. Similarly,  1  and  ‘1’  are different. Former has the value  1  whereas the latter has the ASCII value of  49 . Fall 2008 CMPE 150 – Introduction to Computing
Characters Example: Consider the code segment below. char ch; ch=‘A’; printf(&quot;Output is %c&quot;, ch); The string in printf() is stored as 79,117,116,112,117,116,32,105,115,32,37,99 which are the ASCII codes of the characters in the string. When printf() is executed, it first replaces  37,99  ( %c ) with  65  ( A ), and then displays the corresponding characters on the screen. Fall 2008 CMPE 150 – Introduction to Computing
Constants Syntax: #define  constant_name constant_value As the name implies, variables store values that vary while constants represent fixed values. Note that there is no storage when you use constants. Actually, when you compiler your program, the compiler replaces the constant name with the value you defined. The pre-processor replaces every occurrence of  constant_name  with everything that is to the right of  constant_name  in the definition. Note that there is no semicolon at the end of the definition. Conventionally, we use names in uppercase for constants. Fall 2008 CMPE 150 – Introduction to Computing
Enumerated type Used to define your own types. Syntax: enum   type_name   { item_name =constant_int_value , ... }  variable_list ; By default, the value of the first item is 0, and it increases by one for consecutive items. However, you may change the default value by specifying the constant value explicitly. Eg: enum boolean {FALSE,TRUE} v1, v2; enum days {SUN,MON,TUE,WED,THU,FRI,SAT}; enum {one=1,five=5,six,seven,ten=10,eleven} num; Fall 2008 CMPE 150 – Introduction to Computing Text in  green  is optional
Operators We will cover the most basic operators in class. More operators will be covered in the labs. Assignment operator (=) Note that this is not the &quot;equals&quot; operator. It should be pronounced as &quot;becomes.&quot; (Equals is another operator.) The value of the expression on the RHS is assigned (copied) to the LHS. It has right-to-left associativity. a=b=c=10; makes all three variables  10 . Fall 2008 CMPE 150 – Introduction to Computing
Assignment and type conversion When a variable of a narrower type is assigned to a variable of wider type, no problem. Eg:  int a=10;  float f; f=a; However, there is loss of information in reverse direction. Eg:  float f=10.9;   int a; a=f; Fall 2008 CMPE 150 – Introduction to Computing
Operators Arithmetic operators (+,-,*,/,%) General meanings are obvious. What is important is the following: If one of the operands is of a wider type, the result is also of that type. (Its importance will be more obvious soon.) Eg: Result of int+float is float. Result of float+double is double. In C language, there are two types of division: integer division and float division. If both operands are of integer class, we perform integer division and the result is obtained by truncating the decimal part. Eg:  8/3  is  2 , not  2.666667 . If one of the operands is of float class, the result is float. Eg:  8.0/3  or  8/3.0  or  8.0/3.0   is  2.666667 , not  2 . Fall 2008 CMPE 150 – Introduction to Computing
Operators Remainder operator is  % . Both operands must be of integer class. Eg:  10%6  is  4  (equivalent to  10 mod 6 ) +,-,*,/,% have left-to-right associativity. That means  a/b/c  is equivalent to  (a/b)/c , but not  a/(b/c) . Fall 2008 CMPE 150 – Introduction to Computing
Operators Logic operators (&&, ||, !) Logic operators take integer class operands. Zero means false. Anything non-zero means true. &quot; && &quot; does a logical-AND operation. (True only if both operands are true.) &quot; || &quot; does a logical-OR operation. (False only if both operands are false.) &quot; ! &quot; does a negation operation. (Converts true to false, and false to true.) Fall 2008 CMPE 150 – Introduction to Computing
Operators Fall 2008 CMPE 150 – Introduction to Computing Logic operators follow the logic rules The order of evaluation is from left to right As usual parenthesis overrides default order a b a && b a || b true true true true true false false true false true false true false false false false
Operators If the first operand of the &quot; && &quot; operator is false, the second operand is not evaluated at all (since it is obvious that the whole expression is false). Eg: In the expression below, if the values of  b  and  c  are initially  0  and  1 , respectively,   a = b && (c=2) then the second operand is not evaluated at all, so  c  keeps its value as  1 . Similarly, if the first operand of the &quot; || &quot; operator is true, the second operand is not evaluated at all. Fall 2008 CMPE 150 – Introduction to Computing
Operators Bitwise operators (&, |, ^, <<, >>, ~) Bitwise operators take integer class operands. For the logic operators, the variable represents a single logical value, true or false. For the bitwise operators, each bit of the variable represents true or false. & ,  | , and  ^  perform bitwise-AND, -OR, -XOR, respectively. <<  and  >>  perform left- and right-shifts. &quot; ~ &quot; takes bitwise one’s complement. Fall 2008 CMPE 150 – Introduction to Computing
Operators Fall 2008 CMPE 150 – Introduction to Computing Operation Result 5 & 10 (0000 0101 & 0000 1010) 0 (0000 0000) 5 && 10 (0000 0101 && 0000 1010) 1 (0000 0001) 5 | 10 (0000 0101 | 0000 1010) 15 (0000 1111) 8 ^ 10 (0000 0111 ^ 0000 1010) 13 (0000 1101) 7  << 2 (0000 0111 << 0000 0010) 28 (0001 1100) 7  >> 2 (0000 0111 >> 0000 0010) 1 (0000 0001) ~5 (~0000 0101) -6 (in two’s complement) (1111 1010)
Operators Other assignment operators (+=, -=, *=, /=, %=) Instead of writing  a=a+b , you can write  a+=b  in short. Similar with  -= ,  *= ,  /= , and others. Fall 2008 CMPE 150 – Introduction to Computing
Operators Pre/Post increment/decrement operators (++, --) The operator ++ increments the value of the operand by 1. If the operator comes BEFORE the variable name, the value of the variable is incremented before being used, i.e., the value of the expression is the incremented value. This is pre-increment. In post-increment, the operator is used after the variable name, and incrementation is performed after the value is used, i.e., the value of the expression is the value of the variable before incrementation. Fall 2008 CMPE 150 – Introduction to Computing
Operators Eg: a=10; c=10, b=++a; d=c++; Both  a  and  c  will be come  11 , but  b  will be  11  while  d  is  10 . Fall 2008 CMPE 150 – Introduction to Computing
Operators Comparison operators (==,!=,<,<=,...) &quot; == &quot; is the &quot;is equal to&quot; operator. Like all other comparison operators, it evaluates to a Boolean value of true or false, no matter what the operand types are. IMPORTANT:  When you compare two float values that are supposed to be equal mathematically, the comparison may fail due to the loss of precision discussed before. Fall 2008 CMPE 150 – Introduction to Computing
Operators Fall 2008 CMPE 150 – Introduction to Computing Symbol Usage Meaning == x == y is x equal to y? != x != y is x not equal to y? > x > y is x greater than y? < x < y is x less than y? >= x >= y is x greater than or equal to y? <= x <=y is x less than or equal to y?
Operators We can create complex expressions by joining several expressions with logic operators. Fall 2008 CMPE 150 – Introduction to Computing Symbol Usage Meaning && exp1 && exp2 AND || exp1 || exp2 OR ! ! exp NOT
Operators While using multiple operators in the same expression, you should be careful with the precedence and associativity of the operands. Eg: The following does NOT check if  a  is between  5  and  10 . bool = 5<a<10; bool  will be true if  a  is  20 .  (Why?) Don’t hesitate to use parentheses when you are not sure about the precedence (or to make things explicit). Fall 2008 CMPE 150 – Introduction to Computing
Operator precedence table Fall 2008 CMPE 150 – Introduction to Computing Operator Associativity ()  []  .  -> left-to-right ++  --  +  -  !  ~  (type)  *  &  sizeof   right-to-left *  /  % left-to-right +  - left-to-right <<  >> left-to-right <  <=  >  >= left-to-right ==  != left-to-right & left-to-right ^ left-to-right | left-to-right && left-to-right || left-to-right ?: right-to-left =  +=  -=  *=  /=  %=  &=  ^=  |=  <<=  >>= right-to-left , left-to-right
Operators Precedence, associativity, and order of evaluation: In the table is given in the previous slide, precedence decreases as you go down. If two operands in an expression have the same precedence, you decide according to the associativity column. There is a common misunderstanding about associativity. Note that associativity has nothing to do with the order of evaluation of the operands. Order of evaluation of operands is not specified in C language. It is strongly recommended that you read and understand Section 2.12 (pp. 52-54) in the book by Kernighan & Ritchie. Fall 2008 CMPE 150 – Introduction to Computing
Type casting Also called  coersion  or  type conversion . It does NOT change the type of a variable. It is not possible to change the type of a variable. What casting does is to convert the  type of a value . Fall 2008 CMPE 150 – Introduction to Computing
Type casting Eg: int a=10, b=3; float f, g; f=a/b; g=(float)a/b; The type of  a  does not change; it is still and integer. However, in the expression  (float)a/b , the value of  a , which is  10 , is converted to float value of  10.0 , and then it is divided by  b , which is  3 . Thus, we perform float division and  g  becomes  3.3333... On the other hand, we perform an integer division for  f , so it becomes  3 . Fall 2008 CMPE 150 – Introduction to Computing

More Related Content

PPTX
Assemblers
PDF
Assembler
PPT
SDD Translation
PPSX
Spr ch-02
PPTX
Assembler - System Programming
PPT
Assembler
PPTX
Programming basic computer
PPTX
Computer Organization - Programming the basic computer : Machine Language, As...
Assemblers
Assembler
SDD Translation
Spr ch-02
Assembler - System Programming
Assembler
Programming basic computer
Computer Organization - Programming the basic computer : Machine Language, As...

What's hot (20)

PPTX
1.1 programming fundamentals
PDF
Computer programming all chapters
PDF
[ITP - Lecture 03] Introduction to C/C++
PPT
Assembler Language Tutorial for Mainframe Programmers
PDF
Programming Fundamentals and basic knowledge
PPTX
Intro to assembly language
PPTX
Begin with c++ Fekra Course #1
PPTX
Basic of compiler
PPTX
The Knowledge of QBasic
PDF
Assembly Language Programming By Ytha Yu, Charles Marut Chap 1(Microcomputer ...
PPT
Lec 1 intro
PPTX
System Programing Unit 1
PPTX
Single Pass Assembler
PPTX
QBASIC: A Tool For Modern Programming
PPTX
Workshop Assembler
PPT
Bca 2nd sem-u-3.1-basic computer programming and micro programmed control
PDF
12109 microprocessor & programming
PPTX
Microprocessor chapter 9 - assembly language programming
PPTX
Phases of Compiler
PPTX
Programming the basic computer
1.1 programming fundamentals
Computer programming all chapters
[ITP - Lecture 03] Introduction to C/C++
Assembler Language Tutorial for Mainframe Programmers
Programming Fundamentals and basic knowledge
Intro to assembly language
Begin with c++ Fekra Course #1
Basic of compiler
The Knowledge of QBasic
Assembly Language Programming By Ytha Yu, Charles Marut Chap 1(Microcomputer ...
Lec 1 intro
System Programing Unit 1
Single Pass Assembler
QBASIC: A Tool For Modern Programming
Workshop Assembler
Bca 2nd sem-u-3.1-basic computer programming and micro programmed control
12109 microprocessor & programming
Microprocessor chapter 9 - assembly language programming
Phases of Compiler
Programming the basic computer
Ad

Similar to Introduction to C (20)

PPT
Introduction
PDF
Lec1_EENG112-Introduction.pdf
PPTX
IITK ESC 111M Lec02.pptx .
PPT
Lecture 1
PPT
Lecture 1
DOCX
Contents Pre-requisites Approximate .docx
PDF
L1. Basic Programming Concepts.pdf
PDF
C Language Made Easy For All 1st Edition Dr Sangram Patil
PPTX
Lec01-02 (Topic 1 C++ Fundamentals).pptx
PDF
PPS Unit-1.pdf
PPT
Introduction to Procedural Programming in C++
PPT
Savitch Ch 01
PPTX
Intro To C++ - Class 3 - Sample Program
PPTX
Intro To C++ - Class 03 - An Introduction To C++ Programming, Part II
PPT
Savitch ch 01
PPT
Savitch ch 01
PPTX
INTRODUCCIÓN A LA PROGRAMACIÓN
DOCX
Learn C Programming Full Course Free
PDF
ch01_overview computer science and engineering.pdf
PDF
c_algo_flowchart.pdf
Introduction
Lec1_EENG112-Introduction.pdf
IITK ESC 111M Lec02.pptx .
Lecture 1
Lecture 1
Contents Pre-requisites Approximate .docx
L1. Basic Programming Concepts.pdf
C Language Made Easy For All 1st Edition Dr Sangram Patil
Lec01-02 (Topic 1 C++ Fundamentals).pptx
PPS Unit-1.pdf
Introduction to Procedural Programming in C++
Savitch Ch 01
Intro To C++ - Class 3 - Sample Program
Intro To C++ - Class 03 - An Introduction To C++ Programming, Part II
Savitch ch 01
Savitch ch 01
INTRODUCCIÓN A LA PROGRAMACIÓN
Learn C Programming Full Course Free
ch01_overview computer science and engineering.pdf
c_algo_flowchart.pdf
Ad

Recently uploaded (20)

PDF
1.3 FINAL REVISED K-10 PE and Health CG 2023 Grades 4-10 (1).pdf
PDF
FORM 1 BIOLOGY MIND MAPS and their schemes
PPTX
History, Philosophy and sociology of education (1).pptx
PDF
David L Page_DCI Research Study Journey_how Methodology can inform one's prac...
PDF
BP 704 T. NOVEL DRUG DELIVERY SYSTEMS (UNIT 2).pdf
PPTX
Computer Architecture Input Output Memory.pptx
PPTX
A powerpoint presentation on the Revised K-10 Science Shaping Paper
PDF
Paper A Mock Exam 9_ Attempt review.pdf.
PPTX
Unit 4 Computer Architecture Multicore Processor.pptx
PDF
medical_surgical_nursing_10th_edition_ignatavicius_TEST_BANK_pdf.pdf
PPTX
CHAPTER IV. MAN AND BIOSPHERE AND ITS TOTALITY.pptx
PDF
Empowerment Technology for Senior High School Guide
PDF
Hazard Identification & Risk Assessment .pdf
PDF
Practical Manual AGRO-233 Principles and Practices of Natural Farming
PPTX
B.Sc. DS Unit 2 Software Engineering.pptx
PPTX
20th Century Theater, Methods, History.pptx
PDF
ChatGPT for Dummies - Pam Baker Ccesa007.pdf
PPTX
Virtual and Augmented Reality in Current Scenario
PDF
advance database management system book.pdf
PDF
احياء السادس العلمي - الفصل الثالث (التكاثر) منهج متميزين/كلية بغداد/موهوبين
1.3 FINAL REVISED K-10 PE and Health CG 2023 Grades 4-10 (1).pdf
FORM 1 BIOLOGY MIND MAPS and their schemes
History, Philosophy and sociology of education (1).pptx
David L Page_DCI Research Study Journey_how Methodology can inform one's prac...
BP 704 T. NOVEL DRUG DELIVERY SYSTEMS (UNIT 2).pdf
Computer Architecture Input Output Memory.pptx
A powerpoint presentation on the Revised K-10 Science Shaping Paper
Paper A Mock Exam 9_ Attempt review.pdf.
Unit 4 Computer Architecture Multicore Processor.pptx
medical_surgical_nursing_10th_edition_ignatavicius_TEST_BANK_pdf.pdf
CHAPTER IV. MAN AND BIOSPHERE AND ITS TOTALITY.pptx
Empowerment Technology for Senior High School Guide
Hazard Identification & Risk Assessment .pdf
Practical Manual AGRO-233 Principles and Practices of Natural Farming
B.Sc. DS Unit 2 Software Engineering.pptx
20th Century Theater, Methods, History.pptx
ChatGPT for Dummies - Pam Baker Ccesa007.pdf
Virtual and Augmented Reality in Current Scenario
advance database management system book.pdf
احياء السادس العلمي - الفصل الثالث (التكاثر) منهج متميزين/كلية بغداد/موهوبين

Introduction to C

  • 2. Basic info about the course Aim: To teach basic programming skills Course web site: http://www.cmpe.boun.edu.tr/courses/cmpe150/fall2008 There is no difference between the sections. There are some changes in the organization of the course. 5 hours of class every week 1 hour lecture and 2 hours PS (lectured by the instructor) 2 hours lab (taught by an assistant; student assistants will also help the assistant) Fall 2008 CMPE 150 – Introduction to Computing
  • 3. VERY IMPORTANT NOTICE All announcements are made through the CMPE150 e-mail list. The list has been constructed using your e-mail addresses in the Registration system. Make sure that your address in the Registration system is: your BOUN address, you check it every day, its quota is not exceeded and it is functional. (We will re-construct the list after the add-drop period is over, so change it now if your Registration e-mail address is not from BOUN.) Note that Yahoo, GMail, Hotmail, and similar addresses frequently have problems or the messages may go to the spam folder. It is completely your responsibility to make sure that your account receives the messages properly. We will send the announcements via the mailing list and assume you read it the same day. There are more than 350 students in this course and we do not have any additional means to contact you if your e-mail address is not working. NO EXCUSES WILL BE ACCEPTED FOR AN ANNOUNCEMENT ALREADY MADE THROUGH THE MAILING LIST. Fall 2008 CMPE 150 – Introduction to Computing
  • 4. Basic info about the course You will have 2 midterms 1 final 3 projects throughout the semester. The projects are NOT mandatory (except for CMPE students) . However, there will be a question closely related with the project in every exam. Fall 2008 CMPE 150 – Introduction to Computing
  • 5. Grading Midterm 1 30% Midterm 2 30% Final 40% CMPE students start with -15 points  To compensate for this, they have to submit all of their projects. Fall 2008 CMPE 150 – Introduction to Computing
  • 6. Exams and labs The exams are in front of the computer. You will use our online compiler in the exams. You will use the same online compiler also in the labs. THEREFORE, YOU MAY CONCLUDE THAT YOU WILL NOT DO WELL IN THE EXAMS IF YOU DO NOT ATTEND THE LABS. No attendance taken in class or lab. However, we STRONGLY recommend that you attend the labs. Fall 2008 CMPE 150 – Introduction to Computing
  • 7. Exams and labs You will be assigned a username and password for the online compiler. In the exams, you will receive an additional password. It is your responsibility to ensure that no one else sees this password. NO MERCY ABOUT CHEATING. We do not increase (or even decrease) your letter grades at the end of the semester. Don’t ask for it. Fall 2008 CMPE 150 – Introduction to Computing
  • 8. Course outline 1- Introduction, printf, scanf, variables, operators, constants 2- Data types, assignment type conversions, type casting, post/pre-increment, type casting 3- If, nested if, logical operators, switch 4- While, for, do-while 5- Nested loops, break, continue 6- Functions, scope, macro-substitution 7- Pointers, variable parameters (aka. call by reference or pointers as function arguments) 8- Arrays, passing arrays to functions, sorting and binary search 9- Strings 10- Multi-dimensional arrays 11- Structs 12- Review Note that pointers (except for variable parameters) are not included) in CMPE150 anymore. Fall 2008 CMPE 150 – Introduction to Computing
  • 9. Let’s get started ! We will first learn how a computer operates. Fall 2008 CMPE 150 – Introduction to Computing
  • 10. A computer system A computer system is composed of: a monitor, a keyboard, a mouse, and a case (that contains several controlling components such as processor and alike), and also other peripherals like CD player (might have been included in the case), printer, scanner, modem, etc. all connected together Fall 2008 CMPE 150 – Introduction to Computing
  • 11. Input and output devices Fall 2008 CMPE 150 – Introduction to Computing Input Input Input Input Input Output Output /Output /Output
  • 12. A computer system Note that everything could be packed in a single box, but the concepts are the same. Fall 2008 CMPE 150 – Introduction to Computing
  • 13. A computer system Everything we had in the previous slide is hardware . i.e., physical components that implement what is requested by the software . Fall 2008 CMPE 150 – Introduction to Computing HARDWARE OPERATING SYSTEM (Windows, Linux, MacOS, etc.) APPLICATIONS (Eg: Word, Excel, Explorer, MSN, C Compiler, your own programs, etc.) SOFTWARE
  • 14. A computer system In this course, we will learn how to develop our own software (using C language), but we need to understand how our programs will be executed by the hardware. Fall 2008 CMPE 150 – Introduction to Computing
  • 15. CPU: Central Processing Unit In terms of hardware, what is important for us is the CPU. It does all processing and control. Everything is controlled and executed by the CPU. Fall 2008 CMPE 150 – Introduction to Computing
  • 16. CPU: Central Processing Unit Fall 2008 CMPE 150 – Introduction to Computing Control Unit Registers Arithmetic & Logic Unit R1 R2 . . . Rm IR ...
  • 17. How are the instructions executed? Fall 2008 CMPE 150 – Introduction to Computing Central Processing Unit (CPU) Control Unit Registers Arithmetic & Logic Unit instr 2 instr 3 ... instr n instr 1 Program Main Memory R1 R2 . . . Rm IR ...
  • 18. How do we write programs? Fall 2008 CMPE 150 – Introduction to Computing We write our programs in &quot;C language&quot; (which is an English-like language) #include <stdio.h> int main() { printf(&quot;Hello world!&quot;); return 0; } We use a compiler (such as GCC, Visual C, Borland C, etc.) to translate our program from &quot;C language&quot; to &quot;machine language&quot; Compile & Link This is the executable code in &quot;machine language.&quot; This is the only thing the computer can understand and run (execute). 1110101011001001010001010100101000010010100101010101000101001000100101001 (source code) (object code) (machine code or executable code)
  • 19. Statement vs. Instruction Our source code (in C) is composed of statements . Eg: a=b+c/2; The corresponding machine code is composed of instructions . Eg: 1101001010110010 (divide c by 2) 0110100100100101 (add it to b) 1010110110111011 (put the result in a) CPU is capable of executing instructions, not statements. Statements may be too complex. Compiler implements each statement using several instructions. Eg: The statement &quot; a=b+c/2; &quot; can be implemented as temp1 = c/2 a = b + temp1 Fall 2008 CMPE 150 – Introduction to Computing
  • 20. Why have input/output? A program should not always produce the same output. O/w, you may keep the result and delete the program after you run it for the first time. A program should be consistent; i.e., it should not produce random results. Therefore, a program should take some input , process it, and produce some output as the result of that input. Fall 2008 CMPE 150 – Introduction to Computing
  • 21. Execution of an instruction Let’s see how an instruction like &quot; a=b+2 &quot; is executed. Assume initially a is 4 and b is 6 . Fall 2008 CMPE 150 – Introduction to Computing Central Processing Unit (CPU) Control Unit Registers Arithmetic & Logic Unit ... a=b+2 Main Memory R1 R2 . . . Rm IR ... b 6 6 ... a=b+2 2 8 a 4 Program
  • 22. Welcome to C Programming Language Now that we have an overall understanding of the computer, we can start writing C programs. Remember: Fall 2008 CMPE 150 – Introduction to Computing We write our programs in &quot;C language&quot; (which is an English-like language) #include <stdio.h> int main() { printf(&quot;Hello world!&quot;); return 0; } We use a compiler (such as GCC, Visual C, Borland C, etc.) to translate our program from &quot;C language&quot; to &quot;machine language&quot; Compile & Link This is the executable code in &quot;machine language.&quot; This is the only thing the computer can understand and run (execute). 1110101011001001010001010100101000010010100101010101000101001000100101001 (source code) (object code) (machine code or executable code)
  • 23. Our first C program: Hello World Every C program has a main() function. It wraps all the statements to be executed. We make use of previously written functions. They are provided by header files. Typically, we include the standard input/output header file, named stdio.h . We write all statements inside the main() function. #include <stdio.h> int main() { printf(&quot;Hello world&quot;); return 0; } Fall 2008 CMPE 150 – Introduction to Computing
  • 24. Need for input Note that the Hello World program has no input. Therefore, it always produces the same output: Hello World So, after we run this program once, we know what it will always produce. Therefore, we don’t need the program anymore; we can safely delete it. Definitely this is not what we want. (O/w, nobody will pay us  ) We want to write programs that can take input and produce different results according to the input. (Details of I/O functions will be covered in the labs.) Fall 2008 CMPE 150 – Introduction to Computing
  • 25. A program that also performs input #include <stdio.h> int main() { int a, b, c; printf(&quot;Enter two numbers: &quot;); scanf(&quot;%d%d&quot;, &a, &b); c=a+b; printf(&quot;Result is %d &quot;, c); return 0; } Enter two numbers: Result is 13 Fall 2008 CMPE 150 – Introduction to Computing C Program User screen _ _ _ \n 5 8 _ Read two integers (decimals) into variables a and b Display the value of variable c after the text &quot;Result is&quot;
  • 26. Variables Operations (such as addition, subtraction, etc.) operate on operands. You need some space to store the value of each operand. A variable provides storage space for a value. Fall 2008 CMPE 150 – Introduction to Computing
  • 27. Variables IMPORTANT: The value of a variable can never be empty. The value is represented via multiple bits, each of which is either 0 or 1. So, the variable always has a value. When a local variable is defined, its initial value is undefined. In other words, it has an arbitrary value. (For the moment, we will not use global variables.) So, make sure that the variable has a valid value before you perform any operation based on that value. Fall 2008 CMPE 150 – Introduction to Computing
  • 28. Variables Each variable consists of multiple bits. E.g.: Thus, every value is actually stored as a sequence of bits (1s and 0s) in the computer. The number of bits is called the size of the variable. The size of a variable depends on the type of the variable, the hardware, the operating system, and the compiler used. So, in your programs NEVER make assumptions about the size of a variable. The size may change due to the factors listed above, and your program will not work. Fall 2008 CMPE 150 – Introduction to Computing  2 13 +2 10 +2 9 +2 7 +2 5 +2 4 +2 2 +2 1 +2 0 =9911 0 0 1 0 0 1 1 0 1 0 1 1 0 1 1 1 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
  • 29. Variables #include <stdio.h> int main { int a, b, c; a=10; b=3; c=a-b; a=b+2; } Fall 2008 CMPE 150 – Introduction to Computing Program 10 7 3 5 a ... b ... c ...
  • 30. Rules for identifier names While defining names for variables (and also functions, user-defined types, and constants in the future) you should obey the following rules: The first character of a name must be a letter or underscore (‘_’). The remaining characters must be letters, digits, or underscore. Only the first 31 characters are significant. Avoid reserved words such as int, float, char, etc. as identifier names. However, it is better to avoid starting identifier names with underscore. Also remember that C language is case-sensitive. It is a very good practice to use meaningful names. Fall 2008 CMPE 150 – Introduction to Computing
  • 31. Rules for identifier names Valid: a, a1, count, no_of_students, B56, b_56 Invalid: 1a, sayı, int, $100 Valid but not recommended: _b56, Tuna, FB, GS, BJK, I_dont_remember_what_this_variable_means, a_very_very_long_identifier_name_1, a_very_very_long_identifier_name_2 Fall 2008 CMPE 150 – Introduction to Computing
  • 32. Standard data types You have to specify the type of a variable when you define it. There are three standard data types: Integer (i.e., whole numbers) Float (i.e., real or floating-point numbers) Characters We will discuss user-defined types later in the course. Fall 2008 CMPE 150 – Introduction to Computing
  • 33. Integers Syntax: int variable_list; where variable_list is a comma-separated list of variable names. Each variable name may be followed by an optional assignment operator and a value for initialization. Eg: int a, b=10, c; Integer is a class of variable types. The most basic one is int . The size may change, but the leftmost bit is used for the sign. The remaining bits represent the value in binary. Though the size of an int variable may vary, it is always limited, i.e., it contains a limited number of bits. Therefore, the maximum and minimum values that can be represented by an int variable is limited. Fall 2008 CMPE 150 – Introduction to Computing
  • 34. Integers For example, assume in your system an integer has 16 bits. Leftmost bit is used for the sign, so 15 bits are left for the value. So, you have 2 15 =32,768 positive values, ranging from 0 to 32,767. Similarly, you have 32,768 negative values, this time ranging from -1 to -32,768. If you have 32 bits (4 bytes) for an integer, than the maximum value is 2 31 =2,147,483,647. Fall 2008 CMPE 150 – Introduction to Computing sign bit value 0 0 1 0 0 1 1 0 1 0 1 1 0 1 1 1
  • 35. Integers There are variations of int such as long int , short int , unsigned int . For each one of these types, you may ignore the word &quot;int&quot; and use long , short , and unsigned , respectively. The sizes of these types are ordered as follows: short int ≤ int ≤ long int Fall 2008 CMPE 150 – Introduction to Computing
  • 36. Floating-point numbers Syntax: float variable_list; Float type is used for real numbers. Note that all integers may be represented as floating-point numbers, but not vice versa. Fall 2008 CMPE 150 – Introduction to Computing
  • 37. Floating-point numbers Similar to integers, floats also have their limits: maximum and minimum values are limited as well as the precision. Fall 2008 CMPE 150 – Introduction to Computing Lower limit Upper limit The value you want to store Due to loss of precision, what you actually store might be this , or this
  • 38. Floating-point numbers There are two variations of float : double and long double . They have wider range and higher precision. The sizes of these types are ordered as follows: float ≤ double ≤ long double Fall 2008 CMPE 150 – Introduction to Computing
  • 39. Characters Syntax: char variable_list; Character is the only type that has a fixed size in all implementations: 1 byte. All letters (uppercase and lowercase, separately), digits, and signs (such as +,-,!,?,$,£,^,#, comma itself, and many others) are of type character. Fall 2008 CMPE 150 – Introduction to Computing
  • 40. Characters Since every value is represented with bits (0s and 1s), we need a mapping for all these letters, digits, and signs. This mapping is provided by a table of characters and their corresponding integer values. The most widely used table for this purpose is the ASCII table. Fall 2008 CMPE 150 – Introduction to Computing
  • 41. Characters The ASCII table contains the values for 256 values (of which only the first 128 are relevant for you). Each row of the table contains one character. The row number is called the ASCII code of the corresponding character. (The topic of character encoding is beyond the scope of this course. So, we will work with the simplified definition here.) Fall 2008 CMPE 150 – Introduction to Computing
  • 42. Characters Never memorize the ASCII codes. They are available in all programming books and the Internet. (Eg: http://www.ascii-code.com ) What is important for us is the following three rules: All lowercase letters (a,b,c,...) are consecutive. All uppercase letters (A,B,C,...) are consecutive. All digits are consecutive. Fall 2008 CMPE 150 – Introduction to Computing
  • 43. ASCII table (partial) Fall 2008 CMPE 150 – Introduction to Computing ASCII code Symbol ASCII code Symbol ASCII code Symbol ASCII code Symbol ... ... 66 B 84 T 107 k 32 blank 67 C 85 U 108 l 37 % 68 D 86 V 109 m 42 * 69 E 87 W 110 n 43 + 70 F 88 X 111 o ... ... 71 G 89 Y 112 p 48 0 72 H 90 Z 113 q 49 1 73 I ... ... 114 r 50 2 74 J 97 a 115 s 51 3 75 K 98 b 116 t 52 4 76 L 99 c 117 u 53 5 77 M 100 d 118 v 54 6 78 N 101 e 119 w 55 7 79 O 102 f 120 x 56 8 80 P 103 g 121 y 57 9 81 Q 104 h 122 z ... ... 82 R 105 i ... ... 65 A 83 S 106 j    
  • 44. Characters A character variable actually stores the ASCII value of the corresponding letter, digit, or sign. I/O functions (printf(), scanf(), etc.) do the translation between the image of a character displayed on the screen and the ASCII code that is actually stored in the memory of the computer. Fall 2008 CMPE 150 – Introduction to Computing
  • 45. Characters Note that a and A have different ASCII codes ( 97 and 65 ). You could also have a variable with name a . To differentiate between the variable and the character, we specify all characters in single quotes, such as ‘a’ . Variable names are never given in quotes. Example: char ch; ch=‘a’; Note that using double quotes makes it a string (to be discussed later in the course) rather than a character. Thus, ‘a’ and &quot;a&quot; are different. Similarly, 1 and ‘1’ are different. Former has the value 1 whereas the latter has the ASCII value of 49 . Fall 2008 CMPE 150 – Introduction to Computing
  • 46. Characters Example: Consider the code segment below. char ch; ch=‘A’; printf(&quot;Output is %c&quot;, ch); The string in printf() is stored as 79,117,116,112,117,116,32,105,115,32,37,99 which are the ASCII codes of the characters in the string. When printf() is executed, it first replaces 37,99 ( %c ) with 65 ( A ), and then displays the corresponding characters on the screen. Fall 2008 CMPE 150 – Introduction to Computing
  • 47. Constants Syntax: #define constant_name constant_value As the name implies, variables store values that vary while constants represent fixed values. Note that there is no storage when you use constants. Actually, when you compiler your program, the compiler replaces the constant name with the value you defined. The pre-processor replaces every occurrence of constant_name with everything that is to the right of constant_name in the definition. Note that there is no semicolon at the end of the definition. Conventionally, we use names in uppercase for constants. Fall 2008 CMPE 150 – Introduction to Computing
  • 48. Enumerated type Used to define your own types. Syntax: enum type_name { item_name =constant_int_value , ... } variable_list ; By default, the value of the first item is 0, and it increases by one for consecutive items. However, you may change the default value by specifying the constant value explicitly. Eg: enum boolean {FALSE,TRUE} v1, v2; enum days {SUN,MON,TUE,WED,THU,FRI,SAT}; enum {one=1,five=5,six,seven,ten=10,eleven} num; Fall 2008 CMPE 150 – Introduction to Computing Text in green is optional
  • 49. Operators We will cover the most basic operators in class. More operators will be covered in the labs. Assignment operator (=) Note that this is not the &quot;equals&quot; operator. It should be pronounced as &quot;becomes.&quot; (Equals is another operator.) The value of the expression on the RHS is assigned (copied) to the LHS. It has right-to-left associativity. a=b=c=10; makes all three variables 10 . Fall 2008 CMPE 150 – Introduction to Computing
  • 50. Assignment and type conversion When a variable of a narrower type is assigned to a variable of wider type, no problem. Eg: int a=10; float f; f=a; However, there is loss of information in reverse direction. Eg: float f=10.9; int a; a=f; Fall 2008 CMPE 150 – Introduction to Computing
  • 51. Operators Arithmetic operators (+,-,*,/,%) General meanings are obvious. What is important is the following: If one of the operands is of a wider type, the result is also of that type. (Its importance will be more obvious soon.) Eg: Result of int+float is float. Result of float+double is double. In C language, there are two types of division: integer division and float division. If both operands are of integer class, we perform integer division and the result is obtained by truncating the decimal part. Eg: 8/3 is 2 , not 2.666667 . If one of the operands is of float class, the result is float. Eg: 8.0/3 or 8/3.0 or 8.0/3.0 is 2.666667 , not 2 . Fall 2008 CMPE 150 – Introduction to Computing
  • 52. Operators Remainder operator is % . Both operands must be of integer class. Eg: 10%6 is 4 (equivalent to 10 mod 6 ) +,-,*,/,% have left-to-right associativity. That means a/b/c is equivalent to (a/b)/c , but not a/(b/c) . Fall 2008 CMPE 150 – Introduction to Computing
  • 53. Operators Logic operators (&&, ||, !) Logic operators take integer class operands. Zero means false. Anything non-zero means true. &quot; && &quot; does a logical-AND operation. (True only if both operands are true.) &quot; || &quot; does a logical-OR operation. (False only if both operands are false.) &quot; ! &quot; does a negation operation. (Converts true to false, and false to true.) Fall 2008 CMPE 150 – Introduction to Computing
  • 54. Operators Fall 2008 CMPE 150 – Introduction to Computing Logic operators follow the logic rules The order of evaluation is from left to right As usual parenthesis overrides default order a b a && b a || b true true true true true false false true false true false true false false false false
  • 55. Operators If the first operand of the &quot; && &quot; operator is false, the second operand is not evaluated at all (since it is obvious that the whole expression is false). Eg: In the expression below, if the values of b and c are initially 0 and 1 , respectively, a = b && (c=2) then the second operand is not evaluated at all, so c keeps its value as 1 . Similarly, if the first operand of the &quot; || &quot; operator is true, the second operand is not evaluated at all. Fall 2008 CMPE 150 – Introduction to Computing
  • 56. Operators Bitwise operators (&, |, ^, <<, >>, ~) Bitwise operators take integer class operands. For the logic operators, the variable represents a single logical value, true or false. For the bitwise operators, each bit of the variable represents true or false. & , | , and ^ perform bitwise-AND, -OR, -XOR, respectively. << and >> perform left- and right-shifts. &quot; ~ &quot; takes bitwise one’s complement. Fall 2008 CMPE 150 – Introduction to Computing
  • 57. Operators Fall 2008 CMPE 150 – Introduction to Computing Operation Result 5 & 10 (0000 0101 & 0000 1010) 0 (0000 0000) 5 && 10 (0000 0101 && 0000 1010) 1 (0000 0001) 5 | 10 (0000 0101 | 0000 1010) 15 (0000 1111) 8 ^ 10 (0000 0111 ^ 0000 1010) 13 (0000 1101) 7 << 2 (0000 0111 << 0000 0010) 28 (0001 1100) 7 >> 2 (0000 0111 >> 0000 0010) 1 (0000 0001) ~5 (~0000 0101) -6 (in two’s complement) (1111 1010)
  • 58. Operators Other assignment operators (+=, -=, *=, /=, %=) Instead of writing a=a+b , you can write a+=b in short. Similar with -= , *= , /= , and others. Fall 2008 CMPE 150 – Introduction to Computing
  • 59. Operators Pre/Post increment/decrement operators (++, --) The operator ++ increments the value of the operand by 1. If the operator comes BEFORE the variable name, the value of the variable is incremented before being used, i.e., the value of the expression is the incremented value. This is pre-increment. In post-increment, the operator is used after the variable name, and incrementation is performed after the value is used, i.e., the value of the expression is the value of the variable before incrementation. Fall 2008 CMPE 150 – Introduction to Computing
  • 60. Operators Eg: a=10; c=10, b=++a; d=c++; Both a and c will be come 11 , but b will be 11 while d is 10 . Fall 2008 CMPE 150 – Introduction to Computing
  • 61. Operators Comparison operators (==,!=,<,<=,...) &quot; == &quot; is the &quot;is equal to&quot; operator. Like all other comparison operators, it evaluates to a Boolean value of true or false, no matter what the operand types are. IMPORTANT: When you compare two float values that are supposed to be equal mathematically, the comparison may fail due to the loss of precision discussed before. Fall 2008 CMPE 150 – Introduction to Computing
  • 62. Operators Fall 2008 CMPE 150 – Introduction to Computing Symbol Usage Meaning == x == y is x equal to y? != x != y is x not equal to y? > x > y is x greater than y? < x < y is x less than y? >= x >= y is x greater than or equal to y? <= x <=y is x less than or equal to y?
  • 63. Operators We can create complex expressions by joining several expressions with logic operators. Fall 2008 CMPE 150 – Introduction to Computing Symbol Usage Meaning && exp1 && exp2 AND || exp1 || exp2 OR ! ! exp NOT
  • 64. Operators While using multiple operators in the same expression, you should be careful with the precedence and associativity of the operands. Eg: The following does NOT check if a is between 5 and 10 . bool = 5<a<10; bool will be true if a is 20 . (Why?) Don’t hesitate to use parentheses when you are not sure about the precedence (or to make things explicit). Fall 2008 CMPE 150 – Introduction to Computing
  • 65. Operator precedence table Fall 2008 CMPE 150 – Introduction to Computing Operator Associativity () [] . -> left-to-right ++  -- +  - !  ~ (type) * & sizeof   right-to-left *  /  % left-to-right +  - left-to-right <<  >> left-to-right <  <= >  >= left-to-right ==  != left-to-right & left-to-right ^ left-to-right | left-to-right && left-to-right || left-to-right ?: right-to-left = +=  -= *=  /= %=  &= ^=  |= <<=  >>= right-to-left , left-to-right
  • 66. Operators Precedence, associativity, and order of evaluation: In the table is given in the previous slide, precedence decreases as you go down. If two operands in an expression have the same precedence, you decide according to the associativity column. There is a common misunderstanding about associativity. Note that associativity has nothing to do with the order of evaluation of the operands. Order of evaluation of operands is not specified in C language. It is strongly recommended that you read and understand Section 2.12 (pp. 52-54) in the book by Kernighan & Ritchie. Fall 2008 CMPE 150 – Introduction to Computing
  • 67. Type casting Also called coersion or type conversion . It does NOT change the type of a variable. It is not possible to change the type of a variable. What casting does is to convert the type of a value . Fall 2008 CMPE 150 – Introduction to Computing
  • 68. Type casting Eg: int a=10, b=3; float f, g; f=a/b; g=(float)a/b; The type of a does not change; it is still and integer. However, in the expression (float)a/b , the value of a , which is 10 , is converted to float value of 10.0 , and then it is divided by b , which is 3 . Thus, we perform float division and g becomes 3.3333... On the other hand, we perform an integer division for f , so it becomes 3 . Fall 2008 CMPE 150 – Introduction to Computing