网站首页 > 开源技术 正文
1.题目一
求下面代码输出:
#include "stdio.h"
struct node
{
int a;
int b;
int c;
};
int main()
{
struct node s= {5, 6, 7};
struct node *pt = &s;
printf("%d" , *(int*)pt);
}
2.题目二
给出数列 {1,1,2,3,5,8,13,21}; 求这个数列的第n项的多少?用C语言实现(使用递归)。
3.题目三
说明下面函数foo的功能。
#include "stdio.h"
int foo( int x , int n)
{
int val = 1;
if (n>0)
{
if (n%2 == 1) val = val *x;/*如果是奇数,就要再乘一次*/
val = val * foo(x*x , n/2);/*递归*/
}
return val;
}
int main()
{
printf("%d" ,foo(2,2));
}
4.题目四
求两个大数相加,例如:
#include "stdio.h"
#include "string.h"
int main()
{
char a1[100] = "1111111333123412431234";
char a2[100] = "2222222194112312312341234123423";
// ...以下是需要补充代码
}
参考答案:
题目一答案:5
题目一解析:
struct node s= {5, 6, 7}; 这句相当于给s里面的变量a,b,c进行了赋值,分别赋值为了5,6,7。
struct node *pt = &s; 这句是声明一个指针pt,并且指向了s这个结构体变量,指向的类型是结构体类型node。
printf("%d" , *(int*)pt); 这句相当于把原本指向的node的结构体类型的pt指针,强转成了变成指向int型,这时候通过*去取指针所指的变量的值的时候,取回来的是结构体s的前4个字节的数据作为int的值,所以输出的结果应该为5。
题目二解析:
这道题的数列便是大名鼎鼎的斐波那契数列,首先我们可以通过观察,找到这个数列的规律是 F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*),用普通递归的参考答案:
#include "stdio.h"
#include "string.h"
int input[] = {1,1,2,3,5,8,13,21};
int fib(int n)
{
int sum = 0;
if(n <= 2) return 1;
sum = fib(n-1) + fib(n-2);
return sum;
}
int main()
{
printf("%d\n",fib(7));
return 0;
}
题目三解析:
foo 是递归函数,这里只要n>0,就会一直递归下去 。如果n<0后递归就会出栈,我们输入 x = 2 和 n = 3来看看执行一下函数运行过程:
- 第一步,n = 3 ,由于是大于0的,n%2 = 1 执行 val = val 2 , 结果 val = 2。接着执行 val = 2 * foo( 22 , 1 ) 。
- 第二步,x = 4,n =1,由于这个时候,n还是大于0,所以还是会去递归,还是n%2 = 1, val = val * x ,val = 4, val = 4 foo(4 4 ,0)。
- 第三步,x = 16 , n = 0, 这个时候就退出递归函数,返回 val =1。
foo的返回值就是 241 = 8 也就是 2 的 3次方,所以这个函数是用来求x的n次方。
题目四参考代码如下:
#include "stdio.h"
#include "string.h"
int main()
{
char a1[100] = "1111111333123412431234";
char a2[100] = "2222222194112312312341234123423";
char sum[100] = {0};
int len1,len2,i,j=0;
len1 = strlen(a1)-1;
len2 = strlen(a2)-1;
for( i = (len1>len2)?len1:len2;i>=0;i--)
{
if(len1 >= 0 && len2 >= 0){
sum[i] = ( (a1[len1] -0x30) + (a2[len2] - 0x30) + j)%10 + 0x30;
j = ((a1[len1] -0x30) + (a2[len2] - 0x30))/10;
}else if(len1 >= 0 && len2 < 0){
sum[i] = ( (a1[len1] -0x30) + j)%10 + 0x30;
j = 0;
}else if(len2 >= 0 && len1 < 0){
sum[i] = ( (a2[len2] -0x30) + j)%10 + 0x30;
j = 0;
}
len1 --;len2 --;
}
printf("\n%s\n",sum);
return 0;
}
代码输出:
2222222195223423645464646554657
我是小钱嵌入式,会不断的和大家分享嵌入式相关的内容,智能化时代的到来,促就了未来一定是个全民编程的时代 ,如果你觉得我的分享对你有些帮助,请不要吝惜你的点赞和关注原创写作不易,兄弟姐妹们的点赞和关注,就是我分享最大的动力,谢谢!,欢迎在评论区和我一起讨论。
猜你喜欢
- 2025-06-28 C 语言技能提升:玩转运算符与表达式,提升自己的逻辑运算掌控力
- 2025-06-28 这些C++工程师面试题你都会了吗?(c/c++工程师面试会怎么问)
- 2025-06-28 C语言基础题:实验7-2-9 螺旋方阵 (20 分)
- 2025-06-28 C语言100题集合019-实现输入一个星期中对应的第几天
- 2025-06-28 每天一道c语言编程题,第四题(c语言经典 求素数)
- 2025-06-28 每天一道c语言编程题,第二题(c语言编程题怎么写)
- 2025-06-28 2020 CSP-J1 入门级 C++ 语言试题与答案
- 2025-06-28 每天一道c语言编程题,第三题(c语言编程题及答案解析)
- 2025-06-28 《C语言》刷完这些题,起码90+!!(c语言刷题app)
- 2025-06-28 每天一道c语言编程题,第38题,结构体练习,入门难度
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)