长春网站建设找新生科技,做设计找素材的 网站有哪些,网页的分类,国内出名的室内设计公司题型指引 一、选择题二、编程题 ★★写在前面★★ 本题库源自互联网#xff0c;仅作为个人学习使用#xff0c;记录C语言题目练习的过程#xff0c;如果对你也有帮助#xff0c;那就点个赞吧。 一、选择题
1、有以下函数#xff0c;该函数的功能是#xff08; #xff… 题型指引 一、选择题二、编程题 ★★写在前面★★ 本题库源自互联网仅作为个人学习使用记录C语言题目练习的过程如果对你也有帮助那就点个赞吧。 一、选择题
1、有以下函数该函数的功能是
int fun(char *s)
{char *t s;while(*t);return(t-s);
}A: 比较两个字符的大小 B: 计算s所指字符串占用内存字节的个数 C: 计算s所指字符串的长度 D: 将s所指字符串复制到字符串t中 正确答案B 答案解析循环在*t为0时停止同时tt最后会停在字符串结束的’\0’之后的一个位置t作为尾部指针减去头部指针就是整个字符串占用内存的字节数包含\0在内而c答案字符串长度不包括最后的\0选项B正确。 2、若有“ float a[3]{1.5,2.5,3.5},paa;(pa)*3; ”则*pa 的值是 A: 1.5 B: 2.5 C: 3.5 D: 4.5
正确答案B 答案解析在*paa中指针pa指向a[0]pa返回值仍是操作之前的值*(pa)取pa指向的地址的值*(pa)*3将该值变为原来的3 倍也就是数组a的第一个值为4.5由于pa之后pa指针移动了sizeof(float)个字节所以pa指向a[1],所以值为2.5选项B正确。
3、以下程序运行后的输出结果是
#include stdio.h
int main()
{int a[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}, *p a 5, *q NULL;*q *(p5);printf(%d %d\n, *p, *q);return 0;
}A: 运行后报错 B: 6 6 C: 6 11 D: 5 10
正确答案A 答案解析指针q初始化为NULL接着又解引用指针q是错误的对NULL指针是不能解引用的选项A正确。
4、设有定义char*p[]{“Shanghai”,“Beijing”,“Honkong”}; 则结果为j字符的表达式是 A: *p[1] 3 B: *(p[1] 3) C: (p[3] 1) D: p[3][1] 正确答案B 答案解析B选项p是个char类型的数组p[1]拿到字符串beijing的首地址再加3便是’j’的地址解地址拿到’j’选项B正确。
5、以下叙述中正确的是 A: 即使不进行强制类型转换在进行指针赋值运算时指针变量的基类型也可以不同 B: 如果企图通过一个空指针来访问一个存储单元将会得到一个出错信息 C: 设变量p是一个指针变量则语句p0;是非法的应该使用pNULL; D: 指针变量之间不能用关系运算符进行比较
正确答案B 答案解析A 选项描述不正确不同类型指针一般不可以直接赋值C选项中pNULL;和p0;是等价的D选项中指向同一数组的两 指针变量进行关系运算可表示它们所指数组元素之间的位置关系选项B正确。
二、编程题
1、珠玑妙算游戏the game of master mind的玩法如下。
计算机有4个槽每个槽放一个球颜色可能是红色 R 、黄色 Y 、绿色 G 或蓝色 B 。例如计算 机可能有RGGB 4种槽1为红色槽2、3为绿色槽4为蓝色。作为用户你试图猜出颜色组合。打个比方你 可能会猜YRGB 。要是猜对某个槽的颜色则算一次“猜中”要是只猜对颜色但槽位猜错了则算一次“伪猜中”。注 意“猜中”不能算入“伪猜中”。 给定一种颜色组合solution 和一个猜测guess 编写一个方法返回猜中和伪猜中的次数answer 其中answer[0] 为猜中的次数 answer[1] 为伪猜中的次数。
leetcode【leetcode 题号面试题 16.15. 珠玑妙算】
示例
输入 solutionRGBY,guessGGRR
输出 [1,1]
解释 猜中1次伪猜中1次。/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* masterMind(char* solution, char* guess, int* returnSize){
}int* masterMind(char* solution, char* guess, int* returnSize){
*returnSize2;
srand((unsigned)time(NULL));
int* arr(int*)malloc(sizeof(int)*2);
int count10,count20,i0,j0;
for(i0;i4;i)
{if(solution[i]guess[i])count1;
}
for(i0;i4;i)
{for(j0;j4;j){if(guess[i]solution[j]){count2;for(int k0;k4;k){if(solution[k]guess[i]){solution[k]rand();guess[i]rand();}}break;}}
}
arr[0]count1;
arr[1]count2-count1;
return arr;
}2、给出一个整型数组 numbers 和一个目标值 target 请在数组中找出两个加起来等于目标值的数的下标返回 的下标按升序排列。
牛客网【牛客网题号 NC61 两数之和】
注意本题只需要找到第一组符合要求的数据下标即可。不需要返回多组
示例
输入[3,2,4],6
返回值[2,3]
说明因为 246 而 2的下标为2 4的下标为3 又因为 下标2 下标3 所以输出[2,3]/* C语言声明定义全局变量请加上static防止重复定义 */
int* twoSum(int* numbers, int numbersLen, int target, int* returnSize ) {
}int* twoSum(int* numbers, int numbersLen, int target, int* returnSize ) {int* index (int*)malloc(sizeof(int) * 2);*returnSize 2;for (int i 0; i numbersLen - 1; i) {if (numbers[i] - 10 target) { /continue; // 减去10之后仍比target大则最终和一定不等于target故可用continue跳过本轮循环}for (int j i 1; j numbersLen; j) {if (numbers[i] numbers[j] target) {index[0] i 1;index[1] j 1;return index;}}}return index;
}代码思路开辟元素个数为2的数组遍历整个数组元素判断元素是否符合最基本的两数之和可以等于target如果可以的话进行下一步判断用以此元素之后的元素与该处元素进行相加的和的比较满足题意则i和j就是数组两个元素。为什么j是从i1开始呢因为i是从0开始进行遍历的当遇到第一个能作为加数的元素时j就可以从i1开始遍历只有当后面都不符合要求的时候i才会加1所以当i加到数组中间元素的时候j根本不需要跟i之前的元素进行相加了i在到达此时的i之前已经判定过前面的i不可能跟后面的j进行相加和为target所以j只需要从i1开始执行即可。