★★写在前面★★
本题库源自互联网,仅作为个人学习使用,记录C语言题目练习的过程,如果对你也有帮助,那就点个赞吧。
1、执行下面程序,正确的输出是( )
int x=5,y=7;
void swap()
{
int z;
z=x;
x=y;
y=z;
}
int main()
{
int x=3,y=8;
swap();
printf("%d,%d\n",x, y);
return 0;
}
A: 5,7 B: 7,5 C: 3,8 D: 8,3
正确答案:C
答案解析:
int x=5,y=7;
void swap()
{
int z; //3、定义一个局部变量z
z=x; //4、将x的值赋值给z,此时x调用的是全局变量x,x=5,z=5
x=y; //5、将y的值赋值给x,此时x、y调用的是全局变量x、y,y=7,x=7
y=z; //6、将z的值赋值给y,此时y是全局变量,z=5,y=7
}
int main()
{
int x=3,y=8; //1、定义两个局部变量x、y
swap(); //2、函数调用,实参为空
printf("%d,%d\n",x, y); //3、打印优先使用局部变量x、y,因此打印结果为:3,8
return 0;
}
程序运行截图:
2、以下不正确的定义语句是( )
A: double x[5] = {2.0, 4.0, 6.0, 8.0, 10.0};
B: char c2[] = {‘\x10’, ‘\xa’, ‘\8’};
C: char c1[] = {‘1’,‘2’,‘3’,‘4’,‘5’};
D: int y[5+3]={0, 1, 3, 5, 7, 9};
正确答案:B
答案解析:
B: char c2[] = {‘\x10’, ‘\xa’, ‘\8’};\ddd ddd表示1到3个八进制数,但八进制数字是0-7,没有8,选项中’\8’是错误的。
3、test.c 文件中包括如下语句,文件中定义的四个变量中,是指针类型的变量为【多选】( )
#define INT_PTR int*
typedef int* int_ptr;
INT_PTR a, b;
int_ptr c, d;
A: a B: b C: c D: d
正确答案:ACD
答案解析:
#define INT_PTR int*
typedef int* int_ptr;
INT_PTR a, b; //1、等于int* a,b;因此a是指针,b是整型
int_ptr c, d; //2、等于int* c,*d;因此c是指针,d是指针
//#define是宏定义,仅仅是直接替换,INT_PTR a, b; 进行宏替换后代码是这样的:int *a, b;这里的int *是a的类型,b的类型是int,故此次b只是int类型。而typedef是把该类型定义一个别名,别名是一个独立的类型了,使用这个类型创建的变量都是这个类型的。所以 a,c,d才是指针类型
4、 若给定条件表达式(M)?(a++):(a–) ,则其中表达式 M ( )
A: 和(M==0)等价
B: 和(M==1)等价
C: 和(M!=0)等价
D: 和(M!=1)等价
正确答案:C
答案解析:条件表达式(M)?(a++):(a–)等于(M为真吗)?(如果为真,a++):(如果为假,a–),(表达式1)? (表达式2): (表达式3)为三目运算符,题目语句逻辑为,M表达式为非0,执行a++,M表达式为0,执行a–;
A、若(M==0),M=0,执行a++,否则,执行a–,不符合;
B、若(M==1),M=1,执行a++,否则,执行a–,不符合;
C、若(M!=0),M!=0即M非0,执行a++,否则,执行a–,符合;
D、若(M!=1),M不等于1,执行a++,否则,执行a–,不符合;
5、有如下定义语句,则正确的输入语句是【多选】( )
int b;
char c[10];
A: scanf(“%d%s”,&b,&c);
B: scanf(“%d%s”,&b,c);
C: scanf(“%d%s”,b,c);
D: scanf(“%d%s”,b,&c);
正确答案:AB
答案解析:&c和c两个地址值是一样的,程序的效果相同,没有问题,但同时必须把整型变量b的地址给scanf,故CD错误,AB正确。
1、输入数字 n ,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3 ,则打印出 1、2、3 一直到最大的 3 位
数 999 。
★ 用返回一个整数列表来代替打印
★ n 为正整数
牛客网【牛客网题号: JZ17 打印从1到最大的n位数】
示例:
输入:1
返回值:[1,2,3,4,5,6,7,8,9]
My_testcode:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型 最大位数
* @return int整型一维数组
* @return int* returnSize 返回数组行数
*/
static int arr[100000];
int* printNumbers(int n, int* returnSize ) {
// write code here
int m = 9;
for (int i = 1; i < n; i++) {
m = 10 * m + 9;
}
for (int j = 1; j <= m; j++) {
arr[j - 1] = j;
*returnSize = j;
}
return arr;
}
代码思路:函数printNumbers的类型是int*,说明要返回地址,第一个参数为n,n=1时,数组从1到一位数的最大数,也就是9,n=2时,数组从1到两位数的最大数,也就是99,第一处for循环,是求出最大数,将其存在临时变量i中,第二处for循环,是将每一个数存放在arr数组里面,因为returnSize是数组的行数,对于一维数组就是数组的个数,第二个循环中的j就是数组的行数,因此当循环结束时,returnSize=j–;此时的reeturnSize才是真实行数,对于函数第二个参数类型为 int*的解释:因为行数可能是在函数外定义的,所以在函数内部用指针访问就可以实现函数内部改变函数外部参数的能力。
2、根据输入的日期,计算是这一年的第几天。输入保证年份为4位数且日期合法。
输入描述:输入一行,每行空格分割,分别是年,月,日。
输出描述:输出是这一年的第几天
示例:
输入:2012 12 31 输入:1982 3 4
输出:366 输出:63
My_testcode:
#include
int Is_Leapyear(int year)
{
if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
return 1;
else
return 0;
}
int main()
{
int year = 0, month = 0, day = 0;
int sum_day = 0;
int i = 0;
int arr_day[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
scanf("%d %d %d", &year, &month, &day);
for (i = 0; i < month - 1; i++)
{
sum_day += arr_day[i];
}
sum_day += day;
if (((Is_Leapyear(year) == 1) && month > 2) || (month == 2 && day == 29))
sum_day++;
printf("%d\n", sum_day);
return 0;
}
代码思路:
一、将12个月份的天数存放在一个数组里面,用户输入月份之后,先将该月前的月份(month-1)都加到sum_day;
二、在sum_day的基础上加上day;
三、用函数Is_Leapyear是否是闰年,如果是,返回1,否则返回0;
四、如果是闰年并且输入的月份是在2月之后,则sum_day需要加1,如果是平年并且day是29,sum_day也需要加1。