C语言笔试题训练【第一天】

目录

第一题

第二题

第三题

第四题

第五题


大家好,我是纪宁。

从今天开始博主会日更一些经典的C语言笔试题,持续20天左右。题目类型为5道选择题加2道编程题,希望能和大家一起进步。

第一题

1.读程序,下面程序正确的输出是()

cpp 复制代码
#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

swap函数调用时用的是全局变量,主函数中定义的变量只在主函数中有效,因为主函数也是一个函数,它与其他函数是平 行关系;输出语句这里,考虑局部优先的原则。所以答案选 C

知识点:

C语言函数详解http://t.csdn.cn/wkkmF

第二题

2.以下不正确的定义语句是( )

A: double x5 = {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 y5+3= {0, 1, 3, 5, 7, 9} ;

本题B选项考察转义字符的应用

\ddd ddd表示1到3个八进制数 如:\130 转义为 字符X

\xhh hh表示1到2位十六进制数 如 \x30 转义为 字符'0'

选项B第三个字符中 \ 后没有 x ,故表示8进制数,但8进制数的范围是 0~7,故B 不对,选 B

第三题

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

cpp 复制代码
#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 却是对类型进行重定义,它后面的 c d 的类型就都是 int*类型。

所以答案选 A,C,D

知识点:

C环境及预处理http://t.csdn.cn/6fP4a

第四题

4、编程题:打印从1到最大的n位数

题目描述

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

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

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

知识点:

C语言for循环http://t.csdn.cn/0xvjx 示例:

输入:

1

返回值:

1,2,3,4,5,6,7,8,9

这道题牛客网上采用核心代码模式

cpp 复制代码
 //* @param n int整型 最大位数
 //* @return int整型一维数组
 //* @return int* returnSize 返回数组行数 
int* printNumbers(int n, int* returnSize ) {
    int Max=0;
    while(n--)
         Max=Max*10+9;
    int *arr=(int*)malloc(Max*sizeof(int));
    for(int i=0;i<Max;i++)
    {
        arr[i]=i+1;
    }
    *returnSize=Max;
    return arr;
}

其中 returnSize 是打印的数字的个数,而需要返回数组首元素的地址。

第五题

5、编程题:计算日期到天数转换

描述:根据输入的日期,计算是这一年的第几天,且保证年份为4位数且日期合法。时间复杂度:O(n) ,空间复杂度:O(1) 。

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

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

示例1:

输入:2012 12 31 输出:366

示例2:

输入:1982 3 4 输出:6

C语言操作符详解逻辑操作符 部分有如何求出闰年的方法

本题牛客网采用ACM模式

cpp 复制代码
#include <stdio.h>
int main() {
    int year=0,month=0,day=0;
    scanf("%d %d %d",&year,&month,&day);
    int arr1[11]={31,29,31,30,31,30,31,31,30,31,30};
    int arr2[11]={31,28,31,30,31,30,31,31,30,31,30};
    int days=0;
    if((year%4==0&&year%100!=0)||(year%400==0))
    {
        for(int i=0;i<month-1;i++)
        {
            days+=arr1[i];
        }
    }
    else
    {
        for(int i=0;i<month-1;i++)
        {
            days+=arr2[i];
        }
    }
    days+=day;
    printf("%d",days);
    return 0;
}

思路就是先开辟两个数组空间,然后判断年份是否为闰年,将月份天数利用循环逐个加上即可。

相关推荐
地平线开发者7 小时前
profiler debug 工具用法与高一致性策略
算法·自动驾驶
编程大师哥7 小时前
匿名函数 lambda + 高阶函数
java·python·算法
isyangli_blog7 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb2008117 小时前
FastAPI APIRouter
开发语言·python
Benszen7 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆7 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木7 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
我叫袁小陌7 小时前
算法解题思路指南
算法
地平线开发者7 小时前
Conv+BN+Add+ReLU 融合机制简介
算法·自动驾驶