C语言练习题Day1

在这里插入图片描述
从今天开始分享C语言的练习题,每天都分享,差不多持续16天,看完对C语言的理解可能更进一步,让我们开始今天的分享吧!

  • 题目一

执行下面的代码,输出结果是()

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;
}

分析:首先我们可以看到x,y是全局变量,然后看主函数中,我们定义x和y,遇到一个swap的函数,看到函数里他是想交换我们的x 和y,但是我们知道,形参是实参的一份临时拷贝,改变形参并不会改变实参,所以我们在这里并不能起到交换的作用,但我们的输出是全局变量的答案呢,还是局部变量的x y,答案是局部变量的答案,在main函数这个栈帧中,我们创建局部变量,那在这个栈帧中用的就是局部变量,因为swap函数并没有起到真正的交换,所以答案就是3 和8

  • 题目二

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,原因是我们B选项是个字符数组,那里面的内容应该就是字符,它放的是16进制的数是几个意思

  • 题目三

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
这里我们从上往下看就行了,首先我们#define就是定义的意思,后面的INT_PTR 都是int*的意思,代表它就是一个指针,所以a和b就是指针,指向的是int类型的数据。然后来到我们的typedef其实后面的代码的意思就是int int d 所以答案就是ABC

  • 题目四

4、 若给定条件表达式 (M)?(a++):(a–) ,则其中表达式 M ( )
A: 和(M0)等价 B: 和(M1)等价 C: 和(M!=0)等价 D: 和(M!=1)等价

这考的就是一个三目操作符,我们只要理解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);
答案是AB
解析:我们的b是一个int类型的变量,那取出它的地址就需要加&操作符

数组名就是首元素的地址,所以我们也不需要取地址,如果加上就是整个数组的地址。

编程题
输入数字 n ,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3 ,则打印出 1、2、3 一直到最大的 3 位
数 999 。
用返回一个整数列表来代替打印
n 为正整数
OJ题【牛客网题号: JZ17 打印从1到最大的n位数】

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


2、根据输入的日期,计算是这一年的第几天。输入保证年份为4位数且日期合法。
输入描述:输入一行,每行空格分割,分别是年,月,日。
输出描述:输出是这一年的第几天
OJ链接添加链接描述【牛客网题号: HJ73 计算日期到天数转换】【难度:简单】
int b;
char c[10];
示例:
输入:1
返回值:[1,2,3,4,5,6,7,8,9]
int* printNumbers(int n, int* returnSize ) {
}
示例:
输入:2012 12 31 输入:1982 3 4
输出:366 输出:63

#include<stdio.h>
int main()
{
    
    
	int year = 0;
	int month = 0;
	int day = 0;
	int i = 0;
	scanf("%d %d %d", &year, &month, &day);
	if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
	{
    
    
		switch(month)
		{
    
    
			case 12:
				i += 31;
			case 11:
				i += 30;
			case 10:
				i += 31;
			case 9:
				i += 30;
			case 8:
				i += 31;
			case 7:
				i += 31;
			case 6:
				i += 30;
			case 5:
				i += 31;
			case 4:
				i += 30;
			case 3:
				i += 31;
			case 2:
				i += 29;
			case 1:
				i += 31;
				if (month == 8 || month == 1 || month == 3 || month == 5 || month == 7 || month == 10 || month == 12)
				{
    
    
					i = i - 31 + day;
				}
				else if (month == 2)
				{
    
    
					i = i - 29 + day;
				}
				else
				{
    
    
					i = i - 30 + day;
				}
				break;
			
		}
	}
	else
	{
    
    
		switch (month)
		{
    
    
		case 12:
			i += 31;
		case 11:
			i += 30;
		case 10:
			i += 31;
		case 9:
			i += 30;
		case 8:
			i += 31;
		case 7:
			i += 31;
		case 6:
			i += 30;
		case 5:
			i += 31;
		case 4:
			i += 30;
		case 3:
			i += 31;
		case 2:
			i += 28;
		case 1:
			i += 31;
			if (month == 8 || month == 1 || month == 3 || month == 5 || month == 7 || month == 10 || month == 12)
			{
    
    
				i = i - 31 + day;
			}
			else if (month == 2)
			{
    
    
				i = i - 28 + day;
			}
			else
			{
    
    
				i = i - 30 + day;
			}
			break;

		}
	}
	printf("%d",i);
	return 0;
}

其实还有一种简单的办法,可以创建一个数组来控制,我这里就直接用switch控制,其实我们也不用写两个switch只要加个判断是不是闰年就行。

今天的分享就到这里,我们下次再见

猜你喜欢

转载自blog.csdn.net/2301_76895050/article/details/132519896