C语言练习考研复习题精编版.docx
- 文档编号:11597357
- 上传时间:2023-03-20
- 格式:DOCX
- 页数:31
- 大小:124.61KB
C语言练习考研复习题精编版.docx
《C语言练习考研复习题精编版.docx》由会员分享,可在线阅读,更多相关《C语言练习考研复习题精编版.docx(31页珍藏版)》请在冰豆网上搜索。
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;j if(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++) {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 练习 考研 复习题 精编