Introduction and Basic C Features

22
23

          Lesson 1: Introduce to C    previous post    

  Lesson 2: If statements in C

The ability to control the flow of your program, letting it make decisions on what code to execute, is valuable to the programmer. The if statement allows you to control if a program enters a section of code or not based on whether a given condition is true or false. One of the important functions of the if statement is that it allows the program to select an action based upon the user’s input.


There are a number of operators that allow these checks. 

Here are the relational operators, as they are known, along with examples:

>     greater than              5 > 4 is TRUE
<     less than                 4 < 5 is TRUE
>=    greater than or equal     4 >= 4 is TRUE
<=    less than or equal        3 <= 4 is TRUE
==    equal to                  5 == 5 is TRUE
!=    not equal to              5 != 4 is TRUE


  Basic If Syntax

The structure of an if statement is as follows:
if ( statement is TRUE )
    Execute this line of code
Here is a simple example that shows the syntax:
if ( 5 < 10 )
    printf( "Five is now less than ten, that's a big surprise" );
Here, we’re just evaluating the statement, “is five less than ten”, to see if it is true or not; with any luck, it’s not! If you want, you can write your own full program including stdio.h and put this in the main function and run it to test. 
Anything inside braces is called a compound statement, or a block. When using if statements, the code that depends on the if statement is called the “body” of the if statement. 

For example:

if ( TRUE ) {
  /* between the braces is the body of the if statement */
  Execute all statements inside the body
}

Else

Sometimes when the condition in an if statement evaluates to false, it would be nice to execute some code instead of the code executed when the statement evaluates to true. The “else” statement effectively says that whatever code after it (whether a single line or code between brackets) is executed if the if statement is FALSE. 

It can look like this:

if ( TRUE ) {
  /* Execute these statements if TRUE */
}
else {
  /* Execute these statements if FALSE */
}

Else if

Another use of else is when there are multiple conditional statements that may all evaluate to true, yet you want only one if statement’s body to execute. You can use an “else if” statement following an if statement and its body; that way, if the first statement is true, the “else if” will be ignored, but if the if statement is false, it will then check the condition for the else if statement. If the if statement was true the else statement will not be checked. It is possible to use numerous else if statements to ensure that only one block of code is executed. 

Let’s look at a simple program for you to try out on your own.

#include <stdio.h>        
 
int main()                            /* Most important part of the program!
*/
{
    int age;                          /* Need a variable... */
  
    printf( "Please enter your age" );  /* Asks for age */
    scanf( "%d", &age );                 /* The input is put in age */
    if ( age < 100 ) {                  /* If the age is less than 100 */
     printf ("You are pretty young!n" ); /* Just to show you it works... */
  }
  else if ( age == 100 ) {            /* I use else just to show an example */ 
     printf( "You are oldn" );       
  }
  else {
    printf( "You are really oldn" );     /* Executed if no other statement is
    */
  }
  return 0;
}
 
 
More interesting conditions using boolean operators
Boolean operators allow you to create more complex conditional statements. When using if statements, you will often wish to check multiple different conditions. You must understand the Boolean operators OR, NOT, and AND. The boolean operators function in a similar way to the comparison operators: each returns 0 if evaluates to FALSE or 1 if it evaluates to TRUE. 
 
NOT: The NOT operator accepts one input. If that input is TRUE, it returns FALSE, and if that input is FALSE, it returns TRUE.In C NOT is written as !.
AND: This is another important command. AND returns TRUE if both inputs are TRUE (if ‘this’ AND ‘that’ are true). (1) AND (0) would evaluate to zero because one of the inputs is false (both must be TRUE for it to evaluate to TRUE) . The AND operator is written && in C.
OR: Very useful is the OR statement! If either (or both) of the two values it checks are TRUE then it returns TRUE. OR is written as || in C         
Try some of these – they’re not too hard. If you have questions about them, feel free to stop by our forums.
A. !( 1 || 0 )         ANSWER: 0   
B. !( 1 || 1 && 0 )    ANSWER: 0 (AND is evaluated before OR)
C. !( ( 1 || 0 ) && 0 )  ANSWER: 1 (Parenthesis are useful)
If you find you enjoyed this section, then you might want to look more at Boolean Algebra. 
C ProgrammingQuiz: If statements
1. Which of the following is true?
 
A. 1
B. 66
C. .1
D. -1
E. All of the above

2. Which of the following is the boolean operator for logical-and?
 

A. &
B. &&
C. |
D. |&

3. Evaluate !(1 && !(0 || 1)).
 

A. True
B. False
C. Unevaluatable

4. Which of the following shows the correct syntax for an if statement?
 

A. if expression
B. if { expression
C. if ( expression )
D. expression if
Ans:1.e ,2.b, 3.a, 4. C,

  Lesson 3: Loops

Loops are used to repeat a block of code. Being able to have your program repeatedly execute a block of code is one of the most basic but useful tasks in programming — many programs or websites that produce extremely complex output (such as a message board) are really only executing a single task many times.
One caveat: before going further, you should understand the concept of C’s true and false, because it will be necessary when working with loops (the conditions are the same as with if statements). This concept is covered in the previous tutorial. There are three types of loops: for, while, and do..while. Each of them has their specific uses. They are all outlined below. 

FOR – for loops are the most useful type. The syntax for a for loop is 


for ( variable initialization; condition; variable update ) {
  Code to execute while the condition is true
}
The variable initialization allows you to either declare a variable and give it a value or give a value to an already existing variable. Second, the condition tells the program that while the conditional expression is true the loop should continue to repeat itself. The variable update section is the easiest way for a for loop to handle changing of the variable. It is possible to do things like x++, x = x + 10, or even x = random ( 5 ), and if you really wanted to, you could call other functions that do nothing to the variable but still have a useful effect on the code. Notice that a semicolon separates each of these sections, that is important. Also note that every single one of the sections may be empty, though the semicolons still have to be there. If the condition is empty, it is evaluated as true and the loop will repeat until something else stops it. 

Example:

#include <stdio.h>
 
int main()
{
    int x;
    /* The loop goes while x < 10, and x increases by one every loop*/
    for ( x = 0; x < 10; x++ ) {
        /* Keep in mind that the loop condition checks 
           the conditional statement before it loops again.
           consequently, when x equals 10 the loop breaks.
           x is updated before the condition is checked. */   
        printf( "%dn", x );
    }
    getchar();
}
This program is a very simple example of a for loop. x is set to zero, while x is less than 10 it calls printf to display the value of the variable x, and it adds 1 to x until the condition is met. Keep in mind also that the variable is incremented after the code in the loop is run for the first time.

WHILE – WHILE loops are very simple. The basic structure is 

while ( condition ) { Code to execute while the condition is true } The true represents a boolean expression which could be x == 1 or while ( x != 7 ) (x does not equal 7). It can be any combination of boolean statements that are legal. Even, (while x ==5 || v == 7) which says execute the code while x equals five or while v equals 7. Notice that a while loop is like a stripped-down version of a for loop– it has no initialization or update section. However, an empty condition is not legal for a while loop as it is with a for loop. 

Example:

#include <stdio.h>
 
int main()
{ 
  int x = 0;  /* Don't forget to declare variables */
  
  while ( x < 10 ) { /* While x is less than 10 */
      printf( "%dn", x );
      x++;             /* Update x so the condition can be met eventually */
  }
  getchar();
}
DO..WHILE – DO..WHILE loops are useful for things that want to loop at least once. The structure is
do {
} while ( condition );
Notice that the condition is tested at the end of the block instead of the beginning, so the block will be executed at least once. If the condition is true, we jump back to the beginning of the block and execute it again.
A while loop says “Loop while the condition is true, and execute this block of code”, a do..while loop says “Execute this block of code, and then continue to loop while the condition is true”. 

Example:

#include <stdio.h>
 
int main()
{
  int x;
 
  x = 0;
  do {
    /* "Hello, world!" is printed at least one time
      even though the condition is false */
      printf( "Hello, world!n" );
  } while ( x != 0 );
  getchar();
}
Keep in mind that you must include a trailing semi-colon after the while in the above example. A common error is to forget that a do

Break and Continue

Two keywords that are very important to looping are break and continue. The break command will exit the most immediately surrounding loop regardless of what the conditions of the loop are. Break is useful if we want to exit a loop under special circumstances.
The basic structure of the program might look like this:
while (true) 
{
    take_turn(player1);
    take_turn(player2);
}
This will make the game alternate between having player 1 and player 2 take turns.
Let’s try something like this instead:
while(true)
{
    if (someone_has_won() || someone_wants_to_quit() == TRUE)
    {break;}
    take_turn(player1);
    if (someone_has_won() || someone_wants_to_quit() == TRUE)
    {break;}
    take_turn(player2);
}
Continue is another keyword that controls the flow of loops. If you are executing a loop and hit a continue statement, the loop will stop its current iteration, update itself (in the case of for loops) and begin to execute again from the top. Essentially, the continue statement is saying “this iteration of the loop is done, let’s continue with the loop without executing whatever code comes after me.”
The basic structure of our code might then look something like this:
for (player = 1; someone_has_won == FALSE; player++)
    {
        if (player > total_number_of_players)
        {player = 1;}
        if (is_bankrupt(player))
        {continue;}
        take_turn(player);
    }
This way, if one player can’t take her turn, the game doesn’t stop for everybody; we just skip her and keep going with the next player’s turn

C Programming Quiz Solutions: Loops

1. What is the final value of x when the code int x; for(x=0; x<10; x++) {} is run?
 
A. 10
B. 9
C. 0
D. 1

Note: This quiz question probably generates more email to the webmaster than any other single item on the site. Yes, the answer really is 10. If you don’t understand why, think about it this way: what condition has to be true for the loop to stop running?

2. When does the code block following while(x<100) execute?
 

A. When x is less than one hundred
B. When x is greater than one hundred
C. When x is equal to one hundred
D. While it wishes

3. Which is not a loop structure?
 

A. For
B. Do while
C. While
D. Repeat Until

4. How many times is a do while loop guaranteed to loop?
 

A. 0
B. Infinitely
C. 1
D. Variable
 
  Lesson 4: Functions in C
Now that you should have learned about variables, loops, and conditional statements it is time to learn about functions. You should have an idea of their uses as we have already used them and defined one in the guise of main. Getchar is another example of a function. In general, functions are blocks of code that perform a number of pre-defined commands to accomplish something productive. You can either use the built-in library functions or you can create your own functions. Functions that a programmer writes will generally require a prototype. Just like a blueprint, the prototype gives basic structural information: it tells the compiler what the function will return, what the function will be called, as well as what arguments the function can be passed.
For example, a variable can be set equal to a function that returns a value between zero and four. 

For example:

#include <stdlib.h>   /* Include rand() */
 
int a = rand(); /* rand is a standard function that all compilers have */
o not think that ‘a’ will change at random,

The general format for a prototype is simple:
return-type function_name ( arg_type arg1, ..., arg_type argN ); 
arg_type just means the type for each argument — for instance, an int, a float, or a char. It’s exactly the same thing as what you would put if you were declaring a variable.

Functions that do not return values have a return type of void. Let’s look at a function prototype:

int mult ( int x, int y );
When the programmer actually defines the function, it will begin with the prototype, minus the semi-colon. Then there should always be a block (surrounded by curly braces) with the code that the function is to execute, just as you would write it for the main function. Any of the arguments passed to the function can be used as if they were declared in the block. Finally, end it all with a cherry and a closing brace. Okay, maybe not a cherry. 

Let’s look at an example program:

#include <stdio.h>
 
int mult ( int x, int y );
 
int main()
{
  int x;
  int y;
  
  printf( "Please input two numbers to be multiplied: " );
  scanf( "%d", &x );
  scanf( "%d", &y );
  printf( "The product of your two numbers is %dn", mult( x, y ) );
  getchar(); 
}
 
int mult (int x, int y)
{
  return x * y;
}
Notice how printf actually takes the value of what appears to be the mult function. What is really happening is printf is accepting the value returned by mult, not mult itself. The result would be the same as if we had use this print instead
printf( "The product of your two numbers is %dn", x * y );

Quiz: Functions

1. Which is not a proper prototype?
 
A. int funct(char x, char y);
B. double funct(char x)
C. void funct();
D. char x();

2. What is the return type of the function with prototype: “int func(char x, float v, double t);”
 

A. char
B. int
C. float
D. double

3. Which of the following is a valid function call (assuming the function exists)?
 

A. funct;
B. funct x, y;
C. funct();
D. int funct();

4. Which of the following is a complete function?
 

A. int funct();
B. int funct(int x) {return x=x+1;}
C. void funct(int) { printf( “Hello”); 
D. void funct(x) { printf( “Hello”); }
 
  Lesson 5: switch case in C
Switch case statements are a substitute for long if statements that compare a variable to several “integral” values (“integral” values are simply values that can be expressed as an integer, such as the value of a char). The basic format for using switch case is outlined below.
the computer continues executing the program from that point.
switch ( <variable> ) {
case this-value:
  Code to execute if <variable> == this-value
  break;
case that-value:
  Code to execute if <variable> == that-value
  break;
...
default:
  Code to execute if <variable> does not equal the value following any of the cases
  break;
}

The condition of a switch statement is a value. The case says that if it has the value of whatever is after that case then do whatever follows the colon. The break is used to break out of the case statements. Break is a keyword that breaks out of the code block, usually surrounded by braces, which it is in. In this case, break prevents the program from falling through and executing the code in all the other case statements. An important thing to note about the switch statement is that the case values may only be constant integral expressions. 
Sadly, it isn’t legal to use case like this:   
int a = 10;
int b = 10;
int c = 20;
 
switch ( a ) {
case b:
  /* Code */
  break;
case c:
  /* Code */
  break;
default:
  /* Code */
  break;
}
The default case is optional, but it is wise to include it as it handles any unexpected cases. It can be useful to put some kind of output to alert you to the code entering the default case if you don’t expect it to. Switch statements serve as a simple way to write long if statements when the requirements are met. Often it can be used to process input from a user. 

Below is a sample program, in which not all of the proper functions are actually declared, but which shows how one would use switch in a program.

#include <stdio.h>
 
void playgame()
{
    printf( "Play game called" );
}
void loadgame()
{
    printf( "Load game called" );
}
void playmultiplayer()
{
    printf( "Play multiplayer game called" );
}
         
int main()
{
    int input;
 
    printf( "1. Play gamen" );
    printf( "2. Load gamen" );
    printf( "3. Play multiplayern" );
    printf( "4. Exitn" );
    printf( "Selection: " );
    scanf( "%d", &input );
    switch ( input ) {
        case 1:            /* Note the colon, not a semicolon */
            playgame();
            break;
        case 2:          
            loadgame();
            break;
        case 3:         
            playmultiplayer();
            break;
        case 4:        
            printf( "Thanks for playing!n" );
            break;
        default:            
            printf( "Bad input, quitting!n" );
            break;
    }
    getchar();
 
}

Quiz 5: Switch case Solutions

1. Which follows the case statement?
 
A. :
B. ;
C. –
D. A newline

2. What is required to avoid falling through from one case to the next?
 

A. end;
B. break;
C. Stop;
D. A semicolon.

3. What keyword covers unhandled possibilities?
 

A. all
B. contingency
C. default
D. other

4. What is the result of the following code?

int x=0;
  
switch(x)
 
{

  case 1: printf( "One" );

  case 0: printf( "Zero" );
 
  case 2: printf( "Hello World" );
 
}
A. One
B. Zero
C. Hello World
D. ZeroHello World


22 COMMENTS

  1. Very nice post. I just stumbled upon your blog and wished to say that I've truly enjoyed surfing around your blog posts. After all I'll be subscribing to your rss feed
    and I hope you write again soon!

    Feel free to visit my weblog; home based businesses

  2. Nice blog! Is your theme custom made or did you download it from
    somewhere? A design like yours with a few simple tweeks would really make my blog jump out.
    Please let me know where you got your theme. With thanks

    my website – new ideas for entrepreneurs

  3. You actually make it appear really easy with
    your presentation however I to find this topic to be really
    something which I feel I'd by no means understand. It sort of feels too complicated and extremely huge for me. I'm looking ahead to your next
    publish, I'll try to get the hold of it!

    Also visit my web page; low home equity loan rates
    Also see my websiteinstant payday loans

  4. When I initially commented I clicked the "Notify me when new comments are added" checkbox
    and now each time a comment is added I get four e-mails with the same
    comment. Is there any way you can remove people from that service?
    Thanks!

    Also visit my homepage … affiliate network list

  5. You're so interesting! I do not think I've read through anything like that before.
    So good to discover another person with some unique thoughts on this topic.
    Really.. thanks for starting this up. This website is something that's needed on the internet, someone with a bit of originality!

    Here is my weblog search engine service

  6. When I initially commented I seem to have clicked the
    -Notify me when new comments are added- checkbox and
    now every time a comment is added I get 4 emails with the same comment.
    Perhaps there is a way you are able to remove me from that service?

    Cheers!

    My web page web hosting Companies reviews

  7. Do you have a spam issue on this website; I also
    am a blogger, and I was wondering your situation; many
    of us have developed some nice procedures and we are looking to exchange methods with others, please shoot me an e-mail if interested.

    Feel free to surf to my web site :: refinancing a private student loan

  8. Hey there, I think your site might be having browser compatibility issues.
    When I look at your blog in Opera, it looks fine but when opening in Internet
    Explorer, it has some overlapping. I just wanted to give you a quick heads up!
    Other then that, excellent blog!

    Here is my webpage: top 10 stay at home jobs

LEAVE A REPLY

Please enter your comment!
Please enter your name here