C++ Basics Joaquin Vila. For Thursday Read Savitch 2.2-2.3 Do practice problems.

34
C++ Basics Joaquin Vila

Transcript of C++ Basics Joaquin Vila. For Thursday Read Savitch 2.2-2.3 Do practice problems.

C++ Basics

Joaquin Vila

For Thursday Read Savitch 2.2-2.3 Do practice problems

Quiz

Origins of C++ BCPL B

Ken Thomson (Creator of UNIX) C

Dennis Ritchie, AT&T Bell Laboratories, 1970s

The Origins of C++ C++

Bjarne StroustrupAT&T Bell Laboratories, 1980s

Chapter 2 C++ Basics

Variables and Assignments Input and Output Data Types and Expressions

Simple Flow of Control Program Style

2.1 Variables and Assignments A C++ variable can hold a value

A C++ variable ALWAYS has a value stored in it.

A C++ variable is implemented as a memory location. Information stored is binary -- 0s and 1s.

The concept of memory location will become more important in ACS 169.

Names: Identifiers The name of a variable (or

anything else in C++ that needs naming) is called an identifier.

An identifier must be named starting with a letter or an underscore symbol (_) followed by any number of letters, digits, or underscore symbols.

Example Valid Examples: x

x_1 _abc A2b ThisIsAVeryLongIdentifier

Examples Invalid Examples: 12 3X %change myFirst.c

data-1 Why are these invalid?

Reserved Words There are identifiers that are

reserved to the use of the C++ language, called keywords, or reserved words. (A complete list is in Appendix 1 of the text.)

Practice Which of the following are legal

variable names in C++? What’s wrong with the illegal names?

3rdItem float TaxRate_left IsGood? Item2m table4.1 pi_r_sqrd

More Practice Classify as good, legal but not

recommended, or illegal: percent num_students 1999pay tax_rate m_1994tax y2k# variable

Days_offmy_data if y2k_fig2

Last.yearxr3_yz57 Tax-Rate pay99

exam1_avg

Assignment Statements What does = mean in C++? What happens when the statement

num_items = num_items + 1;is executed?

Initialization What is an uninitialized variable? What’s wrong with uninitialized

variables? How can we initialize variables? When should we initialize

variables?

A variable that has not had a value set by your program will have the value left there by the last program to use the same memory address.

Any uninitialized variable will contain garbage (in the root sense of the word).

Few compilers will catch this error, but most will issue a warning.

If not corrected, it will cause a logic error.

Pitfall: Uninitialized Variables

Variable initialization How do we prevent logic errors

caused by uninitialized variables? Initialize all variables when they are

declared. Any variable whose value is

assigned through a cin>> statement or an assignment statement before being used in a calculation or print statement does not need to be initialized.

You must take great care with your program that all variables receive a value prior to using them.

Syntax: There are two different appearing but equivalent ways to initialize a variable in a declaration statement:int x = 3; double pi =

3.14159;int x(3); double pi(3.14159);

Programming Tip Use meaningful variable names. Names that tie your program’s

code to the problem being solved will make your code easier to read and easier to debug.(Failing to do this in a program assignment will lower your grade.)

Anything that you can do to make your code readable is worth hours, even days in debugging time.

Practice

Give a declaration for a variable speed of type double.

Give declaration-initializations for variables num_goblins and num_knights, initializing both int variables to zero.

Declare an int variable size and use a separate statement to initialize it to 10.

Write an assignment statement that assigns distance to be rate times time.

// Sample Program#include <iostream>using namespace std;

int main(){ int numStudents, numSections, studentsPerSection;

cout << “Please enter the total number of students: ”; cin >> numStudents; cout << “Please enter the number of sections: ”; cin >> numSections;  studentsPerSection = numStudents / numSections;  cout << “If you have ” << numStudents; cout << “in a course\n and you have ”; cout << numSections << “ sections of the course,\n”; cout << “you will average ” << studentsPerSection; cout << “ students in each section.\n”;  return 0;}

Display 2.1 A C++ Program (1 of 2)

#include <iostream>using namespace std;

int main( ){ int number_of_bars; double one_weight, total_weight;

cout << "Enter the number of candy bars in a package\n"; cout << "and the weight in ounces of one candy bar.\n“ << "Then press return.\n"; cin >> number_of_bars; cin >> one_weight;

total_weight = one_weight * number_of_bars;

cout << number_of_bars << " candy bars\n"; cout << one_weight << " ounces each\n"; cout << "Total weight is " << total_weight << " ounces.\n";

These two lines are variable declarations.Every variable in C++ must be declared.A declaration introduces a name to the compiler and specifies the type of data that is to be stored in the variable. A variable declaration has the form

Type_name variable_name1, variable_name2, … ; The kind of data held in a variable is its type.You must declare all variables prior to use.

These two lines are variable declarations.Every variable in C++ must be declared.A declaration introduces a name to the compiler and specifies the type of data that is to be stored in the variable. A variable declaration has the form

Type_name variable_name1, variable_name2, … ; The kind of data held in a variable is its type.You must declare all variables prior to use.

<< is the extraction operator. It extracts the string literal following it to the outstream indicated. In this case it is extracted to the screen using cout.It is illegal to break a string across two lines. The following is ILLEGAL, though some compilers happily accept it.cout << “Mary had a little lamb. Its fleece was white as snow.\n”;

<< is the extraction operator. It extracts the string literal following it to the outstream indicated. In this case it is extracted to the screen using cout.It is illegal to break a string across two lines. The following is ILLEGAL, though some compilers happily accept it.cout << “Mary had a little lamb. Its fleece was white as snow.\n”;

These lines provide declarations necessary to make iostream library available.C++ divides collections of names into namespaces. To access names in a namespace, the second line above, the using directive, is sufficient. It means that your program can use any name in the namespace std. A C++ namespace usually contains more than just names. They usually contain code as well.

These lines provide declarations necessary to make iostream library available.C++ divides collections of names into namespaces. To access names in a namespace, the second line above, the using directive, is sufficient. It means that your program can use any name in the namespace std. A C++ namespace usually contains more than just names. They usually contain code as well.

When an extraction string is too long to fit on one line of code, it can be ended with a semicolon and the next line starts with cout again, or simply end with double quotes “ and leave the cout off the next line.

When an extraction string is too long to fit on one line of code, it can be ended with a semicolon and the next line starts with cout again, or simply end with double quotes “ and leave the cout off the next line.Likewise, this cin statement could be written ascin >> number_of_bars >> one_weight;

Likewise, this cin statement could be written ascin >> number_of_bars >> one_weight;

Notice, it is not necessary to break before each << or >> operator.Notice, it is not necessary to break before each << or >> operator.Also notice that variable names are not surrounded with quotes, only string literals require quotes.

Also notice that variable names are not surrounded with quotes, only string literals require quotes.

Display 2.1 A C++ Program (2 of 2)

cout << "Try another brand.\n"; cout << "Enter the number of candy bars in a package\

n"; cout << "and the weight in ounces of one candy bar.\n"; cout << "Then press return.\n"; cin >> number_of_bars; cin >> one_weight;

total_weight = one_weight * number_of_bars;

cout << number_of_bars << " candy bars\n"; cout << one_weight << " ounces each\n"; cout << "Total weight is " << total_weight << "

ounces.\n";

cout << "Perhaps an apple would be healthier.\n";

return 0;}

In an assignment statement, the right hand side expression is evaluated, then the variable on the left hand side is set to this value.Syntax: variable = expression;distance = rate * time;count = count + 2;

In an assignment statement, the right hand side expression is evaluated, then the variable on the left hand side is set to this value.Syntax: variable = expression;distance = rate * time;count = count + 2;

The \ (backslash) preceeding a character tells the compiler that the next character does not have the same meaning as the character by itself.An escape sequence is typed as two characters with no space between them.To print the backslash character, you must use \\. This tells the compiler the second back slash is not the escape character, but rather a regular character to be printed.Here are some common escape characters:

\n newline

\t tab character

\a alert, or bell

\” double quote (that does not end a string literal).

The \ (backslash) preceeding a character tells the compiler that the next character does not have the same meaning as the character by itself.An escape sequence is typed as two characters with no space between them.To print the backslash character, you must use \\. This tells the compiler the second back slash is not the escape character, but rather a regular character to be printed.Here are some common escape characters:

\n newline

\t tab character

\a alert, or bell

\” double quote (that does not end a string literal).

When a program reaches a cin >> statement, it waits for input. You are responsible for prompting the user of your program for proper input.Syntax:

cin >> number >> size;

cin >> time_to_go

>> points_needed;

When a program reaches a cin >> statement, it waits for input. You are responsible for prompting the user of your program for proper input.Syntax:

cin >> number >> size;

cin >> time_to_go

>> points_needed;

Formatting for Numbers with a Decimal Point

The following statements will cause your floating point output to be displayed with 2 decimal places and will always show the decimal point even when the output has a zero fractional part.

cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(2);//Output format:

78.50

You will need to memorize these three lines of code for use on exams.You will need to memorize these three lines of code for use on exams.

2.3 Data Type and ExpressionsThe types int and double

From the C++ point of view, 2 and 2.0 are very different.

2 has type int with no fractional part

2.0 has type double with a fractional part (even if the fractional part is 0).

An int and a double use different amounts of memory and are stored differently.

Other Number typesType Memory used Range

Precisionshort 2 bytes -32,767 to 32,767 NA (short int)

int 4 bytes -2,147483,647 NA to 2,147483,647

long 4 bytes same as int NA

float 4 bytes 10-38 to 1038 7 digits

double 8 bytes 10-308 to 10308 15 digits

long double 10 bytes 10-4932 to 104932 15 digits

The Types char and bool char is a special type that is

designed to hold single members of the ASCII character set. cstring (from C) and string (from the

Standard Library) are for more than one char value. More on these in a later chapter.

bool is a type that was added to C++ in the1995 Draft ANSI Standard. There are only two Boolean values: true and false. Almost all compilers support the bool type.

Display 2.3 The Type char#include <iostream> // nec for using cin and coutusing namespace std;int main( ){ char symbol1, symbol2, symbol3; cout << "Enter two initials, without any periods:\n"; cin >> symbol1 >> symbol2; cout << "The two initials are:\n"; cout << symbol1 << symbol2 << endl; cout << "Once more with a space:\n"; symbol3 = ' '; cout << symbol1 << symbol3 << symbol2 << endl; cout << "That's all."; return 0;}

Note: in the above line //nec for using cin and cout is a comment added to explain the use of #include<iostream>.

This is a common practice used to make code easier to read, follow, and debug.

You will be expected to comment your program source code often.

Note: in the above line //nec for using cin and cout is a comment added to explain the use of #include<iostream>.

This is a common practice used to make code easier to read, follow, and debug.

You will be expected to comment your program source code often.

What does this program do?What does this program do?

Arithmetic Operators and Expressions

Common arithmetic operators are encoded:

Addition + Multiplication *Subtraction - Division /Modulus % Grouping ( )

These operators are used to make arithmetic expressions:

one_weight * number_of_weights

This expression is said to “return a value” that automatically appears where the expression is, and is used in an outside expression. In the statement below, the sum is computed, value returned, and this value is used as a factor in the multiplication.

one_weight * (number_of_weights +

off_set)

(See precedence, later in the text.)

Arithmetic Operators and Expressions

Arithmetic with +, - ,and * behaves as expected for both integer and floating point types.

Arithmetic for / (division) behaves as expected for floating point numbers.

But, arithmetic for / behaves in a somewhat surprising way for integer types (short, int, long).

Division for integers is TRUNCATING - it discards the fractional part.

Modulus, using % is used to return the remainder in integer division.

Division /, and modulus % are complementary operations. Mod, or modulus, %, works ONLY for integer types. 4 12 / 3 = 4 4 is the quotient 3 12 12 0 12 % 3 = 0 (read 12 mod 3) 0 is the

remainder

4 14 / 3 = 4 NOT 4.66 3 14 12 2 14 % 3 = 2 the remainder after

division

See the PITFALL - Whole Number Division, page 70.

Division /, and Modulus %, for Integer Values

Arithmetic Operators and Expressions: Precedence

When two operators appear in an arithmetic expression, there are PRECEDENCE rules that tell us what happens.

Evaluate the expression, X + Y * Z by multiplying Y and Z first then the result is added to X.

Rule: Do inside parentheses first, working your way from the inner most set out, then do the multiplication and division in order from left to right, finally do addition and subtraction in order from left to right.