【C语言基础:从零开始学习C语言】
【C语言基础:从零开始学习C语言】
一、C语言简介
C语言是一门经典的编程语言,广泛应用于操作系统、嵌入式系统、游戏开发等领域。它简洁、高效,是许多程序员入门编程的首选语言。其由Dennis Ritchie于1972年在贝尔实验室开发,最初用于开发UNIX操作系统。它的设计目标是提供一种能以简单的方式编写系统软件的语言。其经历了如下的发展历程:
二、第一个C语言程序
让我们从一个简单的"Hello World"开始吧!
#include<stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
三、关键字和标识符
3.1、关键字
编译器中规定好的一些有特殊含义的单词,可以直接使用,C语言中一共含有32个关键字,其主要分为以下五种类型:
数据类型: void char short int long signed unsigned float double struct union enum
数据修饰符: const static extern register volatile auto
改类型名称: typedef
运算符: sizeof
结构语句: if else switch case default goto for while do break continue return
3.2、标识符
用户自己命名,用于定义变量、函数名等。
命名规则:
1.由字母、下划线、数字组成;
2.只能由字母或下划线开头,不能以数字开头;
3.不能与关键字重名;
4.不能与其他标识符重名。
如:
ab_123
_ab123
四、数据类型
C语言提供了多种数据类型,用于存储不同类型的数据。常见的数据类型包括:
基本数据类型:
int:整数类型,如:int age=18;
float:单精度浮点型,如:float pi=3.14;
double:双精度浮点型,如:double salary=2000.90;
char:字符类型,如:char grade='A';
其中还有短整型"short int",一般简写为"short"。长整型"long int",简写为"long"。无符号类型"unsigned",表示不带符号,及负号。
派生数据类型:
数组、指针、结构体、联合体等。
基本数据类型所占空间大小(单位:字节)分别为:
char 1
short 2
int 4
float 4
double 8
long 8
可用sizeof()进行测量:
#include<stdio.h>
int main()
{
printf("%ld\n",sizeof(char));
printf("%ld\n",sizeof(short));
printf("%ld\n",sizeof(int));
printf("%ld\n",sizeof(float));
printf("%ld\n",sizeof(double));
printf("%ld\n",sizeof(long));
return 0;
}
五、变量与常量
5.1、变量
变量是在程序运行中可以变化的量,是用于存储数据的容器。在使用变量之前,需要先声明其类型,如:
int a=18; //定义一个整型变量a,并赋值18
5.2、常量
常量是不可改变的值。C语言中可以使用#define或const关键字定义常量。
用#define宏定义:
#define pi=3.1415926
用const修饰符将变量修饰为常量:
const int age = 18;
const在进行声明变量的时候,可以让变量在执行的过程中不被改变。
#define与const的区别:
#define是无脑替换;
const只能用于修饰变量,让变量成为常量;
#define定义的常量没有创建空间;
const创建了空间(存储在栈中),空间大小由常量类型决定。
六、运算符
C语言支持多种运算符
算术运算符 +,-,*,/,%
赋值运算符 =,+=,-=,*=,/=,%=
关系运算符 == , ! = , > , < ,> = ,< =
逻辑运算符 &&,|| ,!
位运算符 &,|,^,~,<<,>>
条件运算符(C语言中唯一的三目运算符) ? :
自增自减运算符 ++,--
逗号运算符 ,
指针运算符 * &
sizeof运算符 sizeof
1、"%"代表取模,就是取余,如:9%2==1;
2、a+=1即为a=a+1(注意:C语言中"="用于赋值运算,"=="才表示相等),其余类似;
3、逻辑与:&&,1&&1==1,1&&0==0,0&&1==0,0&&0==0(有0即为0);
4、逻辑或:||,1||1==1,1||0==1,0||1==1,0||0=0(有1即为1);
5、按位与&,如1010&0111 ==> 1010
0111
0010
故1010&0111==0010;
6、按位或|,如1010|0111 ==> 1010
0111
1111
故1010|0111==1111;
7、<<左移,>>右移,如0001<<2==0100;
8、条件运算符的简单运用
a>b?a:b //判断a是否大于b,若大于输出a,否则输出b
七、运算符的实战运用
1、通过位操作 操作一个 32 位的数据对其进行如下操作(从第0位开始算):
a、一次性操作两位 对 这个32位数据中的 5位 和 6位 变成11;
b、一次性操作两位 对 这个32位数据中的 7位 和 8位 变成10;
c、一次性操作两位 对 这个32位数据中的 9位 和 10位 变成01;
d、一次性操作两位 对 这个32位数据中的 11位 和 12位 变成00。
#include<stdio.h>
int Pf_Bin(int dec);
int main(int argc, char const *argv[])
{
int ch_1; //0000 0000 0000 0000 0000 0000 0000 0000
printf("请输入一个整数:");
scanf("%d",&ch_1);
printf("这个数的32位二进制:");
Pf_Bin(ch_1);
ch_1 |= (0x0003<<5); //第5、6位变为11
ch_1 |= (0x0003<<7);
ch_1 ^= (0x0001<<7); //第7、8位变为10
ch_1 |= (0x0003<<9);
ch_1 ^= (0x0002<<9); //第9、10位变为01
ch_1 |= (0x0003<<11);
ch_1 ^= (0x0003<<11); //第11,12位变为00
printf("变换后的十进制:%d\n",ch_1);
printf("变换后的32位二进制:");
Pf_Bin(ch_1);
return 0;
}
int Pf_Bin(int dec){ //输出二进制
int bin;
int n=0;
for(int i = 31;i >= 0;i--){
bin = ((dec >> i) & 1);
if(n%4==0){
printf(" "); //每输出四个位空一格
}
n++;
printf("%d",bin);
}
printf("\n");
return 0;
}
运行结果为:
检验:
2、写一个小的登录功能:
a、用户可以循环登录 例如输入错了一次密码 可以在进行输入;
b、用户只能输错3,次3次后自动退出程序。
#include<stdio.h>
#include<string.h>
int main(int argc, char const *argv[])
{
char name[128]= "TuTu";
char password[128]="aa778899";
char rdnm[128];
char rdpw[128];
for (int i = 0; i < 3; i++)
{
printf("请输入账户:");
scanf("%s",rdnm);
printf("请输入密码:");
scanf("%s",rdpw);
if((!strcmp(rdnm,name)) && (!strcmp(rdpw,password))){
printf("恭喜登录成功\n"); break;
}
else{
if(i<2)
printf("账户密码错误,请重新登录\n");
else
printf("连续三次登录失败,请10分钟后再试\n");
}
}
return 0;
}
其运行结果如下: