做游戏本测评的网站,微分销系统开发,网站毕设代做多少钱,个人微信营销#x1f3a5; 个人主页#xff1a;深鱼~#x1f525;收录专栏#xff1a;【C】每日一练#x1f304;欢迎 #x1f44d;点赞✍评论⭐收藏
一、选择题
1、以下对C语言函数的有关描述中#xff0c;正确的有【多选】#xff08; #xff09;
A: 在C语言中#xff0c;一… 个人主页深鱼~收录专栏【C】每日一练欢迎 点赞✍评论⭐收藏
一、选择题
1、以下对C语言函数的有关描述中正确的有【多选】
A: 在C语言中一个函数一般由两个部分组成它们是函数首部和函数体
B: 函数的实参和形参可以是相同的名字
C: 在main()中定义的变量都可以在其它被调函数中直接使用
D: 在C程序中函数调用不能出现在表达式语句中
【答案】
AB
【解析】
考点函数局部变量返回值参数 C主函数中定义的局部变量只在主函数中有效因为主函数也是一个函数它与其他函数是平行关系所以错误 D:当函数有返回值时可以出现在表达式中所以错误 2、在C语言中以下正确的说法是
A: 实参和与其对应的形参各占用独立的存储单元
B: 实参和与其对应的形参共占用一个存储单元
C: 只有当实参和与其对应的形参同名时才共占用存储单元
D: 形参是虚拟的不占用存储单元
【答案】
A
【解析】
考点形参和实参 ABC形参是实参的一份临时拷贝分别占用不同的内存空间 D函数如果不被调用时函数的形参是形式上存在的但是函数在被调用的时候形参是要分配内存空间的 3、在上下文及头文件均正常的情况下下列代码的输出是 注 print 已经声明过
int main()
{char str[] Geneius;print(str);return 0;
}
print(char *s)
{if(*s){print(s);printf(%c, *s);}
}
A: suiene B: neius C: run-time error D: suieneG
【答案】
A
【解析】
考点递归的理解
递的过程
*s’G‘s注意是先将ss1s已经变了再s1的值赋给print函数
*s’e‘s先将ss1再s1的值赋给print函数
....
*s’s‘:s先将ss1再s1的值赋给print函数
归的过程
*s\0:回到上一次递归
*s’s‘打印\0因为s已经变成了当前字符的下一个,也就是不打印
...
*s’e‘:打印n
*s’G‘:打印e 代码实现了递归倒序打印字符串的功能但是s使得s的值发生了变化回不到G的位置上故而没有打印G 4、对于函数 void f(int x); 下面调用正确的是
A: int yf(9); B: f(9); C: f(f(9)); D: xf();
【答案】
B
【解析】
考点函数的返回值 A函数f是没有返回值的不能给int类型变量赋值故错误同时需要一个整型参数 Cf(9)不能作为f的参数也是错的 D没有传参也不能接收返回值也是错误的 5、给定 fun 函数如下那么 fun(10) 的输出结果是
int fun(int x)
{return (x1) ? 1 : (x fun(x-1));
}
A: 0 B: 10 C: 55 D: 3628800
【答案】
C
【解析】
考点递归的理解
x 10 10fun9
x 9109fun8
x 81098fun7
...
x 1:10987654321 代码是一个递归函数计算x(x-1)(x-2)...21即等差数列的和 二、编程题
1. 图片整理 【参考答案】
思路图片按照大小ASCII码值从小到大排列直接快排
#include stdio.h
#include stdlib.h
#include string.h
int char_cmp(const void* e1,const void*e2)
{return (*(char*)e1-*(char*)e2);
}
int main() {char str[1001]{0};while(~scanf(%s,str)){qsort(str, strlen(str), sizeof(char), char_cmp);printf(%s,str);}return 0;
}
知识点补充快排 qsort函数是一个库函数底层使用的快速排序的方式对数据进行排序这个函数可以直接使用可以用来排序任意类型的数据 头文件#includestdlib.h void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) ); qsort被排序数组的初始位置要排序的数组的元素个数一个元素所占字节比较函数 其中比较函数需要根据自己排序类型数据来写以int类型快排为例 int int_cmp(const void* e1, const void* e2) { return (*(int*)e1 - *(int*)e2); } 如果想要更详细学习可以看看这篇文章【C进阶】指针二 2.寻找数组的中心下标 【参考答案】
思路1暴力求解遍历数组i之前数之和为sum1i之后的数之和为sum2如果sum1等于sum2就返回1否则返回-1
int pivotIndex(int* nums, int numsSize)
{for(int i0;inumsSize;i){int sum10;int sum20;for(int j0;ji;j){sum1nums[j];}for(int ki1;knumsSize;k){sum2nums[k];}if(sum1sum2)return i;}return -1;
} 思路2先求出数组总和然后遍历数组的过程中看当前sum的两倍加上当前元素值是否为数组总和即2*sumnums[i]total等于就返回i否则继续遍历直到结束如果结束还没有就返回-1
int pivotIndex(int* nums, int numsSize)
{//计算总和int total0;for(int i0;inumsSize;i){totalnums[i];}int sum0;for(int i0;inumsSize;i){if(2*sumnums[i]total)return i;sumnums[i];}return -1;
}