Download presentation
Presentation is loading. Please wait.
Published byDouglas Barrett Modified over 9 years ago
1
Programming in C Variables, Controls, Functions
2
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 CandyMachine 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 getValidInt( ), search( ) and inputPersonData( ). Data is global or passed to functions as parameters No classes
3
7/28/09 Libraries Because Java is an OOP language, its libraries consist of predefined classes that you can use in your applicationsBecause Java is an OOP language, its libraries consist of predefined classes that you can use in your applications –ArrayList, Scanner, Color, Integer Because C is a procedural language, its library consists of predefined functions.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” commandOn-line C/Unix manual -- the “man” command –Description of many C library functions and Unix commands –Usage: man for C library functions or man 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”
4
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 #include int main( ) { printf( “Hello World\n” ); return 0; }
5
7/28/09 Compiling and Running a Java Program Java Code Java Bytecode JRE for Linux JRE for Windows Java compiler Hello.java javac Hello.java Hello.class java Hello Java interpreter translates bytecode to machine code in JRE unix> javac -d. *.java unix> java hello.Hello
6
7/28/09 Compiling and Running a C Program Pre- processor ( cpp ) hello.i Compiler ( cc1 ) hello.s Assembler ( as ) hello.o Linker ( ld ) hellohello.c Source program (text) Modified source program (text) Assembly program (text) Relocatable object programs (binary) Executable object program (binary) printf.o unix> gcc -o hello hello.c unix> hello
7
7/28/09 Language Commonality C and Java syntax have much in commonC and Java syntax have much in common –Some Data Types –Arithmetic operators –Logical Operators –Control structures –Other Operators
8
7/28/09 Data Types Both languages support the integral types int, short, long.Both languages support the integral types int, short, long. Both languages support the floating point types double and floatBoth languages support the floating point types double and float Both languages support the character data type charBoth languages support the character data type char Both languages support the Boolean data type bool *Both languages support the Boolean data type bool * Both languages support enumsBoth languages support enum s C allows the signed (default) and unsigned qualifiers for integral types (char, int, short, long)C allows the signed (default) and unsigned qualifiers for integral types ( char, int, short, long) C does NOT support byte (use char instead)C does NOT support byte (use char instead) Both languages support arrays using [ ] and indexing starting with zero (0).Both languages support arrays using [ ] and indexing starting with zero (0). * bool is a built-in type in Java. bool is available with the current C99 standard, but requires * bool is a built-in type in Java. bool is available with the current C99 standard, but requires
9
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 Arithmetic Practice Arithmetic Practice Assignment Practice Assignment Practice Assignment Practice
10
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 Boolean Logic Practice Boolean Logic Practice
11
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 Loop Practice Loop Practice
12
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
13
7/28/09 Functions and Methods Java classes include methods which can be called from any code with appropriate access (recall public 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*.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 functionsLike 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.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
14
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 nrTimes) { int n; for (n = 0; n < nrTimes; n++) printf(“Arf!\n”);}
15
7/28/09 Function Prototypes A function prototype defines the function’s name, return type, and parameters.A function prototype defines the function’s name, return type, and parameters. For example from the previous slideFor 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.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. (note the semi-colon).
16
7/28/09 A Simple C Program /* convertTemps.c */ #include #include /* prototype for CtoF */ double CtoF( double degreesCelsius); int main( ) { int temp; for (temp = 0; temp < 100; temp += 20) printf(“%2d degrees F = %5.2f degrees C\n”, temp, CtoF( temp )); return 0; } /* converts temperature in Celsius to Fahrenheit */ double CtoF(double celsius) { double fahrenheit; fahrenheit = 9.0 / 5.0 * celsius + 32; return fahrenheit; }
17
7/28/09 Typical C Program includes #include double CtoF( double celcius); int main( ) { int temp; for (temp = 0; temp < 100; temp += 20) printf(“%2d degrees F = %5.2f degrees C\n”, temp, CtoF( temp )); return 0; } /* converts temperature in Celsius to Fahrenheit */ double CtoF(double celsius) { double fahrenheit; fahrenheit = 9.0 / 5.0 * celsius + 32; return fahrenheit; } defines, data type definitions, global variable declarations function prototypes function definitions main()
18
7/28/09 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 convertTemps.c tells the compiler to create executable file with the name convert tells the compiler the name of the input file.
19
7/28/09 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.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.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 CtoF() would be placed into the file CtoF.h which would then be #included in convertTemps.c or any other.c file that used CtoF( )In this example, the prototype for CtoF() would be placed into the file CtoF.h which would then be #included in convertTemps.c or any other.c file that used CtoF( ) The code for CtoF( ) would be placed int CtoF.cThe code for CtoF( ) would be placed int CtoF.c
20
7/28/09 CtoF.h /* CtoF.h */ /* #includes needed by prototypes */ /* #defines needed for prototypes */ /* prototype for functions defined in CtoF.c */ double CtoF( double celsius );
21
7/28/09 CtoF.c /* CtoF.c */ /* necessary #includes, #defines */ /* converts temp in Celsius to Fahrenheit */ double CtoF(double celsius) { double fahrenheit; fahrenheit = 9.0 / 5.0 * celsius + 32; return fahrenheit; }
22
7/28/09 convertTemps.c revisited #include #include “CtoF.h”/* note quotes */ int main( ) { int temp; for (temp = 0; temp < 100; temp += 20) printf(“%2d degrees F = %5.2f degrees C\n”, temp, CtoF( temp )); return 0; }
23
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.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 executableThe 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 CtoF.c gcc -o myprogram myprogram.o CtoF.o Or it can be done all in one stepOr it can be done all in one step –gcc -o myprogram myprogram.c CtoF.c
24
7/28/09 Recursion C functions may be called recursively.C functions may be called recursively. –A function calls itself A properly written recursive function has the following propertiesA 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 variablesEach invocation of the function gets its own set of arguments and local variables
25
7/28/09 Recursion Example /* print an integer in decimal ** K & R page 87 (may fail on largest negative int) */ #include Void printd( int n ) { if ( n < 0 ) { printf( “-” ); n = -n; } if ( n / 10 )/* more than 1 digit */ printd( n / 10 );/* recursive call- n has 1 less digit */ printf( “%c”, n % 10 + ‘0’); /* base case --- 1 digit */ }
26
7/28/09 Miscellaneous CommentsComments –Both languages support block comments surrounded by /* and */, –C99 standard also supports // end-of-line style Declaring variablesDeclaring variables –Starting with the C99 standard, C variables may be declared anywhere in the code, just like Java #defines#defines –C supports the definition of macros using #define #define MAX 42 // a simple name of an int More complex macros later
27
7/28/09 Java/C Project example Number Theory - a problem about integersNumber Theory - a problem about integers http://www.cs.umbc.edu/courses/undergradaute/3 13/fall09/code/numbertheory.txthttp://www.cs.umbc.edu/courses/undergradaute/3 13/fall09/code/numbertheory.txthttp://www.cs.umbc.edu/courses/undergradaute/3 13/fall09/code/numbertheory.txthttp://www.cs.umbc.edu/courses/undergradaute/3 13/fall09/code/numbertheory.txt
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.