《[新]C语言期末复习,经典练习题+知识点总结+模拟考题三位一体,完胜c语言!!!!{考期必备神器}(26页).doc》由会员分享,可在线阅读,更多相关《[新]C语言期末复习,经典练习题+知识点总结+模拟考题三位一体,完胜c语言!!!!{考期必备神器}(26页).doc(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-新C语言期末复习,经典练习题+知识点总结+模拟考题。三位一体,完胜c语言!考期必备神器-第 25 页C语言期末复习(平时练习答案)特别适用于千千万北航学子考试重点:(编程题)排序,选择与冒泡排序,各种进制转换。第二次大作业前驱、后继字符 1. 【问题描述】 从键盘输入一个字符,求出它的前驱和后继字符(按照ASCII码值排序),并按照从小到大的顺序输出这三个字符和对应的ASCII值。 【输入形式】 从键盘输入一个字符 【输出形式】 按两行输出: 第一行按照从小到大的顺序输出这三个字符,并以一个空格隔开; 第二行按照从小到大的顺序输出三个字符对应的ASCII值,并以一个空格隔开。 【输入样例】
2、b 【输出样例】 a b c 97 98 99 【样例说明】 输入字符b,b的前驱字符是a,后继字符是c,第一行按照从小到大的顺序输出a b c;第二行输出对应的ASCII值97 98 99 【评分标准】 结果完全正确得20分,每个测试点4分。提交程序名为:c0103.c。 /*从键盘输入一个字符,求出它的前驱和后继字符(按照ASCII码值排序),并按照从小到大的顺序输出这三个字符和对应的ASCII值。*/#includeint main()char c= ;printf(Input a number:);scanf(%c,&c); /*从键盘输入一个字符*/printf( %c %c %cn
3、,c-1,c,c+1);/*第一行按照从小到大的顺序输出这三个字符,并以一个空格隔开*/printf( %d %d %d, c-1,c,c+1);/*第二行按照从小到大的顺序输出三个字符对应的ASCII值,并以一个空格隔开。*/return 0; 当前编程题:第二次大作业-数值变换 2. 【问题描述】 编写一程序,从键盘输入输入一个三位正整数,然后反向输出对应的数,如果输入的数不是三位正整数,则输出1。 【输入形式】 从键盘输入三位的正整数。 【输出形式】 输出交换后的正整数值。 【输入样例】 356 【输出样例】 653 【样例说明】 从键盘输入的正整数值为356,将该数的个位与百位互换,所
4、得结果为653.如果输入的正整数为300,则输出为3。 【评分标准】 结果完全正确得20分,每个测试点4分。提交程序名为:c0102.c。 /*编写一程序,从键盘输入输入一个三位正整数,然后反向输出对应的数,如果输入的数不是三位正整数,则输出1。 */#include void main()int a,d,e,f,sum; /*定义变量*/printf(请输入一个三位正整数,n);scanf(%d,&a); /*输入一个数*/if(a0) /*对输入的值的正负做判断*/d=a/100;e=(a-d*100)/10;f=a%10;sum=100*f+10*e+d;printf(%dn,sum);
5、 /*输出交换后的正整数值。*/elseprintf(-1n); /*如果输入的数不是三位正整数,则输出1*/当前编程题:第二次大作业-计算平均值 3. 【问题描述】 从键盘输入三个整数,分别存入x,y,z三个整型变量中,计算并输出三个数的和以及平均值。 【输入形式】 从键盘输入三个整数,整数之间以空格隔开。 【输出形式】 在屏幕上分两行显示结果: 第一行为三个数的和,整数形式输出; 第二行为三个数的平均值,浮点数形式输出,小数点后保留两位小数。 【输入样例】 3 2 3 【输出样例】 8 2.67 【样例说明】 3、2、3的和为8,所以第一行输出8; 第二行输出3、2、3的平均值2.67(保
6、留两位小数)。 【评分标准】 结果完全正确得20分,每个测试点4分。提交程序名为:c0101.c。 /*从键盘输入三个整数,分别存入x,y,z三个整型变量中,计算并输出三个数的和以及平均值*/#include int main()int x,y,z,sum; /*定义变量*/float average;scanf(%d%d%d,&x,&y,&z); /*从键盘输入三个整数,整数之间以空格隔开*/sum=x+y+z; average = (float)sum/3; /*第一行为三个数的和,整数形式输出;*/printf(%dn,sum); printf(%.2fn,average); /* 第二
7、行为三个数的平均值,浮点数形式输出,小数点后保留两位小数*/return 0;当前编程题:第二次大作业-正整数的打印 4. 【问题描述】给出一个不多于5位的正整数,要求: 1.求出它是几位数。 2.分别打印出每一位数字。 3.按照逆序打印出每一位数字。 【输入形式】控制台输入该正整数。 【输出形式】控制台分行输出输出结果。 【样例输入】1234 【样例输出】 4 1234 4321 【样例说明】1234位数为4,分别为1,2,3,4,逆序为4321 【评分标准】该题共有三个输出整数,完全正确得10分,每答错一个扣掉4分,直至得分为0。本题要求上传程序的源文件。所采用语言可以是C(.c)。主文件
8、名设定为intprint.c /*给出一个不多于5位的正整数,要求: 1.求出它是几位数。 2.分别打印出每一位数字。 3.按照逆序打印出每一位数字。 */#includevoid main()long int a;int n,b,c,d,e,f;printf(n请输入一个整数(099999):);scanf(%d,&a);if(a9999) n=5; else if(a999) n=4; else if(a99) n=3; elseif(a9) n=2; elsen=1; printf(n这个数的位数=%dn,n);f=a/10000;e=a%10000/1000;d=a%10000%100
9、0/100;c=a%10000%1000%100/10; b=a%10000%1000%100%10; switch(n) case 5:printf(%d%d%d%d%dn,f,e,d,c,b); printf(%d%d%d%d%dn,b,c,d,e,f);break; case 4:printf(%d%d%d%dn,e,d,c,b); printf(%d%d%d%dn,b,c,d,e);break;case 3:printf(%d%d%dn,d,c,b); printf(%d%d%dn,b,c,d);break; case 2:printf(%d%dn,c,b);printf(%d%dn,
10、b,c); case 1:printf(%dn,b); printf(%dn,b); 当前编程题:第二次大作业-简易计算器 5. 【问题描述】 编程实现简易的计算器:读入两个整数运算数(data1和data2)及一个运算符(op),计算表达式data1 op data2的值, 其中op可以是+,-,*,/。 【输入形式】 控制台输入运算数和运算符: 1.首先输入以空格分隔的两个整数,分别是data1和data2; 2.输入一个字符作为运算符op,op可以是+,-,*,/。 输入时,data1、data2、op之间各留有一个空格。具体格式见样例输入。 【输出形式】 控制台输出运算结果。作除法运算
11、时,若能够整除,则输出为整数,否则输出结果小数点后应保留两位有效数字。 【样例输入】 23 5 * 【样例输出】 115 【样例说明】 输入中先后输入第一个运算数23,第二个运算数5,运算符*,要求对23和5进行乘法运算。计算结果为115。 【评分标准】 该题共20分,每个测试点4分。 本题要求上传程序的源文件。所采用语言可以是C(.c).即所上传的文件名为calculator.c /*编程实现简易的计算器:读入两个整数运算数(data1和data2)及一个运算符(op),计算表达式data1 op data2的值, 其中op可以是+,-,*,/。 */#include int main()i
12、nt data1,data2,c; /定义变量/double d;char op;scanf(%d%d %c,&data1,&data2,&op); /输入运算数和运算符/if(op=+) /进行判断/c=data1+data2;printf(%d,c);else if(op=-)c=data1-data2;printf(%d,c);else if(op=*)c=data1*data2;printf(%d,c);else if(op=/)d=(double)data1/data2;printf(%.2f,d);return 0;找最大最小整数1.【问题描述】编写一个程序,用户输入若干整数,试找
13、出其中的最大数和最小数。【输入形式】用户在第一行待输入数据个数,在第二行输入数据。【输出形式】程序在下一行输出数据的最大值和最小值【样例输入】 5 89 62 96 74 52 【样例输出】96 52【样例说明】用户第一次输入的为数据个数,在下一行依次输入数据。输出为5个数中的最大值和最小值,输出时候两个数之间用空格分隔。【评分标准】结果完全正确得20分,每个测试点4分。提交程序名为:getmaxandmin.c矩形相交2.【问题描述】平面上有两个矩形A和B,其位置是任意的。编程求出其相交部分(如图中阴影部分)的面积。(0a,b1000)【输入形式】从标准输入读取两行以空格分隔的整数,格式如下
14、:Ax1 Ay1 Ax2 Ay2Bx1 By1 Bx2 By2其中(x1,y1)和(x2,y2)为矩形对角线上端点的坐标。各坐标值均为整数,取值在0至1000之间。【输出形式】向标准输出打印一个整数,是两矩形相交部分的面积(可能为0)。在输出末尾要有一个回车符。【输入样例】 0 0 2 21 1 3 4【输出样例】1【评分标准】结果完全正确得20分,每个测试点4分,提交程序文件名为area.c。红色为采用答案#include #include struct point int x; int y;A1,A2,B1,B2;struct rect struct point p1; struct po
15、int p2;R1,R2;struct point makepoint(int x,int y);struct rect makerect(struct point p1,struct point p2);struct rect guifanrect(struct rect R);#define max(A,B) (A)(B)?(A):(B)#define min(A,B) (A)(B)?(B):(A)main() int i,num14,num24,area; for(i=0;i4;i+) scanf(%d,&num1i); for(i=0;i4;i+) scanf(%d,&num2i);
16、R1 = makerect(A1 = makepoint(num10,num11), A2 = makepoint(num12,num13); R2 = makerect(B1 = makepoint(num20,num21), B2 = makepoint(num22,num23); R1 = guifanrect(R1); R2 = guifanrect(R2); if( R1.p2.x = R2.p1.x | R1.p2.y = R2.p2.x | R1.p1.y = R2.p2.y) area = 0; else area = abs(max(R1.p1.x, R2.p1.x) - m
17、in(R1.p2.x, R2.p2.x) * abs(max(R1.p1.y, R2.p1.y) - min(R1.p2.y, R2.p2.y); printf(%dn,area);struct point makepoint(int x,int y) struct point temp;temp.x = x; temp.y = y; return temp;struct rect makerect(struct point p1,struct point p2) struct rect temp; temp.p1 = p1; temp.p2 = p2; return temp;struct
18、rect guifanrect(struct rect r) struct rect temp; temp.p1.x = min (r.p1.x, r.p2.x); temp.p1.y = min (r.p1.y, r.p2.y); temp.p2.x = max (r.p1.x, r.p2.x); temp.p2.y = max (r.p1.y, r.p2.y); return temp;3.【问题描述】编写一个程序,当在一个字符串中出现子串时就删除它。【输入形式】用户在第一行输入一个字符串,用户在第二行输入一个子串。【输出形式】程序在下一行输出删除其中所有子串后的字符串。如果字符串不包含子
19、串则输出原字符串本身。【样例输入】 I am a boy! a 【样例输出】 I m boy! 【样例说明】用户首先输入字符串I am a boy!,然后输出子串a,程序会寻找字符串中的子串删除它,最后 将删除后的结果输出:I#m#boy! #表示空格。【评分标准】结果完全正确得20分,每个测试点4分。提交程序名为:delsubstring.c。#include #include char source_str1024;char del_str1024;char dest_str1024;int main( void ) char *pdest; int result; fgets(sourc
20、e_str, 1024, stdin); fgets(del_str, 1024, stdin); source_strstrlen(source_str)-1 = 0; del_strstrlen(del_str)-1 = 0; pdest = strstr(source_str, del_str); result = 0; while(pdest != NULL) strncat(dest_str, &source_strresult, (int)(pdest - &source_strresult); result += (int)(pdest - &source_strresult)
21、+ strlen(del_str); pdest = strstr(&source_strresult, del_str); if(result strlen(source_str) strncat(dest_str, &source_strresult, strlen(source_str) - result); printf(%sn, dest_str); return 0; 4.【问题描述】编写一个函数char * str_bin(char* str1, char* str2), str1、str2是两个有序字符串(其中字符按ASCII码从小到大排序),将str2合并到字符串str1中,
22、要求合并后的字符串仍是有序的,允许字符重复。在main函数中测试该函数:从键盘输入两个有序字符串,然后调用该函数,最后输出合并后的结果。【输入形式】分行从键盘输入两个有序字符串(不超过100个字符)【输出形式】输出合并后的有序字符串【输入样例】acegbdfh【输出样例】abcdefgh【样例说明】输入两个有序字符串aceg和bdfh,输出合并后的有序字符串abcdefgh【评分标准】结果完全正确得20分,每个测试点4分,提交程序文件名为combine.c。#includechar * str_bin(char* str1, char* str2) static char str100; in
23、t i = 0; while (*str1 & *str2) if (*str1 b?+a:+b; 选择题 # 题目 1. 已知:char a=a;float b=2.3;double c=41;int d;则执行语句d=a+b+c;后变量d的数据类型为 A (A) int (B) char (C) float (D) double2. 字符串“ta017bc”的长度(不包括结束符)是 C (A) 9(B) 5(C) 6(D) 7 3. 设整型变量x和y的值均为7,则表达式“x/(y-4)”的值是CA. 3B. 3C. 2D. 14. 题目内容:有输入语句:int a,b,c; scanf(a
24、=%d,b=%d,c=%d, &a, &b, &c); 为使变量a的值为1,b的值为3,c的值为2,从键盘输入数据的正确形式应当是(注:#表示空格)D(A) 132(B) 1,3,2(C) a=1#b=3#c=2(D) a=1,b=3,c=2 编程题 作业四-反弹1. 【问题描述】已知一球从高空落下时,每次落地后反弹至原高度的四分之一再落下。编写一程序,从键盘输入整数n和m,求该球从n米的高空落下后,第m次落地时共经过的路程以及第m次落地后反弹的高度,并输出结果。【输入形式】从键盘输入整数n和m,以空格隔开。【输出形式】输出两行:第一行输出总路程,保留小数点后两位;第二行输出第m次落地后反弹的
25、高度,保留小数点后两位。【输入样例】40 3【输出样例】65.000.63【评分标准】结果完全正确得20分,每个测试点4分,提交程序文件high.c。-日期天数转换2. 【问题描述】编写一个程序,用户输入日期,计算该日期是这一年的第几天。【输入形式】用户在第一行输入一个日期(年 月 日,中间以空格分割) 【输出形式】程序在下一行输出一个整数【样例输入】2006 2 21【样例输出】52【样例说明】用户以年月日的格式输入,中间以空格分割,程序计算出该天是输入年份的第几天并输出该天数。另外还需要判断这一年是否为闰年。【评分标准】结果完全正确得20分,每个测试点4分。提交程序名为:datetoday
26、.c#includestruct tianint year;int month; int day;int days(int year,int month,int day)int s=0,i,a13=0,31,28,31,30,31,30,31,31,30,31,30,31;if(year%4=0&year%100!=0|year%400=0) a2=29;for(i=1;imonth;i+) s+=ai; s=s+day; return s;void main()int k=0;struct tian a; scanf(%d%d%d,&a.year,&a.month,&a.day);k=day
27、s(a.year,a.month,a.day); printf(%dn,k);第五次走也填空题 # 题目 1. 已知:int k= 4,a=3,b=2,c=1;则表达式“ka ? k : cx)&(b=yz);”后b 的值为6 选择题 # 题目 1. 执行以下程序段后,变量a,b,c的值分别是 B int x = 10, y = 9;int a, b, c;a = (-x = y+)? -x: +y;b = x+;c = y;(A) a = 9, b = 9, c = 9(B) a = 8, b= 8, c = 10(C) a = 9, b = 10, c = 9(D) a = 11, b =
28、 11, c = 10编程题 作业五-删数问题1. 【问题描述】输入一个高精度的大正整数S(S最长可达240位),去掉其中任意N位数字后剩下的数字按原次序组成一个新的正整数S。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数S最小。【输入形式】输入有两行:1.第一行是大整数S。其中S最长可达240位。 2.第二行是整数N。S、N均以非0数字开头。【输出形式】输出有一行,是在S中删除N位后所得的最小数字S。【样例输入1】1785434【样例输出1】13【样例输入2】10021【样例输出2】002【样例说明】样例1中输入整数S=178543,N=4,要求在178543中删除4位,使剩下的数
29、字最小。正确答案为S = 13。样例2中输入整数S1002,N1,删完一位后S = 002,而不是2,即2之前的0也必须输出。【运行时限】程序一次运行的最长时间限制在15秒内,超出则认为程序错误。【算法提示】将整数看作字符串形式读入;删数时,从前往后寻找第一个比后一个数字大的数字,然后删除之,按照这种方法删除N个数字即得最小数字。【评分标准】该题要求输出一个大整数的各位数字。结果完全正确得20分,每个测试点4分。上传C语言文件名为delete.c。 #include #include /* scan from 0 - 9, test the input, rescan if get the r
30、esult. */int main() char integer250, result250; int start = 0, strlength, n, i = 0, j, temp, k = 0; fgets(integer, 249, stdin); strlength = strlen(integer) - 1; integerstrlength = 0; scanf(%d, &n); for (i = 0; i = 9; i+) temp = i; for (j = start; j = n & n strlength; j+) if (integerj = temp + 0) res
31、ultk+ = temp + 0; n+; start = j + 1; i = -1; break; for (i = 0; i =1),用空格隔开。【输出形式】向控制台输出求得的ex 的近似值(小数点后保留6位有效数据)。【样例输入】7 27【样例输出】1096.633156【样例说明】输入的x为7,n的值为27,即:求e7的近似值,利用上述公式求得的近似值为:1096.633156。【评分标准】该题要求输出ex的近似值,共有5个测试点。上传C语言文件名为formula.c。#includeint main()double x,s,y;int n,i;double t;scanf(%lf%
32、d,&x,&n);t=1;s=1;y=1;for(i=1;i=n;i+)t*=i;y*=x;s+=y/t;printf(%lfn,s);return 0;作业六:选择题 # 题目 1. 若有变量定义int a; double b; 要输入数据存放在a和b中,则下面正确的输入数据的语句为:CA. scanf(%d%f,a,b);B. scanf(%d%f,&a,&b);C. scanf(%d%lf,&a,&b);D. scanf(%d%lf,a,b);2. 在C语言程序中,以下正确的描述是 (A) 函数的定义可以嵌套,但函数的调用不可以嵌套B(B) 函数的定义不可以嵌套,但函数的调用可以嵌套(C
33、) 函数的定义和函数的调用均不可以嵌套(D) 函数的定义和函数的调用均可以嵌套 3. 以下正确的函数声明形式是 A (A) double fun(int x, int y)(B) double fun(int x; int y)(C) double fun(int x, int y);(D) double fun(int x, y);实验六-字符串中字符排序1. 【问题描述】编写一个程序,从键盘接收一个字符串,然后按照字符顺序从小到大进行排序,并删除重复的字符。【输入形式】用户在第一行输入一个字符串。【输出形式】程序按照字符(ASCII)顺序从小到大排序字符串,并删除重复的字符进行输出。【样例
34、输入】badacgegfacb【样例输出】abcdefg【样例说明】用户输入字符串badacgegfacb,程序对其进行按从小到大(ASCII)顺序排序,并删除重复的字符,最后输出为abcdefg【评分标准】结果完全正确得20分,每个测试点4分。提交源程序名为stringsort.c #include int main()char str500=0,hash256=0;int i;scanf(%s,str);for(i=0;stri!=0;i+) hashstri=1;for(i=0;i!=256;i+) if(hashi=1) printf(%c,i);printf(n);scanf(%d)
35、;作业七:选择题 # 题目 1. 若有说明: char *language = FORTRAN, BASIC, PASCAL, JAVA, C;则以下不正确的叙述是 D (A) language+2 表示字符串PASCAL的首地址(B) *language2的值是字母P(C) language是一个字符型指针数组,它包含5个元素,每个元素都是一个指向字符串变量的指针(D) language包含5个相同长度的数组2. 设有说明 int (* ptr) M; 其中ptr是 C (A) M个指向整型变量的指针(B) 指向M个整型变量的函数指针(C) 一个指向具有M个整型元素的一维数组的指针(D) 具
36、有M个指针元素的一维指针数组,每个元素都只能指向整型量3. 下面能正确进行字符串赋值,并且能确保字符串以0结尾的操作是 C (A) char s5 = ABCDE;(B) char s5 = A, B, C, D, E;(C) char *s; s = ABCDE;(D) char *s; scanf(%s, s);4. 若有说明: char *language = FORTRAN, BASIC, PASCAL, JAVA, C;则表达式 *language1 *language3 比较的是 C (A) 字符F和字符P(B) 字符串BASIC和字符串JAVA(C) 字符B和字符J(D) 字符串
37、FORTRAN和字符串PASCAL5. 若有以下定义,则数值不为3的表达式是 int x10 = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, *p1;C(A) x3(B) p1 = x + 3, *p1+(C) p1 = x + 2, *(p1+)(D) p1 = x + 2, *+p16. 以下正确的说明语句是A (A) int *b = 1, 3, 5, 7, 9;(B) int a5, *num5 = &a0, &a1, &a2, &a3, &a4;(C) int a = 1, 3, 5, 7, 9; int *num5 = a0, a1, a2, a3, a4;(D)
38、int a34, (*num)4; num1 = &a13;当前编程题:实验七-整数的N进制字符串表示1. 【问题描述】编写函数itob(n,s,b),用于把整数n转换成以b为基的字符串并存储到s中. 编写程序,使用函数itob(n,s,b)将输入的整数n,转换成字符串s,将s输出.转换后的字符串从最高的非零位开始输出。如果n为负数,则输出的字符串的第一个字符为-。b为大于1小于37的任意自然数值。当b=2时,输出字符只可能是0和1;当b=16时,输出字符串中可能含有字符为0-9,a-f(字母以小写输出)。b还可以是其它数值。比如输入n=33,b=17,则输出33的17进制值为1g。【输入形式】控制台输入整数n和b,其中n可以为负数。n和b以空格分隔.【输出形式】控制台输出转化后的字符串s.【样例输入】5 2【样例输出】101【样例说明】5的二进制就是101【评分标准】结果完全正确得20分,每个测试点4分。提交程序名为:itob.c#include#include void itob(int n,char s,int b);void itob(int n,c