C语言是一门面向过程的计算机编程语言
ANSI C C89
ISO C90
.c 是源文件, .h 是头文件
设置Ctrl+fn+f的输出结果到控制台方法:
工程--属性--链接器--系统--子系统--控制台
#include <stdio.h> //standard标准 input ouput
int main() //主函数(fn+f10运行)为程序的有且仅有一个的入口
{ //main前面的int表示main函数的调用返回一个int整型值
printf("Hello World!/n"); //print 打印 //function函数
return 0;
}
char 字符数据类型 1字节byte
short 短整型 2字节
int 整型 4字节
long 长整型 4字节
long long 更长的整型 8字节
float 单精度浮点型 4字节
dounle 双精度浮点型 8字节
%d 打印整型 %c打印字符型 %f打印浮点型 %p打印地址 %x以16进制打印数字
#include <stdio.h>
int main()
{
char a = ‘A’; //内存
printf("%d/n",a);//以字符形式打印
return 0;
}
#include <stdio.h>
int main()
{
printf("%d/n",sizeof(char));
printf("%d/n",sizeof(int));
printf("%d/n",sizeof(float));
return 0;
}
输出结果:144
局部变量和全局变量
#include<stdio.h>
int a = 100;
int main()
{
int a = 10;
printf("%d/n",a);
return 0;
}
输出结果:10
#include<stdio.h>
int main()
{
int num1 = 0;
int num2 = 1;
int sum = 0;
scanf("%d%d",&num1,&num2); //&取地址符号
sum = num1 + num2;
printf("sum=%d/n",sum);
return 0;
}
输出结果:1
变量的作用域和生命周期
int g_val = 2021;
#include <stdio.h>
int main()
{
//未声明的标识符,使用extern声明外部标识符号
extern int g_val;
printf("g_val=%d/n",g_val);
return 0;
}
生命周期:
#include <stdio.h>
int main ()
{
{
int a = 10;
printf("%d/n",a); //成功
}
printf("%d/n",a); //error
return 0;
}
### 常量
1. 字面常量 一个具体的值 如3.14
2. const修饰的常变量
const——常属性
如:const int n=10;//n是变量,但是又有常属性,所以我们说n是常变量
//int arr[n] = 10;//数组个数只能是常量,不可以是变量(包括常变量)
3. #define定义的标识符常量
例:
#define MAX 10
int main ()
{
int arr[MAX] = 10;
printf("%d\n",MAX);
return 0 ;
}
4. 枚举常量
枚举关键——enum
```
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
enum Color
{
RED,
YELLOW,
BLUE
};
int main()
{
enum Color color = BLUE;
printf("%d\n", BLUE);
return 0;
}
```
### 字符串
概念:以==""==引起的为字符串
存储:数组:char arr1[]="abcd",或char arr[]={'a','b','c',0};
注:字符串的结束标志是一个\0的转义字符,在计算字符串长度的时候\0是结束标志,不算作字符串的内容
```
char arr1[] = "abc";
//"abc"--包括'a','b','c','\0'--'\0'字符串的结束标志
char arr2[] = { 'a','b','c',0};
printf("%s\n", arr1);
printf("%s\n", arr2);
```
ASCII编码:一个字符对应一个数字,该数字称为ASCII码值
0:48 A:65 a:97
strlen()--string length 计算字符串长度
### 转义字符
\ +其他:
如
| 输入 | 表意 |
| :--- | ----------------------------------------- |
| \n | 换行 |
| \\\ | \ |
| \t | 水平制表 |
| \\' | ' |
| \\" | " |
| \ddd | 后接八进制数字,转为十进制后查询ASCII表 |
| \xdd | 后接十六进制数字,转为十进制后查询ASCII表 |
```
printf("%c\n", '\x16');//\x后的数字用16进制,流程同下
printf("%d\n", strlen("c:\test\32\test.c"));//显示13
printf("%c\n",'\132');
//\32--32是2个8进制数字
//32作为8进制代表的那个十进制数字,作为ASCII码值,对应的字符
//32--> 10进制26-->作为ASCII码值代表的字符
操作符
+ - * / %取余取模
<< 左移2进制位操作符
>> 右移2进制位操作符
& 按位与
| 按位或
^ 按位异或
int main()
{
int a = 3;//011
int b = 5;//101
int c = a&b;//001
printf("%d\n",c);
return 0;
}
= 赋值
==判断等于
a+=10
a&=11---a=a&10
+= -= /= *= &= |= ^= <<= >>=
单目操作符 !逻辑反操作 正号 负号 sizeof
双目操作符
三目操作符
交换整型数据:
添加变量
#include <stdio.h>
int main()
{
int a = 3;
int b = 5;
int c = 0;
printf("交换前:a=%d,b=%d\n", a, b);
c = a;
b = a;
a = c;
printf("交换前:a=%d,b=%d\n", a, b);
return 0;
}
加法
#include <stdio.h>
int main()
{
int a = 3;
int b = 5;
printf("交换前:a=%d,b=%d\n", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("交换前:a=%d,b=%d\n", a, b);
return 0;
}
异或运算
#include <stdio.h>
int main()
{
int a = 3;
int b = 5;
printf("交换前:a=%d,b=%d\n", a, b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("交换前:a=%d,b=%d\n", a, b);
return 0;
}
找到数组里只出现一次的数字:
注意:for(i=0;i<sz;i++)此处不能有;分号
{
int arr[] = { 1, 2, 3, 4, 5, 1, 2, 3, 4 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);//stlen
for (i = 0; i < sz; i++)
{
int j = 0;
int count = 0;
for (j = 0; j < sz; j++)
{
if (arr[i] == arr[j])
{
count++;
}
}
if (count == 1)
{
printf("只出现一次的数字是 %d\n", arr[i]);
}
}
return 0;
}
0^a=a a^a=0 异或运算满足交换律
//int arr[] = { 1, 2, 3, 4, 5, 1, 2, 3, 4 };
//int i = 0;
//int ret = 0;
//int sz = sizeof(arr) / sizeof(arr[0]);
//for (i = 0; i < sz; i++)
//{
// ret = ret^arr[i];
//
//}
//printf("只出现一次的数字是 %d\n", ret);
return 0;
}
关机命令:
shutdown -s -t 60 60秒后关机
shutdown -a 取消关机
char input[20] = { 0 };
again:
system("shutdown -s -t 60");
printf("一分钟内输入我是猪,不然关机\n");
scanf("%s", input);
if (strcmp(input, "我是猪") == 0)
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
0