This document provides an introduction to programming in C and C++. It discusses that C was created in the 1970s and is a lower-level language than Fortran, which was traditionally used for scientific computing. However, C and C++ have become more popular for complex scientific programs. The document provides examples of minimal C programs and discusses compiling, libraries, pointers, references, functions, object-oriented programming in C++, and suggested reading materials.
This document provides an introduction to programming in C and C++. It discusses that C was created in the 1970s and is a lower-level language than Fortran, which was traditionally used for scientific computing. However, C and C++ have become more popular for complex scientific programs. The document provides examples of minimal C programs and discusses compiling, libraries, pointers, references, functions, object-oriented programming in C++, and suggested reading materials.
This document provides an introduction to programming in C and C++. It discusses that C was created in the 1970s and is a lower-level language than Fortran, which was traditionally used for scientific computing. However, C and C++ have become more popular for complex scientific programs. The document provides examples of minimal C programs and discusses compiling, libraries, pointers, references, functions, object-oriented programming in C++, and suggested reading materials.
This document provides an introduction to programming in C and C++. It discusses that C was created in the 1970s and is a lower-level language than Fortran, which was traditionally used for scientific computing. However, C and C++ have become more popular for complex scientific programs. The document provides examples of minimal C programs and discusses compiling, libraries, pointers, references, functions, object-oriented programming in C++, and suggested reading materials.
C. David Sherrill School of Chemistry and Biochemistry Georgia Institute of Technology The C Programming Language: Low-level operators Created by Dennis Ritchie for the DEC PDP-11 UNIX operating system, 1970s ANSI standard 1983 A superset called C++ for object-oriented programming (Stroustrup, 1980+). C/C++ currently dominant programming language (used to write, e.g., operating systems) C and Scientic Computing Scientic computing was traditionally done with Fortran. C was slow to catch on during the 1980s. C/C++ taken more seriously as scientic programs became more complex. Ab initio programs: Gaussian-9x: Maybe 60% Fortran, 40% C?? Q-Chem 2.0: 10% C++, 50% C, 40% Fortran PSI 3.0: 20% C++, 60% C, 20% Fortran NWChem: C and Fortran MPQC: 100% C++ (and Curt++ !) A Minimal C Program #include <stdio.h> main() { printf("Hello, world!\n"); } N.b. This is not good ANSI C! Strictly speaking, should have types. C is a Typed Language All variables (and functions) must have a given type. Some allowed types: int integer oat oating point number, single-precision (bad) double oating point number, double-precision (good) char character value FILE le structure void A weird catch-all meaning nothing or anything In C++, you make up your own data types! An ANSI Approved Hello World #include <stdio.h> int main(void) { printf("Hello, world!\n"); return(0); /* exit w/ success status */ } Compiling a Program To compile a simple C program in UNIX, you invoke the C compiler (usually named cc) like this: cc hello-world.c -o hello-world This would compile a C le called hello-world.c (containing the previous example, perhaps) and make an executable program called hello-world. The executable need not have the same name as the program le. If no name is given by the -o switch, the program will be named a.out by default. To compile a C++ program, one would use the C++ compiler [often named cpp, g++ (GNU), or xlC (IBM)]. To compile two C les into one executable, one rst compiles the C source into object les cc -c hello-world.c other-file.c creating hello-world.o and other-file.o. The object les are linked into the nal executable: cc -o hello-world hello-world.o other-file.o Often this can be done all in one step as a shortcut like this: cc -o hello-world hello-world.c other-file.c Linking Libraries Frequently one wishes to call standard library functions, such as the square root function sqrt() from the math library, etc. These libraries are special les with names ending in a .a sux (the a stands for archive). Names of libraries usually start with the previx lib, as in libm.a, the C math library. To link against a library one uses the -l ag. The math library can be included by a command like: cc hello-world.c -o hello-world -lm The -l ag automatically adds a lib prex and .a sux to determine the library name. Makeles for Large Programs Programs containing more than a few source code les are best compiled using a special program called make. The make command reads a le called Makefile to determine how to compile the program, what libraries to link, etc. An example follows: ROOT = /home/users/sherrill/C LIBS = -L$(ROOT)/lib -lm -lds_io -lds_str CFLAGS = -I$(ROOT)/include -O CC = cc NOBJ = biblio.o cparse.o format.o SRC = $(NOBJ:%.o=%.c) biblio: $(NOBJ) $(CC) $(CFLAGS) $(NOBJ) $(LIBS) -o biblio clean: /bin/rm -f $(NOBJ) # DO NOT DELETE THIS LINE -- make depend depends on it biblio.o: biblio.c cparse.o: cparse.c format.o: format.c A More Complex Program Example #include <stdio.h> main() { double x, y; double crazy_function(double x); x = 4.0; y = crazy_function(x); printf("The result is %lf\n", y); } double crazy_function(double x) { double z; x = x * x; z = x + 1.0; return(z); } When run, the program prints The result is 17.000000 Pass-by-Value Suppose we modied the previous example as such: x = 4.0; y = crazy_function(x); printf("The result is %lf\n", y); printf("The value of x is %lf\n", x); Whats x ? You might think 16.0, but its 4.0. How could you modify crazy function so x would really be changed by it? Solution I: C Pointers y = crazy_function(&x); double crazy_function(double *x) { double z; *x = *x * *x; z = *x + 1.0; return(z); } Solution I: C++ References y = crazy_function(x); double crazy_function(double &x) { double z; x = x * x; z = x + 1.0; return(z); } Exactly same as original except for declaration of crazy function. #include <stdio.h> #include <math.h> main() { double x, y; x = 4.0; y = sqrt(x); printf("The result is %lf\n", y); } The result is 2.000000 Why didnt we need to declare sqrt? Subroutines Also Called Functions main() { double x; void dumb_subroutine(double x); x = 4.0; dumb_subroutine(x); } void dumb_subroutine(double y) { printf("The result is %lf\n", y); } Whats So Great About C++ ? Retains C as a subset Has nice new featues like references, constants, and especially user-dened datatypes or objects Object-oriented language: seen as big advantage for very large codes Not very ecient; may need to do computationally intensive subroutines in C or Fortran (or call optimized math library like BLAS) Object-Oriented Programming and C++ Contrasts to procedural programming The program consists of objects which know how to relate to each other Objects hide their own data and can only be accessed through their interfaces keeps others from messing up your beautiful code Separation of interface from implementation makes up- grades easier C++ programmers tend to write insanely complex code; natural result of taking object ideas to their limit Suggested Reading The C Programming Language, 2nd ed., Brian W. Kernighan and Dennis M. Ritchie (Prentice Hall, Englewood Clis, NJ, 1988). The C++ Programming Language, 3rd ed., Bjarne Strous- trup (Addison-Wesley, Reading, MA, 1997).
Python Advanced Programming: The Guide to Learn Python Programming. Reference with Exercises and Samples About Dynamical Programming, Multithreading, Multiprocessing, Debugging, Testing and More