Transcript [02]

CMSC 202
Lesson 2
C++ Primer
Warmup
Create an array called ‘data’
 Define a constant called DATA_SIZE with
value 127
 Write a loop to fill the array with integers
from the user

Intro to C++
Minor differences from C
 Major additions to C
 Today

 Differences

Semester
 Additions
Output

cout



<<



Output stream separator
Between every object in stream
endl


Output stream
Print to screen
Output stream end of line character
Example:
cout << "Hello World!" << endl;
Input

cin
 Input stream
 Standard input

(keyboard)
>>
 Input stream separator
 Between every object in

stream
Example
int age;
cout << "What is your age?" << endl;
cin >> age;
In Action!
#include <iostream>
using namespace std;
int main( )
{
// greet the user
cout << "Hello reader.\n" << "Welcome to C++.\n";
// prompt user and get response
int numberOfLanguages;
cout << "How many programming languages have you used? ";
cin >> numberOfLanguages;
// determine appropriate response
if (numberOfLanguages < 1 )
cout << "Read the preface. You may prefer" << endl
<< "a more elementary book by the same author" << endl;
else
cout << "Enjoy the book." << endl;
return 0;
}
Formatting Decimals

Magic code



cout.setf( ios::fixed );
cout.setf( ios::showpoint );
cout.precision( 2 );



Fix & show the decimal with 2 digits of precision
Collection of flags, set until you UN-set them!
Example:
double temperature = 81.7;
cout.setf( ios::fixed );
cout.setf( ios::showpoint );
cout.precision( 2 );
cout << temperature << endl;
// 81.70
Casting

Old C-style casting
double DegreesCelsius( int degreesFahernheit )
{
return (double)5 / 9 * ( degreesFahrenheit - 32 );
}

New C++-style casting
double DegreesCelsius( int degreesFahernheit )
{
return static_cast<double>( 5 ) / 9
* ( degreesFahrenheit - 32 );
}

Why?

Compiler makes a check – so it’s safer
Constants

Old C-style #defines
#define PI 3.14159;

New C++-style constant variables
const double PI = 3.14159;

Why?
 Type-checking!
Enumerations

enum
 Allows you to define new, limited types
 Maps to integers (so comparisons are allowed)

Syntax:
enum TYPE_NAME { VAL1, VAL2, …, VALN };

Example:
enum DAYS { SUNDAY, MONDAY, TUESDAY,
WEDNESDAY, THURSDAY,
FRIDAY, SATURDAY };
DAYS today = TUESDAY;
Practice!


Work with your neighbor
Rewrite the warmup to use the following C++
constructs:
 cout
 cin
 const

Warmup
 Create an array called ‘data’
 Define a constant called DATA_SIZE
with value 127
 Write a loop to fill the array with integers from the user
Review: C-style Strings

Declare a new string:
char string1[4] = "abc";
char string2[ ] = "abc";
char *stringp = "abc";
What’s the
difference?
// What about this?
char string3[ ] = {'a', 'b', 'c'};
Review: C-style Strings

Library Functions
 strcpy
-- copy a C-style string
 strcat -- concatenate two C-style strings
 strlen -- return the length of a C-style string
 strcmp -- compare two C-style strings
C++-style Strings

Library header file
#include <string>

Create an empty string
string stringName;

Create a string with initial value
string carMake( “Nissan” );
string carModel = “Pulsar”;

Create a copy of a string
string newCarMake( carMake );
C++-style Strings

Copy value into existing string
firstString = secondString;

Access individual character (like arrays!)
firstString[7] = ‘x’;

Compare two strings (==, <, >, !=, …)
if (firstString == “ham”)

Concatenation
string name =
firstName + “ “ + lastName;
C++-style Strings

Length of string
if (fileName.size() > 8)
if (fileName.length() > 8)

Is string empty?
if (fileName.empty())

Treat C++-string as C-string

(HINT: important for file streams!)
string s1 = "bob";
char s2[] = "This is a C-style string";
// this code copies s1 onto s2 using strcpy()
strcpy (s2, s1.c_str());
C++-style Strings
Substring
 Syntax:

stringName.substr( index, length);

Example
string name = “Your Name”;
string your = name.substr(0, 4);
cout << your << endl;
// “Your”
Input/Output with C++ Strings

Output
 Same
as with other variables…
cout << stringName << endl;

Example
string firstName = “Dana”;
string lastName = “Wortman”;
cout << firstName << “ “
<< lastName;
Input/Output with C++ Strings

Input

Same as with other variables
 One issue – strings are broken by whitespace
cin >> stringName;

Example:
string name;
cout << “Please enter your name” << endl;
// User types in: Dana Wortman
cin >> name;
cout << name << endl;
// “Dana”
// “Wortman” is waiting
// to be read…
Input/Output with C++ Strings


Input – Whole lines!
Syntax:


getline(inputStream, stringName);
Getline reads until an end-of-line character is seen (return!)
Example:
string name;
cout << “Please enter your name” << endl;
// User types in: Dana Wortman
getline(cin, name);
cout << name << endl;
// “Dana Wortman”
Strings In Action!
string Reverse (string s)
{
string result(s);
string
int start = 0;
int end = s.length();
// copy of original
// left-most character
// right-most character
// swap chars until end and start
// meet in the middle
R e
while (start < end)
{
--end;
char c = result[end];
result[end] = result[start];
result[start] = c;
++start;
}
! e
return result;
}
v e r s e !
s r e v e R
Practice!
Prompt for 3 words from the user
 Read in 3 separate words
 Concatenate them together into 1 string in
REVERSE ORDER
 Print that string

Challenge!

Part 1:




Part 2:




Define a constant representing the minimum “Gateway” GPA (3.0)
Request the user’s GPA for CMSC 201
Print it using 3 decimal points of precision
Define a constant representing the computer science major code (CMSC)
Request the user’s 4-letter Major code
Print it
Part 3 (use your constants!):

If the user is a CMSC major and their GPA is above the cuttof


If they are a CMSC major and their GPA is too low


Print a congratulatory message
Tell them to retake 201
If they are any other major

Tell them to change majors to CMSC – because it’s the best!