C语言复习提纲答案.doc_第1页
C语言复习提纲答案.doc_第2页
C语言复习提纲答案.doc_第3页
C语言复习提纲答案.doc_第4页
C语言复习提纲答案.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

。作为复习的参考,打*不纳入本次期末考试范围。课程单元: 1、 运算符、表达式、输入输出语句能力要求: a) 能够正确定义、输入、输出并使用常用数据类型:整型、实型、字符型 b) 掌握五种基本算术运算符的使用:、,知道优先级与结合性 c) 掌握逻辑运算符和关系运算符、条件运算符的使用 d) 能够正确使用 printf() 和 scanf() 进行各种数据正确格式的输入输出 e) 编写简单顺序结构程序 基础能力落实: 1) 输入一个字母 , 输出其对应的 ASCII 码 . main()char c;scanf(%c,&c);printf(%dn,c);2) 输入一个小写字母 , 输出其对应的大写字母 . main()char c;scanf(%c,&c);c=c-32;printf(%cn,c);3 )从键盘输入一个四位数,编程计算该四位数的各位和并输出。 main()int i,a,b,c,d;scanf(%d,&i);a=i/1000;b=i%1000/100;c=i%100/10;d=i%10;printf(%dn,a+b+c+d);4 )教材 p.36 页习题,2(关于数据类型、运算符、表达式的练习题,其他类似题目均可) 进阶能力落实: 1 )输入一个十进制数,输出其对应的八进制数据。 main()int i;scanf(%d,&i);printf(%on,i);2 )输入一个圆的半径,分别求圆的周长,面积。 #define PI 3.14main()float r,s,c;scanf(%f,&r);c=2*PI*r;s=PI*r*r;printf(c=%.2f,s=%.2fn,c,s);课程单元: 2、选择结构程序设计能力要求: a) 能够使用 if 语句编写条件选择程序 b) 能够使用嵌套 if 语句和 switch 语句编写多分支选择结构程序 基础能力落实: 1 )判断一个数的正、负,输出相应信息 #include main()int n;printf(输入整数n,n不等于0:n);scanf(%d,&n);if (n0)printf(n为负数n);elseprintf(n为正数n);2 )判断一个数的奇偶,输出相应信息 #include main()int n;printf(输入整数n:n);scanf(%d,&n);if (n%2=0)printf(n为偶数n);elseprintf(n为奇数n);3 )在主函数中输入整型数据 n, 判断该数是否能被 3 整除,如果能被 3 整除,输出“ yes ” , 否则输出“ no ” #include main()int n;printf(输入整数n:n);scanf(%d,&n);if (n%3=0)printf(yesn);elseprintf(non);4 )写一程序,输入x,求y的值,y =x (x1)2x-1 (1x 10)3x 11 (x 10)main()int x,y;scanf(%d,&x);if(x=1&x10)y=2*x-1;elsey=3*x-11;printf(y=%dn,y);5 )从键盘输入三个数,按照从小到大(或从大到小)的顺序输出 从小到大输出#include main()int a,b,c,t;printf(请输入三个整数:n);scanf(%d,%d,%d,&a,&b,&c);if (ab)t=a;a=b;b=t;if (ac)t=a;a=c;c=t;if (bc)t=b;b=c;c=t;printf(从小到大排序n%d %d %dn,a,b,c);6 )判断一个年份是否闰年 #include main()int y,leap;printf(输入年份y:);scanf(%d,&y);if (y%4!=0)leap=0;else if(y%100!=0)leap=1;else if(y%400!=0)leap=0;elseleap=1;if(leap=1)printf(%d年是闰年n,y);elseprintf(%d年不是闰年n,y);或者#include main()int y,leap;printf(输入年份y:);scanf(%d,&y);if(year%4=0&year%100!=0)|(year%400=0)printf(%d年是闰年n,y);elseprintf(%d年不是闰年n,y);7 )对一个百分制的成绩给出相应的等级(如 90 分以上 A , 80 分以上 B 等) #include main()float grade;int i;printf(输入百分制成绩(0100):);scanf(%f,&grade);if (grade100)printf(errorn);elsei=grade/10;switch(i)case 10:case 9:printf(An);break;case 8:printf(Bn);break;case 7:printf(Cn);break;case 6:printf(Dn);break;case 5:case 4:case 3:case 2:case 1:case 0:printf(Fn);break;8 )从键盘输入两个整数,输出大数(用条件表达式求解) main()int x,y,max;printf(请输入2个整数,逗号隔开);scanf(%d,%d,&x,&y);max=xy?x:y;printf(max is %dn,max);9 )阅读程序的训练,类似题目均可,如:以下程序的运行结果是 。main() int m=5; if(m+5) printf(“%dn”,m); else; printf(“%dn”,m-);A) 4 B) 5 C) 6 D) 7进阶能力落实: 1 )从键盘上输入一个数,判断其是否为水仙花数。 #includemain()int a,b,c,d,e,n;scanf(%d,&n);a=n/100; b=n/10%10; c=n%10;if(n=a*a*a+b*b*b+c*c*c)printf(是水仙花n);elseprintf(不是水仙花n);2 ) 求一元二次方程的根 #include #include /包含math.h头文件,开根函数sqrt()main() int a,b,c; /定义一元二次方程的三个变量为整型 double d,x1,x2; /定义d=(b2-4ac)以及两个根,数据类型为双精度类型 printf(输入一元二次方程 a*x*x+b*x+c=0中a,b,c的值,逗号隔开:n); scanf(%d,%d,%d,&a,&b,&c); if(a=0) printf(不是一元二次方程n); else d=b*b-4*a*c; if(d0) printf(无实根n); else d=sqrt(b*b-4*a*c); x1=(-b+d)/(2*a); x2=(-b-d)/(2*a); printf(方程的两个根分别是:x1=%lf,x2=%lfn,x1,x2); 3 )编程实现以下功能,读入两个数( d1,d2 )和一个运算符 (o) ,计算 d1 o d2 的值。 #include main()char op;double result,n1,n2;printf(请输入表达式n);scanf(%lf%c%lf,&n1,&op,&n2);if(op=+|op=-|op=*|op=/)switch(op)case +:result=n1+n2;break;case -:result=n1-n2;break;case *:result=n1*n2;break;case /:result=n1/n2;break;printf(结果是%lf,result);elseprintf(输入错误n);4 )输入一个数,判断是否能被 3 , 5 , 7 整除,并输出同时被几个整除。 #include main() int n,counter=0; scanf(%d,&n); printf(能被以下数整除:); if(n%3=0) printf(3,); counter+; if(n%5=0) printf(5,); counter+; if(n%7=0) printf(7,); counter+; printf(同时被%d个整除.n,counter);课程单元: 3 、循环结构程序设计能力要求: a) 掌握 for 、 do-while 、 while 语句结构 b) 能够使用 for 、 do-while 、 while 编写循环结构程序 c) 使用 for 、 do-while 、 while 编写多重循环语句 基础能力落实 : 1 )求 1 2 3 +100 的和存入变量 sum 中,并将 sum 打印出来。 #include main()int i,sum=0;for(i=0;i=100;i+)sum+=i;printf(%dn,sum);2 )编程计算 200 300 的偶数和并将和打印输出 main()int n,sum;n=200,sum=0;for(;n=300;n+=2)sum+=n;printf(%d,sum);3 )计算正整数 1 n 中的奇数之和及偶数之和 #include main()int i,sum1=0,sum2=0,n;scanf(%d,&n);for(i=1;i=n;i+=2)sum1+=i;for(i=2;i=n;i+=2)sum2+=i;printf(%d,%dn,sum1,sum2);4 )从 5 100 之间找出能被 5 或 7 整除的数(或类似求 1 100 之间不能被 8 整除的数)main()int n;for(n=5;n101;n+)if(n%5=0|n%7=0)printf(%dn,n); 5 )阅读程序的训练,类似题目均可,如:下面程序段的运行结果是_. int n=0; while(n+=2);printf(%d,n); a)2 b)3 c)4 d)有语法错6 )打印 99 乘法表(二重循环) #include main()int i,j;for(j=1;j10;j+)for(i=1;i=3), 即从第 3 个数开始每个数等于前 2 个数之和。(每行输出 4 个数) main() long f1,f2; int i; f1=f2=1; for(i=1;i=10;i+) printf(%12ld %12ld,f1,f2); if(i%2=0) printf(n); f1=f1+f2; f2=f1+f2; 8 )编程输出所有“水仙花数”:所谓水仙花数是指一个三位十进制数,该数的各位数字立方之和,等于该数本身。(例如, 153 是一个水仙花数,因为 1*1*1 5*5*5 3*3*3 153 ) #includemain()int a,b,c,n=100;for(n=100;n=100;n+)a=n/100;b=n%100/10;c=n%10;if(n=a*a*a+b*b*b+c*c*c)printf(%4d,n);9 )求出 3 100 之间的所有素数,并按每行 5 个数打印输出 #includemain()int n,i,k,counter=0,leap=1;for(n=3;n=100;n+)k=sqrt(n);for(i=2;i=k;i+)if(n%i=0)leap=0;break;if(leap)printf(%-4d,n);counter+;if(counter%5=0)printf(n);leap=1;10) 求满足条件 1+2+3+.n1000 的 n 的最大值 . main()int n,sum;n=sum=0;for(;sum1000;sum+=n)n+;printf(%dn,n-1);11 )编写一个具有加、减、乘、除四则运算功能的程序,要求能反复多次操作,当输入“”运算符时退出( switchcase 语句应用)。 #include main()float n1,n2,result;char op;char c=0;while(c!=#)printf(如要计算请输入x,退出请输入#。n);c=getch();if(c=x|c=X)printf(请输入表达式:n);scanf(%f%c%f,&n1,&op,&n2);if(op=+|op=-|op=*|op=/)switch(op)case +:result=n1+n2;break;case -:result=n1-n2;break;case *:result=n1*n2;break;case /:result=n1/n2;break;printf(%f%c%f=%fn,n1,op,n2,result);elseprintf(输入错误n);else if(c=#)exit(0);elseprintf(输入错误请重新输入n);进阶能力落实: 1 ) 编写一个只要输入 4 位数的年份和该年的元旦是星期几,就可打印全年日历的程序(可作思路开发练习时讲解)。 #include void main() int i,j,k,year,week; int day=31,28,31,30,31,30,31,31,30,31,30,31; char month1210=January,February,March,April,May,June,July,August,September,October,November,December; printf(Input year you want to print:); scanf(%d,&year); if(year%4=0&year%100!=0)|(year%400=0) /判断是否闰年day1+; week=(35+year+year/4-year/100+year/400)%7; /计算当年的1月1日是周几的公式,也可以改成从键盘输入。for(i=0;i12;i+) printf(n%sn,monthi); /输出月份的英文printf(%6s%6s%6s%6s%6s%6s%6sn,Sun,Mon,Tue,Wed,Thu,Fri,Sat); /输出表头for(k=0;kweek;k+) /每月一号对齐它的星期数printf(%6s, ); for(j=1;j=7) printf(n); week=week%7; printf(n); 2 )试编写程序,求一个数任意次方的最后三位数,要求 x,y 从键盘上输入。 main()int i,x,y,a,b,c;long n=1;/存放X的Y次方的结果scanf(%d%d,&x,&y);for(i=1;i=y;i+)n*=x;a=n%1000/100;b=n%100/10;c=n%10;printf(%dn,a);printf(%dn,b);printf(%dn,c);3 ) 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。#include main() int prev; /* 前一天 */ int next=1 ; /* 后一天, 初值为第10天 */ int i; for (i=9; i=1; i-) prev=(next+1)*2 ; /* next=prev-(prev/2+1) */ next=prev; printf(total=%dn, prev); 4) 编写程序,从键盘上输入 6 名学生 4 门课的成绩,分别统计出每个学生的平均成绩。main()int i;float avg;int a,b,c,d;for(i=1;i=6;i+)scanf(%d%d%d%d,&a,&b,&c,&d);avg=(float)(a+b+c+d)/4;printf(%.2fn,avg); 5) 用牛顿迭代法计算从键盘上输入的自变量 x 的平方根。/*求n的平方根,先假设一猜测值X0 = 1,然后根据公式:X(k+1)=(x(k)+n/x(k)/2, 求出X1,再将X1代入公式右边,继续求出X2通过有效次迭代后即可求出n的平方根*/#include #define MAX 32767 /设置迭代次数main() int x,i;float y=1; /假设一猜测值y=1scanf(%d,&x);for (i=1;i=MAX;i+) y= (y+x/y)/2; /公式printf(%d的平方根是%fn,x,y); 6 )用穷举法解百马百担问题(有100匹马,驮100担货,大马驮3担,中马驮2担,两个小马驮1担.问有大、中、小各有多多少匹?)。#include main()int i,j,k;printf(大中小马的数量分别有以下几种情况:n);for(i=0;i=100/3;i+)/大马的数量最多不超过100/3for(j=0;j=100/2;j+)/中马的数量最多不超过100/2for(k=0;k=100;k+=2)/小马的数量最多不超过100if(i+j+k)=100)&(3*i+2*j+k/2)=100)printf(%3d,%3d,%3dn,i,j,k); 课程单元: 4、 数组能力要求: a) 掌握一维数组的使用 b) 能够进行二维数组的定义、初始化、输入、输出、引用等操作 c) 进行字符串、字符数组操作,熟悉常用字符串处理函数 基础能力落实: 1 )有一 12 个元素的整型数组 b ,从键盘输入数据 , 请以每行 4 个数据各个数据之间空两格的形式输出 b 数组的 12 个元素 #define N 12main()int bN,i;for(i=0;i12;i+)scanf(%d,&bi);for(i=0;i12;i+)printf(%d ,bi);if(i+1)%4=0)printf(n);2 )由键盘输入一个字符串,如果字符串中的字符是英文字母,则进行大小写转换,其它字符不变。输出转换后的字符串。 #include main()char a81;int i;printf(请输入一串字符:n);gets(a);for(i=0;i=A&ai=a&ai=z)ai=ai-32;printf(转换后的字符串为:%sn,a);3 )定义一个整型数组 a10 ,将数组 a10 中的 10 个元素按逆序重新存放。 #include time.hmain()int a10;int i,n;srand(unsigned)time(NULL);for(i=0;i10;i+)ai=rand()%50;for(i=0;i=0;i-)printf(%3d,ai);4 )用数组方法求 Fibonacci 数列的前 20 个数。该数列的生成方法为: F1 = 1 , F2 = 1 , Fn=Fn-1+Fn-2 (n=3), 即从第 3 个数开始每个数等于前 2 个数之和。(每行输出 4 个数) main() int i; int f20=1,1; for(i=2;i20;i+) fi=fi-2+fi-1; for(i=0;i20;i+) if(i%4=0)printf(n); printf(%12d,fi); 5 )对从键盘输入的一个字符串中的大英字母及数字进行计数。 #includemain()char string81;int i,w=0,n=0;char c;gets(string);for(i=0;(c=stringi)!=0;i+)if(49=c&c=57)n=n+1;if(65=c&c=90)w=w+1;printf(大写字母%d个n数字%d个n,w,n);6) 有一个 3 行 3 列的矩阵,请将其在屏幕上输出。#include#includemain()int a33;int i,j;srand(unsigned)time(NULL);for(i=0;i3;i+)for(j=0;j3;j+)aij=rand()%50;for(i=0;i3;i+)for(j=0;j3;j+)printf(%5d,aij);printf(n); 7 )将一个 2*3 的矩阵转置为 3*2 的矩阵 main() int a23=1,2,3,4,5,6; int b32,i,j; printf(array a:n); for(i=0;i2;i+) for(j=0;j3;j+) printf(%5d,aij); bji=aij; printf(n); printf(array b:n); for(i=0;i3;i+) for(j=0;j2;j+) printf(%5d,bij); printf(n); 8 )在一个三行三列的矩阵中求出数值最大的元素及其行列下标并打印输出。 #include #include #include main()int a34;int i,j,min,row,colum;srand(unsigned)time(NULL);printf(随机生成的二维数组如下:n);for(i=0;i3;i+)for(j=0;j4;j+)aij=rand()%100;printf(%5d,aij);printf(n);min=a00;/先取第一个元素为最小值,行号列号为下标+1row=1;colum=1;for(i=0;i3;i+)/遍历数组for(j=0;j4;j+)if(aijmin)min=aij;row=i+1;colum=j+1; printf(该数组最小数为%d ,在数组的第%d行第%d列n,min,row,colum);9) 不使用库函数实现两个字符串的复制和连接 10 ) 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。#include stdio.hmain() char string81; int i,num=0,word=0; char c; gets(string); for(i=0;(c=stringi)!=0;i+) if(c= )word=0; else if(word=0) word=1; num+; printf(There are %d words in the line.n,num); 进阶能力落实 1) 从键盘输入 10 个字符串,按照字典顺序将其排序输出 ( 二维字符数组 ) #define N 10#include string.hmain() char nameN81;char temp81;int i,j,k;for(i=0;iN;i+)gets(namei);for(i=0;iN-1;i+)for(j=i+1;j0)for(k=0;k81;k+)tempk=nameik;nameik=namejk;namejk=tempk;for(i=0;iN;i+)printf(%sn,namei);2)* 打印杨辉三角形(要求打印出10行) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 。 。 main()int i,j;int a1010;for(i=0;i10;i+)/先对每一行的第一个和最后一个元素赋值为1ai0=1;aii=1;for(i=2;i10;i+)/第i行第j列的元素为上一行的第j-1列和第j列的和for(j=1;ji;j+)aij=ai-1j-1+ai-1j;for(i=0;i10;i+)for(j=0;j=i;j+)/第i行只需输出i列即可printf(%5d,aij);printf(n);3) 从键盘上输入 100 个字符,统计其中字母、数字和其它字符的个数及其百分比。 #include #include main() int letter,number,other,total;int i;char s100;letter=number=other=total=0;gets(s);for(i=0;si!=0;i+) total+;if(si=a&si=A&si=0&si=9) number+;else other+; printf(字母%d个,占%.2lf%n,letter,(double)letter/total*100); printf(数字%d个,占%.2lf%n,number,(double)number/total*100); printf(其他字符%d个,占%.2lf%n,other,(double)other/total*100); 4 )找出一个二维数据中的鞍点。(鞍点是指位置上的元素在该行上最大,在该列上最小),如果没有鞍点,请输出提示信息。 #include #define N 3 #define M 4 main() int i,j,k,aNM; int max,col,flag; /max存放该行最大值,col存放最大值的列下标,flag标记是否有鞍点;printf(请输入一个二维数组:n); for(i=0;iN;i+)/输入二维数组for(j=0;jM;j+) scanf(%d,&aij);for(i=0;iN;i+) /对每一行做如下操作:先找出该行的最大值以及最大值的列下标,然后利用循环对该列上的数逐一比较。 max=ai0; col=0; for(j=0;jmax) max=aij; col=j; flag=1; /假设存在鞍点for(k=0;kakcol) /出现比max小的数,表示没有鞍点,flag置零,直接退出当前的循环体。flag=0; break; if(flag)printf(鞍点是a%d%d=%dn,i,col,max); break; if(!flag) printf(没有鞍点!n); 5 )编程将两个矩阵 a34 和 b45 相乘所得到新矩阵 c35, 并将结果显示出来。 #includemain()int i,j,k,temp;int a34,b45,c35=0;printf(请输入a34:n); /输入a34for(i=0;i3;i+)for(j=0;j4;j+)scanf(%d,&aij);printf(请输入b45:n); /输入b45for(i=0;i4;i+)for(j=0;j5;j+)scanf(%d,&bij);for(i=0;i3;i+) /计算c35for(j=0;j5;j+)for(k=0;k4;k+)cij+=aik*bkj;printf(a34 和 b45 相乘所得到新矩阵 c35:n); /输出c35for(i=0;i3;i+)for(j=0;j5;j+)printf(%-5d,cij);printf(n);课程单元: 5、函数 能力要求: a) 能够通过定义、调用函数处理指定问题:如数组排序,数据交换,字符串大、小写转换等 b) 能够嵌套调用函数 c) 编制递归函数进行求阶乘的运算 d) 了解变量的作用域及生存期在程序中的影响 基础能力落实: 1 ) 在主函数中,输入整数 x 的值,调用求绝对值函数,在屏幕上输出绝对值y 的值。 #includemain()int x;scanf(%d,&x);printf(%d,Jue(x);int Jue(a)if(a=0)return a;if(a0)a=-a;return a;2) 编写函数求两个数中的最大数 #includeint max(int a,int b);int main(void)int a,b,m;printf(请输入两个数:n);scanf(%d %d,&a,&b);m=max(a,b);printf(最大数为:%dn,m);int max(int a,int b)if(ab)return a;elsereturn b;3) 编写函数求三个数中的最大数 #include stdio.hint maxnum(int,int,int);main() int a,b,c; printf(请输入三个数有逗号格开:n); scanf(%d,%d,%d,&a,&b,&c); printf(Maxnum is %d,maxnum(a,b,c);int maxnum(int x,int y,int z) int max=x; if(ymax) max = y; if(zmax) max = z; return max;4 )编写一个函数 jc 用于计算 n!, 将计算结果返回。在主函数中输入 n 的值,调用函数 jc, 在主函数中打印输出结果 int jc(int x)/求阶乘int i,m=1;for(i=1;i=x;i+)m=m*i;return m;main()int n,s;printf(请输入n的值:n);scanf(%d,&n);s=jc(n);printf(%dn,s);5 )编写函数求组合数 C= n! / (k! *( n-k)!) #includes(int n) int i,m=1; for(i=1;i=n;i+) m*=i; return m;main() int n,k; float c; printf(请输入n、k的值n); scanf(%d%d,&n,&k); if(n!=k) c=(s(n)/(s(k)*s(n-k); printf(%fn,c); else printf(无法计算n);6 ) 编写递归函数用于计算 n! #includelong power(int n)long s;if(n1)s=power(n-1)*n;elses=1;return s;main()int n;long x;scanf(%d,&n);x=power(n);printf(%d!=%ldn,n,x);7 )编写函数求 x 的 n 次方的值 #includemain()int x,n,i,s;scanf(%d,%d,&x,&n);if(n=0)s=1;elsefor(s=1,i=1;i=n;i+)s=s*x;printf(%d,s);8 )用函数求两个整数的绝

温馨提示

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

评论

0/150

提交评论