C语言练习测试考研复习题.docx
《C语言练习测试考研复习题.docx》由会员分享,可在线阅读,更多相关《C语言练习测试考研复习题.docx(25页珍藏版)》请在冰豆网上搜索。
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)
{
for(inti=month1+1;i<=12;i++)
{
result+=normalMonth[i-1];
}
result+=normalMonth[month1-1]-day1;
}
if(isLeapYear(year2))
{
for(inti=1;i{
result+=leapMonth[i-1];
}
result+=day2;
}
if(isLeapYear(year2)==false)
{
for(inti=1;i{
result+=normalMonth[i-1];
}
result+=day2;
}
}
else
{
if(isLeapYear(yerar1))
{
if(month1!
=month2)
{
for(inti=month1;i{
result+=normalMonth[i];
}
result+=day2+normalMonth[month1-1]-day1;
}
else
{
result+=day2-day1;
}
}
else
{
if(month1!
=month2)
{
for(inti=month1;i{
result+=normalMonth[i];
}
result+=day2+normalMonth[month1-1]-day1;
}
else
{
result+=day2-day1;
}
}
}
returnresult;
}
7.编写一个程序从键盘输入圆锥体的半径r和高度h,并计算体积。
#include
intmain()
{
doubler,h;
printf("请输入圆锥的半径:
");
scanf("%lf",&r);
printf("请输入圆锥的高度:
");
scanf("%lf",&h);
doublev=r*h/3;
printf("该圆锥的体积为:
%lf\n",v);
return0;
}
8.编写一个判定一个字符串是否为另一个字符串子字符串的程序。
#include
#include
intcmpsubstr(chara[50],charb[50])
{
inti,j,flag=-1;
for(i=0;i<=(strlen(a)-strlen(b));i++)
{
flag=i;
for(j=0;jif(b[j]!
=a[i+j])
break;
if(j==strlen(b))
returnflag;
}
return-1;
}
intmain()
{
chara[50],b[50];
intn;
printf("输入字符串a:
");
gets(a);
printf("输入字符串b:
");
gets(b);
if(strlen(a)>=strlen(b))
{
n=cmpsubstr(a,b);
if(n!
=-1)
printf("b是a的子串,位置从a[%d]开始.\n",n);
else
printf("b不是a的子串");
}
else
{
n=cmpsubstr(b,a);
if(n!
=-1)
printf("a是b的子串,位置从b[%d]开始.\n",n);
else
printf("a不是b的子串");
}
return0;
}
9.编写一个程序实现一个整数、长整数、浮点数和双精度浮点数除以2的计算,要求所有类型的数除以2只用一个函数。
#include
#defineCalc(x)x/2
intmain()
{
inta;
printf("请输入一个整数:
");
scanf("%d",&a);
printf("%d运算后的结果是:
%d\n",a,Calc(a));
printf("\n");
longb;
printf("请输入一个长整数:
");
scanf("%ld",&b);
printf("%ld运算后的结果是:
%ld\n",b,Calc(b));
printf("\n");
floatc;
printf("请输入一个浮点数:
");
scanf("%f",&c);
printf("%f运算后的结果是:
%f\n",c,Calc(c));
printf("\n");
doubled;
printf("请输入一个浮点数:
");
scanf("%lf",&d);
printf("%lf运算后的结果是:
%lf\n",d,Calc(d));
printf("\n");
return0;
}
10.编写一个程序从键盘输入50个学生的成绩,并求出最高分、最低分、平均分。
#include
intmain()
{
doublescore[50];
for(inti=0;i<50;i++)
{
scanf("%lf",&score[i]);
}
//求最高分和最低分
doublemax=score[0];
doublemin=score[0];
for(inti=1;i<50;i++)
{
if(max{
max=score[i];
}
if(min>score[i])
{
min=score[i];
}
}
//求平均分
doubleaverage,sum=0;
for(inti=0;i<50;i++)
{
sum+=score[i];
}
average=sum/50;
printf("最高分:
%lf\n",max);
printf("最低分:
%lf\n",min);
printf("平均分:
%lf\n",average);
return0;
}
11.一个素数,当它的数字位置对换后仍为素数,这样的数称为绝对素数,设计一个算法,求出所有的两位数的绝对素数。
#include
boolisPrime(intnum);
intExchange(intnum);
intmain()
{
for(inti=11;i<99;i++)
{
if(isPrime(i)&&isPrime(Exchange(i)))
{
printf("%d",i);
}
}
printf("\n");
return0;
}
//判断一个数是否为质数
boolisPrime(intnum)
{
boolflag=true;//默认判断是素数
for(inti=2;i{
if(num%i==0)
{
flag=false;//发现了其他因子,不是素数
break;
}
}
returnflag;
}
//求出对换后num的值
intExchange(intnum)
{
if(num%10!
=0)//排除20,30,40.....
{
intgewei=num%10;//个位
intshiwei=num/10;//十位
num=gewei*10+shiwei;//个位和十位交换
}
returnnum;
}
12.编写一个C程序实现两个字符串的前后连接和后前连接。
#include
#include
#include
char*Link(char*a,char*b);
intmain()
{
chara[20],b[20];
gets_s(a);
gets_s(b);
char*c=Link(a,b);
for(inti=0;i{
printf("%c",c[i]);
}
return0;
}
char*Link(char*a,char*b)
{
unsignedi,j;
char*c;
c=(char*)malloc(strlen(a)+strlen(b)-1);//为指针c动态分配内存
for(i=0;i<=strlen(a)-1;i++)
{
c[i]=a[i];
}
for(j=0;j<=strlen(b);j++,i++)
{
c[i]=b[j];
}
returnc;
}
13.编写一个复制字符串的程序。
#include
#include
voidCopy(char*a,char*b);
intmain()
{
chara[20],b[20];
gets_s(a);
Copy(a,b);
puts(b);
return0;
}
voidCopy(char*a,char*b)
{
inti;
for(i=0;i{
b[i]=a[i];
}
b[i]='\0';
}
14.编写一个程序逆序(从大到小)重新放置数组a中的元素,a[10]={2,4,6,5,1,8,7,9,0,3}.
#include
intmain()
{
inta[10]={2,4,6,5,1,8,7,9,0,3};
inttemp,i,j;
//选择排序,重要
for(i=0;i<9;i++)
{
for(j=i+1;j<10;j++)
{
if(a[i]{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
printf("降序:
\n");
for(i=0;i<10;i++)
{
printf("%d",a[i]);
}
printf("\n");
return0;
}
15.写出计算机的结构并说出功能。
(这道题不会,XX搜的)
1.计算机由运算器、控制器、存储器、输入设备和输出设备等五大部件组成计算机硬件系统。
(1)运算器:
又称算术逻辑单元,用来进行算术或逻辑运算以及移位循环等操作。
(2)控制器:
又称控制单元,是全机的指挥控制中心。
它负责把指令逐条从存储器中取出,经译码分析后向全机发出取数、执行、存数等控制命令,以保证正确完成程序所要求的功能。
与运算器一起成为CPU。
(3)存储器:
(分为内存和外存)是计算机的存储和记忆装置,用来存放指令、原始数据、中间结果和最终结果。
(4)输入、输出设备:
是计算机和外界进行信息交换的桥梁。
程序、数据及现场信息要通过输入设备输入给计算机;计算机的处理结果要通过输出设备输出,以便用户使用。
常用的输入设备有:
键盘、鼠标、扫描仪等;常用的输出设备有:
显示器、打印机、绘图仪等。
2.
(1)计算机硬件系统:
到目前为止,计算机仍沿用由冯.诺依曼首先提出的基于总线的计算机硬件系统。
其基本设计思想为:
a.以二进制形式表示指令和数据b.程序和数据事先存放在存储器中,计算机在工作时能够高速地从存储器中取出指令加以执行c.由运算器、控制器、存储器、输入设备和输出设备等五大部件组成计算机硬件系统。
(2)计算机软件系统:
所谓软件,就是为了管理、维护计算机以及为完成用户的某种特定任务而编写的各种程序的总和。
计算机的工作就是运行程序,通过逐条的从存储器中取出程序中的指令并执行指令所规定的操作而实现某种特定的功能。
微型计算机的软件包括系统软件和用户(应用)软件。
16.编写一个程序求出两个字符串:
s[]="ThisisCprogrammingtext";t[]="ThisisatextforCprogramming";
包含的最长的相同的单词。
(区分大小写)
说明:
自左向右顺序扫描字符串s,逐个找出单词(单