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