★★写在前面★★
本题库源自互联网,仅作为个人学习使用,记录C语言题目练习的过程,如果对你也有帮助,那就点个赞吧。
一、选择题
1、已知函数的原型是: int fun(char b[10], int *a); ,设定义: char c[10];int d; ,正确的调用语句是( )
A: fun(c,&d); B: fun(c,d); C: fun(&c,&d); D: fun(&c,d);
正确答案:A
答案解析i:nt fun(char b[10], int *a);函数第一个参数为数组,因此实参应该是数组c,第二个参数为int*的指针,因此实参应该是&d。
2、请问下列表达式哪些会被编译器禁止【多选】( )
int a = 248, b = 4;
int const *c = 21;
const int *d = &a;
int *const e = &b;
int const * const f = &a;
A: *c = 32; B: *d = 43 C: e=&a D: f=0x321f
正确答案:ABCD
答案解析:
int a = 248, b = 4;
int const *c = 21; //*c有const修饰,所以*c不可更改,所以A选项错误。
const int *d = &a; //*d有const修饰,所以*d不可更改,所以B选项错误。
int *const e = &b; // e有const修饰,所以e不可更改,所以C选项错误。
int const * const f = &a; f有const修饰,*f有const修饰,所以f和*f不可更改,所以D选项错误。
3、以下程序的输出结果为( )
#include <stdio.h>
int i;
void prt()
{
for (i = 5; i < 8; i++)
printf("%c", '*');
printf("\t");
}
int main()
{
for (i = 5; i <= 8; i++)
prt();
return 0;
}
A: *** B: *** *** *** *** C: *** *** D: * * *
正确答案:A
答案解析:i是全局变量,i在main函数中调用赋初值为5,进入prt()函数后进入零一循环,重新赋初值为5,循环3次后返回main函数后,i已经为9了,条件判断为假,循环结束,因此打印三个*。
4、下面代码段的输出是( )
int main()
{
int a=3;
printf("%d\n",(a+=a-=a*a));
return 0;
}
A: -6 B: 12 C: 0 D: -12
正确答案:D
答案解析:第一步:a=a-(a*a)=3-9=-6;第二步:a=a+a=-6-6=-12。
5、下列不能实现死循环的是( )
A: while(1){} B: for(;1;){} C: do{}while(1); D: for(;0;){}
正确答案:D
答案解析:条件表达式,非0为真,0为假,D选项条件为0,始终为假,进入不了循环。
二、编程题
1、首先输入要输入的整数个数n ,然后输入n 个整数。输出为n 个整数中负数的个数,和所有正整数的平均值,
结果保留一位小数。
注意: 0 即不是正整数,也不是负数,不计入计算; 本题有多组输入用例。
输入描述:首先输入一个正整数n ,然后输入n 个整数。
输出描述:输出负数的个数,和所有正整数的平均值。
牛客网【牛客网题号: HJ97 记负均正】
示例:
输入: 5
1 2 3 4 5
10
1 2 3 4 5 6 7 8 9 0
输出: 0 3.0
0 5.0
#include<stdio.h>
int main()
{
int n = 0;
int i = 0;
int input = 0;
scanf("%d", &n);
int count_negative = 0; //计数负数
int count_positive = 0; //计数正数
float sum_positive = 0; //求和正数
float average_positive = 0; //正数平均数
while (i < n)
{
scanf("%d", &input);
if (input < 0) //如果为负数,count_negative++
count_negative++;
if (input > 0) //如果为正数,加到sum_positive上,count_positive++
{
sum_positive += input;
count_positive++;
}
i++;
}
if (count_positive != 0) //如果正数的个数不为0,正常求平均数
average_positive = sum_positive / count_positive;
else //如果正数的个数为0,正数的平均数置为0
average_positive = 0;
printf("%d %.1lf", count_negative, average_positive);
return 0;
}
2、有一个长度为 n 的非降序数组,比如[1,2,3,4,5] ,将它进行旋转,即把一个数组最开始的若干个元素搬到数组
的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2] ,或者[4,5,1,2,3] 这样的。请问,给定这样一个旋转数组,求数
组中的最小值。
数据范围: 1≤n≤10000 ,数组中任意元素的值: 0≤val≤10000
牛客网【牛客网题号: JZ11 旋转数组的最小数字】
示例:
输入:[3,4,5,1,2]
返回值:1
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @param numsLen int nums数组长度
* @return int整型
*/
#include<stdlib.h>
int compar(const void*e1,const void*e2)
{
return (*(int*)e1-*(int*)e2);
}
int minNumberInRotateArray(int* nums, int numsLen ) {
// write code here
qsort(nums,numsLen,4,compar);
return nums[0];
}
代码思路:
排序求最小值:一、冒泡排序;二、qsort()函数排序,最小值放在首元素位置,最后返回首元素即可。