C语言暑假刷题冲刺篇——day1

简介: 在大家学完初阶C语言后,有很多知识点是比较模糊的,我们应该多刷题,这样才能巩固我们所学知识。所以我开了一个新专栏C语言每日一刷,每一篇都包含5道选择题,2道编程题,每一道题后面都会有详细的解析。这个系列每日一更,大家来看看吧!

一、选择题

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

#include<stdio.h>
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;
} 

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


【答案】C


【解析】


swap函数用的是全局的x和y,但是不会发生交换 注意:printf函数在进行输出的时候是就近原则的,所以输出的x和y是main函数里面的,而不是全局的x和y。输出语句这里,考虑局部优先的原则,故选C


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


【解析】


转义字符,有如下格式,但八进制数字是0-7,没有8,故B选项中’\8’是错误的 。

\ddd ddd表示1到3个八进制数 如:\130

\xhh hh表示1到2位十六进制数 如:\x30


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


【答案】ACD


【解析】


因为#define是宏定义,仅仅是直接替换,INT_PTR a, b; 进行宏替换后代码是这样的:int *a, b;这里的int *是a的 类型,b的类型是int,故此次b只是int类型。而typedef是把该类型定义一个别名,别名是一个独立的类型了,使用这个类型创建的变量都是这个类型的。


所以 a,c,d才是指针类型。


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


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


【答案】C


【解析】


给定条件表达式(M)?(a++):(a--)。 (表达式1)? (表达式2): (表达式3)为三目运算符。

计算规则为:先判断表达式1是否为真,若为真,则计算表达式2,并将表达式2的结果作为整个表达式最终的结果,表达式3不计算;否则,表达式3的结果为最终结果,表达式2不计算。 在此表达式中,若M=0,为假,计算a--; 若M≠0,为真,计算a++; 若要求与M等价,则要满足M取0时为假,取非0数值时为真。 c选项中:假定M取0,则M表示假,当M是0时,表达式M!=0不成立,为假,计算a--; 当M取非0数值时,M为真,表达式M!=0成立,为真,计算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


【解析】


&c和c两个地址值是一样的,程序的效果相同,也没错,但同时也必须把变量b的地址给scanf,故CD错误,AB正确


二、编程题

1.OJ链接【牛客网题号: JZ17 打印从1到最大的n位数】【难度:入门】


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


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

n 为正整数(0 < n <= 5)

示例:

输入:1

返回值:[1,2,3,4,5,6,7,8,9]

static int a[100010];
int* printNumbers(int n, int* returnSize ) {
    int k = 1;
    int i = 0;
    for (int i = 0; i < n; i++)
    {
        k *= 10;
    }
    for (i = 1; i < k; i++)
    {
        a[i - 1] = i;
    }
    *returnSize = --i;
    return a;   
}

2.OJ链接【牛客网题号: HJ73 计算日期到天数转换】【难度:简单】


根据输入的日期,计算是这一年的第几天。输入保证年份为4位数且日期合法。


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


输出描述:输出是这一年的第几天


示例1:


输入:2012 12 31    输入:1982 3 4


输出:366                输出:63

#include<stdio.h>
int main() {
    int year = 0;
    int month = 0;
    int day = 0;
    scanf("%d %d %d", &year, &month, &day);
    int d[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
    {
        d[1] = 29;
    }
    int count = 0;
    for (int i = 0; i < month - 1; i++)
    {
        count += d[i];
    }
    count += day;
    printf("%d", count);
    return 0;
}

好了,今天的每日一刷就到这里结束了,感谢大家的观看!


d52ce744a5b345408dd596d71f65e762.png

相关文章
|
6月前
|
安全 C语言
【C语言刷题】字符串逆序
【C语言刷题】字符串逆序
57 0
|
6月前
|
存储 C语言
【C语言刷题】操作符系列
【C语言刷题】操作符系列
44 0
|
6月前
|
C语言
【C语言刷题】青蛙跳台阶
【C语言刷题】青蛙跳台阶
89 1
|
6月前
|
机器学习/深度学习 C语言
【C语言刷题】函数递归系列
【C语言刷题】函数递归系列
32 1
|
7月前
|
编译器 C语言
C语言刷题(1)
C语言刷题(1)
52 0
|
5天前
|
C语言
C语言刷题1
C语言刷题1
|
2月前
|
C语言
C语言刷题:整数加逗号、删除公共字符、求最小公倍数和将字符串倒置
C语言刷题:整数加逗号、删除公共字符、求最小公倍数和将字符串倒置
29 0
|
2月前
|
C语言
错误的集合(初阶C语言刷题)
错误的集合(初阶C语言刷题)
|
3月前
|
C语言
C语言刷题训练【第11天】
C语言刷题训练【第11天】
|
3月前
|
C语言
C语言刷题训练【第十天】
C语言刷题训练【第十天】

相关实验场景

更多