#define _CRT_SECURE_NO_WARNINGS 1 #include #include #include #include #include #include #include //int main() //{ // printf("hello Word "); // return 0; //} // //int main() //{ // int num1=0; // int num2=0; // int sum=0; // scanf("%d%d", &num1, &num2); // sum=num1 + num2; // printf("sum=%d ", sum); // return 0; //} //--------------枚舉常量----------------- // enum Sex//enum為枚舉關鍵字 //{ // MALE, //成為枚舉常量 // FEMALE, // SECRET //}; //int main() //{ // //enum Sex a=SECRET; // printf("%d ", MALE);//值為0 // printf("%d ", FEMALE);//值為1 // printf("%d ", SECRET);//值為2 // return 0; //} //--------字符串--------- //int main() //{ // char arr1[]="abc"; // char arr2[]={ 'a', 'b', 'c' }; // printf("%s ", arr1); // printf("%s ", arr2); // //strlen全稱是string length,計算字符串長度的,遇到\0停止計算,,且\0不算作長度 // printf("%d ", strlen(arr1));//結果是3 // printf("%d ", srelen(arr2));//結果任意值 // return 0; //} //-------轉義字符----------- //int main() //{ // //printf("c: est\32 est.c"); // //printf("\32"); // //printf("c:\ est\\32\ est.c"); // //printf("%d ", strlen("c: est\32 est.c"));//打印結果為13,即長度為13 // printf("%d ", strlen("\x61"));//打印結果為1即長度為1 // return 0; //} //------------------------------- //int main() //{ // int input=0; // printf("加入比特 "); // printf("你要好好學習嗎(1/0) "); // scanf("%d", &input); // if (input==1) // printf("一份好工作 "); // else // printf("賣紅薯 "); // // return 0; //} //----------------------------- //int main() //{ // int line=0; // printf("加入比特 "); // while (line < 20000) // { // printf("敲一行代碼:%d ",line); // line++; // } // if (line >=20000) // printf("ding~找到一個好工作d=====( ̄▽ ̄*)b "); // // return 0; //} //------------------------ //int Add(int x, int y) //{ // int z=x + y; // return z; //} //int main() //{ // int a=100; // int b=200; // int sum=0; // sum=Add(a, b); // printf("sum=%d ", sum); // // return 0; //} //*************交換兩個數(shù)****************** //int main() //{ // //交換兩個整形變量 // int a=3; // int b=5; // int c=0;//空瓶 // printf("交換前:a=%d b=%d ", a, b); // c=a; // a=b; // b=c; // printf("交換后:a=%d b=%d ", a, b); // return 0; //} //-------不使用第三個變量----------- //int main() //{ // int a=3; // int b=5; // printf("交換前:a=%d b=%d ", a, b); // a=a + b;//a放的是和,b還是原來的b // b=a - b;//b得到原來的a // a=a - b;//a得到原來的b // printf("交換后:a=%d b=%d ", a, b); // return 0; //} //---------優(yōu)化-------- //int main() //{ // int a=3;//二進制:011 // int b=5;//二進制:101 // printf("交換前:a=%d b=%d ", a, b);//^是按位異或:相同為0不同為1 // // // a=a^b;//此處a=110 b=101 // b=a^b;//此處a=110 b=011 // a=a^b;//此處a=101 b=011 // printf("交換后:a=%d b=%d ", a, b); // return 0; //} //**************找出單身狗***************** //int main() //{ // int arr[]={ 1, 2, 3, 4, 5, 1, 2, 3, 7, 5, 4 ,7,8}; // int i=0; // int sz=sizeof(arr) / sizeof(arr[0]);//計算數(shù)組元素個數(shù) // // for (i=0; i < sz; i++)//從下標0開始取出一個數(shù) // { // int j=0; // int count=0;//定義計數(shù)器 // for (j=0; j < sz; j++)//數(shù)組的每個數(shù)與取出的一個數(shù)對比 // { // if (arr[i]==arr[j]) // { // count++; // } // } // if (count==1)//計數(shù)器為2說明有兩個相同數(shù)字,,為1則就為單身狗 // { // printf("單身狗:%d ", arr[i]); // break; // } // } // // return 0; //} //---------優(yōu)化------------ //3^3=0;5^5=0;所以可得a^a=0;0^5=5;0^3=3;所以可得0^a=a; 即相同數(shù)字異或為0,,任何數(shù)和0異或等于任何數(shù)本身 //符合交換律:3^5^3=3^3^5=5 //int main() //{ // int arr[]={ 1, 2, 3, 4, 5, 1, 2, 3, 7, 5, 4 ,7,8}; // int i=0; // int ret=0; // int sz=sizeof(arr) / sizeof(arr[0]);//計算數(shù)組元素個數(shù) // // for (i=0; i < sz; i++)//從下標0開始取出元素 // { // ret=ret^arr[i];//逐個異或 // } // printf("單身狗:%d ", ret); // return 0; //} //-------------------------------------------- //int main() //{ // int a=0;//申請了4個字節(jié)的空間 // //printf("%p ", &a); // int* p=&a;//p是一個變量-指針變量,;int*表示是整形的指針類型 // *p=20;//* - 解引用操作符/間接訪問操作符 // printf("a=%d ", a); // // return 0; //} //int main() //{ // //printf("%d ", sizeof(char*));//地址大小都是4個字節(jié) // //printf("%d ", sizeof(short*));//4個字節(jié) // //printf("%d ", sizeof(int*));//4個字節(jié) // //printf("%d ", sizeof(double*));//4個字節(jié) // double d=3.14; // double* pd=&d; // printf("%d ", sizeof(pd));//地址的大小和操作系統(tǒng)有關,32位的為4個字節(jié),,64位的為8個字節(jié) // //*pd=5.5; // //printf("%lf ", d); // //printf("%lf ", *pd); // return 0; //} ////**********************結構體************************* //struct Book//結構體的類型 //{ // char name[20];//書名 // short price;//價格 //};//這里的分號不可缺少?。。,。,。?! // //int main() //{ // //利用結構體類型--創(chuàng)建一個該類型的結構體變量 // struct Book b1={ "C語言程序設計", 55 }; // printf("書名:%s ", b1.name);//此處的.為屬性操作符,,用于訪問結構體成員 // printf("價格:%d元 ", b1.price); // b1.price=15; // printf("修改后的價格:%d元 ", b1.price); // // ------------------------------------------ // struct Book b1={ "C語言程序設計", 55 }; // struct Book* pb=&b1;//*表明是指針變量 // //利用指針打印出書名和價格 //.操作符 結構體變量.成員(需要結合解引用,,麻煩) // printf("%s ", (*pb).name);//解引用 ↑ // printf("%d ", (*pb).price);// ↓ // //也可以不利用解引用打印直接利用pb打印 //->操作符 結構體指針->成員 // printf("%s ", pb->name); // printf("%d ", pb->price); // // return 0; //} //******************選擇結構和循環(huán)結構*************** //int main() //{ // int age=127; // /*if (age < 18) // printf("未成年 "); // else // printf("已成年 ");*/ // // // /*if (age < 18) // printf("未成年 "); // else if (age < 28) // printf("青年 "); // else if (age < 50) // printf("壯年 "); // else if (age < 90) // printf("老年 "); // else // printf("長壽 ");*/ // //----------------------------- // if (age < 18) // printf("未成年 "); // else if (age >=18 && age < 28) // printf("青年 "); // else if (age >=28 && age < 50) // printf("壯年 "); // else if (age >=50 && age < 90) // printf("老年 "); // else // printf("長壽 "); // // return 0; //} //------------練習:判斷一個數(shù)是否為奇數(shù)---------- //int main() //{ // int i=0; // while (i <=100) // { // if (i % 2==1) // printf("%d ", i); // i++; // } // return 0; //} //----------switch語句--------- //int main() //{ // int day=0; // scanf("%d", &day); // switch (day) // { // case 1: // printf("星期一 "); // break; // case 2: // printf("星期二 "); // break; // case 3: // printf("星期三 "); // break; // case 4: // printf("星期四 "); // break; // case 5: // printf("星期五 "); // break; // case 6: // printf("星期六 "); // break; // case 7: // printf("星期七 "); // break; // default: // printf("輸入錯誤 "); // } // return 0; //} //---------練習,輸出1-100之間的奇數(shù)------- //int main() //{ //-----第一種------ // /*int i=0; // while (i <=100) // { // if (i % 2==1) // printf("%d ", i); // i++; // } //*/ // //-----第二種------ // /*int i=0; // // for ( ;i<100; i++) // { // if (i % 2==1) // printf("%d ", i); // }*/ // // return 0; //} //************學習while循環(huán)************ //打印1-10個數(shù)字 //int main() //{ // int i=1; // while (i <=10) // { // printf("%d ", i); // i++; // } // return 0; //} //-------break----- //int main() //{ // int i=1; // while (i <=10) // { // if (i==5) // break; // printf("%d ", i); // i++; // } // return 0;//打印結果為1 2 3 4結束 //} //---------continue------ //int main() //{ // int i=1; // while (i <=10) // { // if (i==5) // continue; // printf("%d ", i); // i++; // } // return 0;//打印結果為1 2 3 4死循環(huán) //} //int main() //{ // //int ch=0; // //while ((ch=getchar()) !=EOF) //getchar()獲取字符,putchar()輸出字符 //EOF 即end of file 文件結束標志,,本質是-1 // //{ //獲取不到EOF一直執(zhí)行循環(huán),,輸入ctrl+z可以輸入EOF // // putchar(ch); // //} // // //int ret=0; // //int ch=0; // //char passward[20]={ 0 }; // //printf("請輸入密碼:");//輸入密碼后,密碼和所按的回車即 也被存儲在輸入緩沖區(qū) // //scanf("%s", passward);//此時輸入密碼,,并把密碼存放在passward數(shù)組中,,此時輸入緩沖區(qū)中還剩下 // ////此時若無getchar();語句,則 被取走 // ////被取走的 的ASCLL碼值為10 // //printf("請確認(Y/N):"); // ////getchar();//清空輸入緩沖區(qū),,即把 取走以免 的ASCLL碼值進入判斷語句 // //// //但是當緩沖區(qū)字符超過一個就失效了 // //while ((ch=getchar()) !=' ')//循環(huán)取,,直至取到 停止 // //{ // // ; // //} // // // // ret=getchar();//此時輸入緩沖區(qū)為空取不到值,等待用戶輸入 // //if (ret=='Y') // //{ // // printf("確認成功 "); // //} // //else // //{ // // printf("放棄確認 "); // //} // // // // int ch=0; // while ((ch=getchar()) !=EOF) // { // if (ch<'0' || ch>'9')//小于0或者大于9的跳過打印,,在0-9內打印 // continue;//跳過本次循環(huán)體 // putchar(ch) // } //只輸出數(shù)字 // // return 0; //} //**************學習For循環(huán)************* //int main() //{ //for循環(huán)本質是優(yōu)化while循環(huán) //while循環(huán)的組成: //int i=0; ←初始化 //while (i < 10) ←判斷部分 //{ // ..... ←循環(huán)部分 // i++;←調整部分 //} //-------------用for循環(huán)打印1-10------------- //int i=0; //// 初始化 判斷 調整 //判斷部分本質是判別真假即0或者非零,,謹記!?。,。。,。,。?! //// ↓ ↓ ↓ //for (i=1; i <=10; i++) //{ // printf("%d ", i); //←循環(huán) //} //-----for循環(huán)和while循環(huán)中的continue對比----- //int i=0; //for (i=1; i <=10; i++) //{ // if (i==5) // continue;//←執(zhí)行到此語句時跳過本次循環(huán)體,,然后執(zhí)行調整部分i++ // printf("%d ", i); //}//打印結果為1 2 3 4 6 7 8 9 (結束循環(huán)) //--------對比while循環(huán)------ //int i=1; //while (i <=10) //{ // if (i==5) // continue;//←執(zhí)行到此語句時跳過本次循環(huán)體,i++也在循環(huán)體中被跳過,,進入死循環(huán) // printf("%d ", i); // i++; //}//打印結果為1 2 3 4(仍然在循環(huán)中) //----------不可在for循環(huán)體內修改循環(huán)變量,,防止失控---------- //int i=0; //for (i=1; i < 10; i++) //{ // if (i=5) //修改了變量i,進入死循環(huán) // printf("haha "); // printf("hehe "); //} // return 0; //} // //-------注意盡量不要省略條件--------- //int main() //{ // int i=0; // int j=0; // for (; i < 10; i++)// i=0 1 2 3 4 5 6 7 8 9 10 循環(huán)結束 // { // for (; j < 10; j++)//j=0 1 2 3 4 5 6 7 8 9 10 10 10 10 10 10 10 10 10 10 // { // printf("hehe "); // } // } // //只打印10個hehe // //第二個for循環(huán)缺少初始化,,所以j的值保留了 // //造成的結果只有i=0的時候打印了10個hehe,,其余全部因j=10跳出了循環(huán)不打印 // return 0; //} //----------練習:判斷循環(huán)多少次------ //int main() //{ // int i=0;// 此處k賦值為1,1為非零恒為真,,所以死循環(huán) // int k=0;// ↓ // for (i=0, k=0; k=1; i++, k++)//若改為for(i=0,k=0;k=1;i++,k++)恒為真,,死循環(huán) // printf("1 "); //若改為for(i=0,k=0;k==0;i++,k++)則循環(huán)一次 // return 0; //} //------------------- //int main() //{ // int i=0;// 此處k賦值為0,0恒為假,,所以不進入循環(huán) // int k=0;// ↓ // for (i=0, k=0; k=0; i++, k++) // printf("1 "); // return 0; //} //------------- //int main() //{ // int i=0;// 此處判斷k值為0則條件成立,,當k的值是0時為真,所以循環(huán)一次 // int k=0;// ↓ // for (i=0, k=0; k==0; i++, k++) // printf("1 "); // return 0; //} //*************學習do-while循環(huán)************** //int main() //{ //打印1-10 /*int i=1; do { printf("%d ", i); i++; } while (i <=10);*/ //-----break和continue的用法---- //int i=1; //do //{ // if (i==5) // //break; 打印結果1234結束 // //continue; 打印結果1234未結束循環(huán) // printf("%d ", i); // i++; //} while (i <=10); //--------------------*****練習********---------------------- //求n的階乘 //int main() //{ // int i=0; // int ret=1; // int n=0; // scanf("%d", &n); // for (i=1; i<=n; i++) // { // ret=ret*i; // } // printf("ret=%d ", ret); // return 0; //} //---------求1!+2!+3!+4!-------------- //int main() //{ // int i=0; // int ret=1;//若等于0則乘多少都為0 // int n=0; // int sum=0; // //1+2+6+24=33 // for (n=1; n <=4; n++)//n的階乘相加4次 // { // ret=1;//初始化,,防止重復運算導致錯誤 // //初始化運行過程n=1時:循環(huán)1次,,ret初始值為1結束值為1;ret=1*1=1(為1!) // //n=2時:循環(huán)2次,,ret初始值為1結束值為1,;ret=1*1*2=2(為2!) // //n=3時:循環(huán)3次,,ret初始值為1結束值為1;ret=1*1*2*3=6(為3!) // //n=4時:循環(huán)4次,,ret初始值為1結束值為1,;ret=1*1*2*3*4=24(為4!) // //若不初始化n=1時:循環(huán)1次,ret初始值為1結束值為1,;ret=1*1=1 // //n=2時:循環(huán)2次,,ret初始值為1結束值為2;ret=1*1*2=2 // //n=3時:循環(huán)3次,,ret初始值為2結束值為12,;ret=2*1*2*3=12 // //n=4時:循環(huán)4次,ret初始值為12結束值為288,;ret=12*1*2*3*4=288 // for (i=1; i <=n; i++)//n的階乘 // { // ret=ret*i; // } // sum=sum + ret;//把每個數(shù)字的階乘相加 // } // printf("sum=%d ", sum);//sum=33 // return 0; //} //-------求1,!+2!+3!+...+10!---------- //int main() //{ // int i=0; // int ret=1; // int n=0; // int sum=0; // for (n=1; n <=10; n++)//n的階乘相加10次 // { // ret=1;//初始化,防止重復運算導致錯誤 // for (i=1; i<=n; i++)//n的階乘 // { // ret=ret*i; // } // sum=sum + ret; // } // printf("sum=%d ", sum); // return 0; //} //------優(yōu)化------- //int main() //{ // int ret=1; // int n=0; // int sum=0; // for (n=1; n <=4; n++) // { // ret=ret*n;//循環(huán)到幾就是幾的階乘 // sum=sum + ret;//依次相加 // } // printf("sum=%d ", sum); //} //--------折半查找------ //int main() //{ // int arr[]={ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12 };//有序數(shù)組 // int k=7; // int left=0;//左下標 // // 計算數(shù)組arr所占的字節(jié) // // (此處為44個字節(jié)) 單個元素所占的字節(jié)數(shù),,此處為下標是0的元素所占的字節(jié)(4個字節(jié)) // // ↓ ↓ // int sz=sizeof(arr) / sizeof(arr[0]);//計算出sz數(shù)組的總長度,為11 // int right=sz - 1;//右下標 // while (left <=right) // { // int mid=(left + right) / 2;//中間值 // if (arr[mid] > k)//說明要找的k在mid的左邊 // { // right=mid - 1;//右下標移到中間值左移一個 // } // else if (arr[mid] < k)//說明要找的k在mid的右邊 // { // left=mid + 1;//左下標移到中間值右移一個 // } // else // { // printf("找到了,,下標是%d ", mid); // break; // } // } // if (left>right) // printf("找不到 "); // // // // return 0; //} //-------打印一串字符,,從兩端到中間依次顯示--- //int main() //{ // char arr1[]="welcome to bit!!!!!!!"; // char arr2[]="#####################"; // int left=0; // //int right=sizeof(arr) / sizeof(arr[0]) - 2; //減去2是因為字符串結尾有 , // int right=strlen(arr1) - 1; // while (left <=right) // { // arr2[left]=arr1[left];//替換左下標 // arr2[right]=arr1[right];//替換右下標 // left++;//左下標右移一個 // right--;//右下標左移一個 // system("cls");//執(zhí)行系統(tǒng)命令的一個函數(shù)-cls,效果為清空屏幕 // printf("%s ", arr2); // Sleep(1000);//休息1秒 // } // // return 0; //} //--------模擬用戶登錄,,用戶只能登陸三次----- //int main() //{ // int i=0; // int a=3; // char passward[20]={ 0 }; // for (i=0; i < 3; i++) // { // printf("請輸入密碼:"); // scanf("%s", passward); // if (strcmp(passward, "123456")==0) // //strcmp函數(shù)是string compare(字符串比較)的縮寫,,用于比較兩個字符串并根據(jù)比較結果返回整數(shù)。 // //形式為strcmp(str1,str2),,若str1=str2,,則返回零;若str1str2,,則返回正數(shù),。 // // { // printf("登陸成功 "); // break; // } // else // { // a--; // printf("密碼錯誤請重試,還剩余%d次機會 ",a); // } // } // if (i==3) // printf("三次機會已用光,,退出程序 "); // // return 0; //} //-------作業(yè)-------- //static關鍵字使得局部變量變得靜態(tài),,離開了作用范圍不被重置初始化 //就相當于int b出了sum函數(shù)就失憶了,每次回來都是3,; //但static int b不在失憶,,能記得上一次的數(shù)值所以能累加起來數(shù)值 //int sum(int a)//a每次循環(huán)都是2 //{ // int c=0; // static int b=3;//靜態(tài)局部變量,延長生命周期到整個main函數(shù) // c +=1;//c每次循環(huán)都是0,,所以這里的c一直就是1 // b +=2;//b每次循環(huán)都加2 // return (a + b + c); //} //int main() //{ // int i; // int a=2; // for (i=0; i < 5; i++) // { // printf("%d,", sum(a)); // } // return 0;//結果8,,10,12,,14,,16 //} //-------三個數(shù)字從大到小輸出------- //int main() //{ // int a=0;//a放最大值 // int b=0;//b次之 // int c=0;//c放最小值 // int nmb=0;//中間值 // scanf("%d %d %d", &a, &b, &c);//輸入時的間隔符號要注意格式與函數(shù)內保持一致,,否則間隔符就參與排序 // if (a < b)//若b比a大,就交換一下把較大的值放到a里 // { // nmb=a; // a=b; // b=nmb; // } // if (a < c)//若c比a大,,就交換一下把較大的值放到a里 // { // nmb=a; // a=c; // c=nmb; // } //此時,,三個數(shù)中最大的值放到了a里,在比較b和c的值就可以了 // if (b < c)//若c比b大,,就交換一下把較大的值放到b里 // { // nmb=b; // b=c; // c=nmb; // } // // printf("%d %d %d", a, b, c); // // // return 0; //} //--------打印1-100之間的所有的3的倍數(shù)------- //int main() //{ // int i=0; // int a=1; // for (i=0; i < 100; i++) // { // if (a % 3==0) // { // printf("%d ", a); // // } // a++; // } // // return 0; //} //-----求最大公約數(shù)-輾轉相除法-------- //求兩個數(shù)最大公約數(shù)就是兩個數(shù)取模為0的數(shù),,若不為0用較小的數(shù)和余數(shù)再次瘦身取模,一直循環(huán)到取模為0的數(shù) //int main() //{ // int m=0; // int n=0; // int r=0; // scanf("%d%d", &m, &n); // while (m%n)//取余結果不為零的進入循環(huán)體調整各參數(shù)位置,,即開始輾轉 // { // r=m%n;//把余數(shù)儲存 // m=n;//較小的數(shù)存到m // n=r;//余數(shù)存到n,,為進入下一個循環(huán)做好準備,在下一次循環(huán)中即為較小的數(shù)對余數(shù)取模 // } // // printf("%d ", n); // // return 0; //} //-------打印1000年到2000年之間的閏年--- //判斷是否為閏年的依據(jù) //1.能被4整除并且不能被100整除 //2.能被400整除 //int main() //{ // int year=0; // int a=0;//定義計數(shù)器 // for (year=1000; year <=2000; year++) // { // if (year % 4==0 && year % 100 !=0)//&&邏輯與:需兩邊都滿足 // { // printf("%d ", year); // a++; // } // else if (year % 400==0) // { // printf("%d ", year); // a++; // } // } //} // printf(" 閏年數(shù)為:%d ", a); //// //------進化版---- // int main() // { // int year=0; // int a=0;//定義計數(shù)器 // for (year=1000; year <=2000; year++) // { // if ((year % 4==0 && year % 100 !=0) || (year % 400==0))//||邏輯或:兩邊滿足一個即可 // { // printf("%d ", year); // a++; // } // } // printf(" 閏年數(shù)為:%d ", a); // // return 0; // } //-----打印100-200之間的素數(shù)---- //判斷素數(shù)規(guī)則:1.試除法,,產生2到i-1個數(shù)字 //素數(shù):只能被1和本身整除的數(shù) //int main() //{ // int i=0; // int j=0; // int a=0;//計數(shù)器 // for (i=100; i <=200; i++) // { // for (j=2; j < i; j++) // { // if (i%j==0)//判斷2到i本身之間的數(shù)有無可整除的數(shù) // { // break; // } // } // if (i==j) // { // a++; // printf("%d ", i); // } // }printf(" 素數(shù)個數(shù)為:%d ", a); // return 0; //} //-------優(yōu)化------ //如果i=a*b,那么a或者b中至少有一個數(shù)字小于等于開平方i // int main() //{ // int i=0; // int j=0; // int a=0;//計數(shù)器 // for (i=100; i <=200; i++) //for(i=101;i<=200;i+=2) 因為偶數(shù)不可能是素數(shù),,直接跳過偶數(shù) // { //在開平方i之前找就可以了 // for (j=2; j <=sqrt(i); j++)//sqrt() 為非負實數(shù)平方根函數(shù)//是數(shù)學庫函數(shù) // { // if (i%j==0) // { // break; // } // } // if (j>sqrt(i)) // { // a++; // printf("%d ", i); // } // }printf(" 素數(shù)個數(shù)為:%d ", a); // // return 0; //} //--------作業(yè):找出1-100所有含有9的數(shù)字----- //int main() //{ // int i=0; // int a=0;//計數(shù)器 // for (i=1; i <=100; i++) // { // if (i % 10==9 )//說明個位為9 // { // a++; // printf("%d ", i); // } // else if (i / 10==9)//說明十位為9 // { // a++; // printf("%d ", i); // } // } // printf(" 個數(shù)為:%d ", a); // // return 0; //} //----分數(shù)求和;計算1/1-1/2+1/3-1/4+1/5.....+1/99-1/100的值----- //int main() //{ // int i=0; // double sum=0.0;//求和結果采用浮點型存儲 // int flag=1; // for (i=1; i <=100; i++) // { // sum +=flag*1.0 / i;//要得到小數(shù),,要保證除號兩端必須至少有一個浮點數(shù) // flag=-flag;//改變正負符號 // } // printf("%lf ", sum);//打印浮點數(shù)要用%lf // // return 0; //} //-------求最大值:求10個整數(shù)中最大值------ //int main() //{ // int arr[]={ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // int i=0; // int max=arr[0];//假設數(shù)組中第一個為最大值 // int sz=sizeof(arr) / sizeof(arr[0]); // for (i=1; i < sz; i++) // { // if (arr[i]>max) // max=arr[i]; // } // printf("max=%d ", max); // // return 0; //} //-------乘法口訣,,打印9*9乘法口訣---- //int main() //{ // int i=0;//行數(shù) // for (i=1; i <=9; i++)//行數(shù) 打印9行 // { // int j=0;//列數(shù) // for (j=1; j <=i; j++)//有幾行就打印幾列 // { // printf("%d*%d=%-2d ", i, j, i*j);//%2d 打印兩位靠右對齊,%-2d 打印兩位靠左對齊 // } // printf(" ");//每行末尾回車 // } // // return 0; //} //------二分查找,;在一個整形有序數(shù)組中查找某個數(shù),,找到打印下標,找不到打?。赫也坏?----- //int main() //{ // int arr[]={ 1, 2, 3, 4, 5, 6, 7, 8,9,10 }; // int k=0; // printf("請輸入要查找的值:"); // scanf("%d", &k); // int sz=sizeof(arr) / sizeof(arr[0]); // int right=sz-1; // int left=0; // while (left <=right) // { // int mid=(left+right)/2; // if (k > arr[mid]) // { // left=mid + 1; // } // else if (k < arr[mid]) // { // right=mid - 1; // } // else // { // printf("找到了下標為:%d ", mid); // break; // } // } // if (left>right) // printf("找不到 "); // // // return 0; //} //-------猜數(shù)字游戲:1.電腦會生成一個隨機數(shù)2.猜數(shù)字---------- // rand()需要調用#include 頭文件 //使用time()函數(shù)需要引用頭文件#include //void menu() //{ // printf("**************************** "); // printf("***** 1.play 0.exit ***** "); // printf("**************************** "); //} //void game() //{ // //游戲本體 // // int ret=0; // int guess=0;//接收猜的數(shù)字 // //1.生成一個隨機數(shù),, // ret=rand() % 100 + 1;//把隨機數(shù)限定到1-100之間,若不限定的范圍為0-32767之間 // //rand()生成隨機數(shù)函數(shù),,需要sranf()函數(shù)設置隨機起點 // //2.猜數(shù)字 // while (1) // { // printf("請猜數(shù)字:"); // scanf("%d", &guess); // if (guess > ret) // { // printf("猜大了 "); // } // else if (guess < ret) // { // printf("猜小了 "); // } // else // { // printf("恭喜你,,猜對了! "); // break; // } // } // //} // // //int main() //時間戳:當前計算機的時間減去計算機的起始時間(1970年1月1日0時0分0秒)=(xxxxx)秒即為時間戳 // //{ // int input=0; //// 強制轉換為無符號整型 //// ↓ // srand((unsigned int)time(NULL));//在調用rand()函數(shù)生成隨機數(shù)之前,,需要使用srand()函數(shù)來為rand()函數(shù)設置隨機數(shù)的起點,,用時間戳作為srand函數(shù)的參數(shù)來設置隨機數(shù)的生成起始點;注:隨機數(shù)起點不要頻繁設置,,頻繁設置隨機效果不好,,所以要放在循環(huán)外面 //// ↑ ↑ //// ↑ time()函數(shù)返回時間戳 ————> time(time_t*timer)函數(shù) ; time()函數(shù)返回的值是time_t類型,。 //// srand()函數(shù)的參數(shù)需為unsigned int即無符號整型 ↑ ↑ // do // time()函數(shù)的參數(shù)類型為time_t*的指針 time_t的本質是long長整型 // { // menu(); // printf("請選擇:"); // scanf("%d", &input); // switch (input) // { // case 1: // game();//進入到游戲 // break; // case 0: // printf("退出游戲 "); // break; // default: // printf("選擇錯誤 "); // break; // } // } // while (input); // // return 0; //} //*******************goto語句********************** //適合的場景是多層循環(huán)內跳出 //int main() //{ // again://要用冒號結尾!!!!!! // printf("hello "); // goto again;//again相當于標記,,執(zhí)行進程跳轉到標簽處 // //----或者---- // printf("hello "); // goto a; // printf("你好 ");//這里的作用是跳過本語句 //a: // printf("hehe "); // // return 0; //} //-*************自動關機程序*************************- //sysem()函數(shù)需要頭文件#include //int main() //{ // char input[20]={ 0 }; // system("shutdown -s -t 60");//sysem()是執(zhí)行系統(tǒng)命令的函數(shù)//shutdown -s -t 60 是60秒關機的指令 //again: // printf("你的電腦將在一分鐘內關機,請輸入:我是豬,,以取消關機 請輸入:"); // scanf("%s", input); // if (strcmp(input, "我是豬")==0)//strcmp()比較兩個字符串的函數(shù) // { // system("shutdown -a"); // } // else // { // goto again;//用while(1)循環(huán)也可以實現(xiàn) // } // // // return 0; //} //----------或者用while實現(xiàn)---------- //int main() //{ // char input[20]={ 0 }; // system("shutdown -s -t 60");//sysem()是執(zhí)行系統(tǒng)命令的函數(shù)//shutdown -s -t 60 是60秒關機的指令 // while (1) // { // printf("你的電腦將在一分鐘內關機,,請輸入:我是豬,以取消關機 請輸入:"); // scanf("%s", input); // if (strcmp(input, "我是豬")==0)//strcmp()比較兩個字符串的函數(shù) // { // system("shutdown -a"); // break; // } // } // // return 0; //} //*********文檔學習函數(shù)***************** //int Add(int x, int y) //{ // int z=x + y; // return z; //} //int main() //{ // int a=100; // int b=200; // int sum=0; // sum=Add(a, b); // printf("sum=%d ", sum); // // return 0; //} //--------strcpy函數(shù)------------- //int main() //{ // char arr1[]="bit"; // char arr2[20]="#######";//目的地要比源頭長,否則會溢出 // strcpy(arr2, arr1);//string copy-字符串拷貝 // //將按源指向的 C 字符串復制到按目的地指向的數(shù)組中,,包括終止空字符(并在該點停止) // printf("%s ", arr2); // return 0; //} //---------memset----------- //int main() //{ // char arr[]="hello word"; // memset(arr, '*', 5);//memset(要改變值的內存塊,,要設置成*,改變幾個字節(jié)) // printf("%s ", arr);//結果***** word // return 0; //} //-------------- 寫一個函數(shù)可以找到兩個整數(shù)中的最大值---- // //定義函數(shù) //int get_max(int x, int y)//用x,,y接收a,,b //{ // if (x > y) // return x; // else // return y; //} //int main() //{ // int a=10; // int b=20; // //函數(shù)的使用 // int max=get_max(a, b);//get_max獲取a,b的最大值 // printf("max=%d ", max); // return 0; //} //---------自定義函數(shù)也可用數(shù)字做參數(shù)--- // //定義函數(shù) //int get_max(int x, int y)//用x,,y接收a,,b //{ // if (x > y) // return x; // else // return y; //} //int main() //{ // //函數(shù)的使用 // int max=get_max(100, 300);//get_max可直接比較數(shù)值 // printf("max=%d ", max); // return 0; //} //************寫一個函數(shù)來交換兩個整型變量的內容**** //-----正常交換----- //int main() //{ // int a=10; // int b=20; // int tmp=0; // printf("a=%d,b=%d ", a, b); // tmp=a; // a=b; // b=tmp; // printf("a=%d,b=%d ", a, b); // return 0; //} //-----用函數(shù)封裝--- //void Swap1(int x, int y)//此處只交換x,y,與a,b無關 //{ // int tmp=0; // tmp=x; // x=y; // y=tmp; //} //int main() //{ // int a=10; // int b=20; // printf("a=%d,b=%d ", a, b); //調用Swap1函數(shù)(傳值調用) // Swap1(a, b); // printf("a=%d,b=%d ", a, b); // // return 0;//交換失敗 //} //------使用指針修正--- //void Swap2(int* pa, int* pb)//pa,、pb是形參,,當&a、&b傳遞過來時才分配內存 // //此時形參時實參的一份臨時拷貝 // //無需返回值,,所以用void //{ // int tmp=0; // tmp=*pa; // *pa=*pb; // *pb=tmp; //} //int main() //{ // int a=10; // int b=20; // printf("a=%d,b=%d ", a, b); // //調用Swap2函數(shù)(傳址調用) // Swap2(&a, &b);//&a,、&b是實參 // printf("a=%d,b=%d ", a, b); // return 0;//交換成功 //} //********練習************** //----使用函數(shù)打印100-200之間的素數(shù)--- //int is_prime(int n) //{ // int j=0; // for (j=2; j < n; j++) // { // if (n%j==0)//判斷2到i本身之間的數(shù)有無可整除的數(shù) // { // return 0; // } // } // if (n==j) // { // return 1; // } //} //int main() //{ // int i=0; // for (i=100; i <=200; i++) // { // //判斷i是否為素數(shù) // if (is_prime(i)==1) // printf("%d ", i); // } // return 0; //} //------優(yōu)化------- //int is_prime(int n) //{ // int j=0; // for (j=2; j <=sqrt(n); j++) // { // if (n%j==0)//判斷2到i本身之間的數(shù)有無可整除的數(shù) // { // return 0; // } // } // if (j>sqrt(n)) // { // return 1; // } //} //int main() //{ // int i=0; // for (i=100; i <=200; i++) // { // //判斷i是否為素數(shù) // if (is_prime(i)==1) // printf("%d ", i); // } // return 0; //} //-------寫一個函數(shù)判斷1000到2000年是不是閏年---- //int is_leap_year(int y)//函數(shù)的功能要單一獨立,不要再函數(shù)內打印 //{ // if ((y % 4==0 && y % 100 !=0) || (y % 400==0)) // return 1; // else // return 0; //} //int main() //{ // int year=0; // for (year=1000; year <=2000; year++) // { // //判斷year是否為閏年 // if (1==is_leap_year(year)) // { // printf("%d ", year); // } // } // return 0; //} //------寫一個函數(shù),,實現(xiàn)一個整型有序數(shù)組的二分查找----- //如果找到了返回這個數(shù)的下標,,找不到返回-1 //函數(shù)內求參數(shù)數(shù)組的個數(shù)無法實現(xiàn),需在外部求出 //int binary_search(int arr[], int k)//本質上arr是一個指針 //{ // int left=0; // int sz=sizeof(arr) / sizeof(arr[0]);//arr的大小是4個字節(jié),,arr[0]是四個字節(jié),,所以sz=1 // int right=sz - 1; // while (left <=right) // { // int mid=(left + right) / 2;//中間元素的下標 // if (arr[mid] < k) // { // left=mid + 1; // } // else if (arr[mid]>k) // { // right=mid - 1; // } // else // { // return mid; // } // } // return -1;//找不到的情況 //} //int main() //{ // int arr[]={ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // int k=7; // int ret=binary_search(arr, k);//傳遞過去的是arr數(shù)組首元素的地址,編譯器防止空間浪費 // if (ret==-1) // { // printf("找不到指定的數(shù)字 "); // } // else // { // printf("找到了,,下標是:%d ", ret); // } // return 0;//找不到 //} //-------修改--------- //int binary_search(int arr[], int k,int sz) //{ // int left=0; // int right=sz - 1; // while (left <=right) // { // int mid=(left + right) / 2; // if (arr[mid] < k) // { // left=mid + 1; // } // else if (arr[mid]>k) // { // right=mid - 1; // } // else // { // return mid; // } // } // return -1;//找不到的情況 //} //int main() //{ // int arr[]={ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // int k=7; // int sz=sizeof(arr) / sizeof(arr[0]); // int ret=binary_search(arr, k,sz);//傳遞過去的是arr數(shù)組首元素的地址 // if (ret==-1) // { // printf("找不到指定的數(shù)字 "); // } // else // { // printf("找到了,下標是:%d ", ret); // } // return 0;//找不到 //} //-----寫一個函數(shù),,每調用一次這個函數(shù),,就會將num的值增加1--- //void Add(int* p) //{ // (*p)++;//*p++因為++優(yōu)先級較高,作用于p //} //int main() //{ // int num=0; // Add(&num); // printf("num=%d ", num); // Add(&num); // printf("num=%d ", num); // Add(&num); // printf("num=%d ", num); // Add(&num); // printf("num=%d ", num); // return 0; //} //---隨便寫的------ //void Add(int* p) //{ // (*p)++;//*p++因為++優(yōu)先級較高,,作用于p //} //int main() //{ // int num=0; // while (num < 5) // { // Add(&num); // printf("num=%d ", num); // } // // return 0;//打印結果:5 //} //********鏈式訪問********* //int main() //{ // int len=0; // //第一種正常寫法 // len=strlen("abc"); // printf("%d ", len); // //第二種,,用鏈式訪問 // printf("%d ", strlen("abc")); // // return 0; //} //-----例子---- //int main() //{ //printf函數(shù)編譯成功后返回字符的個數(shù) // printf("%d", printf("%d", printf("%d", 43))); // //首先第一個執(zhí)行的printf打印43,返回值為2 // //所以第二個執(zhí)行的printf函數(shù)打印2,,返回值為1 // //第三個執(zhí)行的printf打印1,,返回值為1 // return 0;//打印結果:4321 //} //*******函數(shù)聲明和定義*** // //函數(shù)聲明 正確用法:函數(shù)聲明放到頭文件里,在頭文件新建add.h文件 //int Add(int x, int y); // //int main() //{ // int a=10; // int b=20; // int sum=0; // //函數(shù)的調用 正確用法:要使用Add函數(shù)只需包含頭文件即可#include "add.h" // //引用庫函數(shù)用<>,,引用自定義函數(shù)用"" // sum=Add(a, b); // printf("%d ", sum); // return 0; //} // //函數(shù)的定義 正確用法:放到在源文件新建add.c的文件里 //int Add(int x, int y) //{ // int z=x + y; // return z; //} //********函數(shù)遞歸********** //int main() //{ // printf("hehe "); // main(); // return 0;//循環(huán)一段時間后報錯:stack overflow棧溢出 //} //-----練習接受一個整型值(無符號),,按照順序打印它的每一位---- //void print(int n)//定義函數(shù) //{ // if (n > 9)//如果是兩位數(shù)以上就調用函數(shù),一位數(shù)就跳出打印 // { // print(n / 10);//拆除n的末位數(shù)字在遞歸調用函數(shù)//定義函數(shù)到此處相當于循環(huán)體 // } // printf("%d ", n % 10);//一位數(shù)打印本身,,多位數(shù)打印末位數(shù) //} //int main() //{ // unsigned int num=0; // scanf("%d", &num); // print(num);//調用函數(shù) // return 0; //} //------編寫函數(shù)不允許創(chuàng)建臨時變量,,求字符串的長度----- //int my_strlen(char* str)//循環(huán)計數(shù) //{ // int count=0;//創(chuàng)建了臨時變量,不符合要求 // while (*str !='\0')//遇到\0就停止計數(shù) // { // count++;//長度加一 // str++;//元素的地址后移一位 // } // return count; //} //int main() //{ // char arr[]="bit";//數(shù)組元素包括b i t \0 // int len=0; // len=my_strlen(arr);//數(shù)組只能傳遞首元素的地址 // printf("len=%d ", len); // return 0; //} //------用遞歸改進------- // //大事化小 // //my_strlen("bit"); // //1+my_strlen("it"); // //1+1+my_strlen("t"); // //1+1+1+my_strlen(""); // //1+1+1+0=3 //int my_strlen(char* str)// } //{ // |→相當于循環(huán)體 // if (*str !='\0') // | // return 1 + my_strlen(str + 1);// } // else // return 0; //} //int main() //{ // char arr[]="bit"; // int len=0; // len=my_strlen(arr); // printf("len=%d ", len); // return 0; //} //******遞歸與迭代********* //-----循環(huán)求n階乘------- //int Fac(int n) //{ // int i=0; // int ret=1; // for (i=1; i <=n; i++) // { // ret *=i; // } // return ret; //} //int main() //{ // int n=0; // int ret=0; // scanf("%d", &n); // ret=Fac(n); // printf("%d ", ret); // return 0; //} //-----遞歸求n的階乘------ //int Fac(int n) //{ // if (n <=1) // return 1; // else // return n*Fac(n - 1); //} //int main() //{ // int n=0; // int ret=0; // scanf("%d", &n); // ret=Fac(n); // printf("%d ", ret); // return 0; //} //----求第n個斐波那契數(shù)列------ //int Fib(int n) //{ // if (n <=2) // return 1; // else // return Fib(n - 1) + Fib(n - 2); //} //int main()//斐波那契數(shù)列是前兩個數(shù)字的和等于第三個數(shù)字 //{ //前兩個數(shù)都是1 // int n=0; // int ret=0; // scanf("%d", &n); // ret=Fib(n); // printf("%d ", ret); // return 0;//效率太低 //} //------用循環(huán)----- //int Fib(int n) //{ // int a=1; // int b=1; // int c=1; // while (n > 2)//必須知道前兩個數(shù)才能算斐波那契數(shù)列,都為1 // { // c=a + b; // a=b; // b=c; // n--;//例n=4則需要循環(huán)求2兩次,,當n=4一次,,當n=3一次 // } // return c; //} //int main() //{ // int n=0; // int ret=0; // scanf("%d", &n); // ret=Fib(n); // printf("%d ", ret); // return 0;//效率很高 //} //********數(shù)組的創(chuàng)建和初始化******** //int main()//sizeof()和strlen()區(qū)別 //{ // char arr4[]="abcdef"; // printf("%d ", sizeof(arr4));//sizeof()計算的是arr4所占的空間的大小,針對變量,、數(shù)組,、類型的大小 // printf("%d ", strlen(arr4));//strlen()求字符串長度,只針對字符串 // return 0; //} //-------一維數(shù)組的創(chuàng)建和初始化----- //int main()//一維數(shù)組在內存中是連續(xù)存放的 //{ // int arr[]={ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // int sz=sizeof(arr) / sizeof(arr[0]); // int i=0; // for (i=1; i < sz; i++) // { // printf("&arr{%d}=%p ", i, &arr[i]); // } // return 0; //} //********二維數(shù)組的使用***** //int main()//第一行放123,,第二行放45(用花括號括起來視作一個一維數(shù)組) //{ // int arr[3][4]={ { 1, 2, 3 }, { 4, 5 } }; // int i=0; // for (i=0; i < 3; i++) // { // int j=0; // for (j=0; j < 4; j++) // { // printf("%d ", arr[i][j]); // } // printf(" "); // } // return 0; //} //-----存儲-- //int main() //{ // int arr[3][4]={ { 1, 2, 3 }, { 4, 5 } }; // int i=0; // for (i=0; i < 3; i++) // { // int j=0; // for (j=0; j < 4; j++) // { // printf("&arr[%d][%d]=%p ",i,j, &arr[i][j]); // } // printf(" "); // } // return 0; //} //*****數(shù)組作為函數(shù)參數(shù)******* //----實現(xiàn)一個冒泡排序函數(shù)將一個整型數(shù)組排序,。---- //void bubble_sort(int arr[], int sz) //{ // int i=0; // for (i=0; i < sz - 1; i++)//確定冒泡排序的趟數(shù) // { // int j=0; // for (j=0; j < sz - 1 - i; j++) //決定每一趟冒泡排序比較的次數(shù)//比較完一趟在從第一個數(shù)字比較 // { //sz-1-i減去最后面已經排好順序的數(shù)字 // if (arr[j]>arr[j + 1])//比后一個數(shù)大就交換,比后一個數(shù)小就不變比較下一個 // { // int tmp=arr[j]; // arr[j]=arr[j + 1]; // arr[j + 1]=tmp;//排好序的數(shù)字都在最后面 // } // } // } //} //int main() //{ // int arr[]={ 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; // int i=0; // int sz=sizeof(arr) / sizeof(arr[0]); // bubble_sort(arr, sz);//冒泡排序,,對arr升序 // for (i=0; i < sz; i++) // { // printf("%d ", arr[i]); // } // return 0; //} //----優(yōu)化----- //void bubble_sort(int arr[], int sz) //{ // int i=0; // for (i=0; i < sz - 1; i++)// // { // int flag=1;//假設這一趟要排序的數(shù)據(jù)已經有序 // int j=0; // for (j=0; j < sz - 1 - i; j++) // { // if (arr[j]>arr[j + 1]) // { // int tmp=arr[j]; // arr[j]=arr[j + 1]; // arr[j + 1]=tmp; // flag=0;//本趟排序不完全有序 // } // } // if (flag==1)//比較一趟之后有序,,就跳出 // { // break; // } // } // //} //int main() //{ // int arr[]={ 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }; // int i=0; // int sz=sizeof(arr) / sizeof(arr[0]); // bubble_sort(arr, sz);//冒泡排序,對arr升序 // for (i=0; i < sz; i++) // { // printf("%d ", arr[i]); // } // return 0; //} //------數(shù)組名------ //int main() //{ // int arr[10]={ 1, 2, 3, 4, 5 }; // printf("%p ", arr);//結果008FFC10 // printf("%p ", &arr[0]);//結果008FFC10 // printf("%d ", *arr);//結果1,,根據(jù)地址解引用找到1 // return 0; //} //-----分辨---- //int main() //{ // int arr[10]={ 1, 2, 3, 4, 5 }; // printf("%p ", arr);//008FFA04第一個元素的地址 // printf("%p ", &arr[0]);//008FFA04第一個元素的地址 // printf("%p ", &arr);//008FFA04整個數(shù)組的地址,,代表的是從首元素地址開始 // return 0; //} //----對比--- //int main()//分別加一可以證明他們的本質區(qū)別 //{ // int arr[10]={ 1, 2, 3, 4, 5, 6, 7 }; // printf("%p ", arr);//00d3f900 // printf("%p ", arr+1);//00d3f904 加了一個元素的4字節(jié) // // printf("%p ", &arr[0]);//00d3f900 // printf("%p ", &arr[0]+1);//00d3f904 加了一個元素的4字節(jié) // // printf("%p ", &arr);//00d3f900 // printf("%p ", &arr+1);//00d3f91c 加了一整個數(shù)組的4*7=28字節(jié) ;1c=28 // return 0; //} //實現(xiàn)三子棋 //實現(xiàn)掃雷 //************操作符*********** //int main()//算術右移,右邊丟棄,,左邊補原符號位 //{ // int a=-1;//負數(shù)按照補碼的方式存儲,,正數(shù)存儲的也是補碼(正數(shù)的補碼和原碼相同) // //1000000000000001-原碼 // //1111111111111110-補碼 // //1111111111111111-補碼 // int b=a >> 1;//移位移的是內存中的二進制位 // printf("%d ", b); // return 0;//結果為-1,證明負數(shù)右移之后還是負數(shù) //} //----有除二的效果---- //int main() //{ // int a=16; // int b=a >> 1; // int c=a >> 2; // printf("%d %d ", b,c);//結果分別為8 4 // return 0; //} //-----左移----- //int main() //{ // int a=5; // int b=a << 1; // printf("%d ", b); // return 0;//10 //} //----負數(shù)--- //int main() //{ // int a=-5; // int b=a << 1; // printf("%d ", b); // return 0;//-10 //} //---注意--- //int num=10; //num >> -1;//錯誤 //*******&,、|,、^******** //int main() //{ // //&按2進制位與 // int a=3; // int b=5; // int c=a&b; // //011 // //101 // //001 // printf("%d ", c); // return 0; //} //---|--- //int main() //{ // //|按2進制位或 // int a=3; // int b=5; // int c=a | b; // //011 // //101 // //111 // printf("%d ", c);//7 // return 0; //} //---^--- //int main() //{ // //^按2進制位異或 相同為0,相異為1 // int a=3; // int b=5; // int c=a^b; // //011 // //101 // //110 // printf("%d ", c); // return 0; //} //****編輯代碼實現(xiàn)求一個整數(shù)存儲在內存中的二進制中的1的個數(shù)*** //int main() //{ // int num=0; // int count=0; // scanf("%d", &num); // //統(tǒng)計num的補碼中有幾個1 // while (num) // { // if (num % 2==1)//判斷末位是否為1 // count++; // num=num / 2;//去掉判斷過的末位 // } // printf("%d ", count); // return 0;//但負數(shù)會出現(xiàn)問題 //} //----優(yōu)化----- //int main() //{ // int num=0; // int count=0; // scanf("%d", &num);//當num&1,,比如num=3即0011,,num&1即為0011&0001,末位為1時&1必定為1,,末位是0&1必定是0 // int i=0; // for (i=0; i < 32; i++) // { // if (1==((num >> i) & 1)) // count++; // } // printf("%d ", count); // return 0; //} //*****操作符**** //int main() //{ // sizeof的()變量名時可以省略,,類型時不可以省略 // int arr[10]={ 0 }; // printf("%d ", sizeof(arr));//40//計算變量名和計算類型大小相同 // printf("%d ", sizeof(int [10]));//40 數(shù)組去掉數(shù)組名即為類型 // printf("%d ", sizeof(int [5]));//20 []內影響大小 // return 0; //} //int main() //{ // short s=0; // int a=10; // printf("%d ", sizeof(s=a + 5));//2 // printf("%d ", s);//0 // return 0; //} //----~按位取反--- //int main() //{ // int a=0; // //00000000000000000000000000000000 - 0的補碼 // //取反 // //11111111111111111111111111111111 - 補碼 // //11111111111111111111111111111110 - 反碼 // //10000000000000000000000000000001 - 原碼 即為-1 // printf("%d ", ~a); // return 0; //} //----~的應用------ //把1011的第三位改成1 //與0100或運算就可以了 //1111 //int main() //{ // int a=11; // a=a | (1 << 2); // //把1011的第三位改成1,或上一個0100 // //把0001向左移2位就得到了0100 // printf("%d ", a);//這時a變成1111 // a=a & (~(1 << 2)); // //把1111的第三位改為0,,與上一個1011 // //把0001向左移2位就得到了0100按位取反就得到了1011 // printf("%d ", a); // return 0; //} //----++和--的使用----- //int main() //{ // int a=10; // printf("%d ", ++a);//++a語句之前變量a的值+1//前置++,,先++后使用 // return 0;//11 //} //int main() //{ // int a=10; // printf("%d ", a++);//a++語句之后變量a的值+1//后置++,先使用,,再++ 10 // printf("%d ", a);//11 // return 0; //} //****邏輯與或**** //int main() //{ // int i=0, a=0, b=2, c=3, d=4; // i=a++ && ++b && d++;//a=0為假&&后面不計算,,不運行//用后自加一 // printf("a=%d b=%d c=%d d=%d ", a, b, c, d); // return 0;//1 2 3 4 //} //------ //int main() //{ // int i=0, a=1, b=2, c=3, d=4; // i=a++ && ++b && d++; // printf("a=%d b=%d c=%d d=%d ", a, b, c, d); // return 0;//2 3 3 5 //} //------ //int main() //{ // int i=0, a=1, b=2, c=3, d=4; // i=a++ || ++b || d++;//a=1為真||后面的不計算,然后自加一 // printf("a=%d b=%d c=%d d=%d ", a, b, c, d); // return 0;//2 2 3 4 //} //****條件操作符**** //int main() //{ // int a=0; // int b=0; // if (a > 5) // b=3; // else // b=-3; // //用條件操作符來表示 // b=(a > 5 ? 3 : -3); // return 0; //} //****逗號表達式***** //a=get_val(); //count_val(a); //while (a > 0) //{ // //業(yè)務處理 // a=get_val(); // count_val(a); //} //----逗號表達式優(yōu)化--- //while (a=get_val(), count_val(a), a > 0) //{ // //業(yè)務處理 //} //****結構體類型*** //創(chuàng)建一個結構體類型:struct Stu //struct Stu //{ // char name[20];//成員變量 // int age; // char id[20]; //}; //int main() //{ // int a=10; // //使用struct Stu這個類型創(chuàng)建了一個學生對象s1,,并初始化 // struct Stu s1={"張三",20,"2019010305"}; // printf("%d ", s1.age); //結構體變量.成員名//.操作符可以訪問成員 // printf("%s ", s1.id); // struct Stu* ps=&s1; // printf("%d ", (*ps).age); // printf("%d ", ps->age);//結構體指針->成員名 // return 0; //} //********隱式類型轉換*** //int main() //{ // char a=3; // //00000000000000000000000000000011 正常一個整數(shù)所占32位 // //00000011這就是char a //但char只能存放一個字節(jié),,要發(fā)生截斷,取低位一個字節(jié) // char b=127; // //00000000000000000000000001111111 同理 // //01111111這就是char b // char c=a + b;//計算時進行整型提升 // //00000000000000000000000000000011 //整型提升:高位補符號位 // //00000000000000000000000001111111 //整型提升:高位補符號位 // //00000000000000000000000010000010 a+b得到c,,因為c是char類型要截斷 // //10000010就是char c // printf("%d ", c);//要打印整型//整型提升:高位補符號位 // //11111111111111111111111110000010 - 補碼//因為是負數(shù),,所以要求原碼 // //11111111111111111111111110000001 - 反碼 // //10000000000000000000000001111110 - 原碼//-126 // return 0; //} //----應用--- //int main() //{ // char a=0xb6;//十六進制的b6,即10110110 // short b=0xb600; // int c=0xb6000000; // if (a==0xb6)//運算要整型提升,提升之后就不等于0xb6 // printf("a ");//不打印 // if (b==0xb600)//同理 // printf("b "); // if (c==0xb6000000) // printf("c "); // return 0; //} //----- //int main() //{ // char c=1; // printf("%u ", sizeof(c));//1 // printf("%u ", sizeof(+c));//4//因為參與運算了所以提升成了整型 // printf("%u ", sizeof(!c));//1 // return 0; //} //****自加和自減****** //int main() //{ // int c=2; // int b=0; // b=c + --c; // printf("%d %d ", b,c); // /*運行b=c + --c; 分析優(yōu)先級:--c最高,,所以b=--c + c // 運算之前:因為--c,,在運算之前使得變量c減一(2 - 1=1);此時c=1 // 運算之中:加c,因為c=1,,所以1+1=2賦給b // 運算之后:無*/ // return 0;//b=2 c=1 //} //int main() //{ // int i=0; // int j=i++ + ++i;//++i優(yōu)先級高于i++,,所以相當于int j=++i + i++; //此時i=0,1(此時i=1)+1(此時i=2)=2 // int k=--i + i--;//此時i=2,(此時i=1)1+1(此時i=0)=2 // printf("%d %d %d ", i, j, k); // /*當運行int j=i++ + ++i; // 分析優(yōu)先級:自加高于 + ,兩個自加同級從左向右計算,;其中++i的優(yōu)先級比i++高,,即變?yōu)?/p> // int j=++i + i++ // 運算之前:因為++i, 在運算之前使得變量i加一(0 + 1=1);此時i=1 // 運算之中:加上i++,,因為是后置++,,所以此時i仍然是1,所以為1 + 1=2賦值給j // 運算之后:因為i++,,在運算之后使得變量i加一(1 + 1=2),;此時i=2 // 當運行int k=--i + i--; // 運算之前:因為--i, 在運算之前使得變量i減一(2 - 1=1);此時i=1 // 運算之中:加上i--,,因為是后置--,,所以此時i仍然是1,所以為1 + 1=2賦值給j // 運算之后:因為i--,,在運算之后使得變量i減一(1 - 1=0),;此時i=0*/ // return 0;//i=0 j=2 k=2 //} //int main() //{ // int i=0; // int j=i + i++;//此時i=0,0+0(此時i=1)=0 // printf("%d %d ", i, j); // /*運行int j=i + i++; // 運算之前:無 // 運算之中:加上i++,因為是后置++,,所以此時i仍然是0,,所以為0 + 0=0賦值給j // 運算之后:因為i++,在運算之后使得變量i加一(0 + 1=1),;此時i=1*/ // return 0;//i=1 j=0 //} //int main() //{ // int i=0; // int j=i + ++i;//此時i=0,1+(此時i=1)1=2 // printf("%d %d ", i, j); // /*運行 int j=i + ++i; // 分析優(yōu)先級:自加高于 + ,,即變?yōu)閕nt j=++i + i; // 運算之前:因為++i, 在運算之前使得變量i加一(0 + 1=1),;此時i=1 // 運算之中:加上i,此時i仍然是1,,所以為1 + 1=2賦值給j // 運算之后:無*/ // return 0;//i=1 j=2 //} //****指針***** //編號即為地址即為指針,,存放指針的變量成為:指針變量 //int main() //{ // int a=10; // int* pa=&a; //拿到的是a的四個字節(jié)中的第一個字節(jié)的地址 // *pa=20; // return 0; //} //int main() //{ // printf("%d ", sizeof(char*));//4 // printf("%d ", sizeof(short*));//4 // printf("%d ", sizeof(int*));//4 // printf("%d ", sizeof(double*));//4 // return 0; //} //------ //int main() //{ // int arr[10]={ 0 }; // int* p=arr; // char* pc=arr; // printf("%p ", p);//004FFC40 // printf("%p ", p+1);//004FFC44//加了一個整型4個字節(jié) // // printf("%p ", pc);//004FFC40 // printf("%p ", pc+1);//004FFC41//加了一個字符型1個字節(jié) // return 0; //} //-------指針未初始化 //int main() //{ // int* p;//p是一個局部的指針變量,局部變量不初始化的話,,默認時隨機值 // int* p=NULL;//不知道該初始化什么地址時先初始化為NULL,,和int a=0;類似 // *p=20;//非法訪問內存了 // return 0; //} //-----指針訪問越界 //int main() //{ // int arr[10]={ 0 }; // int *p=arr; // int i=0; // for (i - 0; i <=11; i++) // { // //當指針指向的范圍超過數(shù)組arr的范圍時,,p就是野指針 // *(p++)=i; // } // return 0; //} //------指針指向的內存空間釋放 //int* test() //{ // int a=10; // return &a; //} //int main() //{ // int* p=test(); // *p=20; // return 0; //} //-----指針使用之前檢查有效性 //int main() //{ // int* p=NULL; // /**p=10;*///會報錯,,指針置為NULL時的內存用戶不能對其進行操作 // //修改 // if (p !=NULL) // { // *p=10; // } // return 0; //} // ////*****指針的運算***** //int main() //{ //#define N_VALUES 5 // float values[N_VALUES]; // float *vp; //指針的關系運算 // for (vp=&values[0]; vp < &values[N_VALUES];) // { // *vp++=0;//指針+-整數(shù) // } // //************************ // for (vp=&values[0]; vp > &values[0];) // { // *--vp=0; // } // //---------------- // for (vp=&values[N_VALUES-1]; vp >=&values[0];vp--) // { // *vp=0; // } // return 0; //} // // 第二種寫法應該盡量避免,不符合標準規(guī)定 // //標準規(guī)定:允許指向數(shù)組元素的指針與指向數(shù)組最后一個元素后面的內存位置的指針比較, // //但是不允許指向第一個元素之前的那個內存位置的指針進行比較,。 ////-----指針+-數(shù)字 //int main() //{ // int arr[10]={ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // int* p=arr; // int*pend=arr + 9; // while (p <=pend) // { // printf("%d ", *p); // p++; // } // return 0; //} ////-----指針-指針---- // //指針相減的前提:兩個指針指向同一塊空間 //int main()//指針-指針得到的兩個指針之間的元素個數(shù) //{ // int arr[10]={ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // printf("%d ", &arr[9] - &arr[0]); // return 0; //} //*******指針和數(shù)組************** //int main() //{ // int arr[10]={ 0 }; // int* p=arr; // int i=0; // for (i=0; i < 10; i++) // { // printf("%p <==> %p ", &arr[i], p + i);//arr是首元素的地址,,所以p+i就是這個數(shù)組下標為i的元素的地址 // } // return 0; //} //-----打印出來 //int main() //{ // int arr[10]={ 0 }; // int* p=arr; // int i=0; // for (i=0; i < 10; i++) // { // *(p + i)=i; // } // for (i=0; i < 10; i++) // { // printf("%d", *(p + i)); // }//0 1 2 3 4 5 6 7 8 9 // return 0; //} //---拓展--- //int main() //{ // int arr[10]={ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // int* p=arr; // //[]是一個操作符 2和arr是兩個操作數(shù) a+b=b+a加法交換律 // //arr[2]<==>*(arr+2)<==>*(p+2)<==>*(2+p)<==>*(2+arr)==2[arr] // //2[arr]<==>*(2+arr) // printf("%d ", 2[arr]); // printf("%d ", arr[2]); // //本質arr[2]-->*(arr+2)-->*(2+arr)-->2[arr] // return 0;//實際上都是地址 //} //*****二級指針***** //int main() //{ // int a=10; // int* pa=&a;//pa是指針變量,一級指針//*表明是指針,,int表明目標的類型 // //ppa就是一個二級指針變量 // int** ppa=&pa;//pa也是個變量,,&pa取出pa在內存中起始地址//*表示是指針,int*表明目標的類型 // return 0; //} //********指針數(shù)組**** //int main() //{ // int arr[10];//整型數(shù)組 - 存放整形的數(shù)組就是整型數(shù)組 // char ch[5];//字符數(shù)組 - 存放的是字符 // //指針數(shù)組 - 存放指針的數(shù)組 // int* parr[5];//整型指針的數(shù)組 // char* pch[5];//字符型指針的數(shù)組 // return 0; //} // ////****結構體**** //struct Stu //是個類型 //{ // //成員變量 // char name[20]; // int age; // char id[20]; //}s1,s2;//這里創(chuàng)建的s1,,s2也是結構體變量,,是全局變量 //int main() //{ // struct Stu s;//由struct Stu類型創(chuàng)建的s對象//s是局部變量 // // return 0; //} //---------成員為其他結構體--------- //struct B //{ // char c; // short s; // double d; //}; //struct Stu //是個類型 //{ // //成員變量 // struct B sb; // char name[20]; // int age; // char id[20]; //}s1, s2;//這里創(chuàng)建的s1,s2也是結構體變量,,是全局變量 //int main() //{ // struct Stu s;//由struct Stu類型創(chuàng)建的s對象//s是局部變量 // struct Stu s={ { 'w', 20, 3.14 }, "張三", 30, "202005034" };//初始化 // //用.和->操作符訪問成員 // printf("%c ", s.sb.c);//打印W // // struct Stu* ps=&s; // printf("%c ", (*ps).sb.c); // printf("%c ", ps->sb.c);//ps是指針可以直接用->訪問成員,,sb不是指針所以要用.訪問成員 // return 0; //} //----傳值調用和傳址調用的對比------ //struct B //{ // char c; // short s; // double d; //}; //struct Stu //是個類型 //{ // //成員變量 // struct B sb; // char name[20]; // int age; // char id[20]; //}s1, s2;//這里創(chuàng)建的s1,s2也是結構體變量,,是全局變量 //void print1(struct Stu t) //{ // printf("%c %d %lf %s %d %s ", t.sb.c, t.sb.s, t.sb.d, t.name, t.age, t.id); //} //void print2(struct Stu* ps) //{ // printf("%c %d %lf %s %d %s ", ps->sb.c, ps->sb.s, ps->sb.d, ps->name, ps->age, ps->id); //} //int main() //{ // struct Stu s={ { 'w', 20, 3.14 }, "張三", 30, "202005034" };//初始化 // //寫一個打印函數(shù)打印s的內容 // print1(s); //傳值調用 傳參是會開辟空間,,造成浪費性能下降 // print2(&s); //傳址調用 僅僅傳輸?shù)刂罚矢?首選 // return 0; //} |
|
來自: 新用戶0175WbuX > 《待分類》