你好,c语言

一、什么是c语言


👍:人们常常在电视里、电影院里看到那些黑客看着满屏不断刷新的0101010,只需要插上U盘,手再操作操作键盘就能实现电脑攻陷、黑客入侵,那么问题来了。

  • 他们是怎么做到的呢?

其实01是属于电脑的机器语言,电脑无法识别人类想表达的意思,所以只能通过01比特流来出传递和处理电脑的信息。而c语言就作为我们人类与电脑交流的一种工具,所以C这种编程方式又称为编程语言。


二、为什么要学c语言


😄对此:我的理解是c语言是很多很多语言的基础,学会了c对于其他语言的学习也就会快得多,编程语言的思想很多都有相似之处,有的区别在于编程对象不同,这里我就不多解释。有兴趣可以自行了解👍


三、c语言的要素

3.1 编译环境

3.1.1 新手推荐VC++

VC++: 这是一个功能齐全,能够很快完成绝大多数功能的编译器,还有中文显示
VC++中文版下载链接

3.1.2 CodeBlock与Dev-c++

CodeBlock与DV c++ 这两个我也不是特别了解,但是知道它比VC++要好!

CodeBlock下载链接
CodeBlock中文版本下载链接,提取码 3e7t
Dev-c++下载链接

3.1.3 VScode

VSCode: VScode是我一直在用的编译工具,对于C或者C++都有很好的适配能力,还能承载java(很强大的一门语言),JS(网页程序),markdown(博客记录),HTML(网页开发),WXML(微信小程序),python(python我还是推荐使用pycharm编译),TS(VSCode程序本身使用的语言)等等等等,而且还有中文显示。
我的服务器版本:
在这里插入图片描述
windows:
在这里插入图片描述

VScode下载链接
但是VScode需要配置环境比较麻烦,😭当时我配置了一周,老是exe文件不存在。所以不咋推荐小白(其实很简单,只是纯小白有些理解可能不太深刻),但是一定要去尝试,各种问题的解决办法网上也有。

3.2 如何写一个程序打印出 helloworld!VC++演示

3.2.1 先创建一个项目(工程)

点击文件 ——> 选择新建
出现以下窗口
在这里插入图片描述

选择Win32 Console Application并写好工程名称
在这里插入图片描述

点击完成确定

3.2.2 新建文件

新建.c文件
在这里插入图片描述


注意:
一定要 .c 结尾,不然程序默认会创建c++文件

这样,我们需要的文件就创建好了

3.2.3 编写代码


将一下代码复制到里面

#include"stdio.h"
int main()
{
	printf("hello world!");
	return 0;
}

编译执行
在这里插入图片描述
出现以下界面,执行成功
在这里插入图片描述

3.3头文件简单介绍(#include"stdio.h")

为什么需要头文件? 在我看来,头文件就相当于翻译工具,如果没有头文件,那么计算机是不能够明白你写的程序的。

3.3.1 常用的头文件

最基本的头文件(stdio.h)
stdio.h 全称(standard input output.header)意思是标准输入输出库,这个库文件中定义了printf(), scanf() 等一些基本的函数,是c语言中几乎必不可少的头文件
字符串处理头文件 (string.h)
string.h 是C标准库的头文件,其中包含了宏(宏)定义、常量以及函数和类型的声明,涉及的内容除了字符串处理之外,还包括大量的内存处理函数。
数学函数头文件(math.h)
math.h 是C标准函数库中的头文件(标头档)。提供用于常用高级数学运算的运算函数。

3.3.2 自定义头文件(待更新,这部分涉及到后面的内容)


3.4 主函数介绍(int main())

💡 主函数主函数,其意义就是最主要的函数,每个工程都是从主函数中开始,而且一个工程一般只有一个主函数(当承载程序的芯片有多个核心时,一个项目可以多个主程序,比如CPU0对应main0(),CPU1对应main1())。
所以当我们学习一个程序的时候也要以主程序开始,一步一步地去推算程序功能。


问题: 为什么主函数前面有一个int?return又是啥?
这个问题我留到子函数里介绍,详情请看 子函数


注意: 大多数一个项目只有一个main函数,不涉及到直接与硬件对应的都只有一个主函数。

3.5 子函数(function_name(){})

3.5.1 子函数简介

既然有了主函数,肯定就有次要的函数,那这个次要的函数,我们把它叫做子函数。如果说主函数是整个程序的框架,逻辑结构,那么子函数就是实现主函数中某一部分功能的函数。
将以下代码复制到里面:

#include<stdio.h>
void printhello( void ){
    printf("helloworld");
}
int main()
{
    printhello();
    printf("\nprintok");
    return 0 ;
}

效果展示
在这里插入图片描述
💡 能够看到,我们并未在主函数里显示helloworld,但是我们通过在主函数里调用子函数printhello来显示helloworld,这就是子函数的作用,子函数都是最终能完成主函数或者某一子函数功能的函数。


那么问题就来了: 这个我也能在主函数里实现啊,为什么需要使用子函数呢,这不是多次一举吗?
答案: 其实不然,如果只是简单的显示一个helloworld,当然一个主函数就好,但是当一个项目达到几万行、几十万行、甚至几百万上亿行代码的时候,你想想的主函数得有多长,这个时候子函数就很重要,我们可以将不同的功能模块封装,一个好的程序不是能有多复杂,而是能用更加清晰、方便的逻辑框架搭建起的高楼大厦 ,至少要让一个团队的另外一个人能容易看懂。


3.5.2 如何定义一个子函数

一般老师教导的,我们定义一个子函数前首先要声明一个子函数,那是因为如果子函数在主函数后面,最开始又没有申请,那么主函数会显示报错,表示这个函数找不到,就比如如下代码

#include<stdio.h>
int main()
{
    printhello();
    printf("\nprintok");
    return 0 ;
}
void printhello( void ){
    printf("helloworld");
}

可以看到相比最开始那个我只是先写了主函数后写的子函数,但是这个程序会报错
在这里插入图片描述
主函数说:我没有找到printhello()这个子函数。

💡 但计算机从程序开始搜索,搜索到main()这个关键字的时候就会开始执行这个主函数,如果一开始没有声明这个子函数并且这个子函数在主函数后面的话就会出现找不到子涵数这种情况。

声明:

#include<stdio.h>
void printhello(void);
int main()
{
    printhello();
    printf("\nprintok");
    return 0 ;
}
void printhello( void ){
    printf("helloworld");
}

只需要我们提前声明一下子涵是就能重新实现程序功能。


3.5.3 返回值(int function_name(){})

我们能注意到主函数的前面有一个int,
int 是什么?
int 表示整型,也就是能表示一个整数,数据范围为
-2147483647到2147483647 正负21亿 如果你的数据范围超过记得用long ,long long

其他的常用的数据类型

数据类型表示方式
短整型:short
长整型:long
单精度:float
双精度:double
字符型:char

这个是用来干什么呢?
之前我们介绍了子涵数,

void printhello( void ){
    printf("helloworld");
}

但是我们子函数前面写的void,前面的void表示的这个函数的返回值是空的,也就是说这个函数返回的是空的,所以这个函数不能用于给其他参数幅值
举个例子(返回值是int): 输出结果是a和b中大的那个即为10;

#include<stdio.h>
int max( int a, int b ){
    if(a > b)
    return a;
    else 
    return b;
}
int main()
{
    int a = 5, b = 10;
    int c;
    c = max(a , b);
    printf("%d \n",c);
    return 0 ;
}

子函数max的功能是将a,b的值比较大小,并将大的传出去,由c = max(a , b);将函数值传给c。其他的咋们先别管。

  • void 的意思就是没有返回值,不能用于幅值。
  • int 的意思就是函数调用完后,会返回一个整型数字,通过函数里的return返回,然后可以幅值个其他参数变量。

3.5.4 封装概念(简诉,但是封装很重要)

封装: 意思就是将一个程序功能封装到一个函数里面,形成结构、嵌套、每个程序只实现一个功能最好。这样代码量增多,但是出错的时候能够很快找到错误的地方,要慢慢形成封装的习惯。

3.6 常用函数(基础版本,更多待更新)

为什么是常用的,而不是必须的? 因为很多函数都能自定义,包括输出、输入函数,最基础的是最经典又好用的,但是不是最快的。为了最求程序的速度还有更多方式实现程序功能。

3.6.1 c输出最常用的函数(printf();)

printf(); 相信所有开始学习c的人最开始的程序都是在窗口打印出一个helloworld,所以一开始接触的常用函数也是printf(),所以多的不说直接上代码解释
printf("");中的两个双引号,表示的就是输出的东西,正常我们想输出什么就写程序printf(" 想输出的内容 ");就好了。但是 如果想输出一个变量呢?
此时就需要占位符 %
不同的数据类型需要不同的占位符。

数据类型占位符
char%c和%hhd
unsigned char%c和%hhu
注意%c对应字符身份,%hhd和%hhu对应数字身份
short%hd
unsigned short%hu
long%ld
unsigned long%lu
int%d
unsigned int%u
float%f和%g
double%lf和%lg

比如我想输出a这个数字,a是10;
代码如下:

#include<stdio.h>
int main(){
    int a = 10;
    printf("%d", a);
    return 0;
}

其中printf函数中括号里面的,的后面是a,当程序检测到%d时 就会往括号里的最后一个对应的双引号的后面逗号对应顺序的变量,用整型(%d)的方式输出出来。
所以可以实现输出的穿插,例如:

#include<stdio.h>
int main(){
    int a = 10,b = 15;
    int c = a + b;
    printf("a+b=%d", c);
    return 0;
}

结果如下:
在这里插入图片描述

3.6.2 c输入最常用的函数(scanf();)

有输出必定有输入,在c中常见的输入函数就是scanf,它能够通过用户窗口将输入的数赋值,也就是用户与程序有了一个交互的过程。这样我们就能与程序完成交流了!!
例如:
程序功能是输入两个整型数a和,然后输出

#include<stdio.h>
int main(){
    int a,b;
    scanf("%d%d",&a,&b);
    printf("a+b=%d",a+b);
    return 0;
}

功能演示:
在这里插入图片描述
用法简诉 %d,指的输入的是一个整型变量,&a &是取地址符号,他的意识是取出变量a的地址,两个%d,和后面两个取地址分别一一对应,它的含义就是输入两个整型变量,分别依次幅值给a、b。
那如果要输入字符呢?
同理:需要申请一个字符变量 char a;
然后 scanf("%c",&a);就好了。

3.6.3 判断函数(if() {} else(){})

if函数很简单,就像翻译的一样,就是如果的意思if的基本结构为:

if( 条件1 ){
	语句1;
}
else if ( 条件2 ){
	语句2;
}
else{
	语句3;
}

也就是说如果条件1满足(为真,一般程序除了== 0 ,undefined,null,false == 其余为真)。则执行函数1( 只是代表,不一定就只有一个函数),else if 满足条件2,则执行函数2,其他的执行函数3。就这么简单。

==举个例子:==判断a和b哪个大,a大则输出a大,b大则输出b大;

#include<stdio.h>
int main(){
    int a,b;
    scanf("%d%d",&a,&b);
    if (a > b){
        printf("a大,a=%d",a);
    }
    else{
        printf("b大,b=%d",b);
    }
    return 0;
}

💡自己试一下 VScode我用的英文版,没有解决兼容(编码)问题,无法输出中文。效果展示我就跳过一下。😄

3.6.4 条件函数( 条件?函数1:函数2)

这个是一个超级简化版的语法,甚至说都不能算函数,它实现的功能是,判断条件是否满足,满足则执行函数1,否则执行函数2.

举个例子

#include<stdio.h>
int main(){
    int a,b;
    scanf("%d%d",&a,&b);
    a>b?printf("max=a"):printf("max=b");
    return 0;
}

效果展示:
在这里插入图片描述
注意 : 这个语法里的函数1和函数2只能是一个函数,可以是幅值,可以是其他处理,而且不能有 " ; " 号。

3.6.5 选择函数(switch)

在日常生活中,对于条件的判断可能没有那么多,并且是离散的变量,比如说我选择功能1 ,选择功能2 这样能够分别举出例子来的,我们就用switch 通过我们一个一个举例,一方面逻辑更加清晰,另一方面我们所写的代码也会少很多。

switch结构

switch( 判别变量)
{
	case n1: 执行函数1  break;
	case n2: 执行函数2  break;
	default : 执行函数3  break;
}

这段代码的意思就是,判断判别变量,如果判别变量等于n1,那么就执行函数1,如果不等于,继续往下找是否等于2,如果都不满足则执行default 直到执行到break;

注意 一定要有break; 每次判断OK后,一定要执行break,不然函数会继续执行。冒号 ":" 也十分重要

举个例子 输入月份,判断该月有多少天(2月默认为28天)。

#include<stdio.h>
int main(){
    int a;
    scanf("%d",&a);
    switch (a)
    {
    case 2:
        printf("28 days");
        break;
    case 4:
        printf("30 days");
        break;
    case 6:
        printf("30 days");
        break;
    case 9:
        printf("30 days");
        break;
    case 11:
        printf("30 days");
        break;       
    default:
        printf("31 days");
        break;
    }
    return 0;
}

看看效果:
在这里插入图片描述

小技巧: 这程序我用了个简便方法,将最多的31的月份直接用default 合并,你们也可以参考这个方法,将情况最多的用在default里面,当然,如果情况太多,最好还是用if好一点,如果怕麻烦,可以用分类法用if函数嵌套既能简便复杂度(度量程序需要的运算时间的一个量),又能方便大家写。有机会会更新这部分内容。。。

3.6.6 循环函数for 以及 while

for和while的作用一样,都是循环一个语句,然后再判断是否满足条件,条件满足,继续执行,最后一直到不满足条件为止。
基本格式。

for(变量;条件;变量处理){
	语句;
}
while(条件){
	语句;
}

举个例子

#include<stdio.h>
int main(){
    int a;
    for(a=0;a<10;a++)
    printf("%d ",a);
    printf("\n");
    while(a<20){
        printf("%d ",a);
        a++; //等效为a=a+1;
    }
    return 0;
}

效果展示
在这里插入图片描述
注释
功能很简单,就是先用for循环输出0到9,再用while循环输出10到19
首先 a赋值为0,执行输出一次后,a++(表示a加一),然后 再判断是否满足a<10显然满足,于是 再输出a,此时的a已经变成了1,所以此时输出就为1。
while 函数几乎同理,不过while会先判断一次是否满足,然后执行接下来的函数,所以for至少会循环一次,而while可能一次都不会循环。

3.7 指针、数组(c语言中提高效率的方式,待更新)

3.8 注意事项、小技巧(更多待更新)

  • 每个函数结束后一定要有 分号( ; )
  • 注意if() 后面一定只能有一个语句,意思就是,如果有多个函数,一定要加 { 语句 } 大括号括起来当然,如果后面只有一个函数,大括号也可以不写。
  • 如果函数有返回值比如 int function()这样的一定要return 一个值,如果没有返回值,比如void function()这样的, 可以通过return 0; 来结束函数的进程。
  • 整个程序一定要注意逻辑,逻辑不通一定有问题,可以提前在纸上理清逻辑。
  • 如果一个变量没有幅值,那么他会是一个随机的数,所以如果需要得到一个累加、一个累乘的值一定要赋初值。如果是数组,可以申请一个全局变量或者用memset()函数赋初值。
  • 注意函数的用法,特别是switch要有break,if要有 { } ,for中间是分号
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值