从0基础入门C语言(二)

初识C语言(二)

本章目录

  • 什么是C语言
  • 第一个C语言程序
  • 数据类型
  • 变量、常量
  • 字符串+转义字符+注释
  • 选择语句
  • 循环语句
  • 函数
  • 数组
  • 操作符
  • 常见关键字
  • define 定义常量和宏
  • 指针
  • 结构体

五、字符串+转义符+注释

字符串

由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。

int main()
{
    
    
	"abcdef";
	"hello bit";
	""; // 空字符串
	return 0;
}

注:字符串的结束标志是一个\0的转义字符。在计算机字符串长度的时候\0是结束标志,不算作字符串内容。

// 字符串可以放在数组里面
int main()
{
    
    
	char arr1[] = "abc";
	char arr2[] = {
    
     'a','b','c'};
	printf("%s\n",arr1);
	printf("%s\n",arr2);
	return 0;
}

打印结果。。。。。在这里插入图片描述
解决办法
这个原因是因为C语言里面的字符串有一个结束的标识符 “\0”,然后arr1 这个字符串结尾是默认有的,然后arr2是没有的,在arr2 后面呢在添加一个0这个值就可以了, 因为0是 "\0"的值在这里插入图片描述
Fn + F10 或者直接 F10 进入调试,然后点击操作栏调试–>窗口–>监视,进来之后我们可以看到“\0”的值是 0
在这里插入图片描述在这里插入图片描述
数据在计算上存储的时候,存储的是二级制

转义字符

转义字符:转变原来的意思。
给大家举个例子:

int main()
{
    
    
	printf("abc");
	return 0;
}

这个main函数运行结果是: abc
那如果在加上\n之后呢?
int main()
{
    
    
	printf("abc\n");
	return 0;
}

这个main函数的运行结果:
abc

abc 换行,上面这个空白就是 \n换行的意思,在这里面要说的就是 n 加了 \ 之后,你给他转义的,从一个字符n变成了 \n 换行的意思。

C语言的转义字符
在这里插入图片描述
注意:

  1. 区分,斜杠:"/" 与 反斜杠:"" ,此处不可互换
  2. \xhh 十六进制转义不限制字符个数 ‘\x000000000000F’ == ‘\xF’

注释

1.代码中不需要的代码可以直接删除,也可以注释掉
2.代码中有些代码比较难懂,可以加一下注释文字

注释有两种风格:

  • C语言风格的注释 /xxxxx/
    • 缺陷:不能嵌套注释
  • C++风格的注释 //xxxxxxx
    • 可以注释一行也可以注释多行

六、选择语句 —if

// 分支语句

int main()
{
    
    
	int input = 0;
	printf("想要好好学习C吗?");
	printf("快来加入瑞哥的博客!<1/0>");
	scanf("%d", &input);
	if (input == 0)
		printf("回家种红薯~");
	else
		printf("拿到offer");

	return 0;

七、循环语句

有时候我们可能要多次执行同一块代码。一般情况下,语句是按照顺序执行的,函数中的第一个语句先执行,接着第二个语句,以此类推。

循环类型

循环类型 描述
while 循环 当给定条件为真时,重复语句或语句组。它会在执行循环主体之前测试条件
for 循环 多次执行一个语句序列,简化管理循环变量的代码
do…while 循环 除了它是在循环主体结尾测试条例外,其他与while循环语句类似
嵌套循环 您可以在while、for或者do…while 循环内使用一个或多个循环

控制循环的语句

控制语句 描述
break 语句 终止循环或者 Switch 语句,程序流将继续执行紧接着循环或 Switch 的下一条语句
continue 语句 告诉一个循环体立刻停止本次循环迭代,重新开始下次循环迭代
goto 语句 将控制转移到被标记的语句。但是不建议在程序中使用goto语句

while 循环

int main()
{
    
    
	int line = 0;
	printf("观看瑞哥的博客!");
	while (line < 20000)
	{
    
    
		printf("观看%d次\n", line);
		line++;
	}
	if (line >= 20000)
		printf("看完了!");
	return 0;
}

八、函数

函数是一段可以重复使用的代码,用来独立地完成某个功能,它可以接收用户传递的数据,也可以不接收。接收用户数据的函数在定义时要指明参数,不接收用户数据的不需要指明,根据这一点可以将函数分为有参函数和无参函数。

将代码段封装成函数的过程叫做函数定义

C语言无参函数的定义

如果函数不接收用户传递的数据,那么定义时可以不带参数。如下所示:

dataType  functionName(){
    
    
    //body
}
  • dataType 是返回值类型,它可以是C语言中的任意数据类型,例如 int、float、char 等。
  • functionName 是函数名,它是标识符的一种,命名规则和标识符相同。函数名后面的括号( )不能少。
  • body 是函数体,它是函数需要执行的代码,是函数的主体部分。即使只有一个语句,函数体也要由{ }包围。
  • 如果有返回值,在函数体中使用 return 语句返回。return 出来的数据的类型要和 dataType 一样。

例如,定义一个函数,计算从 1 加到 100 的结果:

int sum(){
    
    
    int i, sum=0;
    for(i=1; i<=100; i++){
    
    
        sum+=i;
    }
    return sum;
}

累加结果保存在变量sum中,最后通过return语句返回。sum 是 int 型,返回值也是 int 类型,它们一一对应。
return是C语言中的一个关键字,只能用在函数中,用来返回处理结果。

将上面的代码补充完整:

#include <stdio.h>
int sum(){
    
    
    int i, sum=0;
    for(i=1; i<=100; i++){
    
    
        sum+=i;
    }
    return sum;
}
int main(){
    
    
    int a = sum();
    printf("The sum is %d\n", a);
    return 0;
}

运行结果:
The sum is 5050

函数不能嵌套定义,main 也是一个函数定义,所以要将 sum 放在 main 外面。函数必须先定义后使用,所以 sum 要放在 main 前面。

注意:main 是函数定义,不是函数调用。当可执行文件加载到内存后,系统从 main 函数开始执行,也就是说,系统会调用我们定义的 main 函数。

无返回值函数
有的函数不需要返回值,或者返回值类型不确定(很少见),那么可以用 void 表示,例如:

void hello(){
    
    
    printf ("Hello,world \n");
    //没有返回值就不需要 return 语句
}

void是C语言中的一个关键字,表示“空类型”或“无类型”,绝大部分情况下也就意味着没有 return 语句。

C语言有参函数的定义

如果函数需要接收用户传递的数据,那么定义时就要带上参数。如下所示:

dataType  functionName( dataType1 param1, dataType2 param2 ... ){
    
    
    //body
}

dataType1 param1, dataType2 param2…是参数列表。函数可以只有一个参数,也可以有多个,多个参数之间由,分隔。参数本质上也是变量,定义时要指明类型和名称。与无参函数的定义相比,有参函数的定义仅仅是多了一个参数列表。

数据通过参数传递到函数内部进行处理,处理完成以后再通过返回值告知函数外部。

更改上面的例子,计算从 m 加到 n 的结果:

int sum(int m, int n){
    
    
    int i, sum=0;
    for(i=m; i<=n; i++){
    
    
        sum+=i;
    }
    return sum;
}

参数列表中给出的参数可以在函数体中使用,使用方式和普通变量一样。
调用 sum() 函数时,需要给它传递两份数据,一份传递给 m,一份传递给 n。你可以直接传递整数,例如:

int result = sum(1, 100);  //1传递给m,100传递给n

也可以传递变量:

int begin = 4;
int end = 86;
int result = sum(begin, end);  //begin传递给m,end传递给n

也可以整数和变量一起传递:

int num = 33;
int result = sum(num, 80);  //num传递给m,80传递给n

函数定义时给出的参数称为形式参数,简称形参;函数调用时给出的参数(也就是传递的数据)称为实际参数,简称实参。函数调用时,将实参的值传递给形参,相当于一次赋值操作。

原则上讲,实参的类型和数目要与形参保持一致。如果能够进行自动类型转换,或者进行了强制类型转换,那么实参类型也可以不同于形参类型,例如将 int 类型的实参传递给 float 类型的形参就会发生自动类型转换。

将上面的代码补充完整:

#include <stdio.h>
int sum(int m, int n){
    
    
    int i, sum=0;
    for(i=m; i<=n; i++){
    
    
        sum+=i;
    }
    return sum;
}
int main(){
    
    
    int begin = 5, end = 86;
    int result = sum(begin, end);
    printf("The sum from %d to %d is %d\n", begin, end, result);
    return 0;
}

运行结果:
The sum from 5 to 86 is 3731

定义 sum() 时,参数 m、n 的值都是未知的;调用 sum() 时,将 begin、end 的值分别传递给 m、n,这和给变量赋值的过程是一样的,它等价于:

m = begin;
n = end;

函数不能嵌套定义

强调一点,C语言不允许函数嵌套定义;也就是说,不能在一个函数中定义另外一个函数,必须在所有函数之外定义另外一个函数。main() 也是一个函数定义,也不能在 main() 函数内部定义新函数。

下面的例子是错误的:

#include <stdio.h>
void func1(){
    
    
    printf("http://c.biancheng.net");
    void func2(){
    
    
        printf("C语言小白变怪兽");
    }
}
int main(){
    
    
    func1();
    return 0;
}

有些初学者认为,在 func1() 内部定义 func2(),那么调用 func1() 时也就调用了 func2(),这是错误的。

正确的写法应该是这样的:

#include <stdio.h>
void func2(){
    
    
    printf("C语言小白变怪兽");
}
void func1(){
    
    
    printf("http://c.biancheng.net");
    func2();
}
int main(){
    
    
    func1();
    return 0;
}

func1()、func2()、main() 三个函数是平行的,谁也不能位于谁的内部,要想达到「调用 func1() 时也调用 func2()」的目的,必须将 func2() 定义在 func1() 外面,并在 func1() 内部调用 func2()。

有些编程语言是允许函数嵌套定义的,例如 JavaScript,在 JavaScript 中经常会使用函数的嵌套定义。

猜你喜欢

转载自blog.csdn.net/weixin_44675308/article/details/118939260