CBCP2101 Computer Programming I PDF
CBCP2101 Computer Programming I PDF
CBCP2101
Computer Programming I
Kalaivani K. Radakrishnan
Topic 2 Algorithm 7
2.1 Algorithms Representation 8
2.1.1 Flow Chart Representation 8
2.1.2 Pseudo-code Representation 10
2.2 Algorithm Development Method 11
2.2.1 Identify Input and Output of Problems 12
2.2.2 Identifying Sub-problems 14
2.2.3 Solving Sub-problems 14
2.3 Selection Structure 16
2.3.1 Single Selection 16
2.3.2 Dual Selection 20
2.3.3 Multi-selection 25
2.4 Repetition Structure 29
2.4.1 Counter Controlled Loop 30
2.4.2 Condition Controlled Loop 34
2.4.3 Sentry Controlled Loop 37
2.4.4 Structuring 39
2.5 Case Study 1 41
2.6 Case Study 2 43
Summary 49
Key Terms 50
Topic 5 Constants 73
5.1 Integer Constant 73
5.2 Real Constants 74
5.3 Character Constant 76
5.4 String Constant 77
5.5 Symbolic Constant 78
Summary 80
Key Terms 80
Appendix 115
COURSE GUIDE
INTRODUCTION
CBCP2101 Computer Programming I is one of the courses offered by Faculty of
Information Technology and Multimedia Communication at Open University
Malaysia (OUM). This course is worth 1 credit hour and should be covered over
eight to 15 weeks.
COURSE AUDIENCE
This course is offered to all learners taking the Bachelor of Information
Technology programme. This course is crucial for them to understand the initial
phases of programming, including problem analysis, data requirements, and
designing algorithms. Learners are expected to gain knowledge, enhance their
skills and experiences in problem-solving and familiarise themselves with syntax
and commands of programming codes, while writing simple programs.
As an open and distance learner, you should be able to learn independently and
optimise the learning modes and environment available to you. Before you begin
this course, please ensure that you have the right course materials, understand
the course requirements, as well as know how the course is conducted.
STUDY SCHEDULE
It is a standard OUM practice that learners accumulate 40 study hours for every
credit hour. As such, for a one-credit hour course, you are expected to spend 40
study hours. Table 1 gives an estimation of how the 40 study hours could be
accumulated.
Study
Study Activities
Hours
Understanding course content and initial discussions 1
Read three units and complete exercises given at a rate of 20 hours per unit 20
Attend 5 tutorial sessions at a rate of 2 hours per session 8
Access to Websites 4
Complete one assignment at a rate of 15 hours per assignment 3
Revision 4
TOTAL STUDY HOURS 40
COURSE OUTCOMES
By the end of this course, you should be able to:
COURSE SYNOPSIS
This course is divided into seven topics. The synopsis for each topic is presented
below:
Topic 5 describes several constant values for programming, such as integer, real,
character and string.
Topic 6 discusses the concept and practices of input and output in programming.
Learning Outcomes: This section refers to what you should achieve after you
have completely covered a topic. As you go through each topic, you should
frequently refer to these learning outcomes. By doing this, you can continuously
gauge your understanding of the topic.
Activity: Like Self-Check, the Activity component is also placed at various locations
or junctures throughout the module. This component may require you to solve
questions, explore short case studies, or conduct an observation or research. It may
even require you to evaluate a given scenario. When you come across an Activity,
you should try to reflect on what you have gathered from the module and apply it
to real situations. You should, at the same time, engage yourself in higher order
thinking where you might be required to analyse, synthesise and evaluate instead
of only having to recall and define.
Summary: You will find this component at the end of each topic. This component
helps you to recap the whole topic. By going through the summary, you should
be able to gauge your knowledge retention level. Should you find points in the
summary that you do not fully understand, it would be a good idea for you to
revisit the details in the module.
Key Terms: This component can be found at the end of each topic. You should go
through this component to remind yourself of important terms or jargon used
throughout the module. Should you find terms here that you are not able to
explain, you should look for the terms in the module.
PRIOR KNOWLEDGE
A basic knowledge of the subject matter is not required for learners who follow
this module. However, programming knowledge and skills will be an advantage.
ASSESSMENT METHOD
Please refer to myINSPIRE.
REFERENCES
Marini Abu Bakar, Norleyza Jailani & Sufian Idris. (2002). Pengaturcaraan C.
Kuala Lumpur: Prentice Hall.
LEARNING OUTCOMES
By the end of this topic, you should be able to:
1. Define computer program and programming; and
2. List the six steps involved in the program development process.
INTRODUCTION
Since its introduction, computers have helped tremendously to make everyday
human tasks easier. With the help of a computer, we can pay bills, perform
banking transactions and even shop from home. Businesses depend on
computers for seamless operations. More and more students are also learning
with computers at schools. Imagine a life without computers!
This topic will discuss programming concepts and the processes involved in
developing a program.
ACTIVITY 1.1
Being aware of the sequence of things is important in human life. The sequence is
achieved through a process called programming. In our daily routine, we often
have to do the same tasks repeatedly. This may make us feel bored or to lose
interest, resulting in the task not being completed properly or completed with
errors. Programs prevent human beings from having to do repetitive tasks.
Whereas,
Each of these phases is divided into several parts. Refer to Figure 1.1 to learn
about the relationship between these two phases.
We will discuss in detail how these three steps are carried out.
(a) Analysis
Analysis is the process of understanding and defining a problem. At this
stage, a programmer should try to state the problem clearly and
understand what needs to be done to solve the problem. We may need to
know additional detailed information from the people who have identified
the problem.
During analysis, ensure that you understand and define the problem
accurately.
(c) Walkthrough
Walkthrough is one of the steps in algorithm design that is often forgotten.
(b) Testing
Testing a program code is the process of running a program and checking it
for errors. This is to ensure the program does what it is intended to do.
Normally, testing is carried out by running the program code repeatedly
using a set of different data, to ensure it functions properly for every
situation. Large input size that cannot be tested manually has to be tested
now. If an error is found, the program needs to be modified until it
produces the right output or answer.
(c) Maintenance
Maintaining and updating a program code involves tasks in modifying the
program code, to eliminate errors that were not found before, and to
update it according to current changes in the organisationÊs rules and
policies.
Usually, maintenance work is carried out every five years and the
programmer who developed the program might have left the organisation
by then. Therefore, it is important for a programmer to write programs that
are easy to read, understand and maintain. Thus, we must adhere to
programming styles that are accepted by the programming society.
SELF-CHECK 1.1
1. What is a program?
There are three steps that must be taken to solve any problem, which are: to
perform a problem analysis, get a general algorithm design and
walkthrough the algorithm.
The implementation phase also consists of three steps which are: detailed
problem-solving in the form of program code, carrying out tests on the
program code and maintaining the program code.
INTRODUCTION
Topic 1 introduced two main phases in developing a program. One of which was
the problem-solving phase, which involves the use of algorithms. In this topic,
we will focus entirely on algorithms, from the aspect of representation up to its
implementation. (From a historical point of view, it was the famous
mathematician Alkhwarizmi (Algorithm) who first introduced the concept of
algorithms.)
This means that the steps will lead to an end or stop. At every step, the
subsequent action should uniquely be determined by the instructions and data
obtained at that time.
In order to represent algorithms by using flow charts, we can use the following
as a guide:
(d) Test the flow chart by tracing each symbol, comparing it with the expected
output.
Based on the guide given above, let us examine the flow chart on starting a car
engine, as shown in Figure 2.2.
ACTIVITY 2.1
Sketch a flow chart for the process of going for a tutorial session.
Pseudo-code or false codes are instructions that mimic the program code
(actual program instructions).
Whilst flow charts use diagrams, pseudo-codes are written using phrases or
words. To represent algorithms by using pseudo-codes, we need to follow the
rules of writing pseudo-codes as follows:
(a) Every step in an algorithm should not have more than two actions.
(c) The word End or Stop is used to show that the process has ended.
(d) The action that is allowed includes declaring variable names to identify the
set of variables that have a corresponding data type. Types of data might be
in the form of integer, real, character or others.
(h) The relational operators below are used to state the relationship between
two values:
(i) < Less than
(ii) <= Less than or equals to
(iii) > More than
(iv) >= More than or equals to
(v) ! = Not equal
(vi) == Equal
Example 2.1
Change lb unit to kg.
SELF-CHECK 2.1
(b) Identify and list the sub-problems. Each problem must be solved, in order
to get the results needed.
(c) For every sub-problem, identify and list the steps that must be taken to
solve it.
Output is the result that is needed. The format of how the output is to be
displayed, has also to be identified, during the construction of the algorithm. One
of the most common format used for displaying output information are tables.
Below is the input and output that have been identified in some problems.
Example 2.2
Determine whether a given year is a leap year or not.
Input: A year
Output: Message „Leap Year‰ or „Not Leap Year‰
Example 2.3
Calculate the average marks for the course TM 20200.
Example 2.4
Given the buying and selling price of an item, determine whether the
company made a profit, broke even or made a loss.
When the input and output are known, we will need to build a list of formulae
that will relate one to the other. Based on Example 2.4, the general formula
obtained is:
To test your understanding of input and output, answer the following question.
SELF-CHECK 2.2
Before proceeding further, take a short break, as the next section will need your
full attention.
Example 2.5
Given the name of a student, calculate the number of ÂaÊs in the name.
Solution:
The name of a student can be made up of more than one word. To count the
number of ÂaÊs in it, we need to get each letter and compare them. We need to
have a variable to act as a counter, to track the number of ÂaÊs that exist. The
letter ÂaÊ can exist in upper case or lower case. For example, in the name
„Najwa Amani‰ there are four ÂaÊs.
Step 2 and 4 can be done easily. However step 3 requires refinement. Step 3 looks
like a sub-problem that is easily solved, but if it is to be solved using a computer;
we will need to have detailed steps on how this will be done. Notice how the
refinement is done, by using the guide given next.
Now that you understand the refinement concept, here is the complete
explanation on algorithm, re-written for Example 2.5.
1. Start.
2. Input studentÊs name: studName.
3. Count the number of ÂaÊs in studName.
3.1 Set n = 1 and totalA = 0
3.2 Until there are characters to be read, execute the following steps.
After which, continue to step 4.
3.2.1 Read n-character
3.2.2 If n-character is the same as ÂAÊ or ÂaÊ, add 1 to totalA.
3.2.3 Increase n by 1.
4 Report „Number of ÂaÊs is totalA‰.
5. End.
In this easy example, the number of levels refined is only up to two levels. One of
the main steps which is step 3, is refined to be step 3.1 and 3.2. Then 3.2 is further
refined into steps 3.2.1, 3.2.2 and 3.2.3. For more complex problems, the level of
refinement may increase, with each step being detailed and executable. Below are
a few guidelines in summarising the solution:
(b) Sub-problems that have similar processes must be looked at together. This
will prevent overlapping and arrangements can be made for modules or
sub-problems to provide an overall solution.
(c) All sub-problems can be represented in the same way. Therefore, when all
the solutions to sub-problems are combined to create the original problem,
the result from the combination is easier to understand.
step a
If <Condition true>
Start_If
step 1
step 2
:
step k
End_If
Step k+1
If the condition is met, step 1 till step k will be executed. Then, step k + 1 is
executed. Alternatively, if the condition is not met, step k + 1 will be executed
without executing step 1 to step k.
Step 1 to step k is also known as the start_if and end_if block. Here we will see
that step k+1 will always be executed whether the condition is met or not met.
Step a which is put before the start_if and end_if block will always be executed
because the testing of the condition is after step a.
Note: Notice the indentations for steps in the block start_if end_if are indented
a little bit. This is to show that the steps are dependent on the results that are
obtained from the testing of the condition that is done.
Syntax that is given above can be pictured as a flow chart, as shown in Figure 2.5:
Example 2.6
Determine if the customers deserve to get a discount of RM10.00 from the
total payment charged. Customers will be categorised as deserving if the
total payment is RM60.00.
Note: Words that are written in italics like total_payment are variable names that
are recommended. Variables are words that can receive any type of value. You
are also free to use any other name as a variable. But it is good if the variable
name can reflect the task. As given above, total_payment refers to the total
payment that is charged to the customer.
Let us now trace the algorithm. Let us say the total_payment is RM80.00. Testing
done in step 3.0 is true because 80 > 60. Therefore, the control of the program will
enter the start_if-end_if block. This means that the total_payment will see a
deduction of 10. Then, the control of the program will exit from the block and
execute step 6.0. Therefore, the value of total_payment reported is RM70.00.
ACTIVITY 2.2
What if the total payment is RM48.00? Use the algorithm in Example 2.6
as a reference.
Figure 2.6: Flow chart for Example 2.6, single selection structure
Example 2.7
Determine the requirement of a student to sit for the examination based on
the number of lab sessions attended. The percentage of attendance at the lab
must be 80%. If it is less than that value, the student is categorised as not
qualified.
ACTIVITY 2.3
SELF-CHECK 2.3
If <true condition>
Start
step 1
step 2
:
step k
End_If
If_Not
Start
step k+1
step k+2
:
step n
End_If_Not
step n+1
The If < true condition > steps in, the start_if - end_if block will be executed.
Then, step n+1 will be executed ignoring the steps in the start_if_not - end_if_not
block.
However if the condition is not true or not met, the start_if_not - end_if_not
would be executed without executing the steps in the start_if - end_if. Step n+1
will still be executed whether the condition is met or not. This case is the same as
in the single selection.
A general form of a flow chart for the dual selection is shown in Figure 2.7 below.
Let us take a look at the example for a dual selection structure below:
Example 2.8
Determine the payment that will be charged to a customer for parking their
car in a car park. The payment rate charges are, if total time parked is 2
hours or less, the payment charged is RM2.00; but if the total time parked is
more than 2 hours, then RM6.00 is charged.
Assume:
in_time = 9.00
out_time = 13.00
total_time = 13.00-9.00 = 4
Testing at step 5.0 will be false because 4 is larger than 2. This will cause the
control of the program to execute the start_if_not - end_if_not block. At the last
step, total_payment will be reported as 6. See Figure 2.8 for the example above.
Figure 2.8: Flow chart for Example 2.8: Dual selection structure
ACTIVITY 2.4
Now, can you try to solve the problem by using in_time 8.00 and out_time
17.00? Use Example 2.8 as a reference.
Example 2.9
Determine the payment that is charged to the customers who parked their
cars in the parking lot. The payment rates charged are RM2.00 for the first
hour and RM1.00 for each subsequent hour.
In the algorithm above, if total_time > 1, and let us say the total_time is 2, then,
the start_if-end_if block (step 6.0 to 7.0) will not be executed. However, the
start_if_not-end_if_not block (step 9.0 to 10.0) will be executed.
In step 9.3, total_time now becomes 3; because 1 plus 2 is 3. Here the value 2 is
for the payment rate for the first hour. You need to remember that the payment
for the first hour is different from the subsequent hours. Total payment reported
in step 11.0 is 3.
ACTIVITY 2.5
Now try with the previous data which has the in_time 9:30 and out_time
4.30. Use the algorithm given in Example 2.9 as a reference.
SELF-CHECK 2.4
2.3.3 Multi-selection
This is the last selection structure. In multi-selection we are allowed to choose
only one statement block from a number of blocks that exist. The number of
statement blocks depends on the number of conditions. If there are n conditions,
then there are n+1 statement blocks, because we have a last statement block that
is not tied to any of the conditions. In the general form below, the statement
blocks are from step q till r.
If <true condition1>
Start
step 1
step 2
⁄
step k
End_If1
If_Not
If<true condition2>
Start
step k+1
step k+2
⁄
step m
End_If2
⁄
⁄
If_Not
If<true condition h>
Start
step n + 1
step n + 2
⁄
step p
End_Ifh
If_Not
step q
step q+1
⁄
step r
End_If_Not
Figure 2.9 shows the flow chart for the general structure of multi-selection.
Example 2.10
Input an integer number and determine whether that number is negative,
positive or zero. Print the results.
Let us trace the example above. Suppose that the value of N is 7. Testing at step
3.0 will be false because 7 is larger than 0. Step 4.0 till step 5.0 are ignored. When
testing at step 7.0 is executed, the result is true. Therefore, it will print „N is
positive‰.
ACTIVITY 2.6
Trace the value of 10 based on the algorithm above. What is the printed
result?
Example 2.11
Input bus passengerÊs age to determine the price of the tickets. If the age of
the passenger is 55 and above or between 6 to 12 years, then the ticket price is
50% of the normal ticket price. If the passengerÊs age is between 12 and 18
years, then the ticket price is only 75% of the normal ticket price. It is free for
passengers less than 6 years old.
From the question given, we can conclude that there are five groups of
passengers, as shown in Table 2.1 below:
Figure 2.10 is a flow chart that shows a multi-selection structure. Trace Figure
2.10 and compare it with the conditions stated in Example 2.11. The flow chart is
as follows:
For a loop controlling counter, the three components are put in special places,
such as:
start_for
step 1
step 2
Loop Body
step n
End_for
If the counter value is still less than the last value, the step in the start_for-
end_for block, which is steps 1 till n will be executed. This block is also known as
the loop body.
After the last step in the loop is executed, the value of the counter is updated
according to the increment that is stated. Notice however that the increment is
not necessarily done by adding 1 to the counter. The increment can be 2 or 3 and
so on. After the counter has been updated, the test is done again and the
execution of the loop body repeats until the condition that is set on the counter is
no longer fulfilled.
The loop ends and the control will get out of the loop. The step after the end_for
will be executed. Figure 2.12 shows the general flow chart for the counter
controlled loop.
Example 2.12
In Example 2.12, the start_for - end_for block will be executed five times.
Therefore, we need to trace the algorithm above while looking at Table 2.2.
i i < 10 Total
0
1 True 1 (0+1)
3 (1+2) True 4 (1+3)
5 (3+2) True 9 (4+5)
7 (5+2) True 16 (9+7)
9 (7+2) True 25 (16+9)
11 (9+2) False 25
The loop will stop when the counter i is more than 10, that is, when the
value i is 11. At this stage, the value of total will be 25.
(i) The counter starts at a larger value and will decrease to a smaller
value according to the decrement rate stated.
(ii) The condition for repetition is > or >= with the last value.
You need to remember that the initial_value must be a large value. After
the last step is executed, the value of the counter will be decreased
according to the rate specified. Just as in the increasing counter control
loop, the rate is not necessarily 1. Look at Example 2.13:
Example 2.13
Notice that in step 3.0, the initial_value is a large number that will be
decreased by 2 to its initial_value. Next, we look at Table 2.3 to trace the
loop:
i>=1 Total
0
9 True 9 (0+9)
7 (9-2) True 16 (9+7)
5 (7-2) True 21 (16+5)
3 (5-2) True 24 (21+3)
1 (3-2) True 25 (24+1)
-1 (1-2) False 25
The loop will stop when the condition is not fulfilled, that is when the
value of i is -1. At that instant, the total is 25. The end result of total in the
example with the increasing counter and the total in the example with the
decreasing counter is the same.
ACTIVITY 2.7
Figure 2.13: General Form and Flow Chart of Loop Structure with condition tested first
Example 2.14
Figure 2.14: General form and flow chart of loop structure with condition tested later
Example 2.15
In Example 2.15, the end result of total is the same as the loop before this,
which is 15. Notice in the tracing below, the number of tests for the
condition in the condition controlled loop for this form is one less than the
condition in the condition controlled loop in the form before this.
Example 2.16
Read one set of studentsÊ marks where if the marks are negative then the
input ends. Calculate the average marks.
In example 2.16, a negative mark input will end the loop because the test
condition (step 4.0) becomes false. In the example above, the number 999 can be a
sentry value because the maximum mark is 100. To make the number 999 as a
sentry value, step 4.0 in the algorithm has to be changed to Until mi = 999, that is,
when the mark mi is 999, then the statement becomes false and automatically
exits the loop.
ACTIVITY 2.8
For the algorithm in Example 2.16, what if the negative value is a valid
data?
Sentry value can also be of a type character. We can change the example above
and use the character „t‰ as a sentry value. Consider the changes made in
algorithm 2.16(B) below.
You have now learnt three types of control structures. Take a short break before
moving on to the next section.
2.4.4 Structuring
This method is used to solve problems by designing structure charts. The
benefits of using the structure chart are as follows:
(a) Able to identify the number of modules or sub-problems that are created
by breaking up the problem;
(b) Able to give input that is needed by a module or sub-problem that can be
shown in the chart; and
(c) Able to determine the output that is obtained from one module that can be
used in other modules.
(a) Problem
Solve the problem of calculating the gross pay and net pay for workers that
is made up of basic pay and overtime pay. The normal working hours are
40 hours. The rate for working overtime is twice the normal rate. If the
workerÊs pay exceeds RM500 per week, a tax of RM50 is deducted.
(b) Analysis
To calculate the pay, the information needed are the hours worked and the
hourly rate. The net pay of a worker can be obtained by deducting tax from
the pay if the pay exceeds RM500.
Taxable_Pay = 500.00
Tax = 50.00
Maximum_Hours = 40.0
Overtime_Rate = 2.0
Input:
Hours_Worked (float type)
Hourly_Rate (float type)
Output:
Gross_Pay (float type)
Net_Pay (float type)
Relevant Formula:
Normal_Pay = Work_Hours x Hourly_Rate
Overtime_Pay = Overtime_Hours x Overtime_Rate x Hourly_Rate
Gross_Pay = Normal_Pay + Overtime_Pay
Net_Pay = Gross_Pay - Tax
(d) Design
Initial Algorithm:
1.0 Start
2.0 Read Hours_Worked and Hourly_Rate.
3.0 Calculate Gross_Pay.
4.0 Calculate Net_Pay.
5.0 Print Gross_Pay and Net_Pay.
6.0 End
Step 3.0 and step 4.0 can be refined. Normally, our operation uses
refinement to get the calculated gross pay and net pay.
ANALYSIS
The first step in solving a problem is to determine what you are asked to do. Are
you supposed to convert measurement from km to miles, or vice versa? The
problem states clearly that you need to convert miles to km. Therefore, the
problem input is distance in miles and the problem output is distance in km.
Then, you will need to know the relationship between miles and km. Based on
the metric table, one mile is equal to 1.609km.
DESIGN
Next step, formulate an algorithm to represent this problem. Think logically of
the three major steps in a proper sequence.
Algorithm
Now you will need to decide if this algorithm can be refined further. Step 1
(getting data) and step 3 (displaying value) are basic steps and cannot be refined
anymore. Step 2 however, can be refined with additional detail. You can add the
information as step 2.1, indented under step 2.
The above steps are known as pseudo-code. You might be interested in drawing
a flowchart to represent the same algorithm. Take a look at the following
flowchart to get an idea of designing algorithms for programming tasks.
After finishing with this algorithm, you may want to do a desk checking before
proceeding with its implementation. How is that done? Let us say, step 1 gets a
distance of 10.0 miles and step 2.1 should convert the measurement to 1.609 X
10.0. You should then get 16.09 km as the result to be displayed in step 3.
Remember these values as you are going to use them in the implementation
phase later on.
One technique of interaction between a program and its user is, using the menu.
The menu is a list of items that can be selected by the user. Once the menu is
displayed, the program will wait for the user to input his or her choice. After the
user has chosen the item, the program will continue processing based on that
item.
The program will display a menu to get the type of conversion required. Once
that is done, it will ask the user for the input to be converted, do the calculation
and then display the result. After that, the program will display the menu again
and the process will continue until the user decides to stop the program.
ANALYSIS
The following formula is used to do the conversions:
1 hour = 60 minutes
1 feet = 0.3048 metres
1 Celsius = (5/9) * (Fahrenheit 32)
DESIGN
The menu to be displayed by the program is based on the selection listed in Table
2.6:
Table 2.6: Menu
Users choose the type of conversion by entering the corresponding code. If the
user enters a 0, the program ends. If the user enters any value other than the
above, it will be ignored. This means, the program will re-display the menu and
the user has to choose again.
Variable Explanation
choice Users choice from the menu
minutes Value of minutes input by the user
hours Keeps the converted value from minutes to hours
feet Value of feet input by the user
metres Keeps the converted value from feet to metres
fahrenheit Value of Fahrenheit input by the user
celsius Keeps converted value from Fahrenheit to Celsius
1.0 Start
2.0 Do
2.1 Display the menu
2.2 Input the choice from the user
2.2.1 IF (1 <= choice and choice <= 3)
Start_IF
Do the conversion and display the result
End_IF
3.0 Until (choice NOT 0)
4.0 End
Step 2.2.1 involves calculation that will perform the conversion and then display
the results. The calculation that is carried out depends on the type of choice
specified by the user in Step 2.2. Thus, Step 2.2.1 needs to be refined further, to
reflect the userÊs choice. The following is the refined and complete pseudo-code
after refining Step 2.2.1 above:
1.0 Start
2.0 Do
2.1 Display the menu
2.2 Input the choice from the user
2.2.1a IF (choice==1)
Start_IF
Input minutes from the user
Calculate hours
Display hours and minutes
End_IF
2.2.1b IF (choice==2)
Start_IF
Refined
Input feet from the user
steps
Calculate metres
Display feet and metres
End_IF
2.2.1c IF (choice==3)
Start_IF
Input fahrenheit from the user
Calculate celsius
Display fahrenheit and celsius
End_IF
3.0 Until (choice NOT 0)
4.0 End
The flow chart for the above pseudo-code is given below in Figure 2.17:
SELF-CHECK 2.5
(b) Input the values of length and width for a residential area in
feet measurement. Also enter the values of length and width
for the building of a house in feet measurement. Assume the
difference of a grassy area between them. Calculate the time
needed to cut grass at the rate of 2 square feet per second.
(b) You have been asked to input your name and then print it
five times.
CATEGORY BMI
Underweight less than 18.5
Normal 18.5 24.9
Overweight class 1 25.0 29.9
Obesity class 2a 30.0 34.9
Obesity class 2b 35.0 39.9
Obesity class 3 40.0 and above
(d) Create a pseudo-code for this problem. Accept two integer values as
input, for example, 3 and 7. Print all the integer numbers between
them, including those two numbers. If the first number is smaller
than the second number, then print the numbers in ascending order.
If otherwise, print the numbers in descending order.
For example:
Input: 3 7
Output: 3 4 5 6 7
Input: 7 3
Output: 7 6 5 4 3
Pseudo-code or false codes are instructions that mimic the program code
(actual program instructions).
Input is all the information that is relevant and needed to execute a process.
Single selection involves testing one condition only. The choice given
depends on whether the condition is met or not.
The dual selection structure involves testing for two conditions. Choices that
are given are the same as single-selection, that is, whether the condition is
met or not.
Algorithm Semantic
Flow chart Syntax
Pseudo-code
LEARNING OUTCOMES
By the end of this topic, you should be able to:
1. Differentiate the three different types of programming languages, by
levels;
2. Explain briefly on the history of C language development; and
3. Describe the six phases that are involved in developing a program in
C environment.
INTRODUCTION
In Topics 1 and 2, we looked at the basics of program development. We will now
continue exploring programming language in more detail.
Writing programs in machine language is not an easy task for the programmer.
To overcome this problem, many different programming languages have been
created, to enable instructions to be given in forms other than machine language.
These instructions need to be translated into machine language, before a
computer can run them. This topic will give an explanation on the different types
of programming languages. Next, C language and its environment will be
introduced. By the end of this topic, one example of a simple C program will be
discussed.
ACTIVITY 3.1
High-Level
Explanation
Languages
C A universal language that is usually used to write system software or
system applications.
C++ An extension from C language that provides support for object-
oriented programming.
Ada Language that is developed for the Defence Department in the United
States, for its real-time systems.
Lisp For artificial intelligence applications.
Pascal For teaching programming.
Fortran For scientific and engineering applications.
COBOL For processing business data.
ACTIVITY 3.2
Before we continue reading the next topic, create a networked mind map
of the three levels of programming languages that you have just read.
Present that in your tutorial.
SELF-CHECK 3.1
3.2 C LANGUAGE
Let us take a step back to the past, to get a brief history of C language.
The C language history has links with the existence of B and BCPL programming
languages. BCPL is a language that was used to write operating systems and
compilers, which was developed by Martin Richards in the year 1967. In the
1970s, Ken Thompson developed the B language that was used in developing the
UNIX operating system at Bell Laboratories. Based on B language, Dennis Ritchie
developed the C language at Bell Laboratories in 1972. This language was then
used to develop UNIX.
For more information on the history of C programming, visit the web site
http://syazwan.tripod.com/introc.htm or any other relevant sites.
(c) C standard Library makes available the supporting functions that can be
reused in program development. Among functions that are available in the
standard library are: mathematical functions like sin( ) and sqrt( ), functions
to do input and output, graphical functions and others.
Figure 3.1 on the next page shows a C development environment. It shows the six
phases involved in the process of developing a C program, which are:
(a) Editing;
(b) Pre-processing;
(c) Compiling;
(d) Linking;
(e) Loading; and
(f) Executing.
SELF-CHECK 3.2
Identify a software that you can use to edit and compile programs.
Program 3.1
#include <stdio.h> B
void main(void) {
printf(“Welcome to OUM!\n”); C
}
Welcome to OUM
Notice however that the file name stdio.h in the pre-processor statement is
surrounded by the symbol < and >. This is actually to let the pre-processor know
that the file is found in the usual place. This usual place is dependent on the
computerÊs environment. For example, in the UNIX environment, the normal place
is stated in the file .profile. In the DOS mode, it is normally stated in the file
autoexec.bat.
The code that is marked as C in Program 3.1 is a function definition. The function
that is defined in the program is called main() function. The main() function is
a special function that is the starting point in the execution of any C program.
Notice that the function definition consists of two parts. The first part is the
function head that provides specific information on the function defined; for
example, function name. The second part is the function body which consists of
statements enclosed in { and }. When a function is called, the statements within
the body will be executed. In the case of main() function in the program 3.1, the
body only contains one statement which is:
printf(“Welcome to OUM!\n”);
This statement is the calling of the function printf(), which is one of the
functions that is available in the C standard library functions. We can call this
function printf() if we need to output a string on the computer screen. In the
statement above, the string “Welcome to OUM!\n” is passed to the printf()
function to be output.
The function will display every character in the string, except the enclosing
double quotes (which is the character „) and the control character \n at the end of
the string. The double quotes are the markers for the start and end of the string.
The control character \n is called the new line character. When this character is
found in the printf() function, it will move the cursor to the beginning of the
next line. The new line character is one of the many control characters in the
printf() function. Every control character will have a specific meaning in the
functions given.
SELF-CHECK 3.3
In Section 3.4, there are symbols that were used in Program 3.1. Can you
explain them briefly?
Symbols Explanation
/*.........*/
#include
{.........}
“\n”
ACTIVITY 3.3
1. Write/edit program 3.1 using a notepad and save the file with the
name atur.c.
WELL
WELCOME
WELCOME TO
WELCOME TO OUM!
C Language Environment
Assembly language Linker
C standard library Loader
Compiler Machine language
Editor
LEARNING OUTCOMES
By the end of this topic, you should be able to:
1. Differentiate three types of data;
2. Choose the type of data that is suitable for the variable, depending on
the type of value to be represented;
3. Differentiate between variables, reserved words and standard
identifiers;
4. Identify variables that are valid and invalid; and
5. Write syntax to declare and initialise variables.
INTRODUCTION
In the first part of this topic, we are going to see two types of input and output
data. One is of character type, for example, your name, and another is of the
numeric type, for example, your age. Data of character type is represented by
char data type. Numeric data is represented by data types int, float or
double.
In the second part, you will learn about variables. Why are variables important?
When a composer composes a new song, he/she will give a title to the song.
Your parents spent some time choosing a name for you. Similarly, when we
write a program, we need to choose an appropriate name for the file, variables,
constants, functions, etc. This name is known as the identifier. The identifier is
the official word used for any name in a high-level programming language. In
this topic, we will go into detail about variables and how to name them.
Variables of float type are assigned a memory cell size of 4 bytes and can keep
larger numbers, up to 1038.
Let us see an example of initialising variables and memory cell sizes assigned for
each declaration in Table 4.1 below.
The size of the memory cell can double by using the qualifier long in a variable.
See the example above.
If you want to know more about ASCII codes, you can visit the relevant websites.
The binary representation of this code is kept in the memory cell and the values
can be known. The binary numbers can be compared by using relational
operators, just like comparing normal numbers. The character code usually used
is ASCII code. The character value range that can be represented by char type is
between -128 to 128.
(a) float;
(b) double; and
(c) long double.
All the types above can keep real values such as 0.001, 2.0 and 3.14159.
The choice is made depending on which range of real values are to be
represented. Table 4.2 below shows the range and number of bytes that are
needed for each of the real type numbers.
ACTIVITY 4.1
There are three types of basic data types: int, char and float.
char can contain letters, digits and symbols. Why do we still need int
and float when char can contain all types of characters? State your
opinion.
SELF-CHECK 4.1
3. State the data type that is suitable for each of the values below so
that memory space wastage does not happen:
(a) 0.000067 (d) 123.123456789
(b) # (e) -40000
(c) 30000 (f) 1000000
Next, let us see how each of the characteristics above is applied in a program.
Variables are named as an identifier that is declared by the user. This name has
to be:
(a) Appropriate;
(b) Easy to understand; and
(c) A name that gives a clear meaning towards the value that it represents.
This name is used to name a memory area that will be used to keep the value of
the variable.
(a) Variable names can only contain letters, digits and underscores “_”;
(b) Variable names cannot start with a digit (number); and
(c) Reserved words in C cannot be used as variable names.
We can give variable names up to 31 characters. The 32nd character onwards will
not be taken into consideration (except for global variable names, which will not
be discussed in this module).
System identifiers usually start with the character „_‰. Here, we are not
encouraged to use the character „_‰ as the beginning for identifiers, (for example:
_total) to avoid confusion. Both lower case and capital letters can be used to
name variables. However, the C language is case sensitive, where lower case
letters are considered different from capital letters. Observe that each of the
variable names below is different in C.
The best way to name a variable, is with a name that represents the value that is
kept in the identifier. Therefore, sometimes a variable name can be made up of
two words or more. We cannot separate the words with spaces, because it is
against the first rule of naming identifiers, which states that identifiers that have
a space in between are not valid.
For identifiers that have two or more words, we can join them with a “_”
character (like big_total). Nevertheless, the usual practice is to write it as:
(a) Start with the first word being a lower case letter; and
(b) Start the second word with an upper case letter.
SELF-CHECK 4.2
To learn more about this topic, refer to Pengaturcaraan C, Marini Abu Bakar et.
al. (2000).
Like reserved words, standard identifiers also have special meanings in C. In the
sample programs that you have seen before, the standard identifier printf is an
operational name that is declared in the stdio.h library. Standard identifiers
can be re-declared and used by the programmer for other reasons, unlike
reserved words. However, after re-declaring the standard identifier for another
reason, it cannot be used for its original use.
ACTIVITY 4.2
SELF-CHECK 4.3
The following identifiers are not valid. Provide reasons as to why each
one is not valid.
Identifier Reason
(a) 2001SeaGames
(b) SEA GAMES
(c) %passes
(d) width+height
(e) double
Declaration Type
char Character
int Integer
float Real numbers
double Real numbers with high precision
When a variable has a certain data type, it means that the variable can only
represent data of that particular type. For example, a variable of type integer, C
assumes that only whole numbers can be used to represent those values.
There are also extended data types that use a qualifier. Unsigned, signed,
short, long, unsigned short, signed short, unsigned long and
signed long, are qualifiers that exist in C.
Syntax:
data_type variable_name;
Different variables are used to keep different types of data. Therefore, in the
variable declaration, it has to be mentioned what data type the variable will
contain. In the example above, identifier marks1, marks2, marks3 and
marks4 are declared as type int, identifier averageMarks is of type double
and identifier grade is of type char. Notice in the example above, few variables
of the same type can be declared in a group, by separating the names of variables
with a comma.
Cell sizes will be discussed in the next topic. However, storage classes will not be
taught in this course.
variable = value;
? ? ?
? ? ?
10 25 250
SELF-CHECK 4.4
int marks;
marks = 10;
marks = 20;
marks = 30;
3. State whether the variables below are valid. If they are not valid,
provide reasoning for this.
4. State which of the identifiers below are (a) C reserved words (b)
standard identifier, (c) other valid identifier and (d) invalid identifier.
Variables have characteristics such as name and type, and they are used to
represent a value.
Variables can represent different types of data. There are three types of basic
data types: Integer Data Type (int) - which is to represent negative or
positive numbers, Character Data (char) - which is used to represent
characters such as letters, digits or special symbols, and Real Data which
has three types of data type that can be used for manipulating real data
numbers.
Variables can be used to keep input data and the calculation results or logic
manipulations.
Marini Abu Bakar, Norleyza Jailani & Sufian Idris. (2002). Pengaturcaraan C.
Kuala Lumpur: Prentice Hall.
INTRODUCTION
Constants are fixed values that cannot change throughout the execution of the
program. Constants can be categorised into many types according to its
respective data type, which is integer constant, real constant, character constant
or string constant. This topic will help you identify each constant more clearly.
Example:
Decimal :0 2 99
Octal :0 07 074
Hexadecimal : 0X 0X1 0X7A
Exponent notation for real constants can be written as 1.234567e5. This is the
same as the scientific notation 1.234567 x 105. The value is the same in this
equation:
SELF-CHECK 5.1
A floating-point constant number can be made up of four parts. Let us see the
example in Figure 5.1 for a better idea of the four parts:
If a floating point exists, the integer part, or divisor or both, must exist. If there is
no floating point, both the integer part and exponent must exist. Both “e”or
“E”are accepted as a sign of an exponent. Here are some examples of valid
floating-point constants. For example:
3.14159
-3.14159 (negative value)
314.159e-2F (float type)
0e0 (same value as 0.0)
1. (same value as 1.0, but more difficult to read)
SELF-CHECK 5.2
Character constants have certain integer values that are determined by the
character code or coding system, used by a computer. Most computers use ASCII
code representation to represent characters. For example: character ÂAÊ is valued
at 65 in the ASCII representation. Table 5.2 provides a sample of a part of the
ASCII table.
Source: http://upload.wikimedia.org
Any strings (including spaces) in between double quotes are a character array.
Arrays that have only numerical digits are not a number, but are numeric digit
arrays where no arithmetic operation can be performed on them.
Double quotes only surround the array; they are not part of the array. Each string
constant will have a null character (written as ‘\0’) automatically assigned by
the C compiler as an end of the character array. An example of the array “OUM”
is actually “OUM \0”. The length of a character array is the number of characters
in the array, plus a null character. Therefore, the length of the character array
“OUM” is 4.
Since the character array has an end character, therefore a character array for a
character is not the same as a character constant. For example, the character array
“A” is not the same as the character constant ‘A’ because “A” is the combination
of a character constant ‘A’ and null character‘\0’.
Example:
#define PI 3.14
#define TRUE 1
#define NAME “ALI”
Notice that the symbolic constant is written using capital letters, to differentiate it
from other variables. Also, a symbolic constant declaration does not end with a
semicolon (;).
During compilation process, every symbolic constant will be changed with the
value that is declared. The advantage of using symbolic constant is that the name
of the symbolic constant explains its meaning in the code more clearly than the
value only.
ACTIVITY 5.1
Discussion topics:
SELF-CHECK 5.3
(c) „Z\0‰
2. Which one of the answers below is a valid integer, double, float, char
or string constant? For every valid constant, state the data type.
Constants include many types of constants such as integer and fixed point
constants, character constants such as ‘A’ and character array constants
such as “ABC”.
Character constant and character array (string) constant differ from each
other.
Real constants take their value just like real values in the number system.
Float dot notation or exponent notation, or both, can represent real
constants.
INTRODUCTION
We have looked at some output functions in previous topics. These functions
send data to the output device (usually the computer screen) using the formats
that are given. Technically, printf() and scanf() functions are not part of C
language, but are part of the C system. Both these functions exist in the C library
and are kept together with the C system. Even though the object codes for the
functions are made available by the C system, it is your responsibility as a
programmer to declare this function when you want to use it in your program.
printf(output_format [, value_list]);
output_format: An array that will determine the form of the output depending
on the value list.
printf(“Welcome to OUM.”);
Welcome to OUM.
Notice that all the characters in the double quotes „ ‰ are printed, including the
spaces.
The printf() function does not execute a new line command automatically.
This means that the cursor placed on the screen will be at the end of the last
character of the sentence printed.
The next printf() statement will be printed starting from the cursor
placement earlier. Therefore, an escape sequence Â\nÊ is put at the end of the
statement if the cursor is to be on a new line.
Other than the escape sequence Â\nÊ there are other characters that can be used in
the string output_formats as given in Table 6.1.
ACTIVITY 6.1
printf(“Line 1”);
printf(“Line 2”);
printf(“Line 1\n”);
printf(“Line 2”);
Specification Meaning
%s Output a string
%c Output a character
%d Output an integer
%f Output float/double
%e Output float/double using scientific notation
(a) %s Specification
Assume name is a string variable that can be assigned the value Najwa
Mawaddah. Consider how the specification %s interprets the variable to
output in Program 6.1.
Program 6.1
/* Prints name */
#include <stdio.h>
void main() {
char name[] = “Najwa Mawaddah”;
printf(“%s”, name);
Do you know what the output will be? Yes, the output will be:
Najwa Mawaddah
(b) %c Specification
Now, let us look at the %c specification. Do you know the use of this
specification? This specification will be compared to the character value
that will be printed. Study Figure 6.1 to understand this concept.
character1 = ‘O’;
character2 = ‘U’;
character3 = ‘M’;
printf(“%c %c %c “,character1, character2,
character3);
Program 6.2
At the second printf() function call, the statement value1 – value2 will be
evaluated first and the result is 4.45. This value will fit the %f specification in
the string given. Since the float data type has a precision of 6, therefore, the
output obtained is in precision of 6 decimal spaces. The output displayed is as
follows:
First value = 10
Second value = 4.450000
Output specification can be combined into one printf() statement. You can
refer to relevant online websites to see how this can be done.
ACTIVITY 6.2
void main () {
char name[] = “Najwa Mawaddah”;
int age = 20;
float height = 1.53;
2. Change the printf() statement with the following and execute the
program:
int count = 5;
float tot = 10.5;
What is printed?
(a) printf(“*\t***\t*****\n”);
(b) printf(“*\b***\n*****\n”);
(c) printf(“*\r***\n*****\n”);
What happens here is that the value that is input will be matched to the variable,
based on the formats given. Next, the value represented by the variable will be
used in the program and usually produces output. Let us take a look at the
general form for the scanf()function:
scanf(input_format [, variable_list]);
Assume that character and num are variables of type char and int
respectively. The first input is a character value that will be kept in the memory
location called character. The second input is an integer value that is kept in
the memory location for the variable num.
Program 6.3
void main () {
int day, month, year;
Observe Program 6.3 above. When the program is executed, it will wait for us to
enter a value for day, month and year.
11 9 2001
One main problem in the program above is that the programmer assumes that
the user of the program knows what values are to be entered. Normally, when
writing programs, we will display a suitable message to inform the user of the
type of values to enter.
SELF-CHECK 6.1
ACTIVITY 6.3
1. Write, compile and execute the following program which will input
3 name initials and age.
%c specification %s specification
%d specification printf() function
%f specification scanf() function
INTRODUCTION
When you studied mathematics in secondary school, you would have come
across symbols like +, -, x, < and >. These symbols are used to manipulate data
and are known as operators. Before we write programs that are more complex, it
would be good to remember some symbols that can be used to manipulate the
data. In C language, there are many types of operators. There are arithmetic
operators, relational operators, logic operators, increment and decrement
operators, cast operators and conditional operators. This topic will describe these
operators in detail.
Most of the symbols above behave in the same way as normal arithmetic
operators. Addition, minus, multiplication and a few cases of division operators
would give the same result as normal arithmetic operators.
Therefore, the addition, minus and multiplication operators will not be discussed
in detail. Please recall the basic concepts of addition, subtraction and
multiplication from your mathematics subject for this.
Please note that the symbol used in the multiplication operation for C is * and not
x.
The division operator in C is quite different from the normal division operation.
There are two types of division operators, which are the integer division and the
real division. Both types of division use the same operation symbol which is /.
However, the operands differentiate the type of division.
The division result of both the operands is determined. If the division is not
a round number (that is, it has a decimal value), the remainder of the
division is ignored. The result is truncated to an integer value. Consider the
example given in Table 7.2 below:
Operation Result
5 / 2.5 2.0
5.5 / 2.0 2.75
5.0 / 10 0.5
Observe Table 7.3 above. In the first example, we immediately get the division
value of 2 and since the division is a real division (one of the operands is a real
number), the result of the division has to be written as a real number, which is
2.0.
SELF-CHECK 7.1
Which one of the answers given below would keep the value of
result?
printf(“%.0f”, 15 / 4);
printf(“%.1f”, 15 / 4.0);
Modulus operation would have the result of the remainder of the integer
division. The symbol used for this operation is %. Both the operands in this
operation must be integer operands.
SELF-CHECK 7.2
printf(“%d”, 15 % 4);
5 + 6
14 * 5 * 2
21 - 6 + 7 * 4 / 2
7.5 * (2.0 - 4.52)
Precedence Operation
High *, /, %
Low +, -
3 + 10/3
3 + 3
Operator / has a higher precedence level, therefore it is evaluated first. The result
from the 10/3 division would be the operand for the addition operation and the
result is 6.
ACTIVITY 7.1
10 % 6 * 3
If you do not want the arithmetic expression evaluated using the precedence
levels, we need to write the expression using brackets. Expressions in the
brackets would be evaluated first.
To ensure the operator with a lower precedence is executed first, the solution is
to use brackets (). For example:
(12 6) * 4
=6*4
= 24
ACTIVITY 7.2
Can you show the steps required to solve the problem below?
(9 (3 + 2)) * 3
8
16 16 - 8 / 2
2
15 5 7
(15 + 5 +7) / 2
2
7
15 5
2
SELF-CHECK 7.3
1
1 X2
variable = expression;
Program 7.1
void main() {
float weight, height, bodyweightIndex;
ACTIVITY 7.3
a = b = c = 40;
Observe the example above. Remember that any assignment statement will solve
the expression on the right and assign the value of the expression to the variable
on the left. Look at how the statements are worked out:
Multiple statements are useful when we want to give initial values to some
variables that are newly declared, that is before they are used. Using the multiple
expression statements, we do not have to write one assignment statement for
every variable. This will reduce the lines of the program code.
The example below shows the variable age and numOfSiblings assigned the
initial value of 0 in one multiple expression. The same goes for the variable
weight and height which are assigned the initial value of 0.0 in one multiple
expression.
SELF-CHECK 7.4
float x, y;
y = x = 10.0 * 2;
If the value of weight originally is 45, the expression on the right (weight +
1.5) will result in the value 46.5 (see (1) in Figure 7.1). This value is assigned to
the variable weight (see (2)). It means that the original weight (45) will be
replaced with the new value which is 46.5 (see state after (2)).
In C, statements like these can be written using compound operators. Table 7.7
below shows compound operators.
Precedence level for the compound operators is the lowest. This means that this
operator will be evaluated last of all while solving some expressions. Observe the
statement below:
Based on the precedence level, the statement above is solved in this manner:
SELF-CHECK 7.5
Assume that x has the value of 1 0 . 0 . What is the value that is assigned to x
after the statement below is executed?
x = x - 20.0;
The task of these operators is to compare the values of two expressions; either
equal to, not equal to, less than, or more than. Table 7.8 below lists the relational
operator symbols and their meanings.
These operators have two operands that can be made up of a variable, constant
or a combination of both. A relational expression is created from a relational
operation. Relational expressions will return the value of 1 if true and 0if false.
SELF-CHECK 7.6
Assume that x has the value of 15.0 and y has the value 25.0. What is the
value for these relational expressions?
Expression Value
x! = y
x >= y - x
x < x
x == y = x - y
Symbol Meaning
&& and
|| or
! not
Operator && and must have two operands, whereas the operator ! has only
one operand. The following Table 7.10 shows how logical operator functions. The
table is known as the truth table. In the following table, 1 represents True and 0
represents False.
a B a && b a b
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 1
A !a
0 1
1 0
(c) ! (c > a)
<=> ! (15 > 1)
<=> ! 1
<=> 0
SELF-CHECK 7.7
If a = 5, b = 10, c = 15 and valid has the value of 1, what is the value of the
expressions below?
Expression Result
(a) c = = a + b ! valid
(b) a! = 7 && valid c >= 6
Symbol Meaning
++ Add 1 to the operand
-- Subtract 1 from the operand
This operator needs one operand only. That operand is usually an integer
variable. Do you still remember integer variables? If you do not, please refer to
Chapter 5. It can also be written in the form of an assignment statement. Table
7.12 below explains the meaning of increment, decrement and the statements that
are equivalent to them.
To increase or decrease the value of one variable, the position of the operator
does not matter, whether it is a prefix or postfix of the variable. However, when
the operator is combined to other operators in an expression, the position would
determine the value returned. Look at Table 7.13 below:
Expression Meaning
i++ Value i increased after being used in expression
++i Value i increased before being used in expression
i-- Value i decreased after being used in expression
--i Value i decreased before being used in expression
Also consider when we use the operator ++i (prefix increment) as shown below:
i = 5;
j = ++i - 2;
i = 5;
i++;
j = i - 2;
ACTIVITY 7.4
1. What is printed?
i = 3;
printf(“%d\n”, i);
printf(“%d\n”, --i);
printf(“%d\n”, ++i);
Subprogram Output
Postfix decrement
i = 7; printf(“%d\n,i);
printf(%d\n”,i--);
printf(%d\n,i);
Prefix decrement
i = 7; printf(“%d\n,i);
printf(%d\n”,--i);
printf(%d\n,i);
3. If
Expression j Value
i = 5
j = ++i –2;
Therefore j = ?
i = 5, j = 3;
i++;
j = i – j
Therefore j = ?
When the value of total = 10 and count = 2, therefore, the average value
obtained will be 5.0; and when the value of total = 15 and count = 2,
average value obtained is 7.0! In this case, both the operands for the divide
operation are of type integer. So, integer division is carried out and would result
in integer value. Even though this integer value is assigned to a real value, the
decimal part is truncated.
Hence in similar cases, we need to do a real division operation. The easiest way
to do this is by changing the value of total variable and/or count to type
float before the division operation is done using the cast operator.
Take note here! We do not redefine total and count as type float because we
want to retain the value as an integer for the other parts of the program. The
changes made are as follows:
The changes are made only at the parts where they are needed. The cast operator
would change the value of total and count temporarily to a real value.
Therefore, the division that is executed will be real division and will result in a
real value too.
SELF-CHECK 7.8
Generally, to get a value for the conditional expression above, we first need to
determine whether expression_1 is true or false. If expression_1 is true, then
the value of the conditional operator is expression_2, but if expression_1 is
false, the value of the conditional operator is expression_3.
m ? mx + c : c;
y = m ? mx + c : c;
if (m)
y = mx + c;
else
y = c;
ACTIVITY 7.5
int x = 3;
int y = 5;
int min;
What is printed?
Expression Value
(a) k = j ++;
(b) k = i * j-;
(c) k = ++ j;
(d) k = i * -j;
ACTIVITY 7.6
(b) Accept the value of a radius and calculate the area and
circumference.
Integer division happens when both the operands are of integer type.
Operands can be a constant or a variable.
Real division is done when one or both of the operands have a real value.
Appendix
Nowadays, there are lots of IDEs for C programming available either as:
(a) Freeware;
(b) Open source software; or
(c) Commercial software.
You may be wondering why the list contains C++. Can they run C language?
Yes! These IDEs are built to run both C and C++ languages. You just need to
know the correct way to save it before you compile and run your respective C
programs.
For this course, we are going to use Orwell Dev-C++ (by Orwell). Actually, this
IDE is a modified version from Bloodshed Dev-C++. Take a look at the following
steps on how to download, install and use Orwell Dev-C++.
Choose this
option to
download
the 64-bit
version
Before you start writing a C program, click on the new file icon 1 and
Once the New Source File is loaded on the screen, choose menu File > Save
As⁄ as shown in Figure 4.
Figure 4: Save as
In the Save As dialogue box, make sure of the following (refer to Figure
A.5):
When you save the file, the tab of the respective file will be renamed as
shown in the interface 6 in Figure 6. You may start writing your first C
program here 7 (refer to Figure 6). You are advised to write this main
block every time you start writing C program. By practicing this method,
you will not miss any codes especially the opening and closing braces.
6
7
After you finish writing the codes, press the Compile button 8 (refer to
You need to see the bottom part of the Windows, whether you get any
there is any error, double click on each error listed to see the respective line
of code that contains the error. Find solutions to fix it. If there is no error,
the compilation is indicated as successful.
10
If the program is successfully compiled, press the Run button or
11
press F10 to run and get the output of the program as shown in
Figure 9.
10
11
IDE in Linux
If you are working on the Linux platform, you can use Geany as an application to
write, compile and run C program. How to get and install it? In this tutorial, we
use Ubuntu as the most popular and easiest Linux distribution. For your
information, any Linux platforms come with pre-installed C compiler called
GNU Compiler Collection (GCC), so you do not have to worry about C compiler
anymore. Geany is an editor to be used to write C codes, but it has an ability to
compile and run C program because of the integration with GCC.
To get Geany, you can open the Ubuntu Software Center and search for Geany
(refer to Figure 10). Later, you can press the Install button and let the system
install it for you. Additional plugin called g++ also need to be installed. You just
need to search „g++‰, find and install it through the Ubuntu Software Centre.
After the installation is completed, press the Window button on the keyboard
and type „Geany‰. Click on the icon to fire up Geany (refer to Figure 11).
Before you start writing codes in Geany, we need to do a little change in the
Preference menu. Kindly go to Edit > Preference menu and set the output of the
program must be shown in gnome-terminal. You just need to replace the value
inside the dialog box with „gnome-terminal‰ (refer to Figure 12).
Figure 12: Replace the value inside the dialog box with „gnome-terminal‰
Once completed, you can proceed with your programming codes as follows
(refer to Figure 13):
(a) To begin the C program, click on File > Save As⁄;
(b) Select a folder to save the file;
(c) Write the file name together with the extension of .c (for example,
HelloWorld.c); and
(d) Press the Save button.
1
3
After completing the codes, you can do the following necessary steps in order to
accomplish your programming tasks:
5
(a) To compile program: Press this button (refer to Figure 14);
6
(b) To run program: Press this button (refer to Figure 14); and
5 6
Figure 14: Write your program, compile and run in the editor
Okay, you are done with IDE, not for Windows platform only, but also for Linux
platform. Enjoy your learning and always remember programming is fun!!
OR
Thank you.