4.2练习

1.请简述什么是大端存储和小端存储?
大端存储:数据高位存储在地址低位,数据地位存储在地址高位
小端存储:数据低位存储在地址低位,数据高位存储在地址高位

2.请简述gcc的分步编译?
预处理:展开头文件、替换宏、删除注释 gcc -E ***.c -o ***.i
编译:检查语法正确性,生成汇编文件 gcc -S ***.i -o ***.s
汇编:将汇编语句文件编译为二进制文件 gcc -c ***.s -o ***.o
链接:将所有二进制文件链接为可执行文件 gcc ***.o -o 可执行文件

3.请回答文件剪切、复制的指令,并说明/etc /usr /mnt分别表示什么意思?
剪切:
(1)mv 文件1 文件2
如果文件2不存在,将文件1重命名为文件2
如果文件2存在,将文件1重命名为文件2,替换原来的文件2
(2)mv 文件名 目录
如果目录中不存在同名文件,把文件剪切到目录中
如果目录中存在同名文件,把文件剪切到目录中,替换目录中同名文件
(3)mv 目录1 目录2
如果目录2不存在,把目录1重命名为目录2
如果目录2存在且目录2下没有同名目录,把目录1剪切到目录2下
如果目录2存在且目录2下有同名目录且该同名目录非空,报错,不可剪切实现替换
如果目录2存在且目录2下有同名目录且该同名目录空,把目录1剪切到目录2下,替换同名目录
复制:
(1)cp 文件1 文件2
如果文件2不存在,把文件1复制一份,命名为文件2
如果文件2存在,把文件1复制一份,命名为文件2,替换原来的文件2
(2)cp 文件 目录
如果目录中不存在同名文件,把文件复制到目录中
如果目录中存在同名文件,把文件复制一份,替换目录中的同名文件
(3)cp 目录1 目录2
如果目录2不存在,把目录1复制一份,命名为目录2
如果目录2存在且目录2下没有同名目录,把目录1复制一份,放到目录2下
如果目录2存在且目录2下有同名目录,把目录1复制一份,替换目录2下的同名目录
/etc用来存放所有的系统管理所需要的配置文件和子目录
/usr是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。
/mnt通常作为被挂载的文件系统的挂载目录

4.请问一下代码的输出结果是?

unsigned int i;
for(i=5;i>=0;i--)
{
	printf("hello\n");
}
hello
hello
hello
hello
hello
hello

5.请回答以下问题
在这里插入图片描述
答:c=(char)++a; —>c=(char)181=1011 0101B(补码)=1100 1011B(原码)=-75
e=(++d)++;—>先执行++d,d=5,再执行e=d++,e=5,d=6

6.设有以下语句:int a=3,b=6,c;c=a^b<<2;则c的二进制是?
答:先移位后按位异或
b<<2 : 0000 0110B —> 0001 1000B
a^(b<<2) : 0000 0011B ^ 0001 1000B = 0001 1011B
故c=0001 1011B

7.请回答以下程序
在这里插入图片描述
答:a+=3!=3—>a=a+(3!=3)=3+0=3
a*=++a+a—>a=a*(++a+a)=4*(4+4)=32

8.输入年月日,使用switch编程实现计算这是这一年的第几天?
eg:输入:2024 4 1 输出:这是这一年的第92天

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int year,month,day,month2,num;
	printf("Please input a date:");
	scanf("%d%d%d",&year,&month,&day);
	if(year>=0 && month>=1 && month<=12 && day>=1 && day<=31){
		if((4==month || 6==month || 9==month || 11==month) && 31==day)
			printf("date error\n");
		else if(2==month && (0==year%4 && year%100!=0 || 0==year%400) && (31==day || 30==day))
			printf("date error\n");
		else if(2==month && !(0==year%4 && year%100!=0 || 0==year%400) && (31==day || 30==day || 29==day))
			printf("date error\n");
		else{
			if(0==year%4 && year%100!=0 || 0==year%400)
				month2=29;
			else
				month2=28;
			switch(month){
				case 1:num=day;break;
				case 2:num=31+day;break;
				case 3:num=31+month2+day;break;
				case 4:num=2*31+month2+day;break;
				case 5:num=2*31+30+month2+day;break;
				case 6:num=3*31+30+month2+day;break;
				case 7:num=3*31+2*30+month2+day;break;
				case 8:num=4*31+2*30+month2+day;break;
				case 9:num=5*31+2*30+month2+day;break;
				case 10:num=5*31+3*30+month2+day;break;
				case 11:num=6*31+3*30+month2+day;break;
				case 12:num=6*31+4*30+month2+day;break;
				default:break;
			}
			printf("This is day %d\n",num);
		}
	}
	else
		printf("date error\n");
	return 0;
}

Please input a date:2024 4 2
This is day 93

9.简述以下程序
在这里插入图片描述
答:while(x>0)后加了分号,就代表这是程序的一句话,与后面的x–相分离,x=5>0为真,程序陷入死循环

10.请简述以下程序的区别
在这里插入图片描述
答:#include “stdio.h”一般表示引用用户自定义的头文件,而#include<stdio.h>一般表示计算机中存储的库文件

11.请简述以下程序
在这里插入图片描述
答:2的32次方-1
n从1加到2的31次方-1,再加1变为-2的31次方,之后加到-1

12.请编程实现
在这里插入图片描述
答:#define MIN a<b?a:b

13.请编程实现输出起始值到终止值之间的素数

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, const char *argv[])
{
	int start,end,n,i;
	printf("Please input start and end:");
	scanf("%d%d",&start,&end);
	for(n=start;n<=end;n++){
		for(i=2;i<=sqrt(n);i++){
			if(0==n%i)break;
		}
		if(i>sqrt(n))
			printf("%-4d",n);
	}
	putchar(10);
	return 0;
}

Please input start and end:1 50
1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47

14.请编程实现输出起始值到终止值之间的完美数

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int start,end,n,i,s;
	printf("Please input start and end:");
	scanf("%d%d",&start,&end);
	for(n=start;n<=end;n++){
		for(s=0,i=1;i<=n/2;i++){
			if(0==n%i)
				s+=i;
		}
		if(s==n)
			printf("%-4d",n);
	}
	putchar(10);
	return 0;
}

Please input start and end:1 1000
6 28 496

15.请变成实现图形打印
在这里插入图片描述

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int i,j;
	char c;
	for(i=1;i<=6;i++){
		for(j=1;j<=i;j++)
			putchar('_');
		for(c='F',j=1;j<=i;j++){
			putchar(c);
			c--;
		}
		putchar(10);
	}
	return 0;
}
_F
__FE
___FED
____FEDC
_____FEDCB
______FEDCBA

16.循环输入10个成绩,请计算最大值,最小值

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int num,i,min=0,max=0;
	printf("Please input ten scores:");
	scanf("%d",&num);
	min=max=num;
	for(i=1;i<=9;i++){
		scanf("%d",&num);
		if(min>num)
			min=num;
		if(max<num)
			max=num;
	}
	printf("min:%d\tmax:%d\n",min,max);
	return 0;
}

Please input ten scores:5 6 2 1 9 4 13 4 6 8
min:1 max:13

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据引用\[1\]和引用\[3\]的内容,构建一个平衡二叉树的过程包括以下几个步骤:输入结点、寻找结点插入位置、插入结点、判断树是否平衡、调整树的平衡。 首先,通过输入结点的值,从根结点开始逐一比较,如果大于根结点的值,则继续在根结点的右子树中递归寻找插入位置;如果小于根结点的值,则在根结点的左子树中递归寻找插入位置。当找到插入位置时,创建一个新的结点并将其插入。 接下来,利用递归的栈特点,从距离新插入结点最近的结点开始,从下往上进行平衡的检测。如果发现树的某个结点不平衡,即左右子树的高度差超过1,就进行旋转操作来调整树的平衡。 根据引用\[2\]的内容,旋转操作时需要重新申请一个类型为AVLTree的结点B,并将旋转结果复制到B中。这是为了避免在原有平衡树上进行修改,从而导致错误和重复的部分。 因此,练习4.2中平衡二叉树的根可以通过插入函数Insert来实现,具体代码可以参考引用\[3\]中的实现思路。在插入过程中,每次新申请的结点都需要插入,否则将不会有任何改变。 #### 引用[.reference_title] - *1* *2* *3* [PTA练习4.2 平衡二叉树的根 (25 分)](https://blog.csdn.net/Mai___/article/details/119139360)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值