Welcome, I'm Professor Ira Pohl of the University of California, Santa Cruz. I will be your guide to C for everyone, structured data, and structured programming. This builds on the earlier course C4 everyone Fundamentals, but, what do you need to know coming into this class? There's several ways to have gotten here. First off, you might be a little recipe and you previously had studied like for example from my textbook, A Book on C. Roughly speaking, the first six chapters are what had been already covered. So coming here, you would have that from a background, was I said more precisely, if you came here from the Coursera course C4 Everyone Fundamentals, you would be exactly where you needed to be. But someone else could get here, and they may have picked up programming and it would have been perfectly okay if they had a basic understanding of Java or Python as largely a lot of the same elements exist in those languages as exist in the Fundamentals of C. Now of course you'll have to adjust if you know nothing about C, but you could quickly catch up if you already had done a fair amount of basic programming by just quickly reviewing some of the elements from about dimension. What are they? You need to know how to use a compiler and editor. Ones we've been using have been good news compiler, C compiler or VI or Vim as an editor, but there are many other choices. Now when you get to starting in a language, you need to know the language's lexical elements, its basic components and basic components in C include identifiers, constants, operators, punctuation, keywords, comments. So those are the little pieces that you stick together to get a program. Programs have to operate on something and they operate on datatypes and most programming languages have what are called native types built-in types, for example key ones in the C language are the integer types and the floating point or real number types float and double, and our character type char. Those were among the central ones you need to know about and were already discussed. Fourth thing you need to know is flow of control. For a program to be interesting, it has to do things like have a compound statement where a whole bunch of actions are clustered as if they are a single action. You could consider the idea there is like writing a paragraph. There are while and for loops. I must have just watched a golf tournament because, we mean for, as in a for statement, and then there are conditional statements such as the if if else or switch where decisions get made. Each of these things will influence where in the program you are where to go next. Finally, the principal organizing concept in C that we've learned are functions. The one function we always use is main and main is where program starts, but we also have learned now to write what might be called subroutines, subfunctions, and they are an organizing principle for writing large code. You don't want just one function where everything is thrown in, that tends to be too hard to organize, too hard to debug. So a function should be no longer than possibly the amount of code you can see on a page in front of you. Functions have arguments and see the way arguments are passed into functions is via call by value. So that's critical to understand it. This is where you start to get a little bit more advanced thinking. A function has to have a definition and a declaration way to declare a function is through what's also called prototyping, then functions as with variables make use of things like storage class. So storage class static has particular effect on data inside a function and you have to understand how that works. The final topic we covered in the fundamentals course were arrays, pointers, and strengths. So the array is a basic way to deal with a large amount of data, that's what computers are good for. Lots of data having to process. There's very little data you might be able to just work out your calculation by hand. But if there are millions of items of data, if you're a big organization like Social Security and you have 100 million records and people representing, then you have to do enormous amounts of calculation and you canj do it readily by organizing your data into what are called arrays. Arrays get address through indexes, and the indexes have an important relationship to the datatype pointers. So that's to be understood, indexing and that pointer relationship. Finally, there is no native string type in the C language. There are in some of these other languages that I already mentioned, but instead, a string is treated as an array of characters. So you need to get used to that and special libraries that let you use that conveniently, that idea gets used conveniently. Finally, pointers allow you to simulate what's called call by reference, and if you've already learned the previous material, you know that's very important to the IO function scanf. Among the things that you should already know how to do is something like a canonical sort, like a merge sort, or like a bubble sort even or a quick sort. These are sorting routines that show that you have a command of using arrays and fusing iteration. So let's get ready for this new course. Review what you need to and now we're going to go on to more advanced ideas, especially the idea of how to structured data more elaborately. In fact, we'll be able to create our own new data types and how to write even larger programs by properly structuring the programs.