练习1:
- 请简述什么大端存储和小端存储?
大端存储:地址高位存储数据高位,地址低位存储数据低位
小端存储:地址低位存储数据高位,地址高位存储数据低位
例如:
0X12345678
练习2:
请简述gcc得分步编译:
1:预处理
展开头文件,替换宏,删除注释
格式:gcc -E ****.c -o ****.i
vim file1.i显示
2:编译:
检查语法的正确性,生成汇编文件
格式:gcc -S ****.i -o ****.s
vim file1.s显示
3:汇编
将汇编文件转换成二进制文件
格式:gcc -c ****.s -o ****.o
vim file1.o显示
4:链接
将二进制文件链接为可执行文件
格式:gcc ****.o -o 可执行文件
file1.o 被链接为可执行文件
5:运行
./可执行文件
练习3:
请回答文件剪切、赋值的指令,并说明/etc /usr /mnt分别表示什么意思?
剪切:mv
1.文件剪切文件
mv 文件1 文件2 把文件1重名为到文件2
如果文件2不存在,把文件1重命名为文件2
如果文件2存在,把文件1重命名为文件2,替换原来的文件2
2.文件剪切到目录
mv 文件 目录 把文件剪切到目录中,目录必须存在
如果目录中不存在同名文件,把文件剪切到目录中
如果目录中存在同名文件,把文件剪切到目录中,替换目录中同名文件
3.目录剪切到目录
mv 目录1 目录2 把目录1重名为目录2
如果目录2不存在.把目录1重命名为目录2
如果目录2存在且没有同名目录,把目录1剪切到目录2里面
如果目录2存在且有同名目录且非空, 报错:不可以剪切目录实现替换
如果目录2存在且有同名目录且空,把目录1剪切到目录2里面,替换同名目录
复制:cp
1.文件拷贝文件
cp 文件1 文件 把文件1拷贝到文件2
如果文件2不存在,把文件1拷贝一份,命名为文件2
如果文件2存在,把文件1拷贝一份,命名为文件2,替换原来的文件2
2.文件拷贝目录
cp 文件 目录 把文件拷贝到目录中,目录必须存在
如果目录中不存在同名文件,把文件拷贝到目录中
如果目录中存在同名文件,把文件拷贝一份,替换目录中同名文件
3.目录拷贝目录
cp 目录1 目录2 -r 把目录拷贝给目录
如果目录2不存在.把目录1拷贝一份,命名为目录2
如果目录2存在且没有同名目录,把目录1拷贝一份。存到目录2里面
如果目录2存在且有同名目录,把目录1拷贝一份。存到目录2里面,替换同名目录
/etc:存放系统所有配置文件
/usr:存放系统应用程序
/mnt:用于被挂载得文件系统得挂载点
练习4:
请问一下代码的输出结果是?
unsigned int i;
for(i=5;i>=0;i--)
{
printf(“hello\n”);
}
分析:
1.定义了一个无符号整型变量i
2.for循环,将i初始化为5
3.5>=0进入循环
4.输出一行hello、
5.i--;
6.重复进行,直至i>=0不成立
7.但是i为无符号整型,当i=-1时,数据溢出,i为最大值
8.结果输出为:
hello
hello
hello
hello
hello
hello
.......
无限循环
练习5:
请回答以下问题
分析:
1.定义了一个有符号整型a并赋予初始化180;
2.定义了一个字符变量c;
3.运算()大于++,所以先将a强制转换为char数据类型,在++
4.所以c=-75 a=181
5.定义了一个字符变量d并赋值初始化为4;
6.定义了一个短整型e;
7.先算括号,之后算++d,之后++,之后=
8.所以d=6 e=5
练习6:
设有以下语句:int a=3,b=6,c; c=a^b<<2; 则c的二进制值是
分析:
1.定义了整型a初始化为3,整型b初始化为6,整型c;
2.a得二进制为:
0000 0000 0000 0000 0000 0000 0000 0011
b得二进制为:
0000 0000 0000 0000 0000 0000 0000 0110
3.<< 优先级 > ^ ,所以先算b<<2 之后再算a^b 之后=
4.b<<2:
0000 0000 0000 0000 0000 0000 0001 1000
5.a^b:
0000 0000 0000 0000 0000 0000 0001 1011
6.所以c得二进制结果为:
0000 0000 0000 0000 0000 0000 0001 1011
练习7:
请回答以下程序
分析:
1.定义了一个整型变量a初始化为3;
2.a=a+(3!=3);首先()运算优先度最高,其次!=,在其次+,最后=
3.a=3;
4.a=a(++a+a);首先()运算符优先级最高,其次++,在其次+,在其次a* ,最后=
5.a=32;
练习 8:
- 输入年月日,使用switch编程实现计算这是这一年的第几天?
Eg 输入:2024 4 1
输出:这是这一年的第92天
程序:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
//输入年月日计算这是当前年份的第几天
//1.计算闰年
//2.使用switch实现
//3.考虑用户输入错误情况
while(1)
{
int year;
int month;
int day;
printf("请输入需要计算的年份:");
//判断用户输入是否为整型
while(scanf("%d",&year)==0)
{
printf("非法输入,请重新输入:");
int gg;
while(gg=getchar()!='\n'&&gg!=EOF){}
}
//判断用户输入是否符合常识
if(0>=year)
{
printf("输入年份不符合现实生活常识,程序强制退出,请重新启动程序\n");
return -1;
}
int leapyear_sign;//闰年标志位0平年 1闰年
if(year%4==0&&year%100!=0||year%400==0)
{
leapyear_sign=1;//闰年
}
else
{
leapyear_sign=0;//平年
}printf("请输入需要计算截止月份:");
//判断用户输入是否为整型
while(scanf("%d",&month)==0)
{
printf("非法输入,请重新输入:");
int zz;
while(zz=getchar()!='\n'&&zz!=EOF){}
}
//判断用户输入是否符合常识
if(0>=month||12<month)
{
printf("输入月份不符合现实生活常识,程序强制退出,请重新启动程序\n");
return -1;
}
printf("请输入需要计算的日子:");
//判断用户输入是否为整型
while(scanf("%d",&day)==0)
{
printf("非法输入,请重新输入:");
int kk;
while(kk=getchar()!='\n'&&kk!=EOF){}
}
//判断用户输入是否符合常识
if((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&(31<day))
{
printf("输入日子不符合现实生活常识,程序强制退出,请重新启动程序\n");
return -1;
}
else if((month==4||month==6||month==9||month==11)&&30<day)
{
printf("输入日子不符合现实生活常识,程序强制退出,请重新启动程序\n");
return -1;
}
else if(month==2&&leapyear_sign==1&&28<day||month==2&&leapyear_sign==0&&29<day)
{
printf("输入日子不符合现实生活常识,程序强制退出,请重新启动程序");
return -1;
}
else if(0>=day)
{
printf("输入日子不符合现实生活常识,程序强制退出,请重新启动程序\n");
return -1;
}
//计算当前输入日期天数
int total_days=0;
switch(month-1)
{
case 12:
total_days+=31;
case 11:
total_days+=30;
case 10:
total_days+=31;
case 9:
total_days+=30;
case 8:
total_days+=31;
case 7:
total_days+=31;
case 6:
total_days+=30;
case 5:
total_days+=31;
case 4:
total_days+=30;
case 3:
total_days+=31;
case 2:
if(leapyear_sign==0)
{
total_days+=29;
}
else
{
total_days+=28;
}
case 1:
total_days+=31;
break;
}
printf("%d年%d月%d日是当年的第%d天\n",year,month,day,total_days+day);
printf("退出:ctrl+c\n");
}
return 0;
练习9:
简述以下程序
分析:
1.定义了一个整型变量x初始化为5;
2.while()不能加;否则系统会认为这里已经结束;
练习10:
请简述以下程序的区别
分析:
#include"stdio.h":
当要调用某个函数时先在用户自已编写的文件中查找,如果找不到再到库文件里去找。
#include<stdio.h>:
直接到库文件里去找。
练习11:
请简述以下程序
分析:
1.定义了一个整型变量n并初始化为0;
2.因为=为赋值,所以n=1;
3.n++
4.无限循环
练习12:
请编程实现
程序:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MIN(X,Y) ((X) < (Y) ? (X) : (Y))
int main(int argc, const char *argv[])
{
int a=0;
int b=0;
printf("请输入两个数字:");
scanf("%d %d",&a,&b);
int c=MIN(a,b);
printf("%d\n",c);
return 0;
}
练习13:
请编程实现输出起始值到终止值之间的素数
程序:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int a;
printf("请输入一个数:");
scanf("%d",&a);
int i;
for(i=1;i<=a;i++)
{
if(a%i==0)
{
printf("%d ",i);
}
}
return 0;
}
练习14:
请编程实现输出起始值到终止值之间的完美数
程序:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int a,b;
printf("请输入一个起始值:");
scanf("%d",&a);
printf("请输入一个终止值:");
scanf("%d",&b);
int n;
int m;
if(a>b)
{
n=a;
m=b;
}
else
{
n=b;
m=a;
}
int i;
int k;
int p=0;
for(i=m;i<=n;i++)
{
p=0;
for(k=2;k<i;k++)
{
if(i%k==0)
{
p=1;
break;
}
}
if(p==0)
{
printf("%d ",i);
}}
return 0;
}
练习15:
请变成实现图形打印
程序:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int i;
int j;
char k='F';
for(i=1;i<=6;i++)
{
k='F';
for(j=1;j<=i;j++)
{
printf("_");
}
for(j=1;j<=i;j++)
{
printf("%c",k);
k-=1;
}
putchar(10);
}
return 0;
}
练习16:
循环输入10个成绩,请计算最大值,最小值
程序:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int i=1;
int a;
int b=0;
int c=0;
while(i<=10)
{
printf("请输入第%d个值:",i);
scanf("%d",&a);
if(a>b)
{
b=a;
}
if(i==1)
{
c=a;
}
if(a<c)
{
c=a;
}
i++;
putchar(10);
}
printf("最小值为%d 最大值为%d\n",c,b);
return 0;
}