从今天开始分享C语言的练习题,每天都分享,差不多持续16天,看完对C语言的理解可能更进一步,让我们开始今天的分享吧!
执行下面的代码,输出结果是()
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;
}
分析:首先我们可以看到x,y是全局变量,然后看主函数中,我们定义x和y,遇到一个swap的函数,看到函数里他是想交换我们的x 和y,但是我们知道,形参是实参的一份临时拷贝,改变形参并不会改变实参,所以我们在这里并不能起到交换的作用,但我们的输出是全局变量的答案呢,还是局部变量的x y,答案是局部变量的答案,在main函数这个栈帧中,我们创建局部变量,那在这个栈帧中用的就是局部变量,因为swap函数并没有起到真正的交换,所以答案就是3 和8
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选项是个字符数组,那里面的内容应该就是字符,它放的是16进制的数是几个意思
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
这里我们从上往下看就行了,首先我们#define就是定义的意思,后面的INT_PTR 都是int*的意思,代表它就是一个指针,所以a和b就是指针,指向的是int类型的数据。然后来到我们的typedef其实后面的代码的意思就是int int d 所以答案就是ABC
4、 若给定条件表达式 (M)?(a++):(a–) ,则其中表达式 M ( )
A: 和(M0)等价 B: 和(M1)等价 C: 和(M!=0)等价 D: 和(M!=1)等价
这考的就是一个三目操作符,我们只要理解M为真就执行(a++),否则就是a–
所以这题的答案就是C
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
解析:我们的b是一个int类型的变量,那取出它的地址就需要加&操作符
数组名就是首元素的地址,所以我们也不需要取地址,如果加上就是整个数组的地址。
编程题
输入数字 n ,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3 ,则打印出 1、2、3 一直到最大的 3 位
数 999 。
用返回一个整数列表来代替打印
n 为正整数
OJ题【牛客网题号: JZ17 打印从1到最大的n位数】
static int a[100010];
int* printNumbers(int n, int* returnSize )
{
int k=(int)pow(10,n);
int i=0;
for(i=1;i<k;i++)
{
a[i-1]=i;
}
*returnSize=--i;
return a;
}
2、根据输入的日期,计算是这一年的第几天。输入保证年份为4位数且日期合法。
输入描述:输入一行,每行空格分割,分别是年,月,日。
输出描述:输出是这一年的第几天
OJ链接添加链接描述【牛客网题号: HJ73 计算日期到天数转换】【难度:简单】
int b;
char c[10];
示例:
输入:1
返回值:[1,2,3,4,5,6,7,8,9]
int* printNumbers(int n, int* returnSize ) {
}
示例:
输入:2012 12 31 输入:1982 3 4
输出:366 输出:63
#include
int main()
{
int year = 0;
int month = 0;
int day = 0;
int i = 0;
scanf("%d %d %d", &year, &month, &day);
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
{
switch(month)
{
case 12:
i += 31;
case 11:
i += 30;
case 10:
i += 31;
case 9:
i += 30;
case 8:
i += 31;
case 7:
i += 31;
case 6:
i += 30;
case 5:
i += 31;
case 4:
i += 30;
case 3:
i += 31;
case 2:
i += 29;
case 1:
i += 31;
if (month == 8 || month == 1 || month == 3 || month == 5 || month == 7 || month == 10 || month == 12)
{
i = i - 31 + day;
}
else if (month == 2)
{
i = i - 29 + day;
}
else
{
i = i - 30 + day;
}
break;
}
}
else
{
switch (month)
{
case 12:
i += 31;
case 11:
i += 30;
case 10:
i += 31;
case 9:
i += 30;
case 8:
i += 31;
case 7:
i += 31;
case 6:
i += 30;
case 5:
i += 31;
case 4:
i += 30;
case 3:
i += 31;
case 2:
i += 28;
case 1:
i += 31;
if (month == 8 || month == 1 || month == 3 || month == 5 || month == 7 || month == 10 || month == 12)
{
i = i - 31 + day;
}
else if (month == 2)
{
i = i - 28 + day;
}
else
{
i = i - 30 + day;
}
break;
}
}
printf("%d",i);
return 0;
}
其实还有一种简单的办法,可以创建一个数组来控制,我这里就直接用switch控制,其实我们也不用写两个switch只要加个判断是不是闰年就行。
今天的分享就到这里,我们下次再见