这一篇是前面基础内容的概括,我之前写过几篇,不过因为写的不太好让我删掉了,现在来补上这个缺口,本篇内容适合工科非计算机专业的以后不想从事与计算机有关方向的同学的期末考试
据我了解,非科班学生C语言只会学到函数以及和函数的递归,后续的指针等等的内容不会继续学习,本篇博文旨在教非科班学生一篇通过期末考试
C语言入门
一、C语言常见概念
1、C语言是什么
C语言是一种计算机语言,人们通过计算机语言来给机器下达指令,它生成的文件为.c文件,通过链接和编译生成可执行程序.exe
后缀为.h的称为头文件,后缀为.c的称为源文件
2、main函数
每个C语言程序不管有几行代码,都是从main函数开始执行的,main函数是程序的入口,也被称为主函数main前面的int是整形,与最终的return 0相呼应
这里在老的版本中,main的前边是void,后来因为这个使用方法有问题就不再使用了,我们要记住的是:一个程序中,以下代码是必须存在的
int main() { return 0; }
3、printf以及库函数
printf("Hello World");
printf函数是打印函数,它可以实现信息在屏幕上的打印
它是一个库函数,可以打印不同的数据
int n = 100; printf("%d\n", n); //打印整型 printf("%c\n", 'q'); //打印字符 printf("%lf\n", 3.14);//打印双精度浮点型
printf的具体使用方法我们拿来与scanf一起讲解,这里我们主要想引出库函数的概念:
库函数就是将函数封装入库,供用户使用的一种方式
一个系列的库函数一般会生命在一个头文件当中,当你想要使用它时需要包含相应的头文件
比如我们写一个完整的Hello World程序
#include <stdio.h>//头文件 int main() { printf("Hello World");//printf是库函数,需要包含头文件stdio.h return 0; }
4、C语言关键字
C语言有一些关键字例如:int if return for while等等,每个关键字都有特殊的意义,是保留给C语言使用的
程序员在创建标识符时不能与关键字重复
关键字不能被程序员创建
5、字符和ASCII编码
在键盘上敲出的字母数字符号都被称作字符,在C语言中,字符是被单引号括起来的 ‘a’ ‘1’ ‘$’
在计算机中,所有数据都是以二进制形式存储的,这些字符就是用ASCII编码存储的
点击这里查看ASCII编码表
我们不需要背过这个表格,只需记住其中的几个特殊值:
字符A-Z的ASCII码值65-90
字符a-z的ASCII码值97-122
对应的大小写字符(a和A)的ASCII码值的差值是32
6、字符串和转义字符
前面我们提到用单引号括起来的是字符,被双引号括起来的就是字符串了
打印
#include <stdio.h> int main() { printf("%s\n", "Hello World\n"); printf("Hello World"); return 0; }
字符的末尾放着一个不可见的 ‘/0’,它是一个转义字符,这个符号是字符读取结束符,遇到它字符串的读取就结束了
\n是也是一个转义字符,是换行的意思
常用的转义字符除了这两个还有 /t 制表符以及一系列其他转义字符
7、语句和语句分类
(1)空语句
空语句就是仅由一个分号构成的语句,这个语句没有任何的意义,如果我们需要一个语句,并且这个语句不需要做任何事,就可以写一个空语句
(2)表达式语句
就是最普通的语句,由表达式加上分号构成的
(3)函数调用语句
函数调用时,后边加上分号
(4)复合语句
大括号里边的大括号里边的语句,就是复合语句
(5)控制语句
①条件判断语句
if 语句
switch 语句
②循环执行语句
do while 语句
while 语句
for 语句
③转向语句
break 语句
goto 语句
continue 语句
return 语句
8、注释
注释对程序的运行没有任何影响,注释是写给人看的,有利于其他程序员在使用你的程序的时候能够更好地理解
(1)注释的形式
① /**/ 型
这种形式是最好用的,包含了所有可能遇到的进行注释的位置,使用时将需要注释的内容放到两个*之间
/* ................ */
它的优点就是可以在代码中间使用,缺点就是比起//多打点字符
② // 型
//可以注释掉它后边一行的所有字符
// ...............
优点是方便使用,缺点是不能放到代码中间使用
(2)注意事项
①注释不能放在双引号中使用,双引号中的注释字符会被认为是字符串
②注释在编译时被替换为一个空格
二、数据类型和变量
1、数据类型
以下被方括号括起来的在使用时可以省略不写
signed是有符号的
unsigned是无符号的
(1)字符型char
char [signed] char unsigned char
(2)整形int
//短整型 short [int] [signed] short [int] unsigned short [int] //整型 int [signed] int unsigned int //⻓整型 long [int] [signed] long [int] unsigned long [int] //更长的整形 long long [int] [signed] long long [int] unsigned long long [int]
(3)浮点型float、double
float//单精度浮点型 double//双精度浮点型 long double//长双精度浮点型
2、各种数据类型的长度
(1)sizeof操作符
sizeof操作符是专门用来计算操作数的类型长度的
它有两种类型的操作数
sizeof( 类型 ) sizeof 表达式//当操作数是表达式时可以省略括号
sizeof的操作数不参与运算,根据表达式的类型得出大小
返回值是size_t类型的,是无符号整形,但其为无符号长整型还是无符号长长整形还是无符号整形由编译器决定
(2)数据类型长度
#include <stdio.h> int main() { printf("%zd\n", sizeof(char)); printf("%zd\n", sizeof(short)); printf("%zd\n", sizeof(int)); printf("%zd\n", sizeof(long)); printf("%zd\n", sizeof(long long)); printf("%zd\n", sizeof(float)); printf("%zd\n", sizeof(double)); printf("%zd\n", sizeof(long double)); return 0; }
(3)sizeof中表达式不计算
#include <stdio.h> int main() { short s = 2; int b = 10; printf("%d\n", sizeof(s = b+1)); printf("s = %d\n", s); return 0; }
2、变量
(1)变量的创建
变量是由数据类型+变量名创建的
int age; //整型变量 char ch; //字符变量 double weight; //浮点型变量
给创建的变量一个初始值,就是变量的初始化
(2)变量的分类
①全局变量
大括号外定义的变量,整个程序都可以使用
②局部变量
大括号内定义的变量,只有它所在的局部范围能够使用
#include <stdio.h> int a = 1;//全局变量 int main() { int b = 2;//局部变量 return 0; }
如果全局变量与局部变量名相同,采用就近原则
#include <stdio.h> int a = 1;//全局变量 int main() { int a = 2;//局部变量 printf("%d",a); return 0; }
3、算数操作符
算数操作符是双目操作符,就是有两个操作数的操作符,+、-、*、/、%都是算数操作符
4、赋值操作符 =
int a = 0;//初始化 a = 1;//赋值
(1)连续赋值
int a = 1; int b = 2; int c = 3; c = b = a+4;//连续赋值,从右向左依次赋值
当然我们建议分开来写,条理更加清晰
(2)复合赋值符
int a = 0; a = a+1; a = a-2;
int a = 0; a += 1;//a+=1又被写作a++,意义相同 a -= 2;
5、单目操作符
++ 、 –
刚刚在复合赋值符中的a+=1可以写作a++,意思就是a+=1
a–意思就是a-=1
++和–分为前置和后置
前置++/–:先+1/-1后赋值
后置++/–:先赋值后+1/-1
#include <stdio.h> int main() { int a = 1; int b = ++a; a = 1; int c = a++; printf("%d\n",b); printf("%d\n",c); return 0; }
6、scanf 和 printf的使用
我们前边提到了printf,其实scanf和printf是一对函数,它们经常一起被使用
在使用它们两个函数之前需要包含头文件stdio.h
(1)printf
①基本用法
printf("Hello World\n");
在屏幕上打印双引号内的内容
②占位符
#include <stdio.h> int main() { int a = 1; printf("%d", a); return 0; }
这里的%d就是占位符,可以被逗号后的a所代替,而每种数据对应的占位符是不同的
占位符 | 数据类型 |
---|---|
%s | 字符串 |
%c | 单个字符 |
%d | int |
%f | float/double |
%lf | long double |
%zd | size_t |
%u | unsigned int |
%ld | long int |
在一句话中可以有多个占位符
#include <stdio.h> int main() { int a = 1; int b = 2; printf("a is %d and b is %d", a,b); return 0; }
③定制输出格式
限定宽度:
#include <stdio.h> int main() { int a = 1234; printf("%5d", a); return 0; }
%5d表示占位符的宽度至少为5位,如果不满5位左边补空格,默认右对齐
#include <stdio.h> int main() { int a = 1234; printf("%-5d", a);//数字前边加上-成为左对齐 return 0; }
如果是小数,因为默认的小数点后精确到第六位,所以补三个空格
#include <stdio.h> int main() { float a = 12.34; printf("%12f", a); return 0; }
限定小数位数
#include <stdio.h> int main() { float a = 12.34; printf("%.2f", a); return 0; }
当我们觉得精确到六位精度太高想要显示精确到两位小数时,我们可以在f前加上.2,这样就可以精确到后二位
可以与前面的内容一起用
#include <stdio.h> int main() { float a = 12.34; printf("%5.2f", a); return 0; }
输出部分字符串
#include <stdio.h> int main() { printf("%.5s", "Hello World"); return 0; }
可以打印前五个字符
(2)scanf
scanf就是将信息输入,printf就是输出
①基本用法
程序运行到这个语句时会停下来,等待用户从键盘输入
它的使用需要包含头文件stdio.h
int i = 0; scanf("%d",&i);
&是取地址操作符,我们在使用scanf时,需要传入被修改值的地址
一次输入多个值:
scanf("%d%d%f%f", &a, &b, &c, &d);
空格,回车等键被认为是结束某一值的输入
比如说输入1后空格,第一个值a就是1
②scanf的返回值
scanf的返回值是一个整数,表示成功读取的变量个数,没有读取或者匹配失败返回0,读取数据前发生了错误或读到文件结尾返回EOF
③占位符
与printf相同,不过有几个注意事项:
对于%c,除了它以外,所有的占位符都会自动忽略起首的空白字符,它总是会返回它所遇到的第一个字符
对于%s,我们输入完成后,它会检测到空白字符,它会从第一个非空白字符开始读起,直到遇到空白字符为止,所以在输入时的空格会被认为是上一句的结束
int a = 0; scanf("%5d",a);
上面在d前加上5,意味着最终会取到的最多个字符是5个,多输入的会被丢弃
再来看下一篇~