C语言中的goto语句和函数(上)

学习目标:

  • 掌握 C 入门知识
  • 学习自律+1 +1 +1 +1…+1

学习内容:

  1. goto语句
  2. 函数:(1) 函数的参数(2) 函数的调用

一.goto语句

goto语句:终止程序在某些深度嵌套的结构的处理过程(可以跳转)

1.代码示例

#include<stdio.h>
int main()
{
	again:
		printf("hello\n");
		printf("hello\n");
		printf("hihi\n");
		goto again;
		return 0;
}
  1. 用goto语句实现一个关机程序

程序运行起来后,倒计时60秒关机,如果输入好好学习就可以取消关机。
使用命令行关机
shutdown -s -t 关机
shutdown -a 取消关机

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	char arr[20] = { 0 };
	system("shutdown - s - t 60");
again:
	printf("请注意,你的电脑将在一分钟内关机,如果输入:好好学习,就取消关机\n");
	scanf("%s", arr);
	if (strcmp(arr, "好好学习")==0)
	{
		system("shutdown - a");
	}
	else
	{
		goto again;
	}
	return 0;
}

C语言strcmp()函数:比较两个字符串。两个字符串相等时返回0.

所以可以写成strcmp(arr, “好好学习”) == 0


二.掌握 函数 基本语法

  1. 函数是什么

(1).函数就是 C 语言的模块,一块一块的,有较强的独立性,可以相互调用,换句话说,C 语言中,一个函数里面可以调用 n 个函数,即大函数调用小函数,小函数又调用“小小”函数。这就是结构化程序设计,所以面向过程的语言又叫结构化语言。
(2).函数就是一系列 C 语句的集合,能完成某个特定的功能。需要该功能的时候直接调用该函数即可,不用每次都堆叠代码。需要修改该功能时,也只需要修改和维护这一个函数即可。
2. 函数的分类

(1).库函数:库函数(Library function)是把函数放到库里,供别人使用的一种方式。一般是指编译器提供的可在c源程序中调用的函数。可分为两类,一类是c语言标准规定的库函数,一类是编译器特定的库函数。

(2).自定义函数:自定义函数是程序员自己声明和定义的,是程序员补充的工具,不管是现成工具的还是补充的工具,都是工具,对使用者来说都一样,没有区别。在C语言中,函数的调用非常灵活,可以独占一行语句,也可以当成常量赋值给变量,也可以当成函数的参数。


  1. 库函数

(1)strcpy函数:C 库函数char *strcpy(char *dest, const char *src) 把src 所指向的字符串复制到dest(\0也可以拷贝)。 需要注意的是如果目标数组dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。

 #include<stdio.h>
#include<stdio.h>
#include<string.h>
int main()
{
	char str1[] = "Sample string";
	char str2[40];
	char str3[40];
	strcpy(str2, str1);
	strcpy(str3, "copy successful");
	printf("str1:%s\nstr2:%s\nstr3:%s\n", str1, str2, str3);
	return 0;
}

(2)memset函数:memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的。 其原型是:void memset(void _Dst, int _Val, size_t _Size)

_Dst是目标起始地址,_Val是要赋的值,_Size是要赋值的字节数。

#include<stdio.h>
#include<string.h>
int main()
{
	char str[] = "hello world";
	memset(str, 'x', 5);
	printf("%s\n", str);
	return 0;
}
  1. 自定义函数(有函数名 返回值类型和函数参数)

(1).找出两个整数之间的最大值

#include<stdio.h>
int get_max(int x,int y)
	if (x > y)
		return x;
	else
		return y;
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int m = get_max(a, b);//自定义函数
	printf("%d\n", m);
	return 0;
}

并不是说函数都有返回,有的不用返回可以写成void get_max()
以上get_max就是一个自定义函数

  1. 函数的参数

(1).函数的实参:

函数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数,简称实参
实参可以是变量 常量 表达式 函数等

#include<stdio.h>
get_max(int x,int y)
{
	if (x > y)
		return x;
	else
		return y;
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	//int m = get_max(a, b);//变量
	//int m = get_max(a, 3);//常量
	//int m = get_max(a, 2+3);//表达式
	int m = get_max(a, get_max(4, 5));//函数
	printf("%d\n", m);
	return 0;
}

(2).函数的形参:
在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参
形式参数当函数调用完之后就自动销毁了

(3):示例:写一个函数可以交换两个整形的变量内容
在这里插入图片描述
由图片可知,最后a和b的值并没有交换,这是为什么呢?

a,b是实参;x,y是形参形参是实参的一份临时拷贝,对形参的修改是不会影响实参的
在这里插入图片描述
通过调试可以知道,当a,b传参过去给x,y但是x,y的地址和a,b并不相同,所以交换后交换的只是x,y的值对a,b并无影响

所以可以采用指针的方式*
在这里插入图片描述
在这里插入图片描述
6. 函数的调用

(1).传值调用:
传值调用: 函数的形参和实参分别占有不同的内存块,对形参的修改不会影响实参

#include<stdio.h>
void Swap1(int x, int y)
{
	int tmp = x;
	x = y;
	y = tmp;
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	printf("交换前:a=%d,b=%d\n", a, b);
	Swap1(a, b);
	printf("交换后:a=%d,b=%d\n", a, b);
	return 0;
}

(2).传址调用:
将实参的地址传递给函数,在函数内对形参进行操作等同于对实参进行相同的操作,在函数调用结束返回后,形参被释放,实参的内容是对形参进行操作后的结果。

#include<stdio.h>
void Swap2(int* pa, int* pb)
{
	int tmp = *pa;
	*pa = *pb;
	*pb = tmp;
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	printf("交换前:a=%d,b=%d\n", a, b);
	Swap2(&a, &b);
	printf("交换后:a=%d,b=%d\n", a, b);
	return 0;
}

(3).注意
下图这种方式也是一种传值方式,虽然地址传过去是对的但是px,py交换的只是地址,a,b的值并无影响。
在这里插入图片描述


学习产出:

  • 技术笔记 2 遍
  • CSDN 技术博客 1 篇
  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小沈YO.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值