0% found this document useful (0 votes)
74 views19 pages

C Programming: Homework 5

This document provides an overview of various C programming concepts needed for Homework 5. It describes basic data types in C like int, float, double, char, and void. It also covers pointers, including declaring and dereferencing pointers, pointers to pointers, and pointers to functions. Structs are discussed as a way to package related data together. Dynamic memory allocation using malloc, realloc, and free is explained. Finally, the document outlines the requirements for Homework 5, which involves writing a program that reads from stdin, ROT13 encodes the data, sorts it using qsort, and writes the output to stdout.

Uploaded by

leish
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
74 views19 pages

C Programming: Homework 5

This document provides an overview of various C programming concepts needed for Homework 5. It describes basic data types in C like int, float, double, char, and void. It also covers pointers, including declaring and dereferencing pointers, pointers to pointers, and pointers to functions. Structs are discussed as a way to package related data together. Dynamic memory allocation using malloc, realloc, and free is explained. Finally, the document outlines the requirements for Homework 5, which involves writing a program that reads from stdin, ROT13 encodes the data, sorts it using qsort, and writes the output to stdout.

Uploaded by

leish
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 19

C Programming

Homework 5

Basic Data Types


int
Holds integer numbers
Usually 4 bytes
float
Holds floating point numbers
Usually 4 bytes
double
Holds higher-precision floating point numbers
Usually 8 bytes (double the size of a float)
char
Holds a byte of data, characters
void
Pretty much like C++ basic data types, but NO bool before C99

Pointers
Variables that store memory addresses
Declaration
<variable_type> *<name>;
int *ptr;
int var = 77;
ptr = &var;

//declare ptr as a pointer to int


// define an int variable
// let ptr point to the variable var

Dereferencing Pointers
Accessing the value that the pointer points to
Example:
double x, *ptr;
ptr = &x;

// let ptr point to x

*ptr = 7.8;

// assign the value 7.8 to x

Pointer Example
int *x;
int *y;
int var; x = &var;

*x = 42;

Pointer Example
*y = 13;

y = x;

*x = 13;
*y = 13;

or

Pointers to Pointers
char c = A

*cPtr = &c

**cPtrPtr = &cPtr

Pointers to Functions
Also known as: function pointers or functors
Goal: write a sorting function
Has to work for ascending and descending sorting
order + other

How?
Write multiple functions
Provide a flag as an argument to the function
Polymorphism and virtual functions
Use function pointers!!

Pointers to Functions
User can pass in a function to the sort
function
Declaration
double (*func_ptr) (double, double);

func_ptr = [&]pow; // func_ptr points to pow()


Usage
// Call the function referenced by func_ptr

double result = (*func_ptr)( 1.5, 2.0 );


// The same function call

result = func_ptr( 1.5, 2.0 );

Structs
No classes in C
Used to package related data (variables of different
types) together
Single name is convenient
struct Student {
char name[64];
char UID[10];
int age;
int year;
};
struct Student s;

typedef struct {
char name[64];
char UID[10];
int age;
int year;
} Student;
Student s;

C structs vs. C++ classes


C structs cannot have
member functions

C++ classes can have


member functions

Theres no such thing as


access specifiers in C

C++ class members have


access specifiers and are
private by default

C structs dont have


constructors defined for
them

C++ classes must have at


least a default constructor

Dynamic Memory
Memory that is allocated at runtime
Allocated on the heap
void *malloc (size_t size);
Allocates size bytes and returns a pointer to the allocated
memory

void *realloc (void *ptr, size_t size);


Changes the size of the memory block pointed to by ptr to
size bytes

void free (void *ptr);


Frees the block of memory pointed to by ptr

Reading/Writing Characters
int getchar();
Returns the next character from
stdin

int putchar(int character);


Writes a character to the current
position in stdout

Formatted I/O
int fprintf(FILE * fp, const char * format, );
int fscanf(FILE * fp, const char * format, );
FILE *fp can be either:
A file pointer
stdin, stdout, or stderr

The format string


int score = 120; char player[] = Mary;
printf(%s has %d points.\n, player, score);

Compiling a C program
gcc o FooBarBinary -g foobar.c
gcc is the name of the compiler
The o option indicates the name of the
binary/program to be generated
The g option includes symbol and sourceline info for debugging
foobar.c is the source code to be compiled

Homework 5
Write a C program called srot13
Reads stdin byte-by-byte (getchar)
Consists of records that are newline-delimited

Each byte is ROT13 encoded (add 13 letters)


Sort records without decoding (qsort, rot13cmp)
Output result in ROT13 encoding to stdout

Error checking
Dynamic memory allocation

Example

Input: printf sybjre\nobl' | ./srot13


printf sybjre\nobl\n | ./srot13
Read the records: sybjre, obl
Compare records using rot13cmp function
Use rot13cmp as compare function in qsort
Output: obl
sybjre

qsort Example
#include <stdio.h>
#include <stdlib.h>
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int main ()
{
int values[] = { 40, 10, 100, 90, 20, 25 };
qsort (values, 6, sizeof(int), compare);
int n;
for (n = 0; n < 6; n++)
printf ("%d ",values[n]);
return 0;
}

Homework Hints

Start as soon as possible


Use gdb
Use exit, not return when exiting with error
1-D vs. 2-D array
Test your code with od c

You might also like