选择题
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. }
总结
关于今日练习讲解到这儿,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下。