建设工程竣工验收消防备案网站,优化wordpress访问,有app怎么做网站,网站网址查询ip总结了几个比较经典的笔试题目#xff0c;这些题目是在面试中遇到的#xff0c;有难度#xff0c;但是不是那种特别难的#xff0c;比较有代表性#xff0c;如果正在找工作的话#xff0c;可以看看#xff0c;丰富一下自己的知识库。1.题目一求下面代码输出#xff1a;… 总结了几个比较经典的笔试题目这些题目是在面试中遇到的有难度但是不是那种特别难的比较有代表性如果正在找工作的话可以看看丰富一下自己的知识库。1.题目一求下面代码输出#include stdio.h
struct node
{int a;int b;int c;
};
int main()
{struct node s {3, 5, 6};struct node *pt s;printf(%d , *(int*)pt);
}
解析把pt的指针指向类型从struct node结构体变成int这时候取到的是struct node前4个字节的数据作为int值所以结果应该是 3。weiqifabsp-ubuntu1804:~/c/cpu$ gcc 1.c ./a.out
3
weiqifabsp-ubuntu1804:~/c/cpu$
2.题目二说明下面函数foo的功能。#include stdio.h
int foo( int x , int n)
{int val 1;if (n0){if (n%2 1) val val *x;/*如果是奇数就要再乘一次*/val val * foo(x*x , n/2);/*递归*/}return val;
}int main()
{printf(%d ,foo(2,3));
}
解析 foo 函数功能foo 是递归函数递归函数的返回方式是通过判断 n0 。如果n0后递归就会出栈我们输入 x 2 和 n 3来验证一下这个函数。第一步n 3 大于0n%2 1 执行 val val * 2 , 结果 val 2。执行 val 2 * foo( 2*2 , 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的返回值就是 2*4*1 8 也就是 2 的 3次方x的n次方。3.题目三给出数列 {1,1,2,3,5,8,13,21}; 求这个数列的第n项的多少用C语言实现。这个是一个算法编程题从第三项开始M(n) M(n-1) M(n-2),所以我就想到用递归来完成这个题目。代码如下:#include stdio.h
#include string.hint input[] {1,1,2,3,5,8,13,21};
long long jisuan(int n)
{long long sum 0;if(n 2) return 1;sum jisuan(n-1) jisuan(n-2);return sum;
}int main()
{printf(ll%d\n,jisuan(7));return 0;
}
输出结果:weiqifabsp-ubuntu1804:~/c/cpu$ gcc mianshi.c ./a.out
13
weiqifabsp-ubuntu1804:~/c/cpu$
因为递归函数性能比较差用递归不是一个非常好的解决方法如果不用递归实现呢代码如下#include stdio.h
#include string.h
#include stdlib.hint input[] {1,1,2,3,5,8,13,21};long long jisuan2(int n)
{int *a,i;long long sum;a(int *)malloc(sizeof(int)*n);//分配动态数组。a[0]a[1]1;for(i 2; in; i ){a[i]a[i-1]a[i-2];//这里就是通项公式的一种实现形式。}sum a[n-1];//保存结果free(a);//释放动态数组return sum;//返回结果值。
}
int main()
{printf(%lld\n,jisuan2(7));return 0;
}
代码输出weiqifabsp-ubuntu1804:~/c/cpu$ gcc mianshi.c ./a.out
13
weiqifabsp-ubuntu1804:~/c/cpu$
4.题目四求两个大数相加这两个大数肯定是超过最长数据类型的长度的所以只能用字符串来操作。在算法部分是每一位相加如果相加后的数值超过10就需要考虑进位。代码如下#include stdio.h
#include string.hint main()
{char a1[100] 1111111333123412431234;char a2[100] 2222222194112312312341234123423;char sum[100] {0};int len1,len2,i,j0;len1 strlen(a1)-1;len2 strlen(a2)-1;for( i (len1len2)?len1:len2;i0;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;
}
代码输出weiqifabsp-ubuntu1804:~/c/cpu$ gcc 3.c ./a.out
2222222195223423645464646554657
weiqifabsp-ubuntu1804:~/c/cpu$
推荐阅读专辑|Linux文章汇总专辑|程序人生专辑|C语言我的知识小密圈关注公众号后台回复「1024」获取学习资料网盘链接。欢迎点赞关注转发在看您的每一次鼓励我都将铭记于心~