Programming in C Variables Controls Functions 72809 Different

Programming in C Variables, Controls, Functions 7/28/09

Different Kinds of Languages § Java is an object-oriented programming (OOP) language § Problem solving centers on defining classes that model “things” like Trucks, Persons, Marbles, Strings, and Candy. Machine § Classes encapsulate data (instance variables) and code (methods) C is a procedural language § Problem solving centers on defining functions that perform a single service like get. Valid. Int( ), search( ) and input. Person. Data( ). § Data is global or passed to functions as parameters § No classes 7/28/09

Libraries • Because Java is an OOP language, its libraries consist of predefined classes that you can use in your applications – Array. List, Scanner, Color, Integer • Because C is a procedural language, its library consists of predefined functions. – Char/string functions (strcpy, strcmp) – Math functions (floor, ciel) – Input/Output functions (printf, scanf) • On-line C/Unix manual -- the “man” command – Description of many C library functions and Unix commands – Usage: man <function name> for C library functions or man <command name> for Unix commands • man printf • man dir – Search for applicable man pages using the “apropos” command or “man -k” – Learn to use the man command using “man man” 7/28/09

Hello World In JAVA -- Hello. java is in a class package hello; public class Hello { public static void main( String[ ] args ) { System. out. println( “Hello World” ); } } In C -- Hello. c stands alone #include <stdio. h> int main( ) { printf( “Hello Worldn” ); return 0; } 7/28/09

Compiling and Running a Java Program unix> javac -d. *. java Java Bytecode Java Code javac Hello. java Java compiler Hello. java Hello. class unix> java hello. Hello 7/28/09 lo el H java JRE for Linux Java interpreter translates bytecode to machine code in JRE jav a. H ello JRE for Windows

Compiling and Running a C Program unix> gcc -o hello. c printf. o hello. c Source program (text) Prehello. i Compiler hello. s Assembler hello. o Linker processor (cc 1) (as) (ld) (cpp) Modified Relocatable Assembly source program (text) unix> hello 7/28/09 program (text) object programs (binary) hello Executable object program (binary)

Language Commonality • C and Java syntax have much in common – – – 7/28/09 Some Data Types Arithmetic operators Logical Operators Control structures Other Operators

Data Types • • Both languages support the integral types int, short, long. Both languages support the floating point types double and • • Both languages support the character data type char Both languages support the Boolean data type bool* Both languages support enums C allows the signed (default) and unsigned qualifiers for integral types (char, int, short, long) C does NOT support byte (use char instead) Both languages support arrays using [ ] and indexing starting with zero (0). • • float * bool is a built-in type in Java. bool is available with the current C 99 standard, but requires <stdbool. h > <stdbool. h> 7/28/09

Arithmetic Operators Arithmetic operators are the same = is used for assignment +, -, (plus, minus) *, /, % (times, divide, mod) ++, -- (increment, decrement (pre and post)) Combinations are the same +=, -=, (plus equal, minus equal) *=, /=, %= (times equal, divide equal, mod equal) § Arithmetic Practice § Assignment Practice 7/28/09

Logical Operators Logical operators are the same in C and Java and result in a Boolean value § § § && (and) || (or) ==, != (equal and not equal) <, <= (less than, less than or equal) >, >= (greater than, greater than or equal) § Boolean Logic Practice 7/28/09

Control Structures Both languages support these control structures which function the same way in C and Java § for loops § But NOT -- for (int i = 0; i < size; i++) § while loops § do-while loops § switch statements § if and if-else statements § braces ( {, } ) begin and end of blocks § Loop Practice 7/28/09

Other Operators These other operators are the same in C and Java § ? : (tri-nary “hook colon”) printf(“x is %s greater than y”, (x <= y ? “ not “ : “”)); § § <<, >>, &, |, ^ (bit operators*) <<=, >>=, &=, |=, ^= [ ] (brackets for arrays) ( ) parenthesis for functions and type casting *much more on these later 7/28/09

Functions and Methods • Java classes include methods which can be called from any code with appropriate access (recall public methods) • C functions are like Java methods, but they don’t belong to any class. Functions are defined in a file and may be either global to your program or local to the file in which they are defined*. Like Java methods, C functions – Have a name – Have a return type – Have (optional) parameters – Pass arguments “by value” Unlike Java methods, a function in C is uniquely identified by its name. Therefore, there is no concept of method overloading in C as there is in Java. There can be only one main( ) function in a C application. • • *more on this later 7/28/09

C Function Examples /* returns the average of two integer parameters */ int average( int a, int b ) { return ( (a + b) / 2 ); } /* Simulates dog barking */ void bark (int nr. Times) { int n; for (n = 0; n < nr. Times; n++) printf(“Arf!n”); } 7/28/09

Function Prototypes • A function prototype defines the function’s name, (note the semi-colon). return type, and parameters. • For example from the previous slide int average( int a, int b ); void bark( int n ); • Before a function may be called, you must provide its prototype (or the function itself) so that the C compiler can verify the function is being called correctly. 7/28/09

A Simple C Program /* convert. Temps. c */ #include <stdio. h> /* prototype for Cto. F */ double Cto. F( double degrees. Celsius); int main( ) { int temp; for (temp = 0; temp < 100; temp += 20) printf(“%2 d degrees F = %5. 2 f degrees Cn”, temp, Cto. F( temp )); return 0; } /* converts temperature in Celsius to Fahrenheit */ double Cto. F(double celsius) { double fahrenheit; fahrenheit = 9. 0 / 5. 0 * celsius + 32; return fahrenheit; } 7/28/09

Typical C Program includes #include <stdio. h> double Cto. F( double celcius); defines, data type definitions, global variable declarations function prototypes main() function definitions 7/28/09 int main( ) { int temp; for (temp = 0; temp < 100; temp += 20) printf(“%2 d degrees F = %5. 2 f degrees Cn”, temp, Cto. F( temp )); return 0; } /* converts temperature in Celsius to Fahrenheit */ double Cto. F(double celsius) { double fahrenheit; fahrenheit = 9. 0 / 5. 0 * celsius + 32; return fahrenheit; }

Compiling on Unix Traditionally the name of the C compiler that comes with Unix is “cc”. On the UMBC GL systems, use the GNU compiler named “gcc”. gcc –o convert. Temps. c 7/28/09 tells the compiler to create executable file with the name convert tells the compiler the name of the input file.

Header Files • When a file contains functions to be reused in several programs, their prototypes and important #defines are usually placed into a header (. h ) that is then #included where needed. • Each. h file should be “stand alone”. That is, it should #include any. h files it needs to avoid compiler errors. • In this example, the prototype for Cto. F() would be placed into the file Cto. F. h which would then be #included in convert. Temps. c or any other. c file that used Cto. F( ) • The code for Cto. F( ) would be placed int Cto. F. c 7/28/09

Cto. F. h /* Cto. F. h */ /* #includes needed by prototypes */ /* #defines needed for prototypes */ /* prototype for functions defined in Cto. F. c */ double Cto. F( double celsius ); 7/28/09

Cto. F. c /* Cto. F. c */ /* necessary #includes, #defines */ /* converts temp in Celsius to Fahrenheit */ double Cto. F(double celsius) { double fahrenheit; fahrenheit = 9. 0 / 5. 0 * celsius + 32; return fahrenheit; } 7/28/09

convert. Temps. c revisited #include <stdio. h> #include “Cto. F. h” /* note quotes */ int main( ) { int temp; for (temp = 0; temp < 100; temp += 20) printf(“%2 d degrees F = %5. 2 f degrees Cn”, temp, Cto. F( temp )); return 0; } 7/28/09

Compiling and linking • When a program’s code is separated into multiple. c files, we must compile each. c file and then combine the resulting. o files to create an executable program. • The files may be compiled separately and then linked together. The -c flag in the first two command tells gcc to “compile only” which results in the creation of. o (object) files. In the 3 rd command, the presence of. o extension tells gcc to link the files into an executable gcc -c myprogram. c gcc -c Cto. F. c gcc -o myprogram. o Cto. F. o • Or it can be done all in one step – gcc -o myprogram. c Cto. F. c 7/28/09

Recursion • C functions may be called recursively. – A function calls itself • A properly written recursive function has the following properties – A “base case” - a condition which does NOT make a recursive call because a simple solution exists – A recursive call with a condition (usually a parameter value) that is closer to the base case than the condition (parameter value) of the current function call • Each invocation of the function gets its own set of arguments and local variables 7/28/09

Recursion Example /* print an integer in decimal ** K & R page 87 (may fail on largest negative int) */ #include <stdio. h> Void printd( int n ) { if ( n < 0 ) { printf( “-” ); n = -n; } if ( n / 10 ) printd( n / 10 ); /* more than 1 digit */ /* recursive call- n has 1 less digit */ printf( “%c”, n % 10 + ‘ 0’); /* base case --- 1 digit */ } 7/28/09

Miscellaneous • Comments – Both languages support block comments surrounded by /* and */, – C 99 standard also supports // end-of-line style • Declaring variables – Starting with the C 99 standard, C variables may be declared anywhere in the code, just like Java • #defines – C supports the definition of macros using #define • #define MAX 42 // a simple name of an int • More complex macros later 7/28/09

Java/C Project example • Number Theory - a problem about integers • http: //www. cs. umbc. edu/courses/undergradaute/3 13/fall 09/code/numbertheory. txt 7/28/09
- Slides: 27