Dear Fernando:

Since you're teaching the structure, start with the typical "hello world" examples.

Teach about arrays, pointers, and algorithms. Data structures like linked lists.

You could compare various sorting algorithms in C (like bubblesort, shellsort, quicksort) in some demonstrations. Ask your students to write "simple" programs.

Fibonnaci series is a good example of algorithms. Seeing the program run and produce the numbers is a good way to get them to understand how an algorithm works.

Using codeblocks would be good, because it has syntax highlighting, and code folding. For long algorithms students can compact their loops / if's, and understand more what programming is about.

I don't use the debugger very often, but if you can get to use it, this would also teach the students how stepping by in a program can help understand an algorithm, too.

You could put them to solve problems, like... getting out of a simple maze, or something.

If your students want to draw images, ask them to draw LOGIC DIAGRAMS :lol:

and then turn them into a C program.

Also, make use of students' natural curiousity. Invite them to "hack" away their grades, give them extra points if they can make a program to solve certain problem... first N students who get to solve it, get the point.

Make it fun... ask them to form teams, but then put them to compete against each other. A good idea is to put them to work in combinatorial problems. (Like the star of david. Put numbers from 1 to 12 in the star's edges and crossings so the sums are the same. The student whose program / algorithm solves it in the least time or with the least iterations, wins).

Do the competitions in an inverse pyramid: The first to solve the problem before his competitor, gets away from the competition, and the loser goes to the next round. The last "round" is between the worst students. The worst student gets double homework :lol:, or the students who win the first time get an extra credit. (Or how about the students who win the first time, get 2 credits. The ones who win the second time, only get a credit, and so on).

For normal classes, kick the geniuses out. Only give them homeworks and let them use up their time as they wish (outside the classroom, of course). They probably don't need the courses anyway, unless it's processor-specific.

Remember that programming is nothing but solving puzzles, or hacking your way like "neo". If there's no challenge, it'll be boring.

Hope that helps.