资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,课程内容,第一章 程序设计和,C,语言,第二章 数据对象与计算,第三章 变量、函数和控制结构,第四章 基本程序设计技术,第五章,C,程序结构(函数),第六章 数组,第七章 指针,第八章 文件和输入输出,第九章 结构和其它数据机制,第十章 程序开发技术,第十一章 标准库,重点,控制结构,顺序、选择、循环结构,函数,定义、声明及调用,从问题到程序的编程思想,程序的函数分解,模块化程序设计,难点,循环,递归,基本输入、输出语句,程序数据结构算法,程序,程序规定了计算机执行的动作和动作的顺序。,算法:,解决问题的方法和步骤,算法的几个特性,有穷性,确定性无二义,可执行性,有,0,个或多个输入,有,0,个或多个输出,从问题到程序的程序设计思想也体现了算法的重要性,要点,1,:运算符及表达式?,已经学习哪几种运算符及表达式?优先级关系?,自增、自减运算符,算术运算符,关系运算符,逻辑运算符,位运算符,条件运算符,赋值运算符,逗号运算符,要点,2,:,C,语言的基本数据类型,C,语言的基本数据类型有哪些?,什么是常量?如何定义?,什么是变量?如何定义?,变量的存贮类型有哪几种?,auto,register,static,extern,变量从作用域的角度分哪几种?,全局变量、局部变量,要点,3,:条件,if,语句,条件,if,语句有几种形式?,If else,和,switch,开关语句的差别?,要点,4,:循环语句,循环语句有几种形式?,循环结构的三要素是什么?,如何从循环中跳出?,要点,5,:函数,如何定义函数?,函数声明的意义及原则?,如何调用函数?,参数传递和函数返回值过程中类型不匹配时的转换原则?,如何理解值参数?,要点,6,:基本输入输出语句,getchar(),putchar(),scanf(),printf(),数的批量输入输出:基本输入输出循环结构,第二章习题讲解,1.,指出下面的字符序列不是合法的标识符:,_abc x+-3x1 Xf_1_4 Eoof_,A$*24 x_x_2 bg1_I am,2.,手工计算下列表达式的值,1)125+0125,2)0XAF 0XFA,3)24*3/5+6,4)36+-(5 23)/4,5)35*012+27/4/7*(12-4),210,-75,20,40,350,3.,在下列表达式的计算过程中,在哪些地方将发生类型转换,各是从什么类型转换到什么类型,表达式计算的结果是什么?,1)3*(2L+4.5f)012+44,2)3*(int)sqrt(34)sin(6)*5+0 x2AF,3)cos(2.5f+4)6*27L+1526 2.4L,第三章习题讲解,2.,设,a=1,b=2,c=3,,则,u,的值为:,u=a?b:c;,u=(a=2)?b+a:c+a;,3.,设,a=1,b=2,c=0,,则下列表达式的值为:,a&!(b|c)&!a),!(a&b)|c?a|b:a&b&c,!(a+bc)&b max)max=y;,if(z max)max=z;,return max;,10.,四边形的边长为,a,b,c,d,及一对对角之各,angel,,求四边形的面积。,double QuaArea(double a,double b,double c,double d,double e),double s=(a+b+c+d)/2.;,double area;,area=sqrt(s-a)*(s-b)*(s-c)*(s-d)-a*b*c*d*cos(e)*cos(e);,return area;,有问题吗?,补充题,1,:用,if,语句写程序判断是否为闰年,int RuiNian(int year),if(year%400=0,|year%4=0&year%100!=0),return 1;,else,return 0;,补充题,2.,求分段函数,y=x x1,2x-1 1=x=10,#include,int main(),double x,y;,printf(please input xn);,scanf(%lf,if(x1),y=x;,printf(%lf,y);,else if(1=x&x10),y=2*x-1;,printf(%lfn,y);,else,y=3*x-11;,printf(%lfn,y);,return 0;,有问题吗?,补充题,3,给一个不多于,3,位的正整数,要,求出它是几位数;,分别输出每一位数字,按新逆序输出各位数字,例如原数为,321,,应输出,123,算法思想:,设,a,是整数变量;,如果,a999,则输入错误,如果,a=0,并且,a=10,并且,a=100,并且,a=10|x 0),a=x/100;,b=x/10%10;,c=x-a*100-b*10;,d=c*100+b*10+a;,printf(three,%d,%d,%d,%dn,a,b,c,d);/*百位数,十位数,个位数,逆序*/,else if(x/10 0),a=x/10;,b=x%10;,d=b*10+a;,printf(two,%d,%d,%dn,a,b,d);/*十位数,个位数,逆序*/,else,a=x;,printf(one,%d,%dn,a,a);/*个位数,逆序*/,return 0;,#include,int GradeIf(int);,int GradeSwitch(int);,int main(),int n;,printf(Input the mark from 0 to 99 n);,while(scanf(%d,&n)=1),/GradeIf(n);,GradeSwitch(n);,return 0;,补充题,4.,从键盘输入学生的考试成绩,利用计算机将学生的成绩划分等级并输。,90,99,为,A,级,,80,89,为,B,级,,70,79,为,C,级,,60,69,为,D,级,,0,59,为,E,级。,int GradeIf(int n),if(n99|n=90),printf(The grade is A!n);,else if(n=80),printf(The grade is B!n);,else if(n=70),printf(The grade is C!n);,else if(n=60),printf(The grade is D!n);,else,printf(The grade is E!n);,return 0;,int GradeSwitch(int n),if(n99|n0),n=-1;,else,n=n/10;,switch(n),case-1:printf(Input error!n);break;,case 9:printf(The grade is A!n);break;,case 8:printf(The grade is B!n);break;,case 7:printf(The grade is C!n);break;,case 6:printf(The grade is D!n);break;,default:printf(The grade is E!n);,return,0;,14.,求,100,以内正整数的立方和,long CubeSum(int n),long sum=0;,int i=1;,while(i=n),sum=sum+i*i*i;,i+;,return sum;,15.,写一个函数,取,3,个参数,m,n,k,输出,m,m+k,m+2k,直至最后一个不大于,n,的数,void PrintNum(int m,int n,int k),while(m=1),exp*=x;,n-;,return exp;,22.,写一个程序打印,1,至,100,之间的被,6,或,7,整除的数;修改这个程序使得它之打出被,6,或,7,之一整除的数。,int main(),int i=0;,while(i=100),if(i%6=0&i%7!=0),|(i%6!=0&i%7=0),printf(%dn,i);,return 0;,第四章习题讲解,4.,写函数计算,1!+2!+,+k!,long SumFactor(int n),int i=1;,long f=1,sum=0;,while(i=1e-4),sum=sum+1.0/(n*n);,n+;,printf(The number of terms are%d.n,n);,return sqrt(6*sum);,12.,求利用公式反正弦函数的近似值,double asinh(double x),int i,n=10,sign=-1;,double term,sum;,term=x;,sum=x;,for(i=1;i=n;i+),term=term*x*x*(2*i-1)/(2*i);,sum+=sign*term/(2*i+1)*(2*i-1);,sign=-sign;,return sum;,14.,辗转相减求最大公约数,int gcd(int m,int n),if(mn),return gcd(n,m);,else if(m=n),return m;,else,return gcd(m-n,n);,int gcd1(int m,int n),int r,t;,if(m n)t=m;m=n;n=t;,if(n=0)return m;,for(r=m-n;r!=0;r=m-n),m=n;n=r;,if(m n)t=m;m=n;n=t;,return n;,16.,求水仙花数,void method1(void),int i,j,k;,for(i=1;i=9;i+),for(j=0;j=10;j+),for(k=0;k=10;k+),if(i*100+j*10+k=i*i*i+j*j*j+k*k*k),printf(%d,是水仙花数,n,i*100+j*10+k);,void method2(void),int i,m,n,l;,for(i=100;i n),max1=m;,max2=n;,else,max1=n;,max2=m;,while(scanf(%d,&n)=1),if(max1 n)max2=max1;max1=n;,else if(max2 n)max2=n;,printf(nmax1=%d,max2=%dn,max1,max2);,return 0;,21.,求折线段的面积,double FigureArea(void),double y1,y2,area=0.0;,printf(Please input a series positive float number.n);,if(scanf(%lf,while(scanf(,%lf,&y1)=1),area+=(y1+y2)/2.0;,y2=y1;,return area;,补充题,1,:打印如下图案,1,1 2 1,1 2 3 2 1,1 2 3 4 3 2 1,1 2 3 2 1,1 2 1,1,void Figure(int n),int i,j;,for(i=1;i=1;j-),printf();,for(j=1;j=1;j-),printf(%d,j);,printf(n);,for(i=1;i n;i+),for(j=1;j=i;j+),printf();,for(j=1;j=1;j-),printf(%d,j);,printf(n);,补充题,2,:,用递归的方法求,N,阶勒让德多项式的值,递归公式为,double pn(int n,double x),double value;,if(n=0),value=1;,else if(n=1),value=x;,else,value=(2*n-1)*x*pn(n-1,x)-(n-1)*pn(n-2,x)/n;,return value;,补充题,3,:学生成绩管理系统,菜单调用学生成绩管理系统,求计科,0905,班学生高级语言成绩设计课的最高分、最低分、平均分和不及格的人数,void ScoreInfSys(),double biggest,smallest,sum,score;,int count=1,fail=0;,scanf(“%lf”,biggest=smallest=sum;,if(sum biggest)biggest=score;,if(smallest score)smallest=score;,sum+=score;,count+;,if(score=65&ch=97&ch=48&ch=57),j+;,else if(ch=),k+;,else,m+;,printf(Charaters:%d,Numbers:%d,Spaces:%d,Others:%dn,i,j,k,m);,补充题,4.,输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。,第五章习题讲解,作业,1.,读程序写结果,#include,int f1(int),f2(int);,void main(),int i;,for(i=2;i 5;i+),printf(f1(%d)=%d t,i,f1(i);,printf(n);,for(i=2;i b?a:b;,return c;,void main(),int a=8;,printf(“%d”,max(a,b);,结果:,8,10.,用牛顿迭代法求方法,ax3+bx2+cx+d=0,在,1,附近的一个实根,系数,a,b,c,d,的值依次为,1,2,3,4,由主函数输入,求出根后由主函数输出。,牛顿迭代法:,设,r,是,f(x)=0,的根,选取,x0,作为,r,初始近似值,,过点(,x0,f(x0),)做曲线,y=f(x),的切线,L,,,L,的方程为,y=f(x0)+f(x0)(x-x0),求出,L,与,x,轴交点的横坐标,x1=x0-f(x0)/f(x0),称,x1,为,r,的一次近似值,,过点(,x1,f(x1),)做曲线,y=f(x),的切线,并求该切线与,x,轴的横坐标,x2=x1-f(x1)/f(x1),称,x2,为,r,的二次近似值,,重复以上过程,得,r,的近似值序列,Xn,其中,Xn+1=Xn-f(Xn)/f(Xn),称为,r,的,n+1,次近似值。,/,牛顿迭代法求方程的根,#include,double f(double a,double b,double c,double d,double x);,double fd(double a,double b,double c,double d,double x);,double root(double a,double b,double c,double d);,void main(),double a,b,c,d,x;,printf(,输入方和的系数,a,b,c,dn);,scanf(%lf,%lf,%lf,%lf,x=root(a,b,c,d);,printf(,方程的根为,:%lfn,x);,printf(,当,x,为,%lf,时,函数的值为,%lfn,x,f(a,b,c,d,x);,程序代码,double f(double a,double b,double c,double d,double x),return(a*x*x*x+b*x*x+c*x+d);,double fd(double a,double b,double c,double d,double x),return(3*a*x*x+2*b*x+3);,double root(double a,double b,double c,double d),double x1=1.2,x0;,int n=0;,do,n+;,x0=x1;,x1=x0-f(a,b,c,d,x0)/fd(a,b,c,d,x0);,while(n=1000|fabs(x1-x0)1e-6);,return x1;,16.,写函数,int setbits(int x,int p,int n,int y),求将,x,的从左数的第,p,位开始的,n,位用,y,的最右边的,n,位替换,其它位都不变。,p,位,p-n,位,0,位,x1 0 1 1 0 1,1 0 1 0 1 0,1,1 0,1,p,位,n-1,位,0,位,y1 0 1 1 0 1 1 0 1 0,1 0 1 1 0 1,0 0 0 0 0 0 0 0 0 0,1 1 1 1 1 1,(0n),0 0 0 0 0 0 0 0 0 0,1 0 1 1 0 1,y&(0n),0 0 0 0 0,0 1 0 1 1 0 1,0 0 0 0,(y&(0n)(p-n+1),0 0 0 0 0 0 0 0 0 0,1 1 1 1 1 1,(0n),1 1 1 1 1 1,0 0 0 0,0 0,1 1 1 1,(0n)(p-n+1),1 0 1 1 0 1,0 0 0 0,0 0,1 1 0 1,x&(0n)(p-n+1),x&(0n)(p-n+1)|(,(y&(0n)(p-n+1),),1 0 1 1 0 1,0 0 0 0,0 0,1 1 0 1,0 0 0 0 0 0,1 0 1 1 0 1,0 0 0 0,1 0 1 1 0,1,1 0 1 1 0 1,1 1 0 1,#include,Int setbits(int,int,int,int);,int main(),printf(%xn,42);,printf(%xn,56);,printf(%xn,setbits(42,5,3,56);,return 0;,int setbits(int x,int p,int n,int y),x=x,y=(y,return(x|y);,Q,A!,
展开阅读全文