Week 2 -Wednesday
What did we talk about last time? Binary representation C literals
Unity can only be manifested by the Binary. Unity itself and the idea of Unity are already two. Buddha
Function Result Function Result cos(double theta) Cosine of theta exp(double x) e x sin(double theta) Sine of theta log(double x) Natural logarithm of x tan(double theta) Tangent of theta log10(double x) Common logarithm of x pow(double base, Raise base to power acos(double x) Arc cosine of x double exponent) exponent asin(double x) Arc sine of x sqrt(double x) Square root of x atan(double x) Arc tangent of x ceil(double x) Round up value of x atan2(double y, Arc tangent of y/x floor(double x) Round down value of x double x) fmod(double value, Remainder of dividing fabs(double x) Absolute value of x double divisor) value by divisor
You must #include <math.h> to use math functions #include <math.h> #include <stdio.h> int main() { double a = 3.0; double b = 4.0; double c = sqrt(a*a + b*b); printf("Hypotenuse: %f\n", c); return 0; }
Just using #include gives the headers for math functions, not the actual code You must link the math library with flag –lm > gcc hypotenuse.c -o hypotenuse -lm Now, how are you supposed to know that? > man 3 sqrt
Man (manual) pages give you more information about commands and functions, in 8 areas: General commands 1. System calls 2. Library functions (C library, especially) 3. Special files and devices 4. File formats 5. Miscellaneous stuff 6. System administration 7. Try by typing man topic for something you're interested in If it lists topics in different sections, specify the section > man 3 sqrt For more information: > man man
You are sitting at the origin There's a hyperspace ghost demon at location ( x , y ) Write a program to determine the angle to fire your C- controlled proton accelerator in order to remove the deadly menace
We haven't talked about any input in C yet To read the next character from input, you can use the getchar() function It will return the value of the next character (as an int ) or -1 if the end of the file is reached Store the value as an int first to check to see if the end of the file has been reached If not, you can then store it as a char int value = getchar(); if( value == -1 ) printf("End of file!");
putchar() is the output equivalent of getchar() It outputs a single character at a time You could use printf() with the %c formatter instead, but putchar() can be more convenient for single characters char letter = 's'; putchar('q'); putchar(letter);
Let's write a function that reads input, character by character, and returns the equivalent int value For example, the characters '4' , '5' , '1' , and ' ' would be interpreted as the int 451 We'll read char values until we get a space, newline, or EOF Each time, we multiply our sum by 10 and then add the numerical value of the input We have to subtract '0' from the input, otherwise we'll get the character values of the digits 0 through 9 (which are not 0 through 9) Note: a function like this will be provided for you for some labs
There are preprocessor directives which are technically not part of the C language These are processed before the real C compiler becomes involved The most important of these are #include #define Conditional compilation directives
You have already used #include before #include <stdio.h> It can be used to include any other file Use angle brackets ( < > ) for standard libraries Use quotes ( " " ) for anything else It literally pastes the file into the document where the #include directive is Never #include .c files (executable code), only .h files (definitions and prototypes) It is possible to have a circular include problem
The primary way to specify constants in C is with a #define When you #define something, the preprocessor does a find-and-replace Don't use a semicolon! #define directives are usually put close to the top of a file, for easy visibility #define SIZE 100 int main() { int array[SIZE]; int i = 0; for( i = 0; i < SIZE; i++ ) array[i] = i*i; return 0; }
You can also make macros with #define that take arguments #include <math.h> #define TO_DEGREES(x) ((x) * 57.29578) #define ADD(a,b) ((a) + (b)) int main() { double theta = TO_DEGREES(2*M_PI); int value = ADD(5 * 2, 7); return 0; } You need to be careful with parentheses Constants and macros are usually written in ALL CAPS to avoid confusion
You can use directives #if , #ifdef , #ifndef , #else , #elif and #endif These are mostly used to avoid infinite include problems Sometimes they will change what gets compiled based on compiler version, system libraries, or other stuff #ifndef SOMETHING_H #define SOMETHING_H int something(int a, int b); #endif
Lab 2 is tomorrow sizeof and const System limits Bitwise operations
Keep reading K&R chapter 2 Read LPI chapter 11
Recommend
More recommend