练习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);