1.C语言关键字
1.数据类型关键字(12个)
char(字符型) short(短整型) int(整型) long(长整型)
float(单精度浮点型) double(双精度浮点型 )
unsigned(无符号) signed(有符号)
struct(定义结构体) union(定义联合体) enum(枚举) void(空类型)
2.控制语句关键字(12个)
if,else, switch, case, default,
for, do, while, break, continue, goto(无条件跳转语句), return
3.存储类关键字(5个)
auto(局部变量),extern(声明),register(寄存器变量),static(静态变量),const(常量定义)
4.其他关键字(3个)
sizeof,typedef(数据别名),volatile
2.数据类型
2.1整型: int
1.整型变量的定义和输出
- %d:输出一个有符号的10进制int类型
- %o:输出8进制的int类型
- %x : 输出16进制的int类型,字母以小写输出
- %X : 输出16进制的int类型,字母以大写输出
- %u: 输出一个10进制的无符号数
案例1:输出输出整型变量
#include<stdio.h>
int main()
{//定义变量int a = 0;unsigned int b = 10;//调用输入函数,键盘获取值赋值给ascanf("%d",&a);//打印printf("无符号数据:%u\n",b);printf("十进制输出:%d\n",a);printf("八进制输出:%o\n",a);printf("十六进制输出:%x\n",a);printf("十六进制输出:%X\n",a);return 0;
}
2.2其他整型类型
1.一个字节八个比特位。
- short(短整型):2字节
- int(整型): 4个字节
- long(长整型):Windows为4个字节
- long long(长长整型):8个字节
2.不同操作系统所占的字节数不同,但都满足short<= int <= long。
3.注意:当一个小的数据类型赋值给一个大的数据类型,不会出错,因为编译器会自动转化。但当一个大的类型赋值给一个小的数据类型,那么就可能丢失高位。
案例2:
#include <stdio.h>
int main()
{//短整型short a = 10;//长整型long b = 20;//长长整型long long c = 30;//输出格式printf("%hd\n",a);//10printf("%ld\n",b);//20printf("%lld\n",c);//30
}
2.3字符型:char
占位一个字节。
ASCII码表:0:48 , A:65 ,a: 97
案例3:字母大小写切换
#include <stdio.h>int main ()
{char ch;//输入一个小写字母scanf("%c",&ch);//a//在ASCII表中,A和a相差32printf("%c",ch-32);//Areturn 0;
}
2.4实型(浮点型):float,double
实型变量也可以称为浮点型变量,浮点型变量是用来存储小数数值的。在C语言中,浮点型变量分为两种:单精度浮点数(float)、双精度浮点数(double),
但是double型变量所表示的浮点数比float型变量更精确。
- float:占4个字节,31位有效数字
- double:占8个字节,63~64位有效数字
案例4:
#include <stdio.h>int main(){//单精度浮点型float pi = 3.14159;//浮点型默认保留六位小数printf("%f\n",pi);//3.141590//设置保留两位小数,会四舍五入printf("%.2f\n",pi);//3.14return 0;
}
案例5:浮点型的输入输出
#include <stdio.h>int main(){float pi;double a = 123.456;scanf("%f",&pi);//1.2222245//保留三位小数printf("%.3f\n",pi);//1.222printf("%lf\n",a);//123.456000return 0;
}
案例6:计算圆的面积和周长
#include <stdio.h>int main(){float pi = 3.14159;//定义半径,周长,面积float r;float s;float l;scanf("%f",&r);//2s = pi * r * r;l = 2*pi*r;printf("面积为:%.2f\n",s);//面积为:12.57printf("周长为:%.2f\n",l);//周长为:12.57return 0;
}
2.5常量
1.const修饰的变量为常量
const float pi = 3.14;
2.使用#define定义:
#define PI 3.1415
3.定义变量是可以使用auto修饰,尽管是可以省略的
2.6 C运算符的种类,运算优先级和结合性
1.常见运算符 的分类
- 算术运算符:用于处理四则运算
- 赋值运算符:用于将表达式的值赋给变量
- 比较运算符: 用于表达式的比较,并返回一个真值或假值
- 逻辑运算符: 用于根据表达式的值返回真值或假值
与(&&), 或(||), 非(!)
- 位运算符: 用于处理数据的位运算
- sizeof运算符: 用于求字节数长度
2.运算符优先级
优先级 | 运算符 |
1 | [] () .(成员选择) -> |
2 | -(负号) ~ ++ -- *(指针变量) & ! (类型) sizeof |
3 | / * % |
4 | + - (减法) |
5 | << >> |
6 | > >= < <= |
7 | == != |
8 | &(按位与) |
9 | ^(按位异或) |
10 | | (按位或) |
11 | && (逻辑与) |
12 | || (逻辑或) |
13 | ?(条件运算符) |
14 | = /= *= %= += -= <<= >>= &= ^= |= |
15 | ,(逗号运算符) |
2.7不同数据类型之间的转换
案例1:隐式转换
#include <stdio.h>int main(){int a = 1;float b = 1.233;double c;//隐式转换c = a* b;printf("%lf",c);//1.233000return 0;
}
案例2:强制转换
#include <stdio.h>int main(){int a;double b = 1.222;a = (int)b;//强制转换 不会四舍五入printf("%d\n",a);//1return 0;
}
3.输入输出函数的调用
1.print函数:
打印格式 | 对应数据类型· | 含义 |
%d | int | 接受整数值并将它表示为有符号的十进制整数。 |
%hd | short int | 短整数 |
%hu | unsigned short | 无符号短整数 |
%o | unsigned int | 无符号8进制整数。例如:0123 |
%u | unsigned int | 无符号10进制整数。 |
%x,%X | unsigned int | 无符号16进制整数,x是小写,X对应的是大写 |
%f | float | 单精度浮点数 |
%lf | double | 双精度浮点数 |
%c | char | 字符型:可以把输入的数字按照ASCII码相应转换为对应的字符 |
%% | % | 输出一个百分号 |
2.scanf函数
&符号表示取地址。
scanf("%d",&a);
4.选择结构程序设计
1.if语句的演示:
#include <stdio.h>int main(){int score;scanf("%d",&score);if(score > 700){printf("我要上清华\n");} else if(score > 680){printf("我要上北大\n");}else{printf("我要上蓝翔\n");}return 0;
}
2.switch语句:
#include <stdio.h>int main(){int a;scanf("%d",&a);//当switch遇到break表示结束switch (a) {case 1:printf("您输入的值是: 1\n");break;case 2:printf("您输入的值是: 2\n");break;default:printf("输入未知\n");break;}return 0;
}
3.三目运算符
#include <stdio.h>int main(){int a,b;scanf("%d%d",&a,&b);//三目运算符,表达式为真输出a,反之输出bprintf("最大值为: %d",a > b ? a : b);return 0;
}
5.循环结构程序设计
1.for循环:
案例1:计算数字之和
#include <stdio.h>int main ()
{int sum = 0;for(int i = 0; i<= 100;i++){sum += i;}printf("100以内的数字和为: %d",sum);return 0;
}
案例2:找出所有与7有关的数字
#include <stdio.h>int main() {for (int i = 1; i < 100; i++) {if (i % 7 == 0 || i % 10 == 7 || i / 10 == 7) {printf("敲桌子\n");} else {printf("%d\n", i);}}return 0;
}
2.while循环
案例1:100到999之间的水仙花数
#include <stdio.h>int main(){int i =100;int a ,b,c;while (i<1000){//百位a = i/100;//十位b = i /10%10;//个位c = i%10;if (a*a*a + b*b*b + c*c*c == i){printf("水仙花数: %d\n",i);}i++;}return 0;
}
3. do while循环
案例1:调用函数库并实现水仙花数
#include <stdio.h>
#include <math.h>
int main(){int i =100;int a,b,c;do {a = i/100;b = i /10 %10;c = i %10;//调用math的函数库if (pow(a,3) + b*b*b + c*c*c == i){printf("水仙花数为: %d",i);//水仙花数为: 153水仙花数为: 370水仙花数为: 371水仙花数为: 407}i++;} while (i<1000);return 0;
}
4. break和continue语句
- break语句在循环当中,作用是跳出当前内循环语句,执行后面的代码。
- continue语句:立即终止本次循环,并执行下一次循环。
案例1:九九乘法表
#include <stdio.h>int main() {for (int i = 1; i < 10; i++) {for (int j = 1; j <i+1; j++) {printf("%d * %d = %d ", j, i, i * j);}printf("\n");}return 0;
}
6.数组的定义和引用
1.数组的定义
格式:数据类型 数组名[元素个数];
例如:
指定长度,默认填充为0。
int arr1[10];
指定长度和赋值。
//定义数组时赋值int arr2[10] = {1,2,3,4,5,6,7,8,9,10};
可以不定义数组长度,直接赋值 。
int arr3[] = {1,2,3,4,5,6,7,8,9,10};
案例1:
#include <stdio.h>int main(){int arr1[10];//定义数组时赋值int arr2[10] = {1,2,3,4,5,6,7,8,9,10};for (int i = 0; i < 10; i++) {printf("%d\n",arr2[i]);}return 0;
}
2.数组常见问题
- c语言不支持动态数组,数组必须在编译时定义长度。
- 长度支持常量定义。
案例1:冒泡排序
#include <stdio.h>int main(){int arr[10] = {22,33,55,11,565,78,1,43,8,9};int temp;for(int i = 0; i < 9; i++) {for (int j = i+1; j < 10; j++) {if (arr[i]>arr[j]){temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}for (int i = 0; i < 10; i++){printf("%d ",arr[i]);}
}
3.二维数组的定义和使用
格式: 数据类型 数组名[行][列]
案例1:
#include <stdio.h>int main(){//数据类型 数组名[行][列]int arr[2][3] ={{10,20,30},{40,50,60}};for (int i = 0; i < 2; ++i){for (int j = 0; j < 3; ++j){printf("%d ",arr[i][j]);}printf("\n");}return 0;
}
6.1 字符串和字符数组
1.创建字符串:
在定义字符串时,末尾会添加字符串结束标志\0
所以在创建字符串时,要多设置一个数组长度。
char arr2[12] = "hello world";//创建字符串
注意:字符串和字符创建的区别
char ch = 'a';//创建字符
字符串的打印方式:
%s是一个占位符表示输出一个字符串遇到 \0 表示输出停止。
//定义字符串char arr2[12] = "hello world";printf("%s",arr2);·
2.创建字符数组:
char arr1[10] = {'h','e','l','l','o','w','o','r','l','d'};//字符数组
字符串数组的打印方式:
//定义字符串数组char arr1[10] = {'h','e','l','l','o','w','o','r','l','d',};for(char c : arr1){printf("%c ",c);}
3.字符串 和字符数组区别
- c语言中没有字符串这种数据类型,可以通过char的数组来替代。
- 字符串一定是一个char的数组,但char的数组未必是字符串。
- 数字0(和字符‘\0’等价)结尾的char数组就是一个字符串,但如果char数组没有以数字0结尾,那么就不是一个字符串,只是普通字符数组,所以字符串是一种特殊的char的数组。
(即:字符数组可以手动添加一个\0,使之转换为字符串。)
案例1:常见字符串的使用
//静态字符串打印char arr[] = "hello world \n";printf("%s", arr);//不支持动态字符串打印char str[100] = {0};//scanf函数在接收数据时遇到空格或者换行表示结束scanf("%s",str);//hello worldprintf("%s",str);//helloreturn 0;
案例2:判断两个字符串是否相同
char arr1[] = "hello world";char arr2[] = "hello world";int i =0;while (arr1[i] == arr2[i]){//判断是否到字符串尾if (arr1[i] == '\0'){printf("两个字符串相同。");return 0;}i++;}printf("两个字符串不同!");return 0;