C基础Day5

练习1:请简述什么大端存储和小端存储?

答:大端存储:数据从地址低位开始,由数据高位到低位开始存储;小端相反。

练习2:请简述gcc的分步编译?

预编译(头文件包含,去注释,宏替换)-->编译(语法检查,生成汇编文件)-->汇编(生成目标二进制文件)-->链接(链接目标二进制文件,生成可执行文件)。

练习3:请回答文件剪切、复制的指令,并说明/etc   /usr   /mnt分别表示什么意思?

剪切mv,复制cp,etc存放系统的所有配置文件,usr是unix软件资源放置目录,mnt作为被挂载的文件系统的挂载点。

练习4:请问一下代码的输出结果是?

unsigned int  i;   
for(i=5;i>=0;i--)
{
printf(“hello\n”);
} 
分析:5到0,会循环6次
输出:
hello
hello
hello
hello
hello
hello

练习5:代码输出结果

	int a=180;
	char c;
	c=(char)++a;
	printf("c=%d a=%d\n",c,a);
	char d=4;
	short e;
	e=(++d)++;
	printf("d=%d e=%d\n",d,e);
输出结果:
e=(++d)++报错,需要作为增量操作数的左值。(++d)结果为5,5会作为中间结果代入表达式,但是++运算符,需要一个变量,所以会报错。

练习6:设有以下语句:int a=3,b=6,c; c=a^b<<2; 则c的二进制值是

分析:右移运算符比异或运算符高,先计算左移操作

b的补码:    00000000 00000000 00000000 00000110

b左移两位:000000 00000000 00000000 0000011000

a的补码:    000000 00000000 00000000 0000000011

异或:          000000 00000000 00000000 0000011011

c=00000000 00000000 00000000 00011011,十进制为27

练习7:代码输出结果

int a=3;
a+=3!=3;
a*=++a+a;
printf("%d\n",a);
分析:逻辑运算符优先级比赋值运算符高,先计算3!=3,结果为0,再计算a+=0,结果为a=3;
++a的运算优先级比+高,+比*=高,先计算++a,a*=4+4,最后结果,a=4*(4+4)=32;

练习8:输入年月日,使用switch编程实现计算这是这一年的第几天?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[]){
	int year,month,day,flag=0;
	int sum=0;
r:
	printf("请输入年月日-->");
	scanf("%d%d%d",&year,&month, &day);
	if(year%4==0&&year%100!=0 || year%400==0){
		flag=1;
	}
	if(flag==0&&month==2&&day>28||flag==1&&month==2&&day>29){
		printf("二月天数不对,请重新输入\n");
		goto r;
	}
	if((month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12) && day>31){
		printf("%d月只有31天,请重新输入\n", month);
		goto r;
	}
	if((month==4 || month==6 || month==9 || month==11) && day>30){
		printf("%d月只有30天,请重新输入\n",day);
		goto r;
	}
	if(year<=0 || month<=0 || day<=0 || month>12){
		printf("error,请重新输入\n");
		goto r;
	}
	switch(month){
	case 12:sum+=30;
	case 11:sum+=31;
	case 10:sum+=30;
	case 9:sum+=31;
	case 8:sum+=31;
	case 7:sum+=30;
	case 6:sum+=31;
	case 5:sum+=30;
	case 4:sum+=31;
	case 3:
		   if(flag==1)
			   sum+=29;
		   else
			   sum+=28;
	case 2:sum+=31;
	case 1:sum+=day;
	}
	printf("%d年%d月%d日为这一年第%d天\n",year, month, day, sum);
	return 0;
}

练习9:简述程序

while执行一次空语句,最后执行x--,x的最后结果为4。

练习10:请简述以下程序的区别

“”的头文件,编译器会首先在当前文件夹寻找,如果找不到再去系统配置的库文件夹;<>的头文件,编译器会去系统配置的库文件夹寻找(如果找不到,报错)。

练习11:请简述以下程序

分析:while判断表达式为赋值语句,不是判断语句,n每次循环都被赋值为1,恒为真,所以循环无限次

练习12:编程实现

#define MIN(a,b) a>b?b:a

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

int flag=0;
	int i,j;
	int startNum, endNum;
	printf("请输入起始值和终止值-->");
	scanf("%d%d",&startNum, &endNum);
	for(i=startNum;i<=endNum;i++){
		flag=0;
		for(j=2;j<=sqrt(i);j++){
			if(i%j==0){
				flag=1;
				break;
			}
		}
		if(flag==0){
			printf("%d ",i);
		}
	}

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

	int sum=1;
	int i,j;
	int startNum, endNum;
	printf("请输入起始值和终止值-->");
	scanf("%d%d",&startNum,&endNum);
	for(i=startNum;i<=endNum;i++){
		sum=1;
		for(j=2;j<i;j++){
			if(i%j==0)
				sum=sum+j;
		}
		if(sum==i&&sum!=1)
			printf("%d \n",i);
	}

练习15:请变成实现图形打印

int i,j;
	for(i=0;i<6;i++){
		for(j=0;j<=i;j++){
			printf("_");
		}
		for(j=0;j<=i;j++){
			printf("%c",70-j);
		}
		putchar(10);
	}

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

int scoreArr[10]={0};
	int i;
	printf("请输入10个成绩-->");
	for(i=0;i<10;i++){
		scanf("%d",&scoreArr[i]);
		getchar();
		printf("继续输入\n");
	}
	int MAX=scoreArr[0],MIN=scoreArr[0];
	for(i=1;i<10;i++){
		if(MAX<scoreArr[i])
			MAX=scoreArr[i];
		if(MIN>scoreArr[i])
			MIN=scoreArr[i];
	}
	printf("MAX=%d\n",MAX);
	printf("MIN=%d\n",MIN);	

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值