Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
7 views

C Basics

Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views

C Basics

Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 22

C Basics

Before we embark on a brief tour of C's basic syntax and structure we offer
a brief history of C and consider the characteristics of the C language.

In the remainder of the Chapter we will look at the basic aspects of C


programs such as C program structure, the declaration of variables, data
types and operators. We will assume knowledge of a high level language,
such as PASCAL.

It is our intention to provide a quick guide through similar C principles to


most high level languages. Here the syntax may be slightly different but the
concepts exactly the same.

C does have a few surprises:

 Many High level languages, like PASCAL, are highly disciplined and
structured.
 However beware -- C is much more flexible and free-wheeling. This
freedom gives C much more power that experienced users can
employ. The above example below (mystery.c) illustrates how bad things
could really get.

History of C
The milestones in C's development as a language are listed below:

 UNIX developed c. 1969 -- DEC PDP-7 Assembly Language


 BCPL -- a user friendly OS providing powerful development tools
developed from BCPL. Assembler tedious long and error prone.
 A new language ``B'' a second attempt. c. 1970.
 A totally new language ``C'' a successor to ``B''. c. 1971
 By 1973 UNIX OS almost totally written in ``C''.

Characteristics of C
We briefly list some of C's characteristics that define the language and also
have lead to its popularity as a programming language. Naturally we will be
studying many of these aspects throughout the course.

 Small size
 Extensive use of function calls
 Loose typing -- unlike PASCAL
 Structured language
 Low level (BitWise) programming readily available
 Pointer implementation - extensive use of pointers for memory, array,
structures and functions.

C has now become a widely used professional language for various reasons.

 It has high-level constructs.


 It can handle low-level activities.
 It produces efficient programs.
 It can be compiled on a variety of computers.

Its main drawback is that it has poor error detection which can make it off
putting to the beginner. However diligence in this matter can pay off
handsomely since having learned the rules of C we can break them. Not
many languages allow this. This if done properly and carefully leads to the
power of C programming.

As an extreme example the following C code (mystery.c) is actually legal C


code.

#include <stdio.h>

main(t,_,a)
char *a;
{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86, 0, a+1 )+a)):1,t<_?main(t+1, _, a ):3,main ( -94, -27+t, a
)&&t == 2 ?_<13 ?main ( 2, _+1, "%s %d %d\n" ):9:16:t<0?t<-72?main(_,
t,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l,+,/n{n+\
,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/\
+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){n\
l]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#\
n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \
;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;\
#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/")
:t<-50?_==*a ?putchar(a[31]):main(-65,_,a+1):main((*a == '/')+t,_,a\
+1 ):0<t?main ( 2, 2 , "%s"):*a=='/'||main(0,main(-61,*a, "!ek;dc \
i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);}

It will compile and run and produce meaningful output. Try this program out.
Try to compile and run it yourself. Alternatively you may run it from here and
see the output.

Clearly nobody ever writes code like or at least should never. This piece of
code actually one an international Obfuscated C Code Contest
http://reality.sgi.com/csp/iocc The standard for C programs was originally the
features set by Brian Kernighan. In order to make the language more
internationally acceptable, an international standard was developed, ANSI C
(American National Standards Institute).
C Program Structure
A C program basically has the following form:

 Preprocessor Commands
 Type definitions
 Function prototypes -- declare function types and variables passed to
function.
 Variables
 Functions

We must have a main() function.

A function has the form:

type function_name (parameters)


{
local variables

C Statements

If the type definition is omitted C assumes that function returns an integer


type. NOTE: This can be a source of problems in a program.

So returning to our first C program:

/* Sample program */

main()
{

printf( ``I Like C n'' );


exit ( 0 );

}
NOTE:

 C requires a semicolon at the end of every statement.


 printf is a standard C function -- called from main.

 n signifies newline. Formatted output -- more later.


 exit() is also a standard function that causes the program to terminate. Strictly
speaking it is not needed here as it is the last line of main() and the program will
terminate anyway.

Let us look at another printing statement:

printf(``. n.1 n..2 n...3 n'');

The output of this would be:

.
.1
..2
...3

Variables
C has the following simple data types:

The Pascal Equivalents are:

On UNIX systems all ints are long ints unless specified as short int explicitly.

NOTE: There is NO Boolean type in C -- you should use char, int or (better) unsigned char.
Unsigned can be used with all char and int types.

To declare a variable in C, do:

var_type list variables;

e.g. int i,j,k;


float x,y,z;
char ch;

Defining Global Variables


Global variables are defined above main() in the following way:-

short number,sum;
int bignumber,bigsum;
char letter;

main()
{

It is also possible to pre-initialise global variables using the = operator for assignment.

NOTE: The = operator is the same as := is Pascal.

For example:-

float sum=0.0;
int bigsum=0;
char letter=`A';

main()
{

This is the same as:-

float sum;
int bigsum;
char letter;

main()
{

sum=0.0;
bigsum=0;
letter=`A';

...but is more efficient.

C also allows multiple assignment statements using =, for example:

a=b=c=d=3;

...which is the same as, but more efficient than:

a=3;
b=3;
c=3;
d=3;

This kind of assignment is only possible if all the variable types in the statement are the
same.

You can define your own types use typedef. This will have greater relevance later in the
course when we learn how to create more complex data structures.

As an example of a simple use let us consider how we may define two new types real and
letter. These new types can then be used in the same way as the pre-defined C types:

typedef real float;


typedef letter char;

Variables declared:
real sum=0.0;
letter nextletter;

Printing Out and Inputting Variables


C uses formatted output. The printf function has a special formatting character (%) -- a
character following this defines a certain format for a variable:

%c -- characters
%d -- integers
%f -- floats

e.g. printf(``%c %d %f'',ch,i,x);

NOTE: Format statement enclosed in ``...'', variables follow after. Make sure order of format
and variable data types match up.
scanf() is the function for inputting values to a data structure: Its format is similar to printf:

i.e. scanf(``%c %d %f'',&ch,&i,&x);

NOTE: & before variables. Please accept this for now and remember to include it. It is to do
with pointers which we will meet later (Section 17.4.1).

Constants
ANSI C allows you to declare constants. When you declare a constant it is a bit like a
variable declaration except the value cannot be changed.

The const keyword is to declare a constant, as shown below:

int const a = 1;
const int a =2;

Note:

 You can declare the const before or after the type. Choose one an stick to it.
 It is usual to initialise a const with a value as it cannot get a value any other way.

The preprocessor #define is another more flexible (see Preprocessor Chapters) method to
define constants in a program.

You frequently see const declaration in function parameters. This says simply that the
function is not going to change the value of the parameter.

The following function definition used concepts we have not met (see chapters on functions,
strings, pointers, and standard libraries) but for completenes of this section it is is included
here:

void strcpy(char *buffer, char const *string)

The second argiment string is a C string that will not be altered by the string copying
standard library function.

Arithmetic Operations
As well as the standard arithmetic operators (+ - * /) found in most languages, C provides
some more operators. There are some notable differences with other languages, such as
Pascal.

Assignment is = i.e. i = 4; ch = `y';

Increment ++, Decrement -- which are more efficient than their long hand equivalents, for
example:-- x++ is faster than x=x+1.
The ++ and -- operators can be either in post-fixed or pre-fixed. With pre-fixed the value is
computed before the expression is evaluated whereas with post-fixed the value is computed
after the expression is evaluated.

In the example below, ++z is pre-fixed and the w-- is post-fixed:

int x,y,w;

main()
{

x=((++z)-(w--)) % 100;

This would be equivalent to:

int x,y,w;

main()
{

z++;
x=(z-w) % 100;
w--;

The % (modulus) operator only works with integers.

Division / is for both integer and float division. So be careful.

The answer to: x = 3 / 2 is 1 even if x is declared a float!!

RULE: If both arguments of / are integer then do integer division.

So make sure you do this. The correct (for division) answer to the above is x = 3.0 / 2 or x=
3 / 2.0 or (better) x = 3.0 / 2.0.

There is also a convenient shorthand way to express computations in C.

It is very common to have expressions like: i = i + 3 or x = x*(y + 2)

This can written in C (generally) in a shorthand form like this:

which is equivalent to (but more efficient than):


So we can rewrite i = i + 3 as i += 3

and x = x*(y + 2) as x *= y + 2.

NOTE: that x *= y + 2 means x = x*(y + 2) and NOT x = x*y + 2.

Comparison Operators
To test for equality is ==

A warning: Beware of using ``='' instead of ``=='', such as writing accidentally

if ( i = j ) .....

This is a perfectly LEGAL C statement (syntactically speaking) which copies the value in "j"
into "i", and delivers this value, which will then be interpreted as TRUE if j is non-zero. This is
called assignment by value -- a key feature of C.

Not equals is: !=

Other operators < (less than) , > (grater than), <= (less than or equals), >= (greater than
or equals) are as usual.

Logical Operators
Logical operators are usually used with conditional statements which we shall meet in the
next Chapter.

The two basic logical operators are:

&& for logical AND, || for logical OR.

Beware & and | have a different meaning for bitwise AND and OR ( more on this later in
Chapter 12).

Order of Precedence
It is necessary to be careful of the meaning of such expressions as a + b * c

We may want the effect as either

(a + b) * c
or

a + (b * c)
All operators have a priority, and high priority operators are evaluated before lower priority
ones. Operators of the same priority are evaluated from left to right, so that

a-b-c

is evaluated as

(a-b)-c

as you would expect.

From high priority to low priority the order for all C operators (we have not met all of them
yet) is:

( ) [ ] -> .
! - * & sizeof cast ++ -
(these are right->left)
*/%
+-
< <= >= >
== !=
&
|
&&
||
?: (right->left)
= += -= (right->left)
, (comma)

Thus

a < 10 && 2 * b < c

is interpreted as
( a < 10 ) && ( ( 2 * b ) < c )

and

a=

b=
spokes / spokes_per_wheel
+ spares;

as
a=

(b=
( spokes / spokes_per_wheel )
+ spares
);

Exercises
Write C programs to perform the following tasks.

Exercise 12270

Input two numbers and work out their sum, average and sum of the squares of the numbers.

Exercise 12271

Input and output your name, address and age to an appropriate structure.

Exercise 12272

Write a program that works out the largest and smallest values from a set of 10 inputted
numbers.

Exercise 12273

Write a program to read a "float" representing a number of degrees Celsius, and print as a
"float" the equivalent temperature in degrees Fahrenheit. Print your results in a form such
as

100.0 degrees Celsius converts to 212.0 degrees Fahrenheit.

Exercise 12274

Write a program to print several lines (such as your name and address). You may use either
several printf instructions, each with a newline character in it, or one printf with several
newlines in the string.

Exercise 12275

Write a program to read a positive integer at least equal to 3, and print out all possible
permutations of three positive integers less or equal to than this value.

Exercise 12276

Write a program to read a number of units of length (a float) and print out the area of a
circle of that radius. Assume that the value of pi is 3.14159 (an appropriate declaration will
be given you by ceilidh - select setup).

Your output should take the form: The area of a circle of radius ... units is .... units.
If you want to be clever, and have looked ahead in the notes, print the message Error:
Negative values not permitted. if the input value is negative.

Exercise 12277

Given as input a floating (real) number of centimeters, print out the equivalent number of
feet (integer) and inches (floating, 1 decimal), with the inches given to an accuracy of one
decimal place.

Assume 2.54 centimeters per inch, and 12 inches per foot.

If the input value is 333.3, the output format should be:

333.3 centimeters is 10 feet 11.2 inches.

Exercise 12278

Given as input an integer number of seconds, print as output the equivalent time in hours,
minutes and seconds. Recommended output format is something like

7322 seconds is equivalent to 2 hours 2 minutes 2 seconds.

Exercise 12279

Write a program to read two integers with the following significance.

The first integer value represents a time of day on a 24 hour clock, so that 1245 represents
quarter to one mid-day, for example.

The second integer represents a time duration in a similar way, so that 345 represents three
hours and 45 minutes.

This duration is to be added to the first time, and the result printed out in the same notation,
in this case 1630 which is the time 3 hours and 45 minutes after 12.45.

Typical output might be Start time is 1415. Duration is 50. End time is 1505.

There are a few extra marks for spotting.

Start time is 2300. Duration is 200. End time is 100.


Learn C by example in just 5
hours.C tutorial on-line.

Have you always wanted to master a programming language. Well today if


you are glancing at this page you have chosen a language which perhaps
without doubt is the most versatile. But to learn C for say basic programmers
is a challenge. While the old basic used interpreters C uses compilers and
basically is very portable. But let quit all this jibrish and get to the heart of
this page. I say you can learn C programming in 3 hours. Well atleast the
basics that will help you to build more powerful programs.You say I can't
show you C in 5 hours. Well let's test that ...

A simple hello program.(demonstrates the const function in all c


programs--the main() function.)
(example-1)
main()
{
puts("hello world guess who is writing a c program");
return(0);
}

That's it. In all c programs there is a main function which is followed


by a { and closed by a } after a return()function.It doesn't have to
be return(0) but that depends upon the type of c compiler you have.
Check your compiler before you start your programming.

You saw above that puts function is used to put a whole sentence
on the screen; but are there functions that will put characters on
the screen/take characters: Yes and next is a table of what they are
and what they do. Read them and the examples that follow.

getchar Gets a single character from the


() input/keyboard.
putchar Puts a single character on the
() screen.
The printf function is a function used to print the output to the
screen.printf() needs to know if the output is an integer,real,etc
example-2
main()
{
printf(hello);
}
Assuming hello was defined earlier say by #define hello "Hello!" the
output is Hello!. But if the output is an integer then %d has to be
attatched to the printf statement.

This above can be shown as printf("I am %d years old",12) which will


result in the following result:I am 12 years old

The %d tells that an integer is to be placed here.

Now we will look into a function called scanf().This lets you input
from the kewyboard and for that input to be taken by the program
and processed.Once again it is important to tell scanf() what type of
data is being scanned.

Here is an example of a program that demonstrates both scanf and


printf in unison.
example-3

main() {
int count;
puts("Please enter a number: ");
scanf("%d", &count);
printf("The number is %d",count);
}

That concludes the first hour of your tutorial.Now this is a list of


data type identifiers.

%f=float %c=char %s =s tring %e=inputs number in scientific


notation.

As you saw in the first hour of our tutorial c is a language in which


you program using functions. Functions are usually identified by the
following characteristic:>> functionname() In c the main() function
is essential. Think of it as a constant function for all your programs
and all other functions can be accessed from the main().Before I
show you how we do that let us have an example where we want to
pause a program before the screen is changed. This would involve
the foll- owing procedure:>> write a main function then use puts
function to put statements on the screen like we did in section 1
above and then before the next set of puts statements declare a
pause.

This is how it is done:

example-4
main()
{
puts("hello there");
puts("what is your name?")
pause()
puts("It is nice to meet you")
}
pause();
{
int move_on;
printf("press entere to continue");
move_on=getchar();
return(0);
}

This above will pause until a key is pressed on the keyboard.


Granted that the above program makes no sense from a practical
point of view but I want to show is the use of another function
inside the main function.

C has many functions that comes with it. See your compiler manual
to see what you have.Now we are going to look at conditions in c
programming:>> the if command and do command.

Here is an example of th if command:

example-5
main()
{
float cost,tax,luxury,total;
luxury=0.0;
printf("Enter the cost of the item: ");
scanf("%f", &cost);
tax=cost*0.06;
if(cost>40000.0)
luxury=cost*0.005;
total=cost+tax+luxury;
printf("the total cost is %0.2f",total);
}

This is a simple example of one if statement. Another If statement is


the if -else statement. This can be shown as this

example-6
if(cost >40000)
{
luxury=cost*0.005;
printf("The luxury tax is %.2f",luxury);
}
else
{
puts("There is no luxury tax for the items");
luxury=0.0;
}

Now the format a do statement is as follows:

do
{
instruction;
instruction
}
while(condition);

The format for a FOR statement is as follows:

for(initial=value;condition;increment)
instruction;

Now for an example:

example-7
main()
{
int row,column;
puts("\t\tMY Handy multipication table");
for(row=1;tow<=10;row++)
{
for(column=1;column<=10;column++)
printf("%6d", row*column);
putchar('\n');
}
}

The output is a multipication table of 10x10 size.

example-8
main()
{
int temp;
float celsius;
char repeat;
do
{
printf("Input a temperature:");
scanf("%d", &temp);
celsius=(5.0/9.0)*(temp-32);
printf(%d degrees F is %6.2f degrees celsius\n",temp, celsius);
printf(("do you have another temperature?");
repeat=getchar();
putchar('\n');
}
while(repeat=='y'|| repeat=='y');
}

This shows you to how to use the do command for conditional


programming in c.

Now we are in our 3rd hour.

Now we will concentrate on arrays:

What is a flag?

A flag is an algorithm that informs the program that a certain


condition has occured.

example-9

main()
{
int temp;
float celsius;
char repeat;
char flag;
do
{
flag='n";
do
{
if(flag=='n')
printf("Input a valid temperature :");
else
printf("input a valid temperature,stupid:");
scanf("%d",&temp);
flag='y';
}
while (temp<0||temp >100);
celsius=(5.0/9.0)*(temp-32);
printf("%d degrees F is %6.2f degrees celsius\n",temp,celsius);
printf("Do you have another temperature?");
repeat=getchar();
putchar('\n');
}
while (repeat=='y' || repeat=='Y");
}

That was an example of how flags work.

What is the break command?

The break command ends the loop in which it is placed just as if the
while condition, or the condition in a for loop becomes false.

How to declare an array?


An array can be defined as follows:

int temp[5]={45,56,12,98,12};

This would mean the following:

temp[0]=45....temp[4]=12

This was a single dimension array with 5 elements of the integer


type.If you wanted to depict float variables just use float temp
instead of int temp.

Let us now see an example of using an array for two tasks.

main()
{
int temps[31];
int index,total;
float average,celsius;
total=0.0;
for(index=0;index<31;index++)
{
printf("enter temperature #%d:",index);
scanf("%d",&temps[index]);
}
for(index=0;index<31;index++)
total+=temps[index];
average=total/31.0
printf("average is:%f\n\n", average);
puts9"fahrenheit\tcelsius\n");
for(index=0;index<31;index++)
{
celsius=(5.0/9.0)*(temps[index]-32);
printf("%d\t\t%6.2f\n",temps[index],celsius);
}
}

Now I am going to show you how to pass an array. When you pass
an array you are actually passing the address of the array.

example-10

#define count 31
main()
{
int temps[count];
int index;
float celsius;
for(index=0; index< count;index++)
{
celsius=(5.0/9.0)*(heat[index]-32);
printf("%d\t\t%6.2f\n",heat[index],celsius);
}
}

Now we are in the fourth hour of our tutorial.We are now going to
look at 1)comparing strings 2)determining string lengths. 3)
combining strings 4)structures.
Comparing 2 strings:>> In c it is not possible to directly
compare two strings so a statement like if (string1==string2) is not
valid.

Most c libraries contain a function called the strcmp().This is used to


compare two strings in the following manner.

if(strcmp(name1,name2)==0)
puts("The names are the same");
else
puts("The names are not the same.");

Determining string length.:>> This is done using the


strlen() function.

a simple programming bit showing this function looks like this:

gets(name);
count=strlen(name);
printf("the string %s has %d characters",name,count);

Combining strings:>>We use the function strcpy() an


example follows:

Example-11

strcpy(name,"Adam");
strcpy(name1,"and eve");
strcat(name,name1);
puts(name);

The assumption being that adam and eve are two values of the
variables name1 and name2. The end result is the combination of
the 2 names.

What are structures?


A structure variable is a collection of other variables comprising
different types.

What are pointers?


Ponters are variables which refer to the memory locations of other
variables.

This is how a structure is defined.

example-12

struct cd
{
char name[20];
char description[40];
char category[12];
float cost;
int number;
};
main()

Notice how the main function comes after the definition of the
structure. In the example above the cd was a cd disk and I was
writing the definition of a cd collection program.

Now in the fifth hour I will show you how to output your data onto a
disk.After all what is the use of the program if you can't save output
to a disk.

Inorder to do this we have to use a pointer. The pointer in this case


is FILE. The syntax to declare a file is :FILE*file_ponter;

The link between your program, the file and the computer is
established with the fopen() function using the syntax shown below:

pointer=fopen("FILENAME","mode");

For example to create a file by the name cd.dat we do the following:

FILE*cdfile;
cdfile=fopen("CD>DAT","w");
If you will be reading from the file above use "r" instead "w" in the
second sentence.

In order to rpint information use the following command:


FILE*cdfile;
cdfile=fopen("PRN","w");
A file is closed by using the fclose() command.Next we will look at
an exam ple of reading from a file.
example-13
#include "stdio.h"
main()
{
FILE*fp;
int letter;
if((fp=fopen("MYFILE","r"))==NULL)
{
puts("Cannot oepn the file");
exit();
}
while((letter=fgetc(fp)) !=eof)
printf("%c",letter);
fclose(fp);
}

The eof statement means end of file and this is included in the
stdio.h header file which was declared at the start of the example.
The stdio.h header file is one of many that comes with your
compiler. So check your compiler specifics for other header files
which will help perform other functions.

Now that you went through this tutorial you should be in a position
to write simple programs and save it to a disk so you can give it
your friends or even your boss. In no way the depth of c can be done
in 5 hours but the nut and bolts can be learned that fast.Wher e you
go from there depends upon your ambitions and hard work.

You might also like