C语言03-函数(上)

举报
芒果_Mango 发表于 2022/01/31 10:54:46 2022/01/31
【摘要】 最近,想复习一下C语言,所以笔者将会在掘金每天更新一篇关于C语言的文章! 各位初学C语言的大一新生,以及想要复习C语言/C++知识的不要错过哦! 夯实基础,慢下来就是快! 1.函数介绍 tolower:字母转小写参数:可以传ASCII码值 也可以传字符 printf("%c ", tolower('A')); //a printf("%d ", tolower('A')); //97 pri...

最近,想复习一下C语言,所以笔者将会在掘金每天更新一篇关于C语言的文章! 各位初学C语言的大一新生,以及想要复习C语言/C++知识的不要错过哦! 夯实基础,慢下来就是快!

1.函数介绍

tolower:字母转小写

image.png

参数:可以传ASCII码值 也可以传字符
	printf("%c ", tolower('A'));	//a
	printf("%d ", tolower('A'));	//97
	printf("%c ", tolower(65));		//a

// 'A' : 65
// 'a' : 97

toupper:字母转大写

image.png

参数:可以传ASCII码值 也可以传字符
printf("%d ", toupper('a'));	//65
printf("%c ", toupper('a'));	//'A'

fabs() / abs() :求绝对值

image.png

image.png

//注意fabs()函数返回值为double类型 且要引头文件math.h
  printf("%d ", abs(-1.1));	//1
  printf("%.2lf ", fabs(-1.1));	//1.10

sqrt:开平方函数

image.png

printf("%.2lf ", sqrt(4));	//2.00
printf("%.2lf ", sqrt(8));  //2.83

pow:求平方函数

image.png

第一个参数:底数:x  
第二个参数:次幂:y
  printf("%.2lf ", pow(2,3));	//2的三次方 8
  printf("%.2lf ", pow(3,2));//3的平方 9

strcpy函数-字符串拷贝

image.png

第一个参数:目标位置
第二个参数:要拷贝的字符串---因为不作修改,所以可以加const修饰
   //注意:可以不接收strcpy函数返回值
//strcpy函数返回值为:目标空间的地址
 //要保证目标空间足够大
int main()
{
	char arr[20] = { 0 };	//目标空间
	char* arr2 = "hello world";
	char* ret =strcpy(arr, arr2);
	printf("%s\n", arr);	//hello world
    printf("%s\n", ret);	//hello world
	return 0;
}

memset函数

image.png

将dest指向的内存块的前count个字节设置为指定值

第一个参数:指针
第二个参数:要设置的指定值 可以为整数也可以为字符
第三个参数:字节数,可以为变量也可以为常量
    
    注意:以字节为单位进行扩充
    如果要接收返回值,要强制类型转化一下,因为返回类型是void*.不转换也不会出错,但是规范点比较好
    也可以不接收返回值
int main()
{
	char arr[20] ="hello world";
	int n = 5;
	char *ret = (char*)memset(arr, 'x', n);
	printf("%s\n", arr); //xxxxx world
    printf("%s\n",ret); //xxxxx world
	return 0;
}
//想要将数组前五个元素初始化为1
//错误程序:
int main()
{
    int arr[10] = {0};
    memset(arr,1,5*sizeof(int));
    return 0;
}

image.png


原因:memset是以字节为单位初始化

整形->4个字节 共初始化字节数为5*sizeof(int) =20个字节

所以前5个元素被初始化为0x01010101,而并非0x00000001


2.自定义函数

1.求两个数的较大值

int get_max(int a, int b)
{
	return a > b ? a : b;
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int max = get_max(a, b);//
	printf("%d和%d的较大者为:%d\n",a,b,max);
}

2.交换两个数的值

//错误程序
void Swap(int x, int y)
{
	int tmp = x;
	x = y;
	y = tmp;
}
int main()
{
	int a = 10;
	int b = 20;
	printf("before: a = %d,b = %d\n", a, b);	//20 10
	Swap(a, b);
	printf("after:  a = %d,b = %d\n", a, b);	//20 10
	return 0;
}
//原因:传值时,实参a和b传给形参x,y时,形参是实参的一份临时拷贝
//改变形参变量x,y不会影响实参a和b
//正解->传址
void Swap(int* x, int* y)
{
	int tmp =*x;
	*x = *y;
	*y = tmp;
}
int main()
{
	int a = 10;
	int b = 20;
	printf("before: a = %d,b = %d\n", a, b);	//20 10
	Swap(&a,&b);
	printf("after:  a = %d,b = %d\n", a, b);	//10 20
	return 0;
}

3.写一个函数判断一个数是不是素数

方法1:试除法
//写法1:
//是素数返回1,不是素数返回0
int is_prime(int n)
{
	int i = 0;
	for (i = 2; i < n; i++)
	{
		if (n %i == 0)
		{
			return 0;
		}
	}
	return 1;
}
//写法2
//用布尔类型 ->引用头文件 stdbool.h
bool is_prime(int n)
{
	int i = 0;
		for (i = 2; i < n; i++)
		{
			if (n %i == 0)
			{
				return false;
			}
		}
		return true;
}

法2:开平方
int is_prime(int n)
{
	int i = 0;
	for (i = 2; i < sqrt(n); i++)
	{
		if (n %i == 0)
		{
			return 0;
		}
	}
	return 1;
}

今天就先到这吧~感谢你能看到这里!希望对你有所帮助!欢迎老铁们点个关注订阅这个专题! 同时欢迎大佬们批评指正!!!
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。