C语言学习笔记

120 阅读1分钟

​「这是我参与2022首次更文挑战的第26天,活动详情查看:2022首次更文挑战」。

 题目十一:

写一个函数,可以逆序一个字符串的内容

#include<string.h>
#include<assert.h>
void reverse(char* str)
{
	assert(str);
	int len = strlen(str);
	char* left = str;
	char* right = str + len - 1;

	while (left<right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
int main()
{
	char arr[256] = { 0 };
	scanf("%s", arr);//abcdef --->fedcba
	//逆序函数
	reverse(arr);
	printf("%s\n", arr);
	return 0;
}

 题目十二:

求0-100000之间的所有水仙花数并输出

水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数,水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。

水仙花数只是自幂数的一种,严格来说3位数的3次幂数才称为水仙花数。

#include<math.h>
int main()
{
	int i = 0;
	for (i = 0; i <= 100000; i++)
	{
		//判断i是否为水仙花数(自幂数)
		//1.计算i的位数 - n位数
		int n = 1;
		int tmp = i;
		int sum = 0;
		while (tmp /= 10)
		{
			n++;
		}
		//123/10 n++
		//12/10 n++
		//1/10
		tmp = i;
		while (tmp)
		{
			sum += pow(tmp % 10, n);
			tmp /= 10;
		}
		//3.比较i == sum
		if (i == sum)
		{
			printf("%d ", i);
		}
	}

	return 0;
}

题目十三:打印菱形

int main()
{
    int line = 0;
    scanf("%d", &line);
    //打印上半部分
    
    int i = 0;
    for (i = 0; i < line; i++)
    {
        //打印空格
        int j = 0;
        for (j = 0; j < line - 1 - i; j++)
        {
            printf(" ");
        }
        //打印*
        for (j = 0; j <2*i+1; j++)
        {
            printf("*");
        }
        printf("\n");
    }
    //打印下半部分
    for (i = 0; i < line - 1; i++)
    {
        int j = 0;
        //打印空格
        for (j = 0; j <=i; j++)
        {
            printf(" ");
        }
        //打印*
        for (j = 0; j<2*(line-1-i)-1; j++)
        {
            printf("*");
        }
        printf("\n");
    }

	return 0;
}

函数介绍

strlen

1.字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0'前面出现的字符个数(不包含'\0')

2.参数指向的字符串必须要以'\0'结束

3.函数的返回值为size_t,是无符号的

例:

int main()
{
	int len = strlen("abcdef");
	printf("%d\n", len);
	return 0;
}

输出值为:6

int main()
{
	char arr[] = { 'a','b','c','d','e','f' };
	int len = strlen(arr);
	printf("%d\n", len);
	return 0;
}

输出值为;随机值

实现strlen函数的方法:

//1.计数器的方法 如下
//2.递归(不创建临时变量求字符串长度)
//3.指针减指针

int my_strlen(const char* str)
{
	int count = 0;
	assert(str != NULL);
	while (*str != '\0')//while(*str)
	{
		count++;
		str++;
	}
	return count;
}
int main()
{
	int len = my_strlen("abcdef");
	printf("%d\n", len);
	return 0;
}