🚩write in front🚩 🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家 ^ 星级博主~掘金⇿InfoQ创作者~周榜77»总榜1766🏅 🆔本文由 謓泽 原创 CSDN首发 🙉 如需转载还请通知⚠ 📝个人主页-謓泽的博客_CSDN博客💬 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝 📣系列专栏-【C】题目_謓泽的博客-CSDN博客🎓 ✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩
『C语言』题集 of ⑩ 目录如下⇲
🎈第四十六题→创建自定义函数,从而实现strcat()的功能🎈
🎈第四十七题→求 1! + 2! + 3! ... +n!;不考虑溢出🎈
🎈第四十八题→创建自定义函数,实现字符串函数strcpy()🎈
🎈第四十九题→计算在n的参数当中的补码有多少二进制当中的1🎈
首先在实现这道题目的时候,我们首先要知道 strcat() 函数的一个基本信息。 让我们先看看 strcat() 函数的函数声明方式如下↓
char *strcat(char *dest, const char *src)
将源字符串的副本追加到目标字符串。 dest → 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串。 src → 指向要追加的字符串,该字符串不会覆盖目标字符串。 该函数返回一个指向最终的目标字符串 dest 的指针。 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。 以上就是 strcat() 函数的一个基本信息,相信当我们知道这些就可以很好的解决这道题目☆⌒(*^-゜)v THX!!
这个实际上可以用 for 循环就可以做出来了。这道题目实际上是比较容易地一道题目,但比较要考察下逻辑思维能力。 1! + 2! + 3! ... +n! 假设是4那么→1+1×2+1×2×3+1×2×3×4。 记住:题目是不需要考虑程序结果最终是否栈溢出了。 遇到这种题目实际上可以参考代入法的一个方法来解决此类题目会好很多。
做这种创建字符串函数实现它的功能,首先我们必须要了解我们所创建自定义函数的功能才行,这样有利于我们更好的实现。 strcpy() 函数的声明方式如下 ↓
char *strcpy(char *dest, const char *src)
把 src 所指向的字符串复制到 dest。 需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。所以,dest 一定要足够大,这样才能被 src 给存放的下去。 dest→ 指向用于存储复制内容的目标数组。 src→ 要复制的字符串。 该函数返回一个指向最终的目标字符串 dest 的指针。 strcpy()在原来字符要保证拥有 src 存在字符的空间大小也就是下标。 注意:这里的返回值的指针类型可以是 void 也可以是 char *
这道题目:比较考察你的逻辑思维能力实际上也就是操作符的一个使用了。(解题关键🔥) 计算在n的参数当中的补码有多少二进制当中的1,也就是当我们输入的时候进行输入数字的时候,它能够计算我们当中补码的数字的1。我们以输入整形类型的数字为例,在做这道题的我们必须要知道原码、反码、补码它到底是什么才行(^∀^●)ノシ 原码→直接将数字按照正数或者负数形式来转换翻译成二进制就可以了。 反码→将你的符号位不变,也就是最高位不变,其次再依次的按位取反,得到反码。 补码→补码就是 反码+1 就能够得到补码,注意:前提是要进行反码,基础上进行+1。
在前面的题目当中做过输入两个数字,求它们的最大公约数。那么在本次习题当中我们就来做下设计一个算法,求输入A和B的最小公倍数。那么在此之前我们需要了解下什么是最小公倍数,这样我们解题才能有一个思路(@^0^) 两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。整数a,b的最小公倍数记为[a,b],同样的,a,b,c的最小公倍数记为[a,b,c],多个整数的最小公倍数也有同样的记号。 与最小公倍数相对应的概念是最大公约数,a,b的最大公约数记为(a,b)。关于最小公倍数与最大公约数,我们有这样的定理:(a,b)x[a,b]=ab(a,b均为整数)。 下面用一张图来表示↓
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
char *My_strcat(char *dest, const char *src)
{
assert(dest && src != NULL);//断言
char *ret = dest;
while (*dest != '\0')//'\0'的ASCLL码值就是0
{
dest++;
}
//dest指向的是'\0'
while (*dest++ = *src++)
{
;
}
/*相当于
while (*src != '\0')
{
*dest++ = *src++;
}*/
return ret;
}
int main(void)
{
char arr1[20] = "hello C";
char arr2[20] = "yuyan";
printf("%s\n", My_strcat(arr1, arr2));
return 0;
}
🖊运行结果如下↓ hello Cyuyan
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main(void)
{
//代入法 1*1 + 1*2 + 1*2*3 + 1*2*3*4 - 假设输入数字:4
int i = 0;
int j = 0;
int num = 0;
int sum = 0;
printf("请输入数字->:");
scanf("%d", &num);
for (i = 1; i <= num; i++)
{
int ret = 1;//注意->ret
for (j = 1; j <= i; j++)
{
ret = j * ret;//每一次阶层之和
}
sum = ret + sum;//总和
}
printf("sum = %d\n", sum);
return 0;
}
🖊运行结果如下↓ 请输入数字->:4 sum = 33
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>
void my_strcpy(char* str1, char* str2)
{
assert(str1 && str2 != NULL);//断言!
//把字符串str2赋值给str1,遇到'\0'结束。
while (*str2 != '\0')
{
*str1++ = *str2++;
}
}
int main(void)
{
char str[20] = { 0 };
char p[20] = { 0 };
printf("请输入字符串->:");
scanf("%s", str);
my_strcpy(p, str);
printf("ret = %s\n",p);
return 0;
}
🖊运行结果 请输入字符串->:C语言yyds! ptr = C语言yyds!
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int function(int n)
{
int count = 0;
int i = 0;
for (i = 0; i < 32; i++)
{
// 假设n = 3
// 0011 >> 0 - 0011 & 1111 +1
// 0011 >> 1 - 0001 & 1111 +2
// 0001 >> 2 - 0000 & 1111 count = 2
if (((n >> i) & 1) == 1)
{
count++;
}
}
return count;
}
int main(void)
{
int n = 0;
printf("请输入数字:");
scanf("%d", &n);
int ret = function(n);
printf("ret = %d\n", ret);
return 0;
}
🖊运行结果 假设→请输入数字:3 ret = 2
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
typedef unsigned long int u_lint;
int main(void)
{
int i = 1;
u_lint a = 0;
u_lint b = 0;
printf("请输入两个数字->:");
scanf("%d %d", &a, &b);
while (i)
{
if (a*i % b == 0)
{
printf("最小公倍数:%d\n", a*i);
break;
}
i++;//注意→i++的位置📢
}
return 0;
}
🖊运行结果 可能输入结果→请输入两个数字->:90 6 最小公倍数:90