From d9049d217080c0fabf0f44b3e999df3b87a12bf5 Mon Sep 17 00:00:00 2001 From: ZZS <17778161161@163.com> Date: Thu, 25 Sep 2025 10:43:06 +0800 Subject: [PATCH] Lab1&Proj1 --- Lab/lab00/first_set.txt | 24 +++++++++++ Lab/lab01/eccentri2c.out | Bin 0 -> 15883 bytes Lab/lab01/eccentric.c | 10 ++--- Lab/lab01/eccentric.out | Bin 0 -> 15883 bytes Lab/lab01/gdb.txt | 39 +++++++++++++---- Lab/lab01/hello.c | 3 +- Lab/lab01/input.txt | 1 + Lab/lab01/interactive_hello.c | 2 +- Lab/lab01/ll_cycle.c | 21 ++++++++- Project/proj1/hidden_pc.ppm | 0 Project/proj1/imageloader.c | 68 ++++++++++++++++++++++++++++-- Project/proj1/imageloadertester.c | 2 +- Project/proj1/output.ppm | 0 Project/proj1/output.txt | 0 Project/proj1/steganography.c | 67 +++++++++++++++++++++++++++-- 15 files changed, 211 insertions(+), 26 deletions(-) create mode 100644 Lab/lab01/eccentri2c.out create mode 100644 Lab/lab01/eccentric.out create mode 100644 Lab/lab01/input.txt create mode 100644 Project/proj1/hidden_pc.ppm create mode 100644 Project/proj1/output.ppm create mode 100644 Project/proj1/output.txt diff --git a/Lab/lab00/first_set.txt b/Lab/lab00/first_set.txt index 6c6d52e..4de5b05 100644 --- a/Lab/lab00/first_set.txt +++ b/Lab/lab00/first_set.txt @@ -1,4 +1,28 @@ +first_set: Which command walks a file hierarchy in search of a keyword? +find -r [file] +grep -r [keyword] [directory] + Which command displays information about processes running on your machine? +jobs只显示当前shell的作业 +ps\top\htop显示进程 + Which command terminates a process? +kill [pid]/pkill [processname] + Which command can help you find the difference between two files? +diff [file1] [file2] + +second set: +Move files from one directory to the next +mv [addr1] [addr1] +Change a file’s permissions +chmod +x [file] +Show the directory you’re currently in +pwd +Check if a host is online +ping? + +third set: +Show file permissions for all files in a directory +ls -la \ No newline at end of file diff --git a/Lab/lab01/eccentri2c.out b/Lab/lab01/eccentri2c.out new file mode 100644 index 0000000000000000000000000000000000000000..44d8b155a711edd17adf20b9b8ee9423bb8ce7ab GIT binary patch literal 15883 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 literal 0 HcmV?d00001 diff --git a/Lab/lab01/eccentric.c b/Lab/lab01/eccentric.c index 0564266..3d2996e 100644 --- a/Lab/lab01/eccentric.c +++ b/Lab/lab01/eccentric.c @@ -1,10 +1,10 @@ #include /* Only change any of these 4 values */ -#define V0 0 -#define V1 -1 -#define V2 0 -#define V3 0 +#define V0 3 +#define V1 3 +#define V2 1 +#define V3 3 int main(void) { int a; @@ -55,4 +55,4 @@ int main(void) { } return 0; -} \ No newline at end of file +} diff --git a/Lab/lab01/eccentric.out b/Lab/lab01/eccentric.out new file mode 100644 index 0000000000000000000000000000000000000000..b44a3121adfa44708a0bbe1c175c59adc7f6fac0 GIT binary patch literal 15883 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­g?Wg=?acS~f3tIq7N3QFfi0Is$I^nvEGaVYPe z1yh!iVCBCtS>}D&w1O!=n>sV`&AE1YE6hZgAvz_p>?CS7#EVxLJK{TtXpl5cORq`# zrZVY8r!4PIC*nJCous#wNk8S3$mjV!)cD;&t*gr)E0ccCDa*Ud ziTF;HNw1ui^vz|`&pTy#|H6s*&Xh^7o|g2kGU;cWvb=*%#P?>I^m)^g9xju9!70nT z+llyoVo8_J^K{-zJXQ7tx9aFnlKNuU0Y}}MJ3U5UI<^%%xJv!rn=+5V$x8=+LNU5ZUW4$;O}t`8tI>fSMZN|`uZ)}?%jJO zo#o0;6Zx`s37X{z6+bTfJ1%*l%&u!%6Xq+U5@*TD~!9E7k-nEniu;`MES5mSpj~|biL;V@fYKM`FZiYNptym zvGPhZ(m(fK!9TwP+r3>^(pk=nBUh(c?osjMvhQW0tGUM*Gi}FS_Y}LkbO=O@yJyOG z;d1{VNci2Cq=V;%^V>=N0czvB{YHGi?%PviRcot8~%8CeRj+vY_4WG(G!Z*ZD z`1wf`)w6^^{v606*)EX31R~x&73aSNG5{K6lFv&h`ppOj%-*0zBx~IN9SGfJtX}V- zSZPE4n;Om7fX?)3J!p@OUpi@$z1z?W$>LlEciQ#29mpZj2tR9@I2@pQ2uqjAL9ldg z1#;f(MKV4Egn9`YI&=`GaW{1)nysK2LoV29@(92fOclGS_`brA42U;7<<%!ZZmkl; zXBUtQCLcncC6*9oY4~kIY|@W%n$r0BJ`f5;sk1oBz{H!Kl70#_yFjBnf|DXZ3P6aR z@Xu`Q2is-+5s(8mn#DjoKrBA@0Xb)*c>u^^8-A|HjV2F)oVUhZ z9y<}c8A|6?TQAb=5g^v=Cge#V9vE%u{1xhDj(Z+8oQa90HC>&R(Zu1Iq~FWG=tW|^ z+ckXl?KFZ(Bb{LU8((St;Ye&fJ~5U;Sk>ZM>hb8~S|o-uFZ?$WjN+(Qn0TU*J|YLB zT9`ja*&y*~g>yMN9VOH7Uus6AU)T6oJe(R!5`)sOWKx9s)q*uUt#=rtl-RnGV*- zXM}WY+|adleL!pP3~X$9Q0oY^J=mN~39!ew=kOk0xOl@K0={PtxGcT1(f1 z9ZqU_qzV1dS1f&6=jBgWiI}mw4F|9Kao)<%Nkb#bT_8n9BU{ALBQ1zwq@BFghQmY1oS?<#YM53T$ZM zswso|^kAaYP`e1BMxvB8S1cj#Fj5J5FTp4JNDR)1r)*vj9!5OVY}Ftztd)!nAC+LQ zu5AgXghx}D0OUc;>E2jBj;L~lFK?0+ekE}fu+H>xXY+Ve-n5<5gR^Zh1%;Yz!D>IJ zCw#3qVPR5{E5|Hkx<)uJRO&oCWA2#JqpSYLC6G?<>ki{NrMy4WK?n-Dsl2RC5NcD+ zH~BnfML8e)(pVN68>Jer?Z?=x#?U}9E6B;^cCXnNH?FV!IHa7P%5j{+IY_p(7a}+j ze=(8etE~>gGZE6+7J|`uFsvuFo@lT)#iNPFjcyZUl{`)54?&K2E# literal 0 HcmV?d00001 diff --git a/Lab/lab01/gdb.txt b/Lab/lab01/gdb.txt index ce9d903..ccd68f3 100644 --- a/Lab/lab01/gdb.txt +++ b/Lab/lab01/gdb.txt @@ -1,9 +1,30 @@ -1. -2. -3. -4. -5. -6. -7. -8. -9. \ No newline at end of file +1.While you’re in a gdb session, how do you set the arguments that will be passed to the program when it’s run? +before run the program, input "set args arg1 arg2 ..." + +2.How do you create a breakpoint? +break [funName/line_number] + +3.How do you execute the next line of C code in the program after stopping at a breakpoint? +next + +4.If the next line of code is a function call, you’ll execute the whole function +call at once if you use your answer to # (If not, consider a different command for #3!) +How do you tell GDB that you want to debug the code inside the function +(i.e. step into the function) instead? (If you changed your answer to #3, +then that answer is most likely now applicable here.) +step + +5.How do you continue the program after stopping at a breakpoint? +continue/next + +6.How can you print the value of a variable (or even an expression like 1+2) in gdb? +display 会在每次step显示变量,而print只是打印一次 + +7.How do you configure gdb so it displays the value of a variable after every step? +display + +8.How do you show a list of all variables and their values in the current function? +info locals + +9.How do you quit out of gdb? +q diff --git a/Lab/lab01/hello.c b/Lab/lab01/hello.c index 0cf4fb5..cf48d36 100644 --- a/Lab/lab01/hello.c +++ b/Lab/lab01/hello.c @@ -11,4 +11,5 @@ int main(int argc, char *argv[]) { printf("Thanks for waddling through this program. Have a nice day."); return 0; -} \ No newline at end of file +} + diff --git a/Lab/lab01/input.txt b/Lab/lab01/input.txt new file mode 100644 index 0000000..7747fa0 --- /dev/null +++ b/Lab/lab01/input.txt @@ -0,0 +1 @@ +Gingko \ No newline at end of file diff --git a/Lab/lab01/interactive_hello.c b/Lab/lab01/interactive_hello.c index ab01357..95a103a 100644 --- a/Lab/lab01/interactive_hello.c +++ b/Lab/lab01/interactive_hello.c @@ -10,4 +10,4 @@ int main(int argc, char *argv[]) { printf("Hey, %sI just really wanted to say hello to you.\nI hope you have a wonderful day.", a_word); return 0; -} \ No newline at end of file +} diff --git a/Lab/lab01/ll_cycle.c b/Lab/lab01/ll_cycle.c index 8e27c0d..30fbc55 100644 --- a/Lab/lab01/ll_cycle.c +++ b/Lab/lab01/ll_cycle.c @@ -3,5 +3,22 @@ int ll_has_cycle(node *head) { /* your code here */ - return 0; -} \ No newline at end of file + node* tortoise=head,*hare=head; + int is_cyclic=0; + while(hare!=NULL) + { + hare=hare->next; + if(NULL==hare) + break; + + hare=hare->next; + tortoise=tortoise->next; + + if(hare==tortoise) + { + is_cyclic=1; + break; + } + } + return is_cyclic; +} diff --git a/Project/proj1/hidden_pc.ppm b/Project/proj1/hidden_pc.ppm new file mode 100644 index 0000000..e69de29 diff --git a/Project/proj1/imageloader.c b/Project/proj1/imageloader.c index 9b508c7..837c5e3 100644 --- a/Project/proj1/imageloader.c +++ b/Project/proj1/imageloader.c @@ -19,23 +19,83 @@ #include #include #include "imageloader.h" +#define DEBUG //Opens a .ppm P3 image file, and constructs an Image object. //You may find the function fscanf useful. //Make sure that you close the file with fclose before returning. + +char buf[100]; Image *readData(char *filename) { - //YOUR CODE HERE + Image* img=(Image*)malloc(sizeof(Image)); + int scale; + + FILE *fp = fopen(filename,"r"); + if(!fp){ + perror("fopen failed"); + free(img); + return NULL; + } + + fscanf(fp,"%s",buf); + fscanf(fp,"%" SCNu32 " %" SCNu32 ,&img->cols,&img->rows); + fscanf(fp,"%" SCNu8 ,&scale); + + img->image=(Color**)malloc(sizeof(Color*)*(img->rows)); + +#ifdef DEBUG + printf("width=%d,height=%d,scale=%d\n",img->cols,img->rows,scale); +#endif + + // start reading pixels + for(int i=0;irows;i++) + { + img->image[i]=(Color*)malloc(sizeof(Color)*(img->cols)); + for(int j=0;jcols;j++) + { + fscanf(fp,"%" SCNu8 " %" SCNu8 " %" SCNu8 , + &img->image[i][j].R, \ + &img->image[i][j].G, \ + &img->image[i][j].B); + } + } + + fclose(fp); + return img; } //Given an image, prints to stdout (e.g. with printf) a .ppm P3 file with the image's data. void writeData(Image *image) { - //YOUR CODE HERE + printf("P3\n"); + printf("%"PRIu32" %"PRIu32"\n",image->cols,image->rows); + printf("255\n"); + for(int i=0;irows;i++) + { + for(int j=0;jcols;j++) + { + printf("%3" PRIu8" %3" PRIu8 " %3" PRIu8 , + image->image[i][j].R, \ + image->image[i][j].G, \ + image->image[i][j].B); + fflush(stdout); + if(j!=image->cols-1) + printf(" "); + } + printf("\n"); + } + + return; } //Frees an image void freeImage(Image *image) { - //YOUR CODE HERE -} \ No newline at end of file + for(int i=0;irows;i++) + free(image->image[i]); + + free(image->image); + free(image); + return ; +} diff --git a/Project/proj1/imageloadertester.c b/Project/proj1/imageloadertester.c index 755eee7..a8dd1a7 100644 --- a/Project/proj1/imageloadertester.c +++ b/Project/proj1/imageloadertester.c @@ -35,4 +35,4 @@ int main(int argc, char **argv) image = readData(filename); writeData(image); freeImage(image); -} \ No newline at end of file +} diff --git a/Project/proj1/output.ppm b/Project/proj1/output.ppm new file mode 100644 index 0000000..e69de29 diff --git a/Project/proj1/output.txt b/Project/proj1/output.txt new file mode 100644 index 0000000..e69de29 diff --git a/Project/proj1/steganography.c b/Project/proj1/steganography.c index 07b7d57..878a6e3 100644 --- a/Project/proj1/steganography.c +++ b/Project/proj1/steganography.c @@ -21,13 +21,60 @@ //Determines what color the cell at the given row/col should be. This should not affect Image, and should allocate space for a new Color. Color *evaluateOnePixel(Image *image, int row, int col) { - //YOUR CODE HERE + Color *newColor = (Color *)malloc(sizeof(Color)); + if (newColor == NULL) { + return NULL; + } + uint8_t bp = (image->image[row][col].B & 1) ? 0xFF : 0x00; + newColor->R=bp; + newColor->G=bp; + newColor->B=bp; + return newColor; } //Given an image, creates a new image extracting the LSB of the B channel. Image *steganography(Image *image) { - //YOUR CODE HERE + Image* img=malloc(sizeof(Image)); + if(NULL==img){ + return NULL; + } + + int cols=image->cols,rows=image->rows; + img->image=malloc(rows*sizeof(void*)); + if(NULL==img->image){ + free(img); + return NULL; + } + img->cols=cols,img->rows=rows; + for(int i=0;iimage[i]=malloc(sizeof(Color)*cols); + if(NULL==img->image[i]){ + for (int k = 0; k <= i; k++) { + free(img->image[k]); + } + free(img->image); + free(img); + return NULL; + } + for(int j=0;jimage[k]); + free(img->image); + free(img); + return NULL; + } + img->image[i][j].R=nC->R; + img->image[i][j].G=nC->G; + img->image[i][j].B=nC->B; + free(nC); + } + } + return img; } /* @@ -45,5 +92,19 @@ Make sure to free all memory before returning! */ int main(int argc, char **argv) { - //YOUR CODE HERE + if(argc!=2){ + printf("usage: %s filename\n",argv[0]); + printf("filename is an ASCII PPM file (type P3) with maximum value 255.\n"); + return -1; + } + + char*filename=argv[1]; + + Image* ppm=readData(filename); + Image* hidden_ppm=steganography(ppm); + writeData(hidden_ppm); + freeImage(hidden_ppm); + freeImage(ppm); + + return 0; }