从今天开始分享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<stdio.h> 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只要加个判断是不是闰年就行。
今天的分享就到这里,我们下次再见