C语言练习考研复习题.docx
《C语言练习考研复习题.docx》由会员分享,可在线阅读,更多相关《C语言练习考研复习题.docx(27页珍藏版)》请在冰豆网上搜索。
![C语言练习考研复习题.docx](https://file1.bdocx.com/fileroot1/2022-11/16/48062ae6-fa20-4971-b5a5-029c843272b4/48062ae6-fa20-4971-b5a5-029c843272b41.gif)
C语言练习考研复习题
1.编写一个程序将用户输入的正整数转化为对应的二进制数。
#include
#include
intmain()
{
intnum;
printf("请输入一个正整数:
");
scanf("%d",&num);
//异常输入直接结束
if(num<0)
{
printf("输入错误!
");
exit(0);
}
//将num和2进行取余运算,存储在数组中
inta[20],i=0;
while(num!
=0)
{
a[i]=num%2;
num=num/2;
i++;
}
//遍历输出数组
while(i>0)
{
printf("%d",a[--i]);
}
printf("\n");
return0;
}
2.请写出你所了解的linux系统中常用的命令并解释其功能。
(1)pwd命令
该命令的英文解释为printworkingdirectory(打印工作目录)。
输入pwd命令,Linux会输出当前目录。
(2)cd命令
cd命令用来改变所在目录。
cd/转到根目录中
cd~转到/home/user用户目录下
cd/usr转到根目录下的usr目录中-------------绝对路径
cdtest转到当前目录下的test子目录中-------相对路径
(3)ls命令
ls命令用来查看目录的内容。
选项含义-a列举目录中的全部文件,包括隐藏文件-l列举目录中的细节,包括权限、所有者、组群、大小、创建日期、文件是否是链接等-f列举的文件显示文件类型-r逆向,从后向前地列举目录中内容-R递归,该选项递归地列举当前目录下所有子目录内的内容-s大小,按文件大小排序-h以人类可读的方式显示文件的大小,如用K、M、G作单位ls-lexamples.doc列举文件examples.doc的所有信息
(4)cat命令
cat命令可以用来合并文件,也可以用来在屏幕上显示整个文件的内容。
catsnow.txt该命令显示文件snow.txt的内容,ctrl+D退出cat。
(5)grep命令
grep命令的最大功能是在一堆文件中查找一个特定的字符串。
grepmoneytest.txt
以上命令在test.txt中查找money这个字符串,grep查找是区分大小写的。
(6)touch命令
touch命令用来创建新文件,他可以创建一个空白的文件,可以在其中添加文本和数据。
touchnewfile该命令创建一个名为newfile的空白文件。
(7)cp命令
cp命令用来拷贝文件,要复制文件,输入命令:
cp
cpt.txtDocument/t该命令将把文件t.txt复制到Document目录下,并命名为t。
3.编写一个程序计算任一输入数字的各位数字之和。
#include
#include
intmain()
{
intnum;
printf("请输入一个正整数:
");
scanf("%d",&num);
//异常输入直接结束
if(num<0)
{
printf("输入错误!
");
exit(0);
}
intresult=0;
while(num!
=0)
{
result+=num%10;
num=num/10;
}
printf("%d\n",result);
return0;
}
4.编写一个程序判断用户输入任一正整数是否为素数。
#include
#include
intmain()
{
intnum;
printf("请输入一个大于1正整数:
");
scanf("%d",&num);
//异常输入直接结束
if(num<0||num==1)
{
printf("输入错误!
");
exit(0);
}
if(num==2)
{
printf("%d是素数。
\n",num);
exit(0);
}
boolflag=true;//默认判断是素数
for(inti=2;i{
if(num%i==0)
{
flag=false;//发现了其他因子,不是素数
break;
}
}
if(flag==true)
{
printf("%d是素数。
\n",num);
}
else
{
printf("%d不是素数。
\n",num);
}
return0;
}
5.编写一个程序求给定三个字符串的最长公共字串。
(难)
这里我只写了两个字符串的比较方法,三个字符串的意思是一样的。
#include
#include
#include
intlongest_common_substring(char*str1,char*str2)
{
inti,k,len1,len2,len,s1_start,s2_start,idx,curmax,max;
len1=strlen(str1);
len2=strlen(str2);
len=len1+len2;
max=0;
for(i=0;i{
s1_start=s2_start=0;
if(i{
s1_start=len1-i;//每次开始匹配的起始位置
}
else
{
s2_start=i-len1;
}
curmax=0;
for(idx=0;(s1_start+idx{
if(str1[s1_start+idx]==str2[s2_start+idx])
{
curmax++;
}
else//只要有一个不相等,就说明相等的公共字符断了,不连续了,
//要保存curmax与max中的最大值,并将curmax重置为0
{
//max=curmax>max?
curmax:
max;
if(curmax>max)
{
max=curmax;
k=s1_start+idx-1;
//保存连续子串长度增加时连续子串最后一个字符在str1字符串中的下标位置,
//便于输出公共连续子串
}
curmax=0;
}
}
//max=curmax>max?
curmax:
max;
if(curmax>max)
{
max=curmax;
k=s1_start+idx-1;
}
}
//输出公共子串
chars[100];
for(i=0;i{
s[i]=str1[k-max+1+i];
//公共字串在str1中的下标起始位置为k-max+1,结束位置为k
}
s[i]='\0';
printf("最长公共子串为:
");
puts(s);
returnmax;
}
intmain(void)
{
charstr1[100],str2[100];
printf("请输入第一个字符串:
");
gets(str1);
printf("请输入第二个字符串:
");
gets(str2);
intlen=longest_common_substring(str1,str2);
printf("最长公共连续子串的长度为:
%d\n",len);
return0;
}
6.编写一个程序计算用户输入的起始时间到终止时间的天数。
#include
boolisLeapYear(intyear);
intCalcDay(intyerar1,intmonth1,intday1,intyear2,intmonth2,intday2);
intleapMonth[12]={31,29,31,30,31,30,31,31,30,31,30,31};
intnormalMonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
intmain()
{
intyear1,year2,month1,month2,day1,day2;
printf("请输入第一个日期(年月日):
");
scanf("%d%d%d",&year1,&month1,&day1);
printf("请输入第二个日期(年月日):
");
scanf("%d%d%d",&year2,&month2,&day2);
intsum=CalcDay(year1,month1,day1,year2,month2,day2);
printf("%d\n",sum);
return0;
}
//判断是否为闰年
boolisLeapYear(intyear)
{
if(year%4==0&&year%100!
=0||year%400==0)
{
returntrue;
}
returnfalse;
}
intCalcDay(intyerar1,intmonth1,intday1,intyear2,intmonth2,intday2)
{
intresult=0;
if(yerar1!
=year2)
{
for(inti=yerar1+1;i{
if(isLeapYear(i))
{
result+=366;
}
else
{
result+=365;
}
}
if(isLeapYear(yerar1))
{
for(inti=month1+1;i<=12;i++)
{
result+=leapMonth[i-1];
}
result+=leapMonth[month1-1]-day1;
}
if(isLeapYear(yerar1)==false)