array :
What is an array : Combination of variables , Is a way to batch define variables
definition : type Array name [ quantity ];
int num1,num2,num3,num4,num5;
int arr[5];
use : Array name [ subscript ];
subscript : Start from scratch Range :0~ quantity -1
ergodic : And for Cyclic combined use , Using circular variables i As the index of the array
initialization : type Array name [ quantity ] = {1,2,3,4,5,…};
1, Arrays, like ordinary variables, have random default values , For security, the array is initialized
2, This initialization syntax can only be used when defining statements , And can only be assigned one by one , Cannot assign values as a whole
3, Too much initialization data , The compiler generates a warning and discards excess data
4, Insufficient initialization data , The compiler automatically complements 0
5, Data can be omitted during initialization , Write braces only , Equivalent to initializing all members to 0
6, The length of the array can be omitted during initialization , The compiler will automatically count the number of array elements and tell the array
sizeof(arr)/sizeof(arr[0]) = Number of elements in the array
Total bytes of the array / Number of bytes of array elements = Number of elements in the array
Array out of bounds :C For the sake of program efficiency, the language does not check whether the subscript of the array is out of bounds Consequences of array out of bounds : 1, business as usual 2, Segment error 3, Dirty data
Two dimensional array :
A one-dimensional array is equivalent to arranging variables in a row , Access by number
A two-dimensional array is equivalent to arranging variables into a matrix , Accessed by row and column numbers
definition : type Array name [ Number of rows ][ Number of columns ]; int arr[3][5]; [0,0][0,1][0,2][0,3][0,4]
[1,0][1,1][1,2][1,3][1,4] [2,0][2,1][2,2][2,3][2,4] use : Array name [ Row subscript ][ Column subscript ]; arr[1][2]
Row subscript : 0~ Number of rows -1 Column subscript : 0~ Number of columns -1 ergodic : Need and double layer for Cyclic fit , The outer layer is generally responsible for traversing rows , The inner layer is generally responsible for traversing columns for(int i=0; i< Number of rows ;
i++) { for(int j=0; j< Number of columns ; j++) { printf("%d ",arr[i][j]); } printf("\n"); }
initialization : type Array name [ Number of rows ][ Number of columns ] = {{ first line },{ Second line },{ Third line },...}; practice 4: Define a 5*5 And initialize , Find the coordinates of the maximum value in the array
practice 5: Define a 5*5 And initialize , Find the coordinates of the minimum value , Calculate the sum of the numbers around the location ?
Variable length array :
When defining an array, use variables as its length , The length of the array is uncertain during code compilation , When the array definition statement is executed, its length is determined , Once determined, it cannot be changed
advantage : The length of the array can be determined according to the actual situation , Achieve the purpose of saving memory
shortcoming : Because initialization is completed at compile time , At this time, the length of the variable length array is uncertain , Therefore, it cannot be initialized

Binary conversion :
Why binary , octal number system , hexadecimal ?
Because of the present CPU Only high and low levels can be recognized , Only binary data can be used for calculation
Although binary can be calculated directly by computer , But it's not easy to write , record , Therefore, the data is recorded in the file in octal for convenience
along with CPU The number of digits is increasing , Octal cannot meet the demand , So hexadecimal was developed to represent data ,
Due to historical reasons, octal cannot withdraw from the historical stage

Decimal to binary :( Decimal to other decimal )
Remainder method : use 2 Data remainder , Then continue to seek surplus from the business , Know Shang Wei 0 end , The remainder generated in the process is the binary of the data ( Reverse order )
n %2 remainder
merchant %2

127 %2 1 63 %2 1 31 %2 1 15 %2 1 7 %2 1 3 %2 1 1 %2 1 0 0 Binary :01111111 Right seeking method :
data - 2^(n-1) If you can reduce , Then the second n Bit 1, Otherwise 0 137 128 64 32 16 8 4 2 1 1 0 0 0 1 0 0 1 Manual calculation : 79
28 63 119 practice 1: Enter a positive integer m, Displays the of the data n Base system (n>=2), If n>=10, go beyond 10 The numbers are represented by letters 10 A 11 B
Binary to decimal :( Other decimal to decimal )
Binary data ride 2^(n-1) Summation of results
10011101 128+16+8+4+1 157

Binary to octal :
Three binary bits are converted to one octal bit
Binary 10 011 001 101 110
octal number system 2 3 1 5 6

Binary to hexadecimal :
Four binary bits are converted to one hexadecimal bit
Binary 10 0110 0110 1110
hexadecimal : 2 6 6 E
stay C In code , with 0 The data at the beginning is octal data , with 0x The beginning is hexadecimal data %o Display data in octal form %x Display data in hexadecimal %#o %#x Display the data in the corresponding hexadecimal
Original code , Inverse code , Complement :
Original code : Binary of data
Inverse code :
The original code of a positive number is its inverse code
The inverse code of a negative number is that the sign bit of its original code remains unchanged , Other bits are inversed by bit
Complement : Data is stored in memory in the form of complement
The original code of a positive number is its complement
The complement of a negative number is its inverse +1
Complement of negative numbers :
1, Convert data to binary
2, Binary sign bit invariant , The rest are inversed by bit to obtain the inverse code
3, Inverse code +1 Get complement
-127
1111 1111
1000 0000
1000 0001 Complement
0000000000000000000000001000 0001 %d --127->129
Complement to data : Unsigned complement is directly converted to decimal data The highest sign is 0, The description is positive , It is also directly converted to decimal data Signed and highest bit is 1, The description is negative 1, Complement -1 Get inverse code
2, Inverse sign bit unchanged , The original code is obtained by bit inversion 3, Convert original code to decimal 11111111 Complement 11111110 Inverse code 10000001 Original code -1 Maximum +1 =
minimum value minimum value -1 = Maximum
Bitwise Operators :& | ~ ^ << >>
A & B By phase and
01101010 0x6A
01110110 0x76
01100010 0x62
A | B By phase or
01101010 0x6A
01110110 0x76
01111110 0x7E
~A Bitwise negation
01101010 0x6A
10010101 0x95
A^B Bitwise XOR Same as 0, The difference is 1
01101010 0x6A
01110110 0x76
00011100 0x1C
A<<n hold A The complement of moves to the left n position , Left discard , Right complement 0
01101010 0x6A << 4
10100000 0xA0
A>>n hold A The complement of moves to the right n position , Right discard , Left complement sign bit
11101010 0xEA >> 3
11111101 0xFD
practice 2: Enter an integer n, Take it 4~7 Bit set to 1010, Other bits remain unchanged 4 Bit first and 0 , Again or 1010 printf("%d\n",n & ~(0xf<<4)
| (0xA << 4)); 00000000 00001111 00000000 11110000 11111111 00001111 xxxxxxxx
0000xxxx 0xA << 4 00000000 10100000 xxxxxxxx 1010xxxx
function :
Is a piece of code with a certain function , yes C The smallest unit of management code in a language
Encapsulate the code into functions , It is easy to manage and call code
Classification of functions :
Standard library functions
C Language Standards Committee C Language provides some basic functions in the form of functions , Encapsulated in libc.so library , Added by default , Therefore, you need to include header files when using , In function name ( parameter ) To call the function
int isalnum(int c);
int isalpha(int c);
int isdigit(int c);
int islower(int c);
int isupper(int c);
int isxdigit(int c);
int toupper(int c);
int tolower(int c);
int abs(int j);
The following functions are encapsulated in libm.so Math library , When using, you need to add parameters at compile time -lm double sqrt(double x); double pow(double
x, double y); double ceil(double x); double floor(double x); double fabs(double
x); time_t time(time_t *t); function : Return from 1970-1-1 0:0:0 How many seconds have elapsed to runtime int system(const
char *command); function : Call system command system("clear"); int rand(void); function : Returns a random number void
srand(unsigned int seed); function : Random seed , Set the position of random number practice 3: obtain 10 individual [100,1000] Random number in range num =
rand()%901+100 [a,b) rand()%(b-a)+a practice 4: Randomly give a winning number of two-color ball Red ball 6 individual :1-33, Cannot repeat rand()%33+1
blue ball 1 individual :1-16 rand()%16+1 System function System function is not a function , Only some functions provided by the operating system in the form of function interface
memory management , signal processing , file IO, file management , Process management , Process communication , Thread management , Thread synchronization , Network Communications Third party library function Fees provided by third parties , Open source library functions github MD5
XML JSON Custom function : For easier code management , Reduce redundancy and encapsulate code into functions be careful : A function should be controlled as far as possible 50 Line left and right , One function, one function
Function declaration : The purpose of function declaration is to tell other code the calling format of the function return type Function name ( type 1 Variable name 1, type 2 Variable name 2...);
1,C Function names in languages are generally all lowercase , Separate with underline 2, If no parameters are required, it is recommended to write void, Don't leave it empty 3, If no return value is required, write void
4, If there is a function definition before the call , Then the function declaration can be omitted Implicit declaration :
When a function is called, there is no function declaration or definition , The compiler guesses the format of the function , The parameter list will guess based on the data provided at the time of call , The return value is guessed as int type How to avoid : Before calling , Provides a declaration or definition of a function
Function definition : return type Function name ( type 1 Variable name 1, type 2 Variable name 2...) { Function body ; return val; }
be careful :return Function of statement :1, Returns a value to the caller 2, End function execution function call : Function name ( Argument );
The return value is placed at the location of the call , It can be recorded with variables , It can also be displayed directly , If not, the record will be lost Function parameter transfer : 1, Data is transferred between arguments and formal parameters in the form of assignment ( One way value transfer )
2, Parameters defined within a function , Only belong to the function where it is located , This function cannot be used in the
3,return Statement actually places data in a common area ( Functions and callers share ), If you don't write return sentence , What the caller gets from this area is a random piece of garbage data
4, When an array is used as an argument to a function , Length will be lost , Additional length parameters are required to pass the length 5, The array is passed " Address transfer ", Functions and callers of functions can share arrays
practice 5: Implement a function , Find the maximum value in the array practice 6: Implement a function , Sort arrays
practice 7: Implement a function , Finds whether a value exists in the array , If it exists, the index of the data in the array is returned int find_arr(int arr[],int len,int
val);
After class practice
1, Implement a function , Determine whether an integer is prime , Call it to display 100~10000 All primes between
#include<stdio.h> int issushu(int n) { int i,m=1; for(i=2;i<n;i++) { if(n%i==0)
{ m=0; } } if(m==1) { printf("%d ",n); } } int main() { int i; for(i=100;i<=
10000;i++) { issushu(i); } return 0; }
2, Enter two dates (yyyy-mm-dd), Calculate the number of days between two dates
#include<stdio.h> int runyear(int year) { if(year%400==0||year%4==0&&year&100!=
0) { return 1; } else return 0; } int day(int *day1,int *day2) { int month[13]={
0,31,28,31,30,31,30,31,31,30,31,30,31}; int isdays=0,i; int *tmp; if(day1[0]==
day2[0]) { if(day1[1]==day2[1]) { isdays=day1[2]-day2[2]; isdays=(isdays<0)?-
isdays:isdays; } else { if(day1[1]<day2[1]) { tmp=day1; day1=day2; day2=tmp; }
for(i=day2[1]+1;i<day1[1];i++) { isdays+=month[i]; } isdays+=month[day2[1]]-day2
[2]+day1[2]; if(day2[1]<=2&&day1[1]>2) { if(runyear(day1[0])) isdays++; } } }
else { if(day1[0]<day2[0]) { tmp=day1; day1=day2; day2=tmp; } for(i=day2[0]+1;i<
day1[0];i++) { if(runyear(i)) isdays+=366; else isdays+=365; } for(i=day2[1]+1;i
<=12;i++) { isdays+=month[i]; } isdays+=(month[day2[1]]-day2[2]); if(day2[1]<=2)
{ if(runyear(day2[0])) isdays++; } for(i=1;i<day1[1];i++) { isdays+=month[i]; }
isdays+=day1[2]; if(day1[1]>2) { if(runyear(day1[0])) isdays++; } } return
isdays; } int main() { int isdays; int i=0; int day1[3],day2[3]; printf(
" Please enter two dates :\n"); scanf("%d-%d-%d",&day1[0],&day1[1],&day1[2]); scanf("%d-%d-%d",&
day2[0],&day2[1],&day2[2]); isdays=day(day1,day2); printf(" differ %d day ",isdays);
return 0; }```

Technology