【暑期每日一练】 day1

简介: 【暑期每日一练】 day1

选择题


1、执行下面程序,正确的输出是( )

1. int x=5,y=7;
2. void swap()
3. {
4. int z;
5. z=x;
6. x=y;
7. y=z;
8. } in
9. t main()
10. {
11. int x=3,y=8;
12. swap();
13. printf("%d,%d\n",x, y);
14. return 0;
15. }

A: 5,7   B: 7,5   C: 3,8    D: 8,3

答案:C

解析:swap()函数里进行的数值交换会对全局变量的x与y进行交换。但是注意:此时main()中对x、y进行了重新赋值,x、y变为了局部变量;局部大于全局,所以这里打印为3,8

拓展:当我们我们不进行对x、y进行局部赋值,那么情况就为7,5;结果如下

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

解析:"\x10"字符串,不是字符,若如代码中存储就会出现以下问题;注意char类型数组要么储存单个单个的字符,要么存储一串字符串,B选项存储了三个字符串;

3、 test.c 文件中包括如下语句,文件中定义的四个变量中,是指针类型的变量为【多选】()

1. #define INT_PTR int*
2. typedef int* int_ptr;
3. INT_PTR a, b;
4. int_ptr c, d;

A: a B: b C: c D: d

答案:A、B、C、D

解析: 都为int*的指针,typetf作用为定义一个新的名字,验证如下,博主所用为32位机器,所以地址大小应该位4个字节

4、 若给定条件表达式 (M)?(a++):(a--) ,则其中表达式 M ( )

A: 和(M==0)等价  B: 和(M==1)等价  C: 和(M!=0)等价  D: 和(M!=1)等价

答案:C

解析: C语言中,非0表示真,0值表示假;题中若M为真则执行a++,为假则执行a--,所以答案为C

5、有如下定义语句,则正确的输入语句是【多选】( )

 

1. int b;
2. 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);

答案:A、B

解析: scanf需要我们给一个地址,&刚好可以取出地址,数组名也是地址,所以选A、B


编程题


题一


输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。

1. 用返回一个整数列表来代替打印

2. n 为正整数,0 < n <= 5

示例:


代码实现:

1.  * @param n int整型 最大位数
2.  * @return int整型一维数组
3.  * @return int* returnSize 返回数组行数
4.  */
5. static int arr[1000000];
6. int* printNumbers(int n, int* returnSize ) {
7. // write code here
8.     int* ret = returnSize;
9.     int i = 0;
10.     int h = 1;
11.     while(n)
12.     {
13.         h = h * 10;
14.         n--;
15.     }
16. for(i = 0;i<h;i++)
17.     {
18.        arr[i]= i+1;
19.     }
20.     *returnSize = h-1;
21. return arr;
22. }


题二


描述

根据输入的日期,计算是这一年的第几天。

保证年份为4位数且日期合法。

进阶:时间复杂度:�(�) O(n) ,空间复杂度:�(1) O(1)

输入描述:

输入一行,每行空格分割,分别是年,月,日

输出描述:

输出是这一年的第几天

示例:


代码实现

1. #include<stdio.h>
2. 
3. int main() {
4.     int month_day[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
5. 
6.     int year = 0;
7.     int month = 0;
8.     int day = 0;
9. 
10.     scanf("%d%d%d", &year, &month, &day);
11. 
12. if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
13.         month_day[1] = 29;//闰年二月有所不同,进行转换
14.     }
15. 
16.     int count = 0;
17. 
18. for (int i = 0; i < month - 1; i++) {
19. count += month_day[i];//先加月
20.     }
21. count += day;//再加不足一月的
22.     printf("%d\n", count);
23. 
24. return 0;
25. }


总结


关于今日练习讲解到这儿,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下。

相关文章
|
8月前
|
存储 大数据 Serverless
【暑期每日一练】 day7
【暑期每日一练】 day7
|
8月前
|
编译器 C语言
【暑期每日一练】 day12
【暑期每日一练】 day12
|
8月前
|
C语言
【暑期每日一练】 day6
【暑期每日一练】 day6
|
8月前
【暑期每日一练】 day14
【暑期每日一练】 day14
|
8月前
|
存储 人工智能 C语言
【暑期每日一练】 day9
【暑期每日一练】 day9
|
8月前
【暑期每日一练】 day10
【暑期每日一练】 day10
|
8月前
|
存储 人工智能 安全
【暑期每日一练】 day15
【暑期每日一练】 day15
|
8月前
|
存储 测试技术 C语言
【暑期每日一练】 Epilogue
【暑期每日一练】 Epilogue
|
8月前
|
Serverless C语言
【暑期每日一练】 day8
【暑期每日一练】 day8
|
8月前
|
C语言
【暑期每日一练】 day11
【暑期每日一练】 day11