Προγραµµατισµός Ι (ΗΥ120) ιάλεξη 24: Παραδείγµατα
Βιβλιοθήκες: Αρχικός κώδικας 2 double sum(double a, double b) { return(a+b); double my_avg(double a, double b) { return(sum(a, b)/2.0); int main (int argc, char *argv[]) { double in1 = 3.0, in2 = 4.0; printf( Avg = %g\n, my_avg(in1, in2)); return(0);
Βιβλιοθήκες: Header File 3 my_avg.h #ifndef _MY_AVG_INCLUDE_ #define _MY_AVG_INCLUDE_ /* returns the average of a and b */ double my_avg(double a, double b); #endif
Βιβλιοθήκες: Υλοποίηση 4 my_avg.c static double sum(double a, double b) { return(a+b); double my_avg(double a, double b) { return(sum(a, b)/2.0);
Βιβλιοθήκες: Πρόγραµµα 5 my_prog.c #include my_avg.h int main (int argc, char *argv[]) { double in1 = 3.0, in2 = 4.0; printf( Avg = %g\n, my_avg(in1, in2)); return(0);
ηµιουργία Χρήση Βιβλιοθήκης 6 ηµιουργία object file gcc -Wall -c my_avg.c -o my_avg.o ηµιουργία βιβλιοθήκης ar rcs libmy_avg.a my_avg.o ηµιουργία προγράµµατος gcc -Wall my_prog.c -o my_prog -lmy_avg -L.
Αρχεία Πρόγραµµα που: Παίρνει σαν όρισµα από γραµµή εντολών όνοµα αρχείου Κάνει σχετικούς ελέγχους και τυπώνει µηνύµατα λάθους Το αρχείο περιέχει 2 σχήµατα 10 γραµµές x 11 στήλες το καθένα (η 11η στήλη περιέχει \n) Αντιγράφει το 1ο σχήµα ακριβώς κάτω από το 2ο. ουλεύει χαρακτήρα προς χαρακτήρα. 7
Παράδειγµα εισόδου 8.-. /'v'\ (/ \) ='="="===< _ o \ =\ \ (\ / \ / ~~~~~~
#include<stdio.h> #include<stdlib.h> #define SHAPE_LENGTH 10 #define SHAPE_HEIGHT 10 9 #define NUM_SHAPES 2 int main (int argc, char *argv[]) { FILE *infile; int i,j; int readpos, writepos; char c; if (argc < 2) { printf("too few arguments."); exit(1); if (argc > 2) { printf("too many arguments."); exit(1);
infile = fopen(argv[1], "r+"); if (infile == NULL) { printf("could not open file %s", argv[1]); exit(2); readpos = 0; writepos = (SHAPE_LENGTH+1)*SHAPE_HEIGHT*NUM_SHAPES; // +1 for the newlines 10 for ( i=0; i<shape_length; i++) { for (j=0; j<=shape_height; j++) { // <= to account for the new line fseek(infile, readpos++, SEEK_SET); c = fgetc(infile); fseek(infile, writepos++, SEEK_SET); fputc(c, infile); fclose(infile); return 0;
υαδικοί τελεστές #include <stdio.h> int main (int argc, char *argv[]) { 11 void rotateleft (int *val) { const int mask = 0x80000000; int leftmost; leftmost = *val & mask; *val = *val << 1; if (leftmost) *val = *val 0x00000001; else *val = *val & 0xFFFFFFFE; int a = 0x80808080; printf("a initially 0x%8x\n", a); rotateleft(&a); printf("a after rotateleft 0x%8x\n", a); rotateleft(&a); printf("a after another rotateleft 0x%8x\n", a); return(0);
Αναδροµή: Εκτύπωση #include <stdio.h> void printd (int n) { if (n < 0) { putchar('-'); n = -n; if (n / 10) printd(n/10); putchar (n % 10 + '0'); int main (int argc, char *argv[]) { int a = 4382354; printd(a); return(0); 12
Αναδροµή: Μεταθέσεις void PermuteWithFixedPrefix(char *str, int prefix) { int i; 13 if (prefix == strlen(str)) printf("%s\n", str); else for (i = prefix; i < strlen(str); i++) { ExchangeChars(str, prefix, i); PermuteWithFixedPrefix(str, prefix+1); ExchangeChars(str, prefix, i);
Αναδροµή: Μεταθέσεις #include <stdio.h> void ExchangeChars(char *str, int pos1, int pos2) { char tmp; 14 tmp = str[pos1]; str[pos1] = str[pos2]; str[pos2] = tmp; int main (int argc, char *argv[]) { char phrase[] = "ABCDEFG"; PermuteWithFixedPrefix(phrase, 0); return(0);