C语言中的goto语句和函数(上)-创新互联

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

学习内容:
  1. goto语句
  2. 函数:(1) 函数的参数(2) 函数的调用

一.goto语句

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

创新互联从2013年成立,先为罗湖等服务建站,罗湖等地企业,进行企业商务咨询服务。为罗湖企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

1.代码示例

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

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

#include#include#includeint 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#include#includeint 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 函数是内存赋值函数,用来给某一块内存空间进行赋值的。其原型是:voidmemset(void_Dst, int _Val, size_t _Size)

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

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

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

#includeint 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).函数的实参:

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

#includeget_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).传值调用:
传值调用: 函数的形参和实参分别占有不同的内存块,对形参的修改不会影响实参

#includevoid 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).传址调用:
将实参的地址传递给函数,在函数内对形参进行操作等同于对实参进行相同的操作,在函数调用结束返回后,形参被释放,实参的内容是对形参进行操作后的结果。

#includevoid 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 遍
  • 技术博客 1 篇

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享名称:C语言中的goto语句和函数(上)-创新互联
网页URL:http://myzitong.com/article/cdijhc.html