C语言 汇总笔记(从零开始自学)
1.打印Hello World
#include <stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
2.变量
#include <stdio.h>
int main()
{
int a;
char b;
float c;
double d;
a = 520;
b = 'H';
c = 3.14;
d = 3.141592653;
printf("整形:%d\n", a);
printf("字符型:%c\n", b);
printf("单精度浮点型:%.2f\n",c);
printf("双精度浮点型:%.9f\n", d);
return 0;
}
3.常量和宏定义
#include <stdio.h>
#define URL "www.baidu.com"
#define NAME "百度"
#define BOSS "李彦宏"
#define YEAR 2020
int main()
{
printf("年份:%d\n网站:%s\n名称:%s\nCEO:%s\n", YEAR,URL, NAME, BOSS);
return 0;
}
4.数据类型
#include <stdio.h>
int main()
{
int i;
char j;
float k;
i = 123;
j = 'C';
k = 3.14;
printf("int:%d\n",sizeof(int));//4字节
printf("%d\n", sizeof(i));//4字节
printf("char:%d\n", sizeof(char));//1字节
printf("%d\n", sizeof(j));//1字节
printf("float:%d\n", sizeof(float));//4字节
printf("%d\n", sizeof k);//4字节
return 0;
}
#include <stdio.h>
int main()
{
printf("short:%d\n", sizeof(short));//字节:2
printf("int:%d\n",sizeof(int));//字节:4
printf("long:%d\n", sizeof(long));//字节:4
printf("long long:%d\n", sizeof(long long));//字节:8
printf("char:%d\n", sizeof(char));//字节:1
printf("_Bool:%d\n", sizeof (_Bool));//字节:1
printf("float:%d\n", sizeof(float));//字节:4
printf("double:%d\n", sizeof(double));//字节:8
printf("long double:%d\n", sizeof(long double));//字节:12
return 0;
}
-
signed意思为有符号的,也就是第一个位代表正负,剩余的代表大小,例如:signed int 大小区间为-128-127
-
unsigned意思为无符号的,所有的位都为大小,没有负数,例如:unsigned int 大小区间为:0-255
-
默认为signed
#include <stdio.h>
int main()
{
signed short i;
unsigned short j;
i = -1;
j = -1;
printf("有符号的:%d\n",i);
printf("无符号的:%u\n", j);
return 0;
}
//有符号的:-1
//无符号的:65535
5.取值范围
二进制、十进制、十六进制的表示
1、十六进制(英文dao名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。它由0-9,A-F组成,字母不区分大小写。
2、十六进制与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。
符号位
#include <stdio.h>
#include<math.h>
int main()
{
int result = pow(2, 32)-1;
printf("result:%d\n", result);
return 0;
}
//result:2147483647
#include <stdio.h>
#include<math.h>
int main()
{
unsigned int result = pow(2,32)-1;
printf("result:%u\n", result);
return 0;
}
//result:4294967295
6.字符和字符串
字符
#include <stdio.h>
int main()
{
char a = 'A';
char b = 66;
char c = 97;
printf("%c=%d\n", a, a);
printf("%c=%d\n", b, b);
printf("%c=%d\n", c, c);
return 0;
}
//A=65
//B=66
//a=97
#include <stdio.h>
int main()
{
char height;//取值范围:-128~127
unsigned char heights;
height = 188;
heights = 188;
printf("错误身高:%d\n", height);
printf("正确身高:%d\n", heights);
return 0;
}
//错误身高:-68
//正确身高 : 188
字符串
#include <stdio.h>
int main()
{
char name[] = { 'A','P','P','L','E','\0' };
char names[] = { "ORANGE" };
printf("%s\n", name);
printf("%s\n", names);
return 0;
}
//APPLE
//ORANGE
7.运算符
算术运算符
关系运算符
逻辑运算符
复合的赋值运算符
自增和自减运算符
#include<stdio.h>
int main()
{
int a = 5;
int b;
b = ++a;
printf("b= %d\n",b);//6
int c = 5;
int d;
d = c++;
printf("d= %d\n", d);//5
return 0;
}
条件运算符
#include<stdio.h>
int main()
{
int max = 0;
printf("请输入两个整数:");
int a = 0;
int b = 0;
scanf("%d", &a);
scanf("%d", &b);
//if (a > b)
//{
// max = a;
//}
//else
//{
// max = b;
//}
max = a > b ? a : b;
printf("最大的值为:%d", max);
return 0;
}
//请输入两个整数:3213 32
//最大的值为 : 3213
8.if语句
#include <stdio.h>
int main()
{
int a;
printf("请输入你的成绩:");
scanf("%d", &a);
if (a>=90 && a<=100)
{
printf("优");
}
else if (a >= 80 && a < 90)
{
printf("良");
}
else
{
printf("及格");
}
return 0;
}
//请输入你的成绩:89
//良
9.switch语句
#include <stdio.h>
int main()
{
char a;
printf("请输入你的成绩:");
scanf("%c", &a);
switch (a)
{
case 'A':
printf("优");
break;
case 'B':
printf("良");
break;
case 'C':
printf("中等");
break;
case 'D':
printf("及格");
break;
default:
printf("不及格");
break;
}
return 0;
}
//请输入你的成绩:B
//良
10.while语句和do while语句
#include <stdio.h>
int main()
{
int i = 1;
int sum = 0;
while (i<=100)
{
sum = sum + i;
i = i + 1;
}
printf("结果是:%d", sum);
return 0;
}
//结果是:5050
#include <stdio.h>
int main()
{
int count = 0;
printf("请输入一行英语字符:");
while (getchar()!='\n')
{
count = count + 1;
}
printf("你总共输入%d个字符!\n", count);
return 0;
}
//请输入一行英语字符:iphone12
//你总共输入8个字符!
#include <stdio.h>
int main()
{
int a = 10;
do
{
printf("a 的值: %d\n", a);
a = a + 1;
} while (a < 20);
return 0;
}
//a 的值: 10
//a 的值: 11
//a 的值: 12
//a 的值: 13
//a 的值: 14
//a 的值: 15
//a 的值: 16
//a 的值: 17
//a 的值: 18
//a 的值: 19
11.for语句和循环嵌套
#include<stdio.h>
int main()
{
for (int i = 1; i <= 10; i++)
{
printf("%d\n",i);
}
return 0;
}
//1
//2
//3
//4
//5
//6
//7
//8
//9
//10
#include<stdio.h>
int main()
{
for (int i = 1; i <= 3; i++)
{
for (int j = 1; j <= 3; j++)
{
printf("i=%d,j=%d\n", i, j);
}
}
return 0;
}
//i = 1, j = 1
//i = 1, j = 2
//i = 1, j = 3
//i = 2, j = 1
//i = 2, j = 2
//i = 2, j = 3
//i = 3, j = 1
//i = 3, j = 2
//i = 3, j = 3
12.break语句和continue语句
continue语句
#include<stdio.h>
int main()
{
for (int i = 1; i <= 5; i++)
{
if (i == 3)
{
printf("Hello World\n");
continue;
}
printf("%d\n", i);
}
return 0;
}
//1
//2
//Hello World
//4
//5
break语句
#include<stdio.h>
int main()
{
for (int i = 1; i <= 5; i++)
{
if (i == 3)
{
printf("Hello World\n");
break;
}
printf("%d\n", i);
}
return 0;
}
//1
//2
//Hello World
13.goto语句
#include<stdio.h>
int main()
{
int i;
for (i = 0; i <= 10; i++)
{
if (i > 5)
{
goto A;
}
}
A:printf("i=%d", i);
return 0;
}
//i = 6
14.数组
#include<stdio.h>
int main()
{
int a[5];
int b[] = {4,3,2,1,0};
int c[] = { [1] =315,[2] = 5213 ,[3]=326,[0] = 313 ,[4] = 66 };
for (int i = 0; i <5; i++)
{
a[i] = i;
}
for (int i = 0; i < 5; i++)
{
printf("%d ", a[i]);
}
printf("\n");
for (int i = 0; i < 5; i++)
{
printf("%d ",b[i]);
}
printf("\n");
for (int i = 0; i < 5; i++)
{
printf("%d ", c[i]);
}
return 0;
}
//0 1 2 3 4
//4 3 2 1 0
//313 315 5213 326 66
15.字符串处理函数
#include<stdio.h>
int main()
{
char str1[10] = { 'A','P','P','L','E','\0' };//初始化字符数组的每个元素
char str2[] = { 'A','P','P','L','E','\0' };//可以不写元素的个数,因为编译器会自动计算
char str3[] = { "APPLE" };//使用字符串常量初始化字符数组
char str4[] = "APPLE";//使用字符串常量初始化,可以省略大括号
printf("str1=%s\n", str1);
printf("str2=%s\n", str2);
printf("str3=%s\n", str3);
printf("str4=%s\n", str4);
return 0;
}
//str1=APPLE
//str2=APPLE
//str3=APPLE
//str4=APPLE
#include<stdio.h>
#include<string.h>
int main()
{
char str[] = "I Love You!";
printf("sizeof str=%d\n", sizeof(str));
printf("strlen str=%d\n", strlen(str));
return 0;
}
//sizeof str = 12 包含字符串最后一个字符\0
//strlen str = 11 不包含字符串最后一个字符\0
strcpy
#include<stdio.h>
#include<string.h>
int main()
{
char str1[] = "Remember ONE";
char str2[] = "Remember TWO";
char str3[100];
strcpy(str1, str2);/* 复制 str2 到 str1 */
strcpy(str3,"Copy Successful");/* 复制 Copy Successful 到 str3 */
printf("str1:%s\n",str1);
printf("str2:%s\n",str2);
printf("str3:%s\n",str3);
return 0;
}
//str1:Remember TWO
//str2 : Remember TWO
//str3 : Copy Successful
注意:str1和str2的字符数组长度一定要相同,str3的字符数组长度也要大于要复制字符数组的长度,如果长度不相同会出现报错的情况
strncpy
#include<stdio.h>
#include<string.h>
int main()
{
char str1[] = "Remember ONE";
char str2[30];
strncpy(str2, str1,8);
str2[8] = '\0';//追加一个结束符
printf("str2=%s\n", str2);
return 0;
}
//str2=Remember
strcat
#include<stdio.h>
#include<string.h>
int main()
{
char str1[15] = "Hello ";//这里要设置长度,vs2019会溢出
char str2[] = "World!";
strcat(str1, str2);
printf("str1:%s\n", str1);
return 0;
}
//str1:Hello World!
strncat
#include<stdio.h>
#include<string.h>
int main()
{
char str1[15] = "Hello ";//这里要设置长度,vs2019会溢出
char str2[] = "World!";
strncat(str1,str2,5);
printf("str1:%s\n", str1);
return 0;
}
//str1:Hello World
strcmp
#include<stdio.h>
#include<string.h>
int main()
{
char str1[] = "Fly";
char str2[] = "Fly";
if (!strcmp(str1, str2))//strcmp(str1, str2) 返回为0 取反为1
{
printf("两个字符串完全一致\n");
}
else
{
printf("两个字符串存在差异\n");
}
return 0;
}
//两个字符串完全一致
strncmp
#include<stdio.h>
#include<string.h>
int main()
{
char str1[] = "Fly";
char str2[] = "Fly!";
if (!strncmp(str1, str2,4))//strcmp(str1, str2) 返回为0 取反为1
{
printf("两个字符串完全一致\n");
}
else
{
printf("两个字符串存在差异\n");//加了!
}
return 0;
}
//两个字符串存在差异
16.二维数组
#include<stdio.h>
int main()
{
int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };//3行4列
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
//1 2 3 4
//5 6 7 8
//9 10 11 12
#include<stdio.h>
int main()
{
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};//3行4列
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
//1 2 3 4
//5 6 7 8
//9 10 11 12
#include<stdio.h>
int main()
{
int a[3][4] = {{1},{5},{9}};//3行4列
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
//1 0 0 0
//5 0 0 0
//9 0 0 0
#include<stdio.h>
int main()
{
int a[3][4] = {0};//3行4列
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
//0 0 0 0
//0 0 0 0
//0 0 0 0
#include<stdio.h>
int main()
{
int a[3][4] = { [0] [0] = 1,[1][1] = 2,[2][2] = 3};//3行4列
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
//1 0 0 0
//0 2 0 0
//0 0 3 0
#include<stdio.h>
int main()
{
int a[][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };//3行4列
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
//1 2 3 4
//5 6 7 8
//9 10 11 12
17.指针
#include<stdio.h>
int main()
{
char a = 'F';
int f = 123;
char *pa = &a;
int *pb = &f;
printf("a=%c\n", *pa);
printf("f=%d\n", *pb);
*pa = 'C';
*pb += 1;
printf("now a=%c\n", *pa);
printf("now f=%d\n", *pb);
printf("sizeof pa=%d\n", sizeof(*pa));//*pa获取的是a的大小 a是char类型当然是1个字节
printf("sizeof pb=%d\n", sizeof(*pb));//*pb获取的是f的大小 f是int类型当然是4个字节
printf("sizeof pa=%d\n", sizeof(pa));//4个字节存放一个地址
printf("sizeof pb=%d\n", sizeof(pb));//4个字节存放一个地址
printf("the addr of a is:%p\n",pa);//%p打印地址类型的数据
printf("the addr of a is:%p\n", pb);//%p打印地址类型的数据
return 0;
}
//a = F
//f = 123
//now a = C
//now f = 124
//sizeof pa = 1
//sizeof pb = 4
//sizeof pa = 4
//sizeof pb = 4
//the addr of a is : 00BBF6EF
//the addr of a is : 00BBF6E0