02 C++Fundamentals

Download as pdf or txt
Download as pdf or txt
You are on page 1of 47

Chapter 2

C++ Fundamentals

3rd Edition
Computing Fundamentals with C++
Rick Mercer
Franklin, Beedle & Associates
Goals

• Reuse existing code in your programs with


#include
• Obtain input data from the user and display
information to the user with cin and cout
• Evaluate and create arithmetic expressions
• Use operations on objects
• Get input, show output
The C++ Programming Language

• A C++ program is a sequence of characters created


with a text editor and stored as a file.
• this is the source code
• The file type is usually .cpp
CourseGrade.cpp
General Forms

• General forms provide information to create


syntactically correct programs
• Anything in yellow boldface must be written exactly
as shown (cout << for example)
• Anything in italic represents something that must be
supplied by the user
• The italicized portions are defined elsewhere
General Form for a program

// Comment
#include-directive(s)
using namespace std;
int main() {
object-initializations
statement(s)
return 0;
}
Example C++ program
// This C++ program gets a number from the
// user and displays that value squared

#include <iostream> // for cout cin endl

using namespace std;


int main() {
double x;

cout << "Enter a number: ";


cin >> x;
cout << "x squared: " << (x * x) << endl;

return 0;
}
The compiler

• The compiler
• reads source code in a character by character fashion
• reports errors whenever possible
• reports warnings to help avoid errors
• conceptually replaces #includes with the source code
of the #included file
#include directives

• General form: #include-directive


#include <include-file>
-or-
#include "include-file"
• < > causes a search of the system folder(s)
• these files should be found automatically.

• The form with " " first searches the working folder
before searching the system folder(s)
• the " " indicates a new file from your working folder.
Pieces of a C++ Program

• A token is the smallest recognizable unit in a


programming language.
• C++ has four types of tokens:
• special symbols
• keywords
• identifiers
• constants
Tokens

• Each color represents a different type of token


special symbol identifier reserved-identifier
literal comment

// Comment: This is a complete C++ program


#include <iostream>
using namespace std;

int main() {
cout << "Hello World!";
return 0;
}
Special Symbols

• One or two character sequences (no spaces).


// < > ( ) { << ; } !=

• Some special symbols mean different things in


different contexts.
Identifiers

• There are some standard (always available with the


C++ compiler) identifiers:
endl sqrt string width std
• The programmer can make up new identifiers
test1 x1 aNumber MAXIMUM A_1
Identifiers

• Identifiers have from 1 to 32 characters:


'a'..'z' 'A'..'Z' '0'..'9' '_'
• Identifiers should start with a letter: a1 is legal, 1a is not
(can also start with underscore _
• C++ is case sensitive. A and a are different.
• Which of these are valid identifiers?
a) abc e) ABC i) a_1
b) m/h f) 25or6to4 j) student Number
c) main g) 1_time k) string
d) double h) first name l) ______
Reserved Identifiers

• Word like tokens with a pre-defined meaning that can't


be changed (reserved-identifiers)
double int
• Some of the keywords in the text :
bool class for operator typedef
case do if return void
char else long switch while
Literals

• floating-point literals
1.234 -12.5 0.0 0. .0 1e10 0.1e-5
• string literals
"character between double quotes"
• integer literals
-1 0 1 -32768 +32767
• character literals
'A' 'b' '\n' '1'
Comments

• Provide internal documentation


• Helps us understand program that we must read--
including our own
• Can be used as pseudo code within a program and
later changed into C++ or left as is to provide
documentation
// on one line or

/*
between slash star and star slash
*/
Common Operations on Objects

• Common Operations for many classes of objects


include these four
• Declaration Construct an object
• Initialization Initialize the state of an object
• Assignment Modify the state of an object
• Input Modify the state of an object
• Output Inspect the state of an object
Declare and Initialize Variables

• No initial state (values):


type identifier;
double aNumber; // garbage value

type identifier , identifier , … , identifier ;


int a, b, c; // all have garbage values
• Supply initial state (values):
type identifier = initial-state;
double aNumber = 0.0;
string name = "Chris Plumber";
type identifier = identifier ( initial-state );
string address("1040 E 4th");
Output with cout

• Programs must communicate with users


• This can be done with keyboard input statements and
screen output statements
• A C++ statement is composed of several components
properly grouped together to perform some
operation.
• The next slide has the first statement used to display
constants and object state to the screen
The cout statement

• The general form of a cout statement:


cout << expression-1 << expression-2 << expression-n ;
• Example
cout << "Grade: " << courseGrade << endl;
What happens with cout?

• When a cout statement is encountered, the


expressions are displayed on the screen in a manner
appropriate to the expression
• When encountered in a cout statement, endl
generates a new line on the console
• To properly use cout and endl your program must
have this code at the top of the file:
#include <iostream>
using namespace std;
What is the output?
#include <iostream> // for cout and endl
using namespace std; // so we don’t need std::

int main() {
double aDouble = 1.1;
string name = "Carpenter";

cout << (3 * 2.5) << (2 * 3) << endl;


cout << 2 * aDouble;
cout << name;

return 0; Output?
}
Assignment

• Certain objects have undefined state


double dunno, do_you;
cout << dunno << endl; // Output? ______
• The programmer can set the state of objects with
assignment operations of this form:
object-name = expression ;
• Examples:
dunno = 1.23;
do_you = dunno - 0.23;
Memory before and after

Object Old Modified


Name State State
dunno ? 1.23
do_you ? 1.0

• The expression must be a value that the object can store


(assignment compatible)
dunno = "Ohhh no, you can't do that"; // <- Error
string str;
str = 1.23; // <- Error also
Assignment Statement

• Write the values for bill and name


double bill;
string name;

bill = 10.00;
bill = bill + (0.06 * bill);
name = "Bee Bop";
name = "Hip Hop";
// bill is ___________?

// name is now ________?


Input with cin

• General forms :
cin >> object-1 ;
-or-
cin >> object-1 >> object-2 >> object-n ;
• Example: cin >> test1;
• When a cin statement is encountered
• the program pauses for user input
• the characters typed by the user are processed
• the object's state is changed to the value of the input
Input is Separated by Whitespace
blanks, tabs, newlines

#include <iostream> // for cout, cin, endl


#include <string> // for class string
using namespace std; // avoid writing std::

int main() {
string name;
cout << "Enter your name: ";
cin >> name;
cout << "Hello " << name;
return 0;
}
Dialogue when the user enters Dakota Butler
Note: WindowMaker is still waiting for a non-existent future cin
Enter your name: Dakota Butler
Hello Dakota
Arithmetic Expressions

• Arithmetic expressions consist of operators


+ - / * %
and operands like 40 payRate hours
• Example expression used in an assignment:
grossPay = payRate * hours;

• Example expression:
(40 * payRate) + 1.5 * payRate * (hours - 40)
• The previous expression has how many
operators ?___ operands ?___
Arithmetic Expressions

• A recursive definition
a numeric object x
or a numeric constant 100 or 99.5
or expression + expression 1.0 + x
or expression - expression 2.5 - x
or expression * expression 2*x
or expression / expression x / 2.0
or ( expression ) (1 + 2.0)
Precedence of Arithmetic Operators

• Expressions with more than one operator require


some sort of precedence rules:
* / evaluated left to right order
- + evaluated left to right order
What is 2.0 + 4.0 - 6.0 * 8.0 / 6.0 ____
• Use (parentheses) for readability or to intentionally
alter an expression:
double C;
double F = 212.0;
C = 5.0 / 9.0 * (F - 32); // C = _____
What is the complete dialogue with input
2.3 5.0 2.0
#include <iostream> // for cin, cout, and endl
using namespace std;
int main() {
// Declare Objects
double x, y, z, average;

// Input: Prompt for input from the user


cout << "Enter three numbers: ";
cin >> x >> y >> z;
// Process:
average = (x + y + z) / 3.0;
// Output:
cout << "Average: " << average << endl;

return 0;
}
int Arithmetic

• int variables are similar to double, except they


can only store whole numbers (integers)
int anInt = 0;
int another = 123;
int noCanDo = 1.99; // <- ERROR

• Division with int is also different


• performs quotient remainder whole numbers only
anInt = 9 / 2; // anInt = 4, not 4.5
anInt = anInt / 5; // What is anInt now? ____
anInt = 5 / 2; // What is anInt now? ____
The integer % operation
• The % operator returns the remainder
int anInt = 9 % 2; // anInt ___1___
anInt = 101 % 2; // What is anInt now? ___
anInt = 5 % 11; // What is anInt now? ___
anInt = 361 % 60; // What is anInt now? ___

int quarter;
quarter = 79 % 50 / 25; // What is quarter? ___
quarter = 57 % 50 / 25; // What is quarter? ___
Integer division, watch out

int celcius, fahrenheit;

fahrenheit = 212;
celcius = 5 / 9 * (fahrenheit - 32);

// What is celcius? _____


const objects

• It is sometimes convenient to have objects that cannot


have altered state.
const class-name identifier = expression; // use this form
-or-
const class-name identifier ( expression );
Examples:
const double PI = 3.1415926;
const string ERROR_MESSAGE = "Nooooooo";
Errors would occur on assignment:
PI = 9.8;
cin >> ERROR_MESSAGE;
Mixing types

• There are many numeric types


• In general, if the type differ, promote the "smaller" to the
"larger"
• int + double will be a double
5 + 1.23
5.0 + 1.23
6.23
Another Algorithm Pattern:
Prompt then Input
• The Input/Process/Output programming pattern can
be used to help design many programs in the first
several chapters
• The Prompt then Input pattern also occurs frequently.
• The user is often asked to enter data
• The programmer must make sure the user is told
what to enter
Prompt then Input Pattern

Pattern Prompt then Input


Problem The user must enter something
Outline 1) Prompt the user for input
2) Obtain the input
Code cout << "Enter your first name: ";
Example cin >> firstName;
Examples

• Instances of the Prompt then Input pattern:


cout << "Enter your first name: ";
cin >> firstName;

cout << "Enter accumulated credits: ";


cin >> credits;
Compile, Link, and Run time
• The compiler translates source code into
machine code
• The linker puts together several pieces of
machine code to create an executable program
• Errors occur at various times
Errors and Warnings

• compiletime—syntax errors that occur during


compilation (missing semicolon)
• warnings—code that appears risky, suggesting there
may be a future error (<type>> needs space)
• linktime—errors that occur when the linker cannot
find what it needs (missing .o file)
• runtime—errors that occur while the program is
executing (a file is not found)
• intent—the program does what was typed, not what
was intended (logic error produces wrong answer)
Errors Detected at Compiletime

• Generated while the compiler is processing the


source code
• Compiler reports violations of syntax rules.
• For example, the compiler will try to inform you of
the two syntax errors in this line
int student Number
Warnings generated by the compiler

• The compiler generates warnings when it discovers


something that is legal, but potentially problematic
• Example
double x, y, z;
y = 2 * x;

warning: unused variable 'z' [-Wunused-variable]


warning: variable 'x' is uninitialized when used here [-Wuninitialized]
Linktime Errors
• Errors that occur while trying to put together (link)
an executable program
• For example, we must always have a function named
main
• Main or MAIN won't do
Runtime Errors

• Errors that occur at runtime, that is, while the


program is running
• Examples
• Invalid numeric input by the user
• Dividing an integer by 0
• File not found when opening it (wrong name)
• Indexing a list element with the index is out of range
index
Intent Errors

• When the program does what you typed, not what


you intended
• Imagine this code
cout << "Enter sum: ";
cin >> n;
cout << " Enter n: ";
cin >> sum;
average = sum / n;
• Whose responsibility
is it to find this error?
When the program doesn't work

• If none of the preceding errors occur, the program


may still not be right
• The working program may not match the
specification because either
• The programmers did not match, or understand the
problem statement
• The problem statement may have been incorrect
• Someone may have changed the problem

You might also like