Corning Community College CSCS1320 C/C++ Programming Assignments, Documents, Information, and Projects ======Projects====== * [[/haas/spring2014/cprog/projects/intro|intro]] (due 20140124) * [[/haas/spring2014/cprog/projects/helloworld|"Hello, World!"]] (due 20140131) * [[/haas/spring2014/cprog/projects/datatypes|data types]] (due 20140207) * [[/haas/spring2014/cprog/projects/squares|Squares]] (due 20140214) * [[/haas/spring2014/cprog/projects/dayofweek|Day of Week]] (due 20140221) * [[/haas/spring2014/cprog/projects/nikhilam|Nikhilam]] (due 20140228) * [[/haas/spring2014/cprog/projects/multby11|Multiply by 11]] (due 20140307) * [[/haas/spring2014/cprog/projects/vertcross|Vertically and Crosswise]] (due 20140321) ======Week 10====== * Questions * structs * structs in action ======Week 9===== * Question and answer week. Some good code examples too. ======Week 8===== * As I teach the lab, I wasn't able to give out warning grades. I sent a list to Joe, who promptly did not get to submitting warning grades. However... I was rather unsettled by what I saw: * 16 total people in the class * 7 are doing fine (~43%) * most have only submitted 3 or 4 out of 6 projects * most have been very attentive on their Opus * most have attended most if not all classes * 2 would be doing fine (~12%) if they would keep their Opus up-to-date (at least one entry per week) * projects/attendance are actually on the upper end * don't forget about the Opus! * 7 are not doing fine (~43%) * none to 2 out of 6 projects submitted * attendance is all over the place (never through all) * opus is all over the place (1 entry total through just over 1 entry per week) * So, 2+7 = 9; 9/16 = 56%. * more than half the class is not passing (this is new to me) * I don't seem to be getting enough questions based on the lack of work I'm seeing * I know some people aren't spending enough time on class material (how are you going to learn it if you don't play with it) * 56% of the class would get an F in the class if grades were to be submitted now * We seem to have gotten about a week behind on project completion. Well, for those who have been being active and attentive in class. * I've made the next project due in 2 weeks instead of 1 to help you get caught up. * Remember: * I can answer questions from Joe's side of class * Joe can answer questions from my side of class * We have tutors, they can help * I can answers questions from my side of class * I can answer said questions outside of class * I can answer said questions inside of/during class * Asking questions is good ======Week 7====== * Be sure your Opus is up to date with your weekly progress and exploits! * loops * for * while * do while * functions * return type * parameters * function prototypes ======Week 6====== * arrays * pointer arithmetic * loops * for * while * do while * Type in these programs, compile/execute them, and pour through the code. Your task is to: * figure out what is going on with each and every step * ask questions on things you do not understand * Be sure to update your Opus! =====Single Dimensional Array of Characters===== Arrays are commonly used to simulate strings in C. /* * This code should produce a warning on compilation. Fix it. */ #include int main() { int i; char input[12]; fprintf(stdout, "Enter an 11-character max string: "); fgets(input, 11, stdin); fprintf(stdout, "There are %d characters in your string\n", strlen(input)+1); for(i=0; i<=strlen(input); i++) { if (input[i] == '\n') fprintf(stdout, "input[%d]: '\\n' (%3.3hhu, 0x%.2hhX)\n", i, *(input+i), *(input+i)); else if (*(input+i) == '\0') fprintf(stdout, "input[%d]: '\\0' (%3.3hhu, 0x%.2hhX)\n", i, *(input+i), *(input+i)); else fprintf(stdout, "input[%d]: '%c' (%3.3hhu, 0x%.2hhX)\n", i, *(input+i), *(input+i), *(input+i)); } return(0); } =====Single Dimensional Array and Memory===== To have a better understanding of arrays, we should note how they are represented in memory. Pay close attention to the output of this program: #include int main() { int i; unsigned short int data[8] = { 255, 256, 49152, 13, 65535, 2600 }; fprintf(stdout, "=======================================================\n"); fprintf(stdout, "Please enter a valid unsigned short int value: "); fscanf(stdin, "%hu", &data[6]); fprintf(stdout, "Please enter another valid unsigned short int value: "); fscanf(stdin, "%hu", (data+7)); fprintf(stdout, "The data array starts at address 0x%X\n\n", &data); for(i = 0; i < 8; i++) { fprintf(stdout, "*(data+%d) contains: %hu (0x%.4X)\n", i, *(data+i), *(data+i)); fprintf(stdout, " (data+%d) is at address: 0x%X\n", i, (data+i)); fprintf(stdout, " Lower-Order byte at 0x%X contains: 0x%.2hhX\n", ((char *)data+(i*2)+0), *((char *)data+(i*2)+0)); fprintf(stdout, " Upper-Order byte at 0x%X contains: 0x%.2hhX\n", ((char *)data+(i*2)+1), *((char *)data+(i*2)+1)); fprintf(stdout, "\n"); } fprintf(stdout, "=======================================================\n"); return(0); } =====Command-line Arguments and 2D Array Manipulation===== Here we play with a two-dimensional array created by the system, via the command-line arguments provided to main(): /* * Fun with arrays and loops using command-line arguments * * Try renaming the executable, and running it with different numbers/lengths of arguments */ #include #include int main(int argc, char **argv) { int i, j; fprintf(stdout, "You typed: "); for(i = 0; i < argc; i++) fprintf(stdout, "%s ", argv[i]); fprintf(stdout, "\n\n"); for(i = 0; i < argc; i++) fprintf(stdout, "*(argv+%d) / argv[%d]: %s\n", i, i, argv[i]); fprintf(stdout, "\n\n"); for(i = 0; i < argc; i++) { for(j = 0; j <= strlen(argv[i]); j++) { if ((*(*(argv+i)+j)) == '\0') fprintf(stdout, "*(*(argv+%d)+%d): '\\0' ", i, j); else fprintf(stdout, "*(*(argv+%d)+%d): '%.2c' ", i, j, (*(*(argv+i)+j))); fprintf(stdout, "(%.3d / 0x%2.2X)\n", (*(*(argv+i)+j)), (*(*(argv+i)+j))); } fprintf(stdout, "\n"); } fprintf(stdout, "\n"); return(0); } ======Week 5====== * selection statements * if/else if/else * switch/case * value of taking the modulus (remainder) of a number * with integers, math has no decimal points-- such values are dropped/truncated * 4 % 6 = 4 * 22 % 8 = 6 * 22 / 8 = 2 * 4 / 6 = 0 * pointers (briefly-- ask more and again) * * - dereferences (looks up what is at the memory address contained in the pointer) * & - address of (looks up the address of the variable in memory) * Pointer-related video: [[http://www.youtube.com/watch?v=5VnDaHBi8dM|Pointer Fun with Binky]] * on lab46, if you see a C function you don't know, try looking up its manual page: * for printf(): **man 3 printf** * for atoi(): **man 3 atoi** * for rand(): **man 3 rand** * this is good for finding out what addition header files need to be included * did some code walk-throughs/desk checking. * for the following programs, work out by hand the values for **i** and **m** when x is: * 1 * 2 * 3 * 4 ===Sample code 1=== #include #include int main() { int i, x, m = 0; srand(time(NULL)); x = rand()%4 +1; for(i=0;i ===Sample code 2=== #include #include int main(int argc, char **argv) { int m, i, x; if(argc <2) { fprintf(stderr, "Error!\n"); exit(1); } x= atoi(argv[1]); for(i=0;i ======Week 4====== * WEATHER happened. People still showed up, and we talked about the data type project for a bit, as well as the squares project, and while we did go over new stuff (if statements), I plan to review if() statements again next week. * Data Types, continued * Here's [[/haas/spring2014/cprog/common/moarlogic|another take on bases, conversions, representations, and applied logic]] * talked about casting some more * reviewed printf() format specifiers * on the lab46 command-line, you can type **man 3 printf** to view the on-line manual for the C printf() function (it has a biggish section on the format specifiers) * reviewed squares project * input with scanf() * 35^2 = 3*4 25 = 1225 * use simple math expressions to manipulate your input (115 OPERATION NUMBER = 11) * if()/selection statements -- let the computer make informed decisions, so long as that decision is true or false. * if() statements evaluate a condition. Conditions can be a number, or they can be the result of some relational expression. Operators are: * == (is equal to) * != (is not equal to) * < (is less than) * <= (is less than or equal to) * > (is greater than) * >= (is greater than or equal to) * a common mistake is to put a single equal sign (=) in a condition. * this doesn't **check** equality, it **sets** it, and setting is **always** true * using && and ||, we can have compound if() statements * if you use an if(), you can have: * at most one **if()** statement * 0 or more **else if()** statements * 0 or 1 **else** statements * Looked briefly at ASCII characters and their numeric representation ('A' is 65, space is 32, 'a' is 97, '0' is 48) * showed some more mental math int number = 0; printf("Enter a number (0-10): "); scanf("%d", &number); if (number < 0) { printf("Error, value is less than 0!\n"); } else if (number == 1) { printf("ONE!\n"); } else if ((number <= 10) && ((number % 2) == 0)) // detect even number (compound if) { printf("Even number of %d\n", number); } else if ((number == 3) || (number == 7)) // compound if using OR connective { printf("you entered a %d\n", number); } else if ((number > 4) && (number < 10)) // compound if using AND connective { printf("remaining odd number of %d\n", number); // how will this only hit 5 or 9? } else { printf("value is greater than 10!\n"); } ======Week 3====== * Signed values * how to represent * how to manually encode * one's complement (why is this problematic?) * two's complement * invert, then add 1 * what this does to the range * impact on resulting quantity * discuss next week's project: squares * input with scanf() * need to pass variables **by address** * formatted text string same as with **printf()** ======Week 2====== * We covered some C programming details relating to the data types project: * printf/fprintf * STDIN/STDOUT/STDERR * format string specifiers * %d * %u * %ld * %lu * %hd * %hu * %hhd * %hhu * %c * %s * the space allocation/zero padding optional value that can be specified within the format string specifier * sizeof() function * relatedly: * low and high values within a fixed size range * roll-over * logical operators * type casting * We also looked at cloning BitBucket repositories onto Lab46 ======Week 1====== * Welcome! Be sure to: * Read over the syllabus * Subscribe to the class mailing list * Using the [[/haas/spring2014/common/class_chat|tutorial]], set up a screen session and get on #csci on irc * Get familiar with logging into the pod systems, and once there: * opening up a terminal * logging that terminal onto Lab46 for class work and attendance * Get familiar with how to log onto Lab46, and once on: * change to your **src/** subdirectory * create/edit .c files (such as **hello.c**), and how to save/exit * compile the C program (.c file(s)) into an executable with **gcc** * execute the compiled C program (the executable) by specifying a path: **./program_name** * Familiarize yourself with your Opus, and once there: * customize it (title/subtitle) * add an introduction * create your first week content * Contemplate our first set of programs we're going to write: * [[/haas/spring2014/cprog/projects/helloworld|"Hello, World!"]] program (due by 20140131) * [[/haas/spring2014/cprog/projects/datatypes|data type range]] program (due by 20140207) * Be aware of the Mental Math programs coming down the pipeline: * [[/haas/spring2014/cprog/projects/squares|Squares]] program (due by 20140214) * [[/haas/spring2014/cprog/projects/dayofweek|Day of Week]] program (due by 20140221) * [[/haas/spring2014/cprog/projects/multby11|Multiply by 11]] program (due by 20140228)