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