「这是我参与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;
}