Table of Contents

Part 1

Entries

Entry 1: January 31, 2012

Today we played more with pointers. We wrote another program which delved into the realm of double pointers. I think I understand pointers but I may be over-simpplifing them. Esssentialy, they direct the computer to another location. When called to give the information contained in them they return the value of what they are pointing to.

Entry 2: Febrauary 2, 2012

Todday we wrote a game in class. We used some elements of things that we used in previous classes as well as looked into loops. We also looked at the rand function which is supposed to resemble a random number generator but doesn't do it very well. We did go through and fix the problem which did make it more random. We also added a loop into the code which looped the game until the user decides to quit. I understand this program and what it is doing, which is a good sign. I haven't gotten lost in the class yet which is always a hopeful start.

Entry 3: February 7, 2012

Today we looked at arrays. My previous experince with arrays is limited to the theoretical realm. I understood that arrays needed to be sized before you start to fill them but I never was quite sure how to actually create them in a program. Today's class helped. I am still not 100% comfortable with creating them on my own but I do see how it can be done.

Entry 4: February 25, 2012

Today Project 1 was due and it was rather more challenging than previously thought. I understand the logic of how to do the program and I understand what needs to be done on the project, however, I am struggling with the actual implementation of the code. When I sit to write the code I essentially draw a blank and have no idea where to begin. I believe that if I sit down more with a pseudocode and play more with syntax and read source material on how to code in C I can overcome this dilemma. Otherwise, this will be a very difficut semester.

Keywords

cprog Keywords

Standard I/O

(STDIO, STDOUT, STDERR)

Definition

The main libraries in which C programs run

Demonstration
#include <stdio.h>

Logic Operators

AND, OR, NOT, XOR

Definition

Specifies the parameters of the loop and determines if the loop should execute

Demonstration
while((x!='\0')&&(x!='\n'))

This is an AND operator in a program

Typecasting

Definition

taking one form of variable and making it fit into another form of variable

Demonstration

Demonstration of the chosen keyword.

If you wish to aid your definition with a code sample, you can do so by using a wiki code block, an example follows:

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
        int *p1, *p2, p3, **p4;
        p1=(int*)malloc(sizeof(int)*1);
        *p1=26;
        printf("*p1 is %u\n", *p1);
        p2=p1;
        p4=&p1;
        printf("**p4 is %u\n",**p4);
        printf("*p2 is %u\n",*p2);
        *p2=61;
        printf("*p1 is %u\n", *p1);
        printf("**p4 is %u\n", **p4);
        printf("*p2 is %u\n", *p2);
        return(0);
}

This allocated memory in the size of an int

Pointers

Definition

Sets the memory address for something

Demonstration
#include <stdio.h>
 
int main()
{
        int a=0;
        int *b;
        b=&a;
        *b=12;
        printf("a contains %u\n", a);
        printf("a's address is 0x%x\n", &a);
        printf("b contains %u\n", *b);
        printf("b points to 0x%x\n", b);
        printf("b's address is 0x%x\n", &b);
        return(0);
}

b is a pointer to a

Arrays

Definition

Holds many different elements of the same data type at one address

Demonstration
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
        char *word, len=0, x, pos=0;
        word=(char *)malloc(sizeof(char)*24);
        fprintf(stdout, "Please enter a word: ");
        fscanf(stdin, "%s", word);
        printf("Debug A\n");
        x=*(word+pos);
        printf("Debug A1\n");
        while((x!='\0')&&(x!='\n'))
        {
                printf("in the while, x is %hhd\n",x);
                len++;
                pos++;
                x=*(word+pos);
        }
        printf("Debug B\n");
        for(pos=0; pos<len;  pos++)
        {
                fprintf(stdout, "%c", *(word+pos)-32);

File Access

read, write append

Definition

Creating a file and reading it into a program or writing the output of a program to a file

Demonstration
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
        FILE *in, *out;
        char value=0;
        in=fopen("file.txt", "r");
        out=fopen("out.txt", "w");
        if(in==NULL)
        {
                printf("ERROR!\n");
                exit(1);
        n, *out;
        char value=0;
        in=fopen("file.txt", "r");
        out=fopen("out.txt", "w");
        if(in==NULL)
        if(in==NULL)
        if(in==NULL)
}
        fscanf(in, "%hhd", &value);
        while(value !=-1)
         {
                value *=2;
                fprintf(out,"%hhd\n", value);
                fscanf(in, "%hhd", &value);
        }
        fclose(in);
        fclose(out);
        return(0);
}

Repetiion/iteration structures

for, while, do while

Definition

These are loops that govern how many times a program will execute a certain task

Demonstration
/*
 * Sample code block
 */
#include <stdio.h>
 
int main()
{
    int v;
    while v!=0
    {
       printf("Rise against the machines\n");
    }
    else
    {
       printf(The machines have won\n")
    }
    return(0);
}

Header Files

Libraries

Definition

These are the #include statements at the beginning of a program. They are needed so that certain commands can be understood by the compiler to run a program

Demonstration
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

There are others but these are just a few

cprog Objective

cprog Objective

comprehend the basics of memory management, data representation and storage

Definition

Can the student understand how to allocate memory and represent what they wish to represent with the proper file type? Does the student understand how to store values in C?

Method

Explain the code of project 0

Measurement

The code of project 0 is defining the size of the storage available for the different types of arguments in C. Each storage size dictates how much memory needs to be allocated for that type and whether or not datat will fit into that storage type.

Analysis

I understand the logic behind most codes but will need to continue to work on writing the actual code.

Experiments

Experiment 1

Question

Can a program check the upper and lower bounds

Resources

Class notes and book

Hypothesis

Yes. The program can check the upper

Experiment

Write a code

Data

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
        signed int input;
        char column=0;
        char row=0;
        printf("Enter a value (0-4): ");
        scanf("%d", &input);
        while((input<4) && (input>0))
        {
                printf("argv[%hhu]: %c\n", input, *(*(argv+row)+column));
                printf("You ran this program with %hhu arguments, they are:\n",argc);
                exit(1);
        }


        printf("You have input an invalid value\n");

        return(0);
}

Analysis

I know that the code should work but I am unable to get the right syntax to compile it.

Conclusions

I need to spend more time learning syntax.

Experiment 2

Question

What happens if you put a semicolon on the end of a loop statement

Resources

the book was consulted

Hypothesis

The program won't compile

Experiment

I will add a semicolon on the end of a loop statement in a program and see what happens

Data

The program didn't compile. The loop statement was treated like another regular statement in the program which threw the whole program off.

Analysis

The hypothesis was correct although I could have gone much further into figuring out why it would not compile. The hypothesis short cited and lacks depth.

Conclusions

Although the program behaved as expected it could have been explore further.

Experiment 3

Question

What types of things create a segmentation fault

Resources

class programs and book

Hypothesis

Faulty syntax will cause a seg fault

Experiment

Play with codes already written

Data

I found that mainly a logic error in the loops will give a seg fault

Analysis

Based on the data collected: The hypothesis was not entirely correct. The hypothesis was very vague as was the question posed. If The hypothesis could have been slightly more specific the experiment might have had a little more guidance.

Conclusions

The main cause of segmentation faults are logic errors but logic errors also lead to other types of problems within the program.