C++ programming language

Learn from examples

1. Program to output a string, integer, and floating point excp1.cpp source code // excp1.cpp example print string, int, float, double #include <iostream> using namespace std; int main(int argc, char *argv[]) // standard main program definition { string mystr("my string"); int i = 31; float x = 34.56; double y = 1.23e+100; cout << "C++ excp1.cpp running" << endl; cout << mystr << endl; cout << "i=" << i << endl; cout << "x=" << x << endl; cout << "y=" << y << endl; cout << "excp1.cpp finished" << endl; return 0; } // end excp1.cpp Execution output: C++ excp1.cpp running my string i=31 x=34.56 y=1.23e+100 excp1.cpp finished 2. commands to execute the source code at a minimum, Windows, Linux, MacOSX. Windows: use nmake or cpp.bat ??? excp1.cpp Linux: g++ -o excpl excp1.cpp excp1 MacOSX g++ -o excp1 excp1.cpp Sample Makefile: # Makefile for C++ excp1_cpp.out file all: excp1_cpp.out # can have many .out excp1.out : excp1.cpp g++ -o excp1 excp1.cpp excp1 > excp1_cpp.out cat excp1_cpp.out 3. You must be able to declare variables and arrays and matrix of various types. excp3.cpp source code #include <iostream> #include <vector> // C++ used below #include <complex> // C++ used below using namespace std; typedef complex<double> cmplx; // just short type names typedef vector<cmplx> c_vec; // complex vector typedef vector<c_vec> c_mat; // complex matrix int main(int argc, char *argv[]) // standard main program definition { // plain C vectors and matrix work int vc1[10]; // C stuff works int mc1[10][10]; double vcd1[10]; double mcd1[10][10]; cout << "excp3.cpp running" << endl; vc1[0] = 13; cout << "int vc1[] vc1[0]=" << vc1[0] << endl; mc1[1][1] = 11; cout << "int mc1[10][10] mc1[1][1]=" << mc1[1][1] << endl; vcd1[0] = 45.67; cout << "double vcd1[10] vcd1[0]=" << vcd1[0] << endl; mcd1[2][2] = 22.22; cout << "double mcd1[10][10] mcd1[2][2]=" << mcd1[2][2] << endl; cout << endl; // using include libraries cmplx z; cout << "test complex library" << endl; z = cmplx(1.5,-3.5); cout << "z = " << z << endl; cout << "real(z) = " << real(z) << endl; cout << "imag(z) = " << imag(z) << endl; cout << "conj(z) = " << conj(z) << endl; cout << "norm(z) = " << norm(z) << endl; cout << "abs(z) = " << abs(z) << endl; cout << "arg(z) = " << arg(z) << endl; cout << "sqrt(norm(z)) = " << sqrt(norm(z)) << endl; cout << "sqrt(z) = " << sqrt(z) << endl; cout << "exp(z) = " << exp(z) << endl; cout << "log(z) = " << log(z) << endl; cout << "pow(z,2) = " << pow(z,2) << endl; c_vec vcx1; // complex vector, initial size = zero vcx1.reserve(4); // reserve space vcx1[0] = cmplx(1.0,1.0); vcx1[1] = cmplx(1.0,2.0); vcx1[2] = cmplx(1.0,3.0); vcx1[3] = cmplx(1.0,4.0); cout << "vcx1[0]= " << vcx1[0] << endl; cout << "vcx1[1]= " << vcx1[1] << endl; cout << "vcx1[2]= " << vcx1[2] << endl; cout << "vcx1[3]= " << vcx1[3] << endl; cout << "vcx1.size() =" << vcx1.size() << " bad" << endl; c_vec vcx2; // complex vector, initial size = zero vcx2.push_back(cmplx(1.0,1.0)); // increase size vcx2.push_back(cmplx(1.0,2.0)); vcx2.push_back(cmplx(1.0,3.0)); vcx2.push_back(cmplx(1.0,4.0)); cout << "vcx2[0]= " << vcx2[0] << endl; cout << "vcx2[1]= " << vcx2[1] << endl; cout << "vcx2[2]= " << vcx2[2] << endl; cout << "vcx2[3]= " << vcx2[3] << endl; cout << "vcx2.size() =" << vcx2.size() << endl; c_mat mcx; // complex matrix, vector of vectors c_vec mv; // need vector for matrix for(int i=0; i<3; i++) // make 3 item vector { mv.push_back(cmplx(0.0,0.0)); // initialize to zero } for(int j=0; j<3; j++) // make each row of 3 by 3 matrix a vector { mcx.push_back(mv); } // initialize, identity matrix for(int i=0; i<3; i++) { mcx[i][i] = cmplx(1.0,0.0); } // print matrix for(int i=0; i<3; i++) { for(int j=0; j<3; j++) { cout << "mcx[" << i << "][" << j << "]=" << mcx[i][j] << endl; } } cout << "excp3.cpp finished" << endl; return 0; } // end excp3.cpp Execution output: excp3.cpp running int vc1[] vc1[0]=13 int mc1[10][10] mc1[1][1]=11 double vcd1[10] vcd1[0]=45.67 double mcd1[10][10] mcd1[2][2]=22.22 test complex library z = (1.5,-3.5) real(z) = 1.5 imag(z) = -3.5 conj(z) = (1.5,3.5) norm(z) = 14.5 abs(z) = 3.80789 arg(z) = -1.1659 sqrt(norm(z)) = 3.80789 sqrt(z) = (1.62909,-1.07422) exp(z) = (-4.19691,1.5721) log(z) = (1.33707,-1.1659) pow(z,2) = (-10,-10.5) vcx1[0]= (1,1) vcx1[1]= (1,2) vcx1[2]= (1,3) vcx1[3]= (1,4) vcx1.size() =0 bad vcx2[0]= (1,1) vcx2[1]= (1,2) vcx2[2]= (1,3) vcx2[3]= (1,4) vcx2.size() =4 mcx[0][0]=(1,0) mcx[0][1]=(0,0) mcx[0][2]=(0,0) mcx[1][0]=(0,0) mcx[1][1]=(1,0) mcx[1][2]=(0,0) mcx[2][0]=(0,0) mcx[2][1]=(0,0) mcx[2][2]=(1,0) excp3.cpp finished 4. You need to be able to have loops, iteration statements excp4.cpp source code // excp4.cpp example loops, iteration #include <iostream> using namespace std; int main(int argc, char *argv[]) // standard main program definition { cout << "excp4.cpp running" << endl; for(int i=3; i<15; i=i+2) { if(i==7) continue; if(i>10) break; cout << "i = " << i << endl; } char ch; for(ch='Z'; ch&ge='A'; ch--) { cout << ch; } cout << endl; for(ch='a'; ch&le='z'; ch++) { cout << ch; } cout << endl; cout << "excp4.cpp finished" << endl; return 0; } // end excp4.cpp Execution output: excp4.cpp running i = 3 i = 5 i = 9 ZYXWVUTSRQPONMLKJIHGFEDCBA abcdefghijklmnopqrstuvwxyz excp4.cpp finished 5. You need if then else conditional statements excp5.cpp source code // excp5.cpp example file if then else #include <iostream> using namespace std; int main(int argc, char *argv[]) // standard main program definition { cout << "excp5.cpp running" << endl; double x = 2.0; // declare test variable int i = 3; if(x < 3.0) // < > &le= &ge= == != compare operations { printf("compare < > &le= &ge= == != x=%e \n",x); } if(x > 3.0 || i == 3 && i > 2) // || is or, && is and { printf("logic || is or, && is and i=%d \n", i); } if( x > 3.0) { printf("x > 3.0 \n"); } else if(i < 3) // optional { printf("i < 3 \n"); } else // optional, get here if none of the above true { printf("none of the above \n"); } // end if optional comment cout << "excp5.cpp finished" << endl; return 0; } // end excp5.cpp Execution output: excp5.cpp running compare < > &le= &ge= == != x=2.000000e+00 logic || is or, && is and i=3 none of the above excp5.cpp finished 6. You need to be able to create functions, procedures, subroutines. excp6.cpp source code // excp6.cpp example create functions and procedures #include <iostream> using namespace std; // either put function definitions before main or put function prototypes int add1(int i) // integer input, integer return { return i+1; } // end add1 void proc1(int i) // void means no return value, this i is local { // could be at end of previous line i = 10*i; cout << "proc1 called, 10*i=" << i << endl; } // end proc1 optional comment // more common is to have function prototype here, function code below double sum(int n, double A[]); // note ; not { here int ret2(int i, int *j); // pass j by address int main(int argc, char *argv[]) // standard main program definition { int j = 3; int i = 1; double arr[4]={1.0,2.0,3.0,4.0}; double val; cout << "excp6.cpp running" << endl; j = add1(j); cout << "j = add1(j) returns " << j << endl; proc1(i); cout << "my i still= " << i << endl; val = sum(4,arr); // code below cout << "sum(4,arr)=" << val << endl; cout << "arr[3] now =" << arr[3] << endl; i = ret2(i, &j); // pass j by address cout << "ret2 i=" << i << ", j=" << j << endl; cout << "excp6.cpp finished" << endl; return 0; } // end main // typical place for functions and procedures used only in this program double sum(int n, double A[]) { double asum = 0.0; for(int i=0; i<n; i++) // for exactly one statement, no {} OK asum += A[i]; A[n-1] = 0.0; // can change values in an array return asum; } // end sum int ret2(int i, int *j) // all uses of j are *j { *j = i+2; // second formal parameter changed return i+1; } // end ret2 // end excp6.cpp Execution output: excp6.cpp running j = add1(j) returns 4 proc1 called, 10*i=10 my i still= 1 sum(4,arr)=10 arr[3] now =0 ret2 i=2, j=3 excp6.cpp finished 7. You need to be able to read and write files in various formats. excp7.cpp source code // excp7.cpp example read and write files, "C" works, this is C++ #include <fstream> // this should also includes in iostream #include <iostream> // but don't count on it, yet #include <string> // for input buffer using namespace std; // bring standard names into scope int main(int argc, char *argv[]) // standard main program definition { fstream my_io; // a users variable for stream information string word; // just a place for inputting cout << "excp7.cpp running" << endl; if(!my_io) // test, anything can go wrong { cout << "can not open junk_file for writing" << endl; // common error } my_io << "Some text" << endl ; // write to the file named "junk_file" my_io << 42; // write more, int, string, float, etc. my_io << " "; // need space between numbers my_io << 123.456; // on same line my_io << endl; // only end line '\n' when used my_io << "more text" << endl; // my_io << "line 4 " << endl; // last line my_io.flush(); // force file to disk my_io.close(); // close the file cout << "junk_file written" << endl; // file should be written my_io.open("junk_file", ios::in); // open an existing file for reading if(!my_io) // test, anything can go wrong { cout << "can not open junk_file for reading" << endl; // common error } // notice that character translation is taking place, // each word is input, not a line while(!my_io.eof()) { my_io >> word; cout << word << endl; } // no my_io.getline(word); my_io.close(); // just being neat, closing file being read cout << "excp7.cpp finished" << endl; return 0; } // end excp7.cpp Execution output: excp7.cpp running junk_file written Some text 42 123.456 more text line 4 4 excp7.cpp finished 8. You need to be able to use a number of files combined to build a program. This may include packages, libraries, operating system commands, header files, etc. Other files needed: math_64.cpp source code math_64.cpp prototype file main file: use link, web page formatted for web excp8.cpp source code #include <iostream> using namespace std; #include "math_64.cpp" // need function prototypes of // separetely compiled functions and procedures // compile g++ -o excp8 excp8.cpp math_64.cpp math_64.h // or seperately compiled math_64.cpp math_64.o int main(int argc, char *argv[]) // standard main program definition { long int n = 4; double x[4] = {2.0, 3.0, 4.0, 5.0}; double y[4] = {5.0, -3.0, 2.0, 4.0}; double z[4] = {-1.0, -1.0, -1.0, 1.0}; // initial junk double sum; cout << "excp8.cpp running" << endl; sum = dot(n, x, y); printf("dot(n, x, y) = %f \n", sum); printf(" \n"); printf("x = %f %f %f %f \n", x[0], x[1], x[2], x[3]); printf("y = %f %f %f %f \n", y[0], y[1], y[2], y[3]); cross(n, x, y, z); printf("x cross y = z = %f, %f, %f, %f \n", z[0], z[1], z[2], z[3]); cout << "excp8.cpp finished" << endl; return 0; } // end excp8.cpp Execution output: excp8.cpp running x = 2, 3, 4, 5 y = 5, -3, 2, 4 dot(n, x, y) = 29.000000 x = 2.000000 3.000000 4.000000 5.000000 y = 5.000000 -3.000000 2.000000 4.000000 x cross y = z = 29.000000, -41.000000, 21.000000, -21.000000 excp8.cpp finished

Last updated 9/20/2019