C语言练习考研复习题

上传人:痛*** 文档编号:99175553 上传时间:2022-05-31 格式:DOC 页数:36 大小:160KB
收藏 版权申诉 举报 下载
C语言练习考研复习题_第1页
第1页 / 共36页
C语言练习考研复习题_第2页
第2页 / 共36页
C语言练习考研复习题_第3页
第3页 / 共36页
资源描述:

《C语言练习考研复习题》由会员分享,可在线阅读,更多相关《C语言练习考研复习题(36页珍藏版)》请在装配图网上搜索。

1、word 1. 编写一个程序将用户输入的正整数转化为对应的二进制数。 #include #include int main() { int num; printf("请输入一个正整数:"); scanf("%d", &num); //异常输入直接完毕 if (num < 0) { printf("输入错误!"); exit(0); } //将num和2进展取余运算,存储在数组中 int a[20], i = 0; while (num != 0) { a[i] = num % 2; num = num

2、/ 2; i++; } //遍历输出数组 while (i > 0) { printf("%d", a[--i]); } printf("\n"); return 0; } 2. 请写出你所了解的linux系统中常用的命令并解释其功能。 〔1〕pwd命令 该命令的英文解释为print working directory(打印工作目录)。输入pwd命令,Linux会输出当前目录。 〔2〕 cd命令 cd命令用来改变所在目录。 cd / 转到根目录中 cd ~ 转到/home/user用户目录下 cd /usr 转到根

3、目录下的usr目录中-------------绝对路径 cd test 转到当前目录下的test子目录中-------相对路径 〔3〕ls命令 ls命令用来查看目录的内容。 选项 含义 -a 列举目录中的全部文件,包括隐藏文件 -l 列举目录中的细节,包括权限、所有者、组群、大小、创建日期、文件是否是等 -f 列举的文件显示文件类型 -r 逆向,从后向前地列举目录中内容 -R 递归,该选项递归地列举当前目录下所有子目录内的内容 -s 大小,按文件大小排序 -h 以人类可读的方式显示文件的大小,如用K、M、G作单位 ls -l examples.doc 列举文件e

4、xamples.doc的所有信息 〔4〕 cat命令 cat命令可以用来合并文件,也可以用来在屏幕上显示整个文件的内容。 cat snow.txt 该命令显示文件snow.txt的内容,ctrl+D退出cat。 〔5〕grep命令 grep命令的最大功能是在一堆文件中查找一个特定的字符串。 grep money test.txt 以上命令在test.txt中查找money这个字符串,grep查找是区分大小写的。 〔6〕 touch命令 touch命令用来创建新文件,他可以创建一个空白的文件,可以在其中添加文本和数据。 touch newfile 该命令

5、创建一个名为newfile的空白文件。 〔7〕cp命令 cp命令用来拷贝文件,要复制文件,输入命令: cp cp t.txt Document/t 该命令将把文件t.txt复制到Document目录下,并命名为t。 3. 编写一个程序计算任一输入数字的各位数字之和。 #include #include int main() { int num; printf("请输入一个正整数:"); scanf("%d", &num); //

6、异常输入直接完毕 if (num < 0) { printf("输入错误!"); exit(0); } int result = 0; while (num != 0) { result += num % 10; num = num / 10; } printf("%d\n", result); return 0; } 4. 编写一个程序判断用户输入任一正整数是否为素数。 #include #include int main() { int num; printf("请输入一个大于1正整数:"

7、); scanf("%d", &num); //异常输入直接完毕 if (num < 0 || num == 1) { printf("输入错误!"); exit(0); } if (num==2) { printf("%d是素数。\n", num); exit(0); } bool flag = true; //默认判断是素数 for (int i = 2; i < num; i++) { if (num%i == 0) { flag =false; //发现了

8、其他因子,不是素数 break; } } if (flag == true) { printf("%d是素数。\n", num); } else { printf("%d不是素数。\n", num); } return 0; } 5. 编写一个程序求给定三个字符串的最长公共字串。〔难〕 这里我只写了两个字符串的比拟方法,三个字符串的意思是一样的。 #include #include #include int longest_mon_substring(cha

9、r *str1, char *str2) { int i, 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 < len; i++) { s1_start = s2_start = 0; if (i < len1) { s1_start = len1 - i; //每次开始匹配的起始位置 } else { s2_star

10、t = i - len1; } curmax = 0; for (idx = 0; (s1_start + idx < len1) && (s2_start + idx < len2); idx++) { if (str1[s1_start + idx] == str2[s2_start + idx]) { curmax++; } else //只要有一个不相等,就说明相等的公共字符断了,不连续了, //要保存curmax与max中的最大值,并将curmax重置为0 { //max = curmax > max ? curmax : max;

11、 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; } } //输出公共子串 char s[100]; for (i = 0;

12、i < max; i++) { s[i] = str1[k - max + 1 + i]; //公共字串在str1中的下标起始位置为k-max+1,完毕位置为k } s[i] = '\0'; printf("最长公共子串为:"); puts(s); return max; } int main(void) { char str1[100], str2[100]; printf("请输入第一个字符串:"); gets(str1); printf("请输入第二个字符串:"); gets(str2); int len = longest_m

13、on_substring(str1, str2); printf("最长公共连续子串的长度为:%d\n", len); return 0; } 6. 编写一个程序计算用户输入的起始时间到终止时间的天数。 #include bool isLeapYear(int year); int CalcDay(int yerar1, int month1, int day1, int year2, int month2, int day2); int leapMonth[12] = { 31,29,31,30,31,30,31,31,30,31,30

14、,31 }; int normalMonth[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; int main() { int year1, year2, month1, month2, day1, day2; printf("请输入第一个日期〔年 月 日〕:"); scanf("%d%d%d", &year1, &month1, &day1); printf("请输入第二个日期〔年 月 日〕:"); scanf("%d%d%d", &year2, &month2, &day2); int sum = CalcDay(ye

15、ar1, month1, day1, year2, month2, day2); printf("%d\n", sum); return 0; } //判断是否为闰年 bool isLeapYear(int year) { if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { return true; } return false; } int CalcDay(int yerar1, int month1, int day1, int year2, int month2, int day2

16、) { int result=0; if (yerar1!=year2) { for (int i = yerar1+1; i < year2; i++) //计算相差的整年 { if (isLeapYear(i)) { result += 366; } else { result += 365; } } if (isLeapYear(yerar1)) { for (int i = month1+1; i <= 12; i++) { result += leapMonth[i - 1]; } result += leapMonth[mon

17、th1 - 1] - day1; } if (isLeapYear(yerar1) == false) { for (int i = month1+1; i <= 12; i++) { result += normalMonth[i - 1]; } result += normalMonth[month1 - 1] - day1; } if (isLeapYear(year2)) { for (int i = 1; i < month2; i++) { result += leapMonth[i - 1]; } result += day2; }

18、 if (isLeapYear(year2) == false) { for (int i = 1; i < month2; i++) { result += normalMonth[i - 1]; } result += day2; } } else { if (isLeapYear(yerar1)) { if (month1 != month2) { for (int i = month1; i < month2 - 1; i++) { result += normalMonth[i]; } result += day2 + normalMo

19、nth[month1 - 1] - day1; } else { result += day2 - day1; } } else { if (month1 != month2) { for (int i = month1; i < month2 - 1; i++) { result += normalMonth[i]; } result += day2 + normalMonth[month1 - 1] - day1; } else { result += day2 - day1; } } } return result; } 7. 编

20、写一个程序从键盘输入圆锥体的半径r和高度h,并计算体积。 #include int main() { double r, h; printf("请输入圆锥的半径:"); scanf("%lf", &r); printf("请输入圆锥的高度:"); scanf("%lf", &h); double v = r*h / 3; printf("该圆锥的体积为:%lf\n", v); return 0; } 8. 编写一个判定一个字符串是否为另一个字符串子字符串的程序。 #include #include

21、 int cmpsubstr(char a[50], char b[50]) { int i, j, flag = -1; for (i = 0; i <= (strlen(a) - strlen(b)); i++) { flag = i; for (j = 0; j < strlen(b); j++) if (b[j] != a[i + j]) break; if (j == strlen(b)) return flag; } return -1; } int main() { char a[50], b[50]; int

22、 n; 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的

23、子串"); } return 0; } 9. 编写一个程序实现一个整数、长整数、浮点数和双精度浮点数除以2的计算,要求所有类型的数除以2只用一个函数。 #include #define Calc(x) x/2 int main() { int a; printf("请输入一个整数:"); scanf("%d", &a); printf("%d运算后的结果是:%d\n", a, Calc(a)); printf("\n"); long b; printf("请输入一个长整数:"); scanf("%ld", &b); pri

24、ntf("%ld运算后的结果是:%ld\n", b, Calc(b)); printf("\n"); float c; printf("请输入一个浮点数:"); scanf("%f", &c); printf("%f运算后的结果是:%f\n", c, Calc(c)); printf("\n"); double d; printf("请输入一个浮点数:"); scanf("%lf", &d); printf("%lf运算后的结果是:%lf\n", d, Calc(d)); printf("\n"); return 0; } 10. 编写一个程序从键盘

25、输入50个学生的成绩,并求出最高分、最低分、平均分。 #include int main() { double score[50]; for (int i = 0; i < 50; i++) { scanf("%lf", &score[i]); } //求最高分和最低分 double max = score[0]; double min = score[0]; for (int i = 1; i < 50; i++) { if (max < score[i]) { max = score[i]; } if (min > sco

26、re[i]) { min = score[i]; } } //求平均分 double average, sum = 0; for (int i = 0; i < 50; i++) { sum += score[i]; } average = sum / 50; printf("最高分:%lf\n", max); printf("最低分:%lf\n", min); printf("平均分:%lf\n", average); return 0; } 11. 一个素数,当它的数字位置对换后仍为素数,这样的数称为绝对素数,设计一个算法,求出所有的两位数

27、的绝对素数。 #include bool isPrime(int num); int Exchange(int num); int main() { for (int i = 11; i < 99; i++) { if (isPrime(i)&&isPrime(Exchange(i))) { printf("%d ", i); } } printf("\n"); return 0; } //判断一个数是否为质数 bool isPrime(int num) { bool flag = true;

28、 //默认判断是素数 for (int i = 2; i < num; i++) { if (num%i == 0) { flag = false; //发现了其他因子,不是素数 break; } } return flag; } //求出对换后num的值 int Exchange(int num) { if (num % 10 != 0) //排除20,30,40..... { int gewei = num % 10; //个位 int shiwei = num / 10; //十位

29、 num = gewei * 10 + shiwei; //个位和十位交换 } return num; } 12. 编写一个C程序实现两个字符串的前后连接和后前连接。 #include #include #include char * Link(char *a, char *b); int main() { char a[20], b[20]; gets_s(a); gets_s(b); char *c = Link(a, b); for (int i = 0; i < str

30、len(c); i++) { printf("%c", c[i]); } return 0; } char * Link(char *a, char *b) { unsigned i, 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]; }

31、 return c; } 13. 编写一个复制字符串的程序。 #include #include void Copy(char *a, char *b); int main() { char a[20], b[20]; gets_s(a); Copy(a, b); puts(b); return 0; } void Copy(char *a, char *b) { int i; for (i = 0; i < strlen(a); i++) { b[i] = a[i]; } b[i]

32、= '\0'; } 14. 编写一个程序逆序〔从大到小〕重新放置数组a中的元素,a[10]={2,4,6,5,1,8,7,9,0,3}. #include int main() { int a[10] = { 2,4,6,5,1,8,7,9,0,3 }; int temp, i, j; //选择排序,重要 for (i = 0; i < 9; i++) { for (j = i + 1; j < 10; j++) { if (a[i] < a[j]) { temp = a[i]; a[i] = a[j]; a[j] = t

33、emp; } } } printf("降序:\n"); for (i = 0; i < 10; i++) { printf("%d ", a[i]); } printf("\n"); return 0; } 15. 写出计算机的结构并说出功能。〔这道题不会,百度搜的〕 1.计算机由运算器、控制器、存储器、输入设备和输出设备等五大部件组成计算机硬件系统。 〔1〕运算器:又称算术逻辑单元,用来进展算术或逻辑运算以与移位循环等操作。 〔2〕控制器:又称控制单元,是全机的指挥控制中心。它负责把指令逐条从存储器中取出,经译码分析后向全机发出取数、执行、存数等控

34、制命令,以保证正确完成程序所要求的功能。与运算器一起成为CPU。 〔3〕存储器:〔分为内存和外存〕是计算机的存储和记忆装置,用来存放指令、原始数据、中间结果和最终结果。 〔4〕输入、输出设备:是计算机和外界进展信息交换的桥梁。程序、数据与现场信息要通过输入设备输入给计算机;计算机的处理结果要通过输出设备输出,以便用户使用。常用的输入设备有:键盘、鼠标、扫描仪等;常用的输出设备有:显示器、打印机、绘图仪等。 2.〔1〕计算机硬件系统:到目前为止,计算机仍沿用由冯.诺依曼首先提出的基于总线的计算机硬件系统。其根本设计思想为:a.以二进制形式表示指令和数据b.程序和数据事先存放在存储器中,计算

35、机在工作时能够高速地从存储器中取出指令加以执行c.由运算器、控制器、存储器、输入设备和输出设备等五大部件组成计算机硬件系统。 〔2〕计算机软件系统:所谓软件,就是为了管理、维护计算机以与为完成用户的某种特定任务而编写的各种程序的总和。计算机的工作就是运行程序,通过逐条的从存储器中取出程序中的指令并执行指令所规定的操作而实现某种特定的功能。微型计算机的软件包括系统软件和用户〔应用〕软件。 16. 编写一个程序求出两个字符串: s[] = "This is C programming text";t[] = "This is a text for C program

36、ming"; 包含的最长的一样的单词。(区分大小写) 说明: 自左向右顺序扫描字符串s,逐个找出单词〔单词开始位置和单词长度〕,当该单词的长度比已找到的单词更长时,就从头到尾扫描字符串t。在从t字符串中找出与该字符串长度相等、字符一样的单词后,记录下该单词的和的长度,并回到s,在其中找出下一个更长的单词。上述寻找过程直到字符串s扫描完毕,最后输出找到的单词。 #include #include void maxword(char *s, char *t); int main() { char s[] = "This is

37、 C programming text"; char t[] = "This is a text for C programming"; maxword(s, t); return 0; } void maxword(char *s, char *t) { char *res, *temp, chs, cht; int i, j, found, maxlen = 0; while (*s != '\0') { while (*s == ' ') s++; for (i = 0; s[i] != ' ' && s[i] != '\0'; i++); if (i

38、> maxlen) { chs = s[i]; s[i] = '\0'; temp = t; found = 0; while (*temp != '\0' && !found) { while (*temp == ' ') temp++; for (j = 0; temp[j] != ' ' && temp[j] != '\0'; j++); if (j == i) { cht = temp[j]; temp[j] = '\0'; if (strcmp(s, temp) == 0) { maxlen = i; res = s; found = 1;

39、} temp[j] = cht; } temp = &temp[j]; } s[i] = chs; } s = &s[i]; } if (maxlen == 0) printf("没有一样的单词.\n"); else { chs = res[maxlen]; res[maxlen] = '\0'; printf("%s\n", res); res[maxlen] = chs; } } 17. 编写一个计算字符串长度的程序。 #include #include int main() { char

40、a[100]; gets_s(a); int length; for (int i = 0; a[i] != '\0'; i++) { length = i+1; } printf("%d\n", length); return 0; } 18. 编写求一个字符在字符串中位置的程序。 #include #include int main() { char a[100], b; int position; bool flag = false; //是否查找到的标志 printf("请输入字符

41、串:"); gets_s(a); printf("请输入要查找的字符:"); scanf("%c", &b); for (int i = 0; i < strlen(a); i++) { if (a[i] == b) { flag = true; //找到 position = i + 1; printf("%c 是 %s 字符串的第 %d 个字符。\n", b, a, position); } } if (flag == false) //没找到 { printf("未查找到该字符!\n"); } return 0; } 19. 编

42、写一个程序将用户输入的由字符和非字符字符串中的数字提取出来,例如输入“asd123rt456fg789〞, 得到的数是123,456,789. #include #include int main() { char a[100]; gets(a); int i = 0, j = 0; for (i = 0; i < strlen(a); i++) { if (a[i] >= 48 && a[i] <= 57) //查找到一个数字 { for (j = i; a[

43、j] >= 48 && a[j] <= 57; j++) //判断下一位是不是数字 { printf("%c", a[j]); } i = j; //找到了这个数字,i 要移到这个数后面的字符 printf(" "); } } return 0; } 20. 编写一个程序将用户输入的字符串进展加密和解密。 说明:这里的加密方式是将字符对应的Ascll码后移五位。 #include #include int main() { char a[100]; gets_

44、s(a); printf("加密后:"); for (int i = 0; i < strlen(a); i++) { a[i] += 5; printf("%c", a[i]); } printf("\n"); printf("解密后:"); for (int i = 0; i < strlen(a); i++) { a[i] -= 5; printf("%c", a[i]); } printf("\n"); return 0; } 21. 你是否熟悉Unix或者Linux操作系统,指出它们与Windows系统的差异。〔这个是百度的〕

45、 最显著的区别是,Linux重视开源,所有系统可以是完全自行构建的系统,而Windows系统、UNIX系统是不开源的,有专门团队维护、升级。 UNIX更侧重于客户端-服务器类型的大型远程连网应用,比如你要用UNIX,需要通过登录远方的服务器主机才能使用;Windows侧重单机运行,由于有微软的技术支持和服务,界面统一、操作也统一,缺点是要受强制升级的影响,开发无法自主,必须借助微软提供的开发包,对于系统是否安全无法控制,这也是政府机关不选用Win8的原因之一;Linux可以完全自主,自己可实现保证没有软件后门,免费,开源,充满活力,比前两个更适合嵌入式系统(比如手机)。 36 / 36

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!