#C语言基础知识
一、简单程序的的一般形式 #include//标准输入输出文件,让当前文件有文件的功能
//main函数是程序的入口,一个程序有且只有一个main函数
二、基本数据类型
1、整型
(1)short 短整数类型,占两个字节,取值范围,五位数
1)无符号类型(不包含负整数)
2)有符号类型(包含负整数)
(2)int 整数类型,占四个字节,取值范围,十位数
(3)long 长整型,32位的系统占四个字节,64位的系统占八个字节,取值范围,超过十位数
2、浮点型
(1)float 单精度浮点数类型,占四个字节,6位有效数字
(2)double 双精度浮点类型,占八个字节,15位有效数字
注:系统默认类型是double类型,在使用float类型时,需要在数字后面加f
3、字符型
(1)char占一个字节,单引号括起来
(2)用以存储字符或标点等字符
(3)字符在计算机中采用二进制的ASCII码存储,字符可以通过对应的ASCII码值来比较大小
4、总结
(1)整型有四种类型,short两个字节,五位数 int四个字节,十位数 long超过十位数
(2)浮点型有两种,float四个字节,6位有效数字 double8个字节,15位有效数字(系统默认的是double类型)
(3)char用于存储字符及标点
三、常量、变量
1. 常量:程序运行期间值不能被改变的值
比如:
3
5
2.3
'R'
2. 变量:程序运行期间值能被改变的值
1) 变量代表一个存储区域
2) 存储区域内存储的内容就是变量的值
3) 变量的值可以在程序运行期间改变
3. 变量的定义
1) 变量定义
格式
数据类型 变量名 = 初始值;
int age = 25;
int 指整数类型
age 指变量名
= 指将后面的初始值赋给变量
25 指初始值
; 指语句结束
2) 变量、常量命名规则
1. 只能由数字、字母、下划线组成,并且不能以数字开头
2. 不可以与系统保留字同名
3. 见名知意
4. 不能使用重复的变量名
5. 驼峰命名法(myTom)
四、运算符
1. 赋值运算符
用于给变量赋值,将等号右边的值赋给等号左边的变量
练习:如何交换两个int型变量的值
int a=1,b=2,c;
c=a;
a=b;
b=c;
2. 算术运算符
+ - * / %
1) 除号右边的数字不能为0
2) 取余运算符两边必须都是整数
3) 两个整数相除,得到的是整数
4) 小数和整数相除,得到的小数
++ --
1) ++或--在前,先执行++或--,后运算(先加后用)
2) --或++在后,先运算,后执行++或--(先用后加)
3. 复合运算符
+= -= *= /= %=
1) a += b; ==> a = a+b;
2) a -= b; ==> a = a-b;
....
4. 条件运算符
格式: 条件表达式 ? 真结果表达式 : 假结果表达式
比如:
int a = 3;
int b = 5;
int c = 0;
c = a > b ? a : b;
附加:
int a=1; (char result;)
(char)result =a == 1 ? 'b' : 'c';
printf("%c\n",result+a);
5. 总结:必须掌握的内容
1) = +=
2) ++ --
3) 条件运算符
4) == 两个等号是判断
五. 表达式
1. 常量、变量、运算符的组合
2. 每个表达式都会有运算结果
3. 例如: 3+5, a+b
4. 语句,用结束处的一个分号表示,语句是程序执行的最小单位
六. 输入、输出函数
1. 输出函数 printf()
1) printf函数被设计用于显示格式串,并在该串中的指定位置插入可能的值
2) 格式:
printf("格式串",表达式1,表达式2,...);
3) 格式串中包含普通字符和转换说明
1. 转换说明以字符%开头。是用来表示打印过程中待填充的占位符,如果后面跟的是d,表明打印时要在这个位置打印出一个整形数据。
2. 普通字符,会将普通字符完整的打印出来
4) 转换说明符
%d 整型
%hd 短整型
%ld 长整形
%f 单、双精度浮点数
%c 字符
5) 格式转换控制
printf("%04d",12) 最小字段占四个位置,不足用0补齐,如果不加0试试效果
printf("%-4d",112);最小字段宽度占四个位置,左对齐
printf("%4.2f",1.2345);
最小字段宽度占四个位置,保留小数点后两位
注:
\n换行 %与d之间的数字,表明打印的这个数字要占相应的位数
int a=1; char result;
result = a == 1 ? 'b' : 'c';
printf("%-3c\n",result);
//在float类型中,%与d之间的数字,整数部分代表总共占的位数,小数点后面的代表小数所占得位数
float a = 1.6f;
printf("%4.1f\n",a);
6) 转义序列
\n 回车符
\\ 打印\
%% 打印%
\‘ 打印’
2. 输入函数 scanf()
1) scanf以回车确定输入结束,并且只接受大键盘的回车,不接受小键盘的回车
2) scanf("%d,%d",&num1,&num2); 输入的时候两个整型数之间必须有『,』,格式串中除了转换说明的其他字符都要从控制台输入
3) 不要在格式串后面加『\n』字符,会抵消掉人工输入的回车
#分支语句(布尔类型、关系运算符、逻辑运算符、if语句分支、switch语句、枚举)
一.布尔类型
1.只有两种真和假
2.赋值true和非0的值 为真
3.赋值0 为假 (只有0和false为假)
4.Xcode默认没有布尔类型,需要导入文件,需要导入<stdboll.h>头文件
例:
// bool k = false;
// printf("k = %d\n",k);
二.关系运算符
> >= < <= == !=
他们最终结果一般使用布尔类型的变量来接收
例:
// bool result = 5==6;
// printf("result = %d\n",result);
三.逻辑运算符
逻辑与 && (全真为真)
逻辑或 || (一真为真)
逻辑非 ! (取反值)
例:
// bool result = 8>6 && 6>3;
// printf("result = %d\n",result);
//
// bool result1 = true;
// result1 = !result1;
// printf("result1 = %d\n",result1);
四.if语句分支
if(判断条件){
执行语句;(条件为真时执行语句)
}
else if(判断条件){
执行语句;
}
else
执行语句;
例:
char a = ' ';
printf("输入一个字符:");
scanf("%c",&a);
if (48 <= a && a <= 57) {
printf("This is a number\n");
}
else if (97 <= a && a <= 122) {
printf("This is a lower\n");
}
else if (65 <= a && a <= 90) {
printf("This is a upper\n");
}
else{
printf("no know\n");
}
switch语句
/*
多重选择,比if-else判断条件多
格式:switch(表达式){
case 可能的值:{
执行语句:
}break;
case 可能的值:{
执行语句:
}break;
default:{
}break;
}
五.switch语句
多重选择,比if-else判断条件多
格式:switch(表达式){
case 可能的值:{
执行语句:
}break;
case 可能的值:{
执行语句:
}break;
default:{
}break;
}
六.枚举
1.枚举目的:提高程序的可读性
2.枚举一般放在头文件下面,属于全局常量
3.enum 枚举名{ 枚举值 = 0/a,枚举值(默认1或b),枚举值(默认2或c),枚举值(默认3或d),}
例:
enum season{ sp=1, su, au, wi};
int a = 0;
printf("输入一个数字:");
scanf("%d",&a);
switch (a) {
case sp :
printf("spring 春天\n");
break;
case su :
printf("summer 夏天\n");
break;
case au :
printf("autumn 秋天\n");
break;
case wi :
printf("winter 冬天\n");
break;
default:
printf("不知道是哪天\n");
break;
#.循环语句(while循环、do...while循环、break,continue、for循环)
循环:满足条件时,反复执行的某一动作
while(较常用)
do..while (不常用)
for (最常用)
1.while循环
格式:
while(判断条件){
循环语句;
}
只要条件成立,循环体会一直执行
循环体执行结束,会重新判断条件是否成立
例:
int a = 0;
scanf("%d",&a);
while (a > 6) {
printf("never give up");
}
2.do...while循环 (直到型循环)
先执行一次循环体,再进行判断,成立会继续执行
格式:
do{
循环体;
}while(判断条件);
例:
输出1到100
int i = 1;
do {
printf("%3d",i);
i++;
} while (i<=100);
3.break,continue
break: 跳出while循环 (结束的是整个循环,不再往下执行)
continue: 结束本次循环 (结束的是这次循环,continue下面未执行的循环语句也结束,重新判断条件)
例:
int i = 0;
while (1) {
if (i==100) {
break;//结束整个循环
} i++;
if (i==9) {
continue;//结束的是本次循环,及i=9时这次循环
}
printf("%d\n",i);
}
4.for循环
for(初始值;判断条件;让初始值自加或自减)
{
循环语句;
}
1.首先确定初始值,确定循环的起始点
2.看判断条件,条件成立,执行循环体;不成立,直接跳出for循环
3.循环体结束后,看自加或自减
4.自加或自减后,判断条件是否成立;成立,执行循环体,不成立,跳出循环
例:
打印9x9乘法表
外层循环i表示要打印多少行,内层循环j表示每行要打印多少个
for (int i = 1; i<10; i++) {
for (int j = 1; j<=i; j++) {
printf("%d*%d=%-3d ",j,i,i*j);
}
printf("\n");
}
例:S(n)=a+aa+aaa+aaaa+...+aaaa..(n个a)
int a = 0, n = 0,S = 0,b = 0;
printf("输入n和a的值:");
scanf("%d,%d",&n,&a);
for (int i = 1; i <=n;i++)
{
b = 10*b + a;
S +=b;
}
printf("%d",S);
printf("\n");
#一维数组,随机数,宏定义,冒泡排序
1.一维数组
数组:能够存放多个同类型的数值,相当于一个存放数值的容器
格式:int list[4] = {1,2,3,4};
数据类型 数组名 [数组容量] = {赋初值};
例:
通过for循环改变下标,从而有顺序的输出数组中的值
int ageOfAll[6] = {1,2,3,4,5,6};
// int ageOfAll002 = ageOfAll[1];
ageOfAll[1] = 9;
// printf("年龄是:%d\n",ageOfAll[1]);
for (int i =0; i<6; i++) {
int temp =ageOfAll[i];
printf("%d",temp);
}
例:
//创建一个数组,存放班里所有人的工号
int number[12]={0};
printf("工号是:");
for (int i=0;i<12;i++) {
number [i]=i+1;
}
for (int i=0;i<12;i++) {
printf("%03d ",number[i]);
}
printf("\n");
2.宏定义
编译时,系统会将宏定义的新值给宏定义的名字
格式:
#define 宏定义名字 宏定义要替代的内容
例:
#define NUMBER 9 (NUMBER 指代的内容就是9)
无参数的宏定义:
#define NUMBER 9
有参数的宏定义:
#define ADD(A,B) A+B
例:
#define TEST 90
#define ADD(A,B) A+B
int a = TEST;
int sum = ADD(1,2);
printf("%d %d\n",a,sum);
3.随机数
#define A 3
int a[A] = {};
printf("输入数组a中的第一个值:");
scanf("%d",&a[0]);
printf("数组a中的第一个值是%d\n",a[0]);
printf("输入数组a中的第二个值:");
scanf("%d",&a[1]);
printf("数组a中的第二个值是%d\n",a[1]);
printf("输入数组a中的第三个值:");
scanf("%d",&a[2]);
printf("数组a中的第三个值是%d\n",a[2]);
//通过for循环改变下标,往数组里面依次输入值
#define A 3 //(宏定义)
int a[A] ={};
for (int index =0; index<A;index++){
printf("输入第%d个值:",index+1);
scanf("%d",&a[index]);
}
//依次输出数组里面的值
for (int index =0; index<A;index++) {
printf("第%d个值是:%d\n",index+1,a[index]);
}
#include<stdlib.h>//随机数头文件
例:
在数组a中放10个0-9的随机数
产生10随机数,并打印出最大值
#define A 10 //(宏定义)
int a[A] ={};
//往数组里面放随机值
for (int i=0; i<A;i++){
a[i] = arc4random()%10;
}
//找到数组中的最大值
int max =0;
for (int i =0; i<A;i++){
if (a[i]>max){
max=a[i];
}
}
//打印出数组
for (int i =0; i<A;i++){
printf("%4d",a[i]);
}
printf("\n最大值是:%d\n",max);