1 / 46

C/C++ Programming on Hobbes(Unix)

C/C++ Programming on Hobbes(Unix). Omar Haque Csci 169 Spring 2003. TA Information . Name: Omar Haque Email: ohaque@gwu.edu Office Phone: not ready Office Room: not ready Office Hours: Tuesday 1pm –3pm. Open Lab. Tuesday Han Young will run the lab I will be there to help out

Download Presentation

C/C++ Programming on Hobbes(Unix)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C/C++ Programming on Hobbes(Unix) Omar Haque Csci 169 Spring 2003

  2. TA Information • Name: Omar Haque • Email: ohaque@gwu.edu • Office Phone: not ready • Office Room: not ready • Office Hours: Tuesday 1pm –3pm Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  3. Open Lab • Tuesday • Han Young will run the lab • I will be there to help out • Friday • Semi lecture in lab • Help on class wide problems Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  4. ANSI • American National Standards Institute • 1990 approved standard for C • 1997 approved standard for C++ Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  5. First C Program /*Comment*/ #include <stdio.h> /*standard input/output header file*/ main() { /*declarations*/ int number1, number2; number2 = 5; printf("Enter a number\n"); scanf("%d", &number1); printf("Number 1 is %d\n", number1); printf("Number 2 is %d\n", number2); return 0; } Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  6. Compiling and Execute C Program • % gcc filename.c –o outputfile • GNU C compiler • Preprocess, compile, link • % ./outputfile Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  7. First C++ Program //comment #include <iostream.h> int main () { //declarations int number1, number2; number2 = 5; cout <<"Enter Number 1 "; cin >> number1; cout << "Number 1 is "<< number1 << endl; cout << "Number 2 is "<< number2 << endl; return 0; } Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  8. Compile and Execute C++ • % CC hello.cpp –o outputfile • Sun C++ compiler • % g++ hello.cpp –o outputfile • GNU C++ compiler • % ./outputfile Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  9. Comments • C requires comments to be delimited by /* and */ • C++ allows // for one line comments • C++ also allows /* */ Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  10. Variables, Identifiers • Variable – piece of memory that is used to hold a value • Identifiers: • Combination of letters, digits, and underscores • Variable names should start with letter or digit • C and C++ are case sensitive Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  11. Data Types • char - 1 byte = 8bits • int – (system dependent) • short 2 byte • long 4 byte • float – 4 byte • double – 8 byte • bool – 1 byte (only in C++) Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  12. More on Variables • Declaration – • int number1; • float number2; • Initialization – • int number1 = 0; • int number2 = 3.3; • Assignment- • number1=5; • number2=number1; Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  13. Variable Scope • Global Variables – variables that are declared above main() can be accessed anywhere after the declaration • LocalVariables – variables declared in section of code {}. Only accessible in that region. Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  14. Characters and Strings • ‘a’ is a character • “sfsddsfsf” is a string • In C and C++ a string a char[] char name[]=“Omar”; printf(“My name is %s\n”, name); • \n is used for newline • %s shows that a parameter for printf is a string Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  15. Characters and Strings in C • Converting a char to an int Int a; A=atoi(“45”); • Similar function atof() for floating point. • Reading input from keyboard with scanf() char string1[20]; printf(“Enter a string:\n”); scanf(“%s, string1); Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  16. Copying Strings • Copy entire string using strcpy() char a[] = “Computer”; char b[25]; strcpy(b,a); • Copy part of string using strncpy() strncpy(b,a,4); b[4] =‘\0’; • ‘\0’ is used as NULL character • Strcar() and Strncat() to append strings. Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  17. Comparing Strings • See if 2 strings are the same with strcmp() • Strcmp(s1,s2) • Returns 1 if equal • Compare part of strings using strncmp() Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  18. Formatting Output • Inside of printf(“ ”); you can use escape characters like \n; • \t move to tab • \r carriage return • \f move cursor to next page • These are called escape sequences Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  19. Formatting Input • In scanf(“ “, variablename); we can specify the type of input like %s; • %d or %I for integer • %c char • %s char array or string • These are called conversion specifiers Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  20. Constants • #define PI 3.14159265 • The preprocessor reads any line that begins with a #. • Declaring a constant • Const zero 0; Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  21. Arithmetic Operators • + addition • - subraction • * multiplication • / division • % modulo or remainder • As in java a = --b; a = b++; a++; Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  22. Relation Operators • == Equal • != Different • > Greater than • < Less than • >= Greater or equal than • <= Less or equal than • Relation Operators return type bool (true or false) in C++ • In C they return an int; 1 for true and 0 for false; Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  23. C++ I/O • C++ has a different way of hanlding input and output, using the iostream C++ library cout << “Omar”; cout << Omar << lastname << “ is me\n”; • Input using cin int number; cin >> number; cout << number << endl; Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  24. Control structures • if (cond) state1 else if (cond2) state2 else state3 • while (expression) statement • do statement while (cond) • for (init; cond; increment) statement; • Use break, continue and goto to jump around the code. Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  25. Switch Statement switch (x) { \ case 1: cout << "x is 1"; break; case 2: cout << "x is 2"; break; default: cout << "value of x unknown"; } Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  26. Functions • We can use functions to achieve structured programming Int add(int a, int b){ a = a+b; return (a); } • ‘int’ is the return type, ‘a’ and ‘b’ are arguments • When we call the function we must pass it parameters matching the arguments Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  27. Passing Parameters • Call By Value • This is what we usually do, we pass a function the value of a variable • Call By Reference • Instead of the value we will pass a pointer to the variable. If we modify the passed variable the change will be seen by the caller • We use ‘&parm’ to show that we are passing the variable at the memory location of parm Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  28. Arrays • Intialization • int numbers[5]={0,1,2,3,4,}; • Accessing • num2 =numbers[1]; • numbers[0]=99; • Passing arrays as parameters • Declaration: int add(int numarray[]) • Call: int array[]={1,2,3}; add(array); Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  29. Pointers • We used pointers in call by reference • Valuable in implementing data structures • Referencing • by a variable name is called a direct reference. • Through a pointer is called indirection (*) Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  30. Indirect Referencing int number=5; int *numberPtr; • Number directly referencing a variable whose value is 5; • numberPtr indirectly referencing the value. • Initialize pointers when they are declared. Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  31. Address Operator • The ‘&’ operator returns the ‘address of’ its operand. int num=5; int* numPtr; numPtr = &y; • So numPtr set to the address of y; Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  32. More on Pointers • The two operators & and * are complements • Given: Int num; Int *numPtr; numPtr =&num • Then: • &*numPtr is same as &*numPtr; • The value of num can be accessed using ‘num’ or ‘numPtr’ • The address of num can be accessed using ‘&num’ or ‘numPtr’ • Conversion specifier for pointers is ‘%p’ Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  33. Sizeof() • The Sizeof() function is used to determine how many bytes of a data type during compilation. • Ex: sizeof(float) equals 4 float array[10]; sizeof(array) equals 4*10 which is40 Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  34. Dynamic Memory • Dynamic Memory allows us to determine and allocate memory to variables and data structures at ‘run time’. • C++ uses new and delete; • pointer = new type; • New returns a pointer to the allocated memory • delete pointer; • Frees up the memory that was allocated Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  35. Dynamic Memory in C • C does not use new and delete • It uses malloc(), free(), etc… found in stdlib.h ANSI C library • pointer = (type cast) malloc(nbytes); Int*numPtr numPtr =(int*) malloc(sizeof(int)); • free(pointer) releases the allocated memory Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  36. Structs • Similar to records in Ada. struct person_t{ char fname[20]; char lname[20]; int age; }person1, person2; • Here we are declaring person1 and person2 as type person_t. • By convention we use the _t Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  37. Accessing the struct members • We use the ‘.’ to access members of a struct cout << person1.fname; person1.fname=“John”; Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  38. What about Pointers to Structs • We can point to a struct like other structures. Person_t* person1Ptr; person1Ptr = &person1; • We can no longer use the ‘.’ to access the members in the struct we are pointing to. • The ‘->’ is used Cout << person1Ptr->fname; • Element fname of structed pointed by person1Ptr • Same as *(person1Ptr.fname); Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  39. Other Types • Defining your own types can be done using typdef • Typedef existing_type new_type; • Unions allow the same portion of memory to be accessed as different data types; • Enum is like Enumeration Types in Ada • When you grouped the months or days together Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  40. C++ Classes • C++, not C, has the ablity to create classes which is similar to Java, using class • Classes can contain data and functions • Members of the class can be private, protected or public. • Protected members are only accessible by friend classes. Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  41. Class Example from cplusplus.com class CRectangle { int width, height; public: CRectangle (int,int); int area (void) {return (width*height);} }; CRectangle::CRectangle (int a, int b) { width = a; height = b; } int main () { CRectangle rect (3,4); CRectangle rectb (5,6); cout << "rect area: " << rect.area() << endl; cout << "rectb area: " << rectb.area() << endl; } Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  42. More on Classes • Destruct is automatically called if it is defined CRectangle::~CRectangle () { delete width; delete height; } • You can overload constructers, each with diff parameters. • When you declare a new class instance, using a constructor with no parameters then don’t use parethesis. • MyClass aclass; Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  43. Little More on C++ • C++ allows for operator overloading • Unlike Java, C++ allows for multiple inheritance. • A child can have 2 parents • The keyword thisworks like it does in Java • Templates, Namespaces, Friend later in the semister. Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  44. Header Files • .h files are strictly convention, • Anything in these files can be put in .c or .cpp files • Usually in the header file we put variable definition,library includes, function prototype(its sign), constants, typdefs. • Header files separate implementation for interface like (.ads and .adb in Ada) Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  45. C Concepts • Scope is basically top down • Everything in C is a function • Relies heavily on programmers’ conventions • Physical modularity through the file and logical through the functions. Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

  46. C++ Concepts • Proper subset of C • Classes allow for large scale programming and encapsulation. • Templates support generic programming • Class is unit of logical modularity. Omar Haque | C/C++ on Hobbes (Unix) | Csci169 | Spring 2003

More Related