【暑期每日一练】 day1

选择题

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

int x=5,y=7;
void swap()
{
int z;
z=x;
x=y;
y=z;
} in
t 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

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

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

【暑期每日一练】 day1_第1张图片

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选项存储了三个字符串;

【暑期每日一练】 day1_第2张图片

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
答案:A、B、C、D

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

【暑期每日一练】 day1_第3张图片

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、有如下定义语句,则正确的输入语句是【多选】( )
 

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);
答案:A、B 

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

编程题

题一

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

1. 用返回一个整数列表来代替打印
2. n 为正整数,0 < n <= 5

示例: 

【暑期每日一练】 day1_第4张图片

 代码实现:

 * @param n int整型 最大位数
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 */
static int arr[1000000];
int* printNumbers(int n, int* returnSize ) {
    // write code here
    int* ret = returnSize;
    int i = 0;
    int h = 1;
    while(n)
    {
        h = h * 10;
        n--;
    }
    for(i = 0;i

题二

描述

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

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

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

输入描述:

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

输出描述:

输出是这一年的第几天

示例: 

【暑期每日一练】 day1_第5张图片

代码实现 

#include

int main() {
    int month_day[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

    int year = 0;
    int month = 0;
    int day = 0;

    scanf("%d%d%d", &year, &month, &day);

    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
        month_day[1] = 29;//闰年二月有所不同,进行转换
    }

    int count = 0;

    for (int i = 0; i < month - 1; i++) {
        count += month_day[i];//先加月
    }
    count += day;//再加不足一月的
    printf("%d\n", count);

    return 0;
}

总结

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

你可能感兴趣的:(暑期每日一练,C语言,练习,题目讲解)