C语言程序设计基础教程_第1页
C语言程序设计基础教程_第2页
C语言程序设计基础教程_第3页
C语言程序设计基础教程_第4页
C语言程序设计基础教程_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

实用文案语言程序设计谢利东目录绪论 2第01讲 C语言概述 2第02讲基本数据类型 4第03讲 运算符 10第04讲 流程控制 19第05讲 数组 33第06讲函数 41第07讲算法设计范例 46第08讲自我检测(含答案) 54标准文档实用文案绪论一、 课程简介课程内容:C语言程序设计基础知识适用对象:程序设计初学者二、课程目标1、了解程序设计的相关知识2、掌握C编程3、理解程序设计语言的基本构成要素4、掌握算法设计第01讲 C语言概述一、程序设计语言的发展1、机器语言:是唯一能被计算机直接解释和执行的语言2、汇编语言:与机器语言相似,但加入了助记符Adda,ba+b3、面向过程的语言:自助游,需理解细节;Basic、C4、面向对象的语言:找旅行社,无需理解细节;C++、Java、C#二、C语言简介三、编写实例:Hellomain(){标准文档实用文案printf( “Hello,C! ”);}四、 在Turboc 中编写运行 C程序的步骤1、 启动TC2、 执行Alt+F,进入File菜单,执行 New,新建源文件3、 输入代码并保存 ——编辑执行Alt+F,进入File菜单,执行Save,保存源文件4、执行Alt+C,进入Compile菜单,执行“CompiletoOBJ”若代码有错,需纠错——编译5、执行Alt+C,进入Compile菜单,执行“MakeEXEFile”Ctrl+F9若代码有错,需纠错——连接6、执行Alt+R,进入Run菜单,执行“Run”——执行7、执行Alt+F5,查看运行结果,查看完后按下Enter,返回编辑环境说明:编写C程序的步骤:P4实际运行中,可通过快捷键简化一些操作五、 C程序的基本构成#include“*.h”main(){⋯⋯ /*注释*/代码

包含头文件,即函数库Main函数,所有C程序必须有且只能有一个 main函数⋯⋯}标准文档实用文案第02讲基本数据类型一、 数据类型简介1、 什么是数据类型?对数据的“抽象” 12、13、45、1.2、1.56、0.4e6、RuiLi、DaLi2、 为什么要有数据类型20040102 可以代表学号,属于字符可以代表整数,属于数值可以代表日期,属于日期时间3、 C语言中有哪些数据类型?P164、 基本数据类型数值型、字符型、枚举型二、 变量和常量1、 变量:程序运行期间,值可能改变的量( Variation )标准文档实用文案2、 常量:程序运行期间,值不会改变的量( Const)例如:计算机出 10道加法练习题形式:7+5=? 、8+9=?第1个加数 加号 第2个加数 等号op1 + op2 = result第1次:op1=6,op2=7:6+7第2次:op1=5,op2=8:5+8⋯⋯控制题目数量: OPNUM=103、 常量类型符号常量:通过 #define 定义的常量字面常量(直接常量):与变量相似,字面常理有整型、实型、字符型3.14、3、RuiLi三、 整型类型1、 整型常量形如3、4、67、890、5632的数据,可以赋给整型变量2、 整型变量1)短整型(short)声明: shorta;声明一个变量的格式:“数据类型 变量名 ;”范围:占16位,范围为-32768—32767(2) 整型(int)标准文档实用文案声明:inta;范围:占16位,范围为-32768—32767(3) 长整型(long)声明:longa;范围:占32位,范围为-2147483648——21474836473、实例练习1Main函数main(){声明3个整型变量,a、b、suminta,b,sum;

让a的值等于 312a=312;让b的值等于789b=789;计算a加b的结果sum=a+b;printf(“Thesumofaaddbis:%d\n”,sum);将结果显示到屏幕上}4、 实例练习2——对上例的改进main(){inta,b,sum; ----------------- 声明整型变量 a,b,sumprintf(“Pleaseinputtwointegers(aandb):\n ”); ---------------- 提示输入两个整数scanf(“%d,%d”,&a,&b);--------- 要求输入两个整数,分别给 a、b,两数间用逗号隔开,例如 3,5标准文档实用文案sum=a+b; ------------- 计算a、b之和printf( “Sum=%d\n ”,sum);----------- 将结果输出到屏幕上}四、 实型类型1、实型常量形如1.2、0.5、0.0023、1.0、2.0的数据,可以赋给实型变量2、实型变量(1) 单精度(float)声明:floata;范围:占32位, -3.4*10-38—3.4*1038,6位精度双精度(double)声明:doublea;范围:占64位,-1.7*10-308—1.7*10308,16位精度3、实型常量的表示十进制小数:如.123、123.、0.123、123.0、0.0指数形式(规范化):1.23e6或1.23E6——1.23*1060.123e7或0.123E7非规范化12.3e5或12.3E5非规范化4、 实例练习——输入 3个数(整数或小数均可 ),求平均分析:输入的 3个数可以是整数,也可是小数,故只能声明为实型整数:1.0代码:标准文档实用文案main(){floatx1,x2,x3,average; ------------------- 声明4个实型变量,分别输入的 3个数和平均值printf(“Pleaseinputthreefloatdata:\n ”); ----------- 提示输入3个实型数据scanf(“%f,%f,%f ”,&x1,&x2,&x3); ------ 输入3个实型数据,分别给 x1、x2、x3,逗号隔开average=(x1+x2+x3)/3; ------- 求平均值printf(“Average=%f\n ”,average); -------- 输出结果}五、 字符型1、字符常量表示:’x’ (用单引号,不能是双引号;只能有一个字符 )例如:’a’、’b’表示字符常量 a和b转义字符:系统定义,有特殊含义的字符\n——换行; \b——退格,前移一列\t——下跳一制表位,后移 8列2、字符串常量表示:”adog”(用双引号,不能用单引号;可以放多个字符)例如:”adog”表示字符串 adog,由5个字符组成3、字符变量声明:charc;注意:一个字符变量只能存放一个字符常量,即标准文档实用文案c=’a’,正确;c=”adog”,错误4、实例1——字符常量及转义字符的使用main(){printf(“\n\n”);--------------将当前屏幕换行2次,以方便查看结果printf(“nobreak:adog”);------------不加\n的效果printf(“\n”);------------换行,以便比较结果printf(“abreak:a\ndog”);------加\n的效果printf(“\n”);------------换行,以便比较结果printf(“noreback:adog”);-------不加\b的效果printf(“\n”);------------换行,以便比较结果printf(“areback:a\bdog”);-------加\b的效果printf(“\n”);------------换行,以便比较结果printf(“atab:a\tdog”)-----------------加\t的效果}5、 实例2——字符变量的使用main(){charc;--------------声明字符变量cc=’a’;--------------c赋值为’a’printf(“\ncharc=%c”,c);----------将变量c以字符变量的形式输出,结果应为a标准文档实用文案printf(“\ncharc=%d”,c)-----------将变量c以整型变量的形式输出,结果为97c=c+1;printf(“\nchar(c+1)=%c”,c);----将变量c以字符变量的形式输出,结果应为bprintf(“\nchar(c+1)=%d”,c);-----------将变量c以整型变量的形式输出,结果为98}第03讲 运算符一、 运算符简介1、 什么是运算符表示运算形式的符号称为运算符如:1+2、2*3、6/8、7%2对数据的加工称为运算2、 C语言中有哪些运算符?P29在C语言中共有 13类运算符,约有 45个二、 算术运算符1、 算术运算符有:、-、*(shift+8)、/(除)、%(求余数)2、运算规则1)优先级:*、/、%优先级为3、、-、优先级为4标准文档实用文案(2) 结合性:自左至右2+6*7-8/2+9%53、 实例练习1main(){inta,b,m,f,n;------------------a、b为输入的整数m=a*b、f=a/b、n=a%bprintf(“Pleaseinputtwointegers(aandb):\n”);--------提示输入整数scanf(”%d,%d”,&a,&b);-----------输入,形式为5,3m=a*b;------------*运算结果为15f=a/b;-----------/运算结果为1n=a%b;-----------%运算结果为2printf(“m=a*b=%d\n”,m);-----------输出mprintf(“f=a/b=%d\n”,f);-----------输出fprintf(“n=amodb=%d\n”,n);-----------输出ngetch();---------Win-TC额外要求,查看结果}对/和%的理解::结果与承载变量的类型相关inta,b,f;f=a/b ;因为承载结果的变量 f是整型,故结果都是整数,不带有小数如a=3、b=5,则f=3/5=0,结果为0,不是0.6如果想让除的结果为小数,则需要把 f声明为float 型标准文档实用文案floata,b,f;f=a/b ;如a=3.0,b=5.0,则f=3.0/5.0 ,结果为 0.6%:求余,求余运算要求两侧的数据类型必须是整型( int)inta,b,f;f=a%b;如a=5,b=3 ,则f=5%3=2 商1余2如a=3,b=5 ,则f=3%5=3 商0余3floata,b,f ;f=a%b ;编译出错4、 实例2——除运算练习main(){inta,b;intf1;floatf2;printf("Pleaseinputtwointegers:(aandb):\n");scanf("%d,%d",&a,&b);f1=a/b;floatc,d;c=(float)a;d=(float)b;f2=c/d;标准文档实用文案printf("intf1=a/b=%d\n",f1);printf("intf2=a/b=%f\n",f2);getch();}5、 实例3——求余运算练习main(){inta,b,f;printf("Pleaseinputtwointegers(aandb):\n");scanf("%d,%d",&a,&b);f=a%b;printf("f=%d",f);getch();}三、 关系运算符1、 关系运算符:(大于)、<(小于)、>=(大于或等于)、<=(小于或等于)、==(等于)、!=(不等于)2、 运算规则:优先级:均为 6,比算术运算符低结合性:自左至右3、 关系运算的结果:标准文档实用文案关系运算只会有两种结果:真(成立) 、假(不成立),编程时可用 1代表真,0代表假例如:a>=b,若a=4,b=3则表达式结果为真,即值为1若a=3,b=4则表达式结果为假,即值为04、 对关系运算的几点理解(1) a≤x≤b:不能表达为:a<=x<=b ,只能表达为:a<=x&&x<=b(2) 9>1>=6>8>4 :数学中是错误的,而 C程序设计中是对的9>1 结果为 1,表达式变为: 1>=6>8>41>=6 结果为0,表达式变为: 0>8>40> 8结果为0,表达式变为: 0>40>4 结果为05、 实例1main(){inta,b,result; ---------------- 声明整型变量, result 用来承接 a、b运算的结果printf( “Pleaseinputtwointegers(aandb):\n ”); --------------- 提示输入两整数scanf(“%d,%d”,&a,&b);---------接受输入分别给变量a、b,输入形式为3,4result=(a>b);--------a>b运算printf(“result=(a>b)=%d\n”,result);-------------输出结果result=(a<b);a<b运算printf(“result=(a<b)=%d\n”,result);-------------输出结果标准文档实用文案result=(a==b); ------------a==b 运算printf( “result=(a==b)=%d\n ”,result);------------- 输出结果result=(a!=b) -----------a!=b 运算printf( “result=(a!=b)=%d\n ”,result);------------- 输出结果}四、 逻辑运算符1、 逻辑运算符:&&(与运算):a&&b——a=1、b=1,表达式为真,结果为1并且a=1、b=0,表达式为假,结果为0a=0、b=1,表达式为假,结果为0a=0、b=0,表达式为假,结果为0||(或运算):a||b——a=1、b=1,表达式为真,结果为1或a=1、b=0,表达式为真,结果为1a=0、b=1,表达式为真,结果为1a=0、b=0,表达式为假,结果为0!(非运算):!a—— a=1,表达为假,结果为 0 否a=0,表达式为真,结果为 1例:(4>6)&&(7>3) :0&&1 ,表达式结果为 0(4>6)||(7>3) :0||1,表达式结果为 1!(4>6):!0,表式结果为 12、 运算规则标准文档实用文案优先级:!优先级为 2(高于算术运算、关系运算 )、||优先级为8(低于算术运算、关系运算)结合性:自左至右3、 实例main(){intresult ;result=!(1<3)||(2<5);printf( “result=!(1<3)||(2<5)=%d\n ”,result);result=!(4<=6)&&(3<=7) ;printf( “result=!(4<=6)&&(3<=7)=%d\n ”,result);}理解:result=!(1<3)||(2<5); result=!0||0 ;result=1||0 ;result=1 ;result=!(4<=6)&&(3<=7) ;result=!1&&1 ;result=0&&1;result=0 ;五、 自加、自减运算符1、 自加、自减运算符++、--前缀:++i、--i:先增减后引用后缀:i++、i--:先引用后增减2、 运算规则:优先级:均为 2标准文档实用文案结合性:自右至左3、 实例main(){inta,b,x1,y1,x2,y2;a=3;b=3;x1=a++;y1=a;x2=++b;y2=b;printf(“a=%d\nx1=%d\ny1=%d\n ”,a,x1,y1);printf(“b=%d\nx2=%d\ny2=%d\n ”,b,x2,y2);}理解:a=3;x1=a++; 相当于x1=a;a=a+1; 则x1=3,a=4y1=a; y1=4;b=3;x2=++b; 相当于b=b+1;x2=b ;则b=4,x2=4;y2=b; y2=4;标准文档实用文案六、 赋值运算符1、 赋值运算符=组合赋值运算符:+=:a+=1 相当于a=a+1 ;-=:a-=1 相当于a=a-1;*=:a*=2 相当于a=a*2;/=:a/=2 相当于a=a/2%=:a%=2相当于a=a%22、 运算规则优先级:均为 10,除逗号运算符外,优先级是最低的结合性:自右至左3、 实例main(){inta=4,b=4,c=4,d=4,e=4;printf( “a=%d\tb=%d\tc=%d\td=%d\te=%d\t\n ”,a,b,c,d,e);a+=2;b-=2;c*=2;d/=2;e%=3;标准文档实用文案printf( “a=%d\tb=%d\tc=%d\td=%d\te=%d\t\n ”,a,b,c,d,e);getch();}第04讲 流程控制一、流程控制简介1、 什么是流程控制?流程控制是指按一定的顺序执行语句2、 C中有哪些流程?根据结构化程序设计原理,任何一个程序都可以由三种控制结构组装而成,这三种控制结构是:顺序结构、选择(分支)结构、循环结构二、顺序结构自然结构(以前所写实例均为顺序结构) ,就是按语句顺序一条一条地执行三、选择结构1、 简介:所解决的是判断问题, 根据判断结果执行相应的操作, 相当于汉语中的“如果⋯⋯,就⋯⋯,否则⋯⋯”在C语言中,选择结构主要有两种:if⋯⋯else⋯⋯Switch2、 if⋯⋯else⋯⋯结构基本形式:if(exp1){⋯⋯op1⋯⋯}标准文档实用文案else{⋯⋯op2⋯⋯}执行逻辑:如果 exp1 为真,则执行 op1,否则执行 op2exp1:可以是算术、关系、逻辑运算表达式;op1、op2:可以是多条语句,放在 {}里扩展形式:if(⋯⋯){⋯⋯}if(⋯⋯){⋯⋯}elseif(⋯⋯){⋯⋯}elseif(⋯⋯){⋯⋯}else{⋯⋯}if(⋯⋯){if(⋯⋯){⋯⋯}else{⋯⋯}}标准文档实用文案else{if(⋯⋯){⋯⋯}else{⋯⋯}}3、 Switch结构4、 实例1——if⋯⋯else结构练习main(){charsex; ---------------------------------- 声明字符型变量, 用来接受输入的性别printf( “Pleaseinputyoursex (MorF):\n”);------------------- 输入提示scanf(“%c”,&sex); --------------------- 输入语句,将输入的字母赋给 sexif(sex== ’M’||sex== ”m”) ----------------- 判定sex是否等于 M或m{printf(“Aboy!\n ”); --------------- 如果sex等于M或m,就执行}else{标准文档实用文案printf(“Agirl!\n ”); ---------------- 如果sex不等于M或m,则执行本条}}5、 实例2——if⋯⋯else 扩展形式练习要求:输入分数,输出等级90-100A ;80-89B;70-79C ;60-69D ;60以下 Emain(){intscore;chargrade;printf( “Inputscore :\n”);scanf(“%d”,&score);if(score>=90){grade= ’A’;}elseif(score<=89&&score>=80){grade= ’B’;}elseif(score<=79&&score>=70){grade= ’C’;}elseif(score<=69&&score>=60){grade= ’D’;}else{grade= ’E’;}标准文档实用文案printf( “score=%d,grade=%c ”,score,grade);}6、 实例练习3——if⋯⋯else 输入5个数字,找出最大值和最小值并输出算法设计:从以下5个数12,3,9,21,4 中找出最大值 max和最小值 min第一步:max=12min=12第二步:max、min和第二个数 3作比较如果第二个数大于 max,说明max应为第二个数,否则不变如果第二个数小于 min,说明min应为第二个数,否则不变3和max、min(12,12)比较:max=12min=3第三步:max、min和第三个数 9作比较如果第三个数大于 max,说明max应为第三个数,否则不变如果第三个数小于 min,说明min应为第三个数,否则不变9和max、min(12,3)比较:max=12min=3第四步:max、min和第四个数 21作比较如果第四个数大于 max,说明max应为第四个数,否则不变如果第四个数小于 min,说明min应为第四个数,否则不变21和max、min(21,3)比较:max=21min=3标准文档实用文案第五步:max、min和第五个数 4作比较如果第五个数大于 max,说明max应为第五个数,否则不变如果第五个数小于 min,说明min应为第五个数,否则不变4和max、min(21,3)比较:max=21min=3第六步:输出结果max=21min=3源代码:main(){intx1,x2,x3,x4,x5,min,max;printf("Number1:\n"); /* 第一步 */scanf("%d",&x1);max=min=x1;printf("Number2:\n"); /*第二步*/scanf("%d",&x2);if(x2>max){max=x2;}if(x2<min){min=x2;}printf("Number3:\n");/* 第三步*/标准文档实用文案scanf("%d",&x3);if(x3>max){max=x3;}if(x3<min){min=x3;}printf("Number4:\n");/* 第四步*/scanf("%d",&x4);if(x4>max){max=x4;}if(x4<min){min=x4;}printf("Number5:\n");/* 第五步*/scanf("%d",&x5);if(x5>max){max=x5;}if(x5<min){min=x5;}printf("Max=%d\tMin=%d",max,min);/* 第六步*/getch();}标准文档实用文案四、循环结构1、循环结构简介循环即重复,循环结构就是让计算机重复执行一段代码在C语言中,循环结构主要有三种:while、do-while 、for2、while 循环基本形式:while(exp){⋯⋯op⋯⋯}执行逻辑:运算exp,若值为真则执行 op,否则退出循环应用方法:需要设置一个计数器,控制循环结束实例理解:i=0; --------------- 计数器初始化while(i<10) ----------- 循环条件 i<10{标准文档实用文案printf(“i=%d\n”,i);---------循环代码体,输出i的值i++;------------计数器自加,相当于i=i+1}执行过程:i=0—判定条件i<10为真—执行循环代码:输出i,i自加变为1i=1—判定条件i<10为真—执行循环代码:输出i,i自加变为2i=2—判定条件i<10为真—执行循环代码:输出i,i自加变为3⋯⋯i=9—判定条件i<10为真—执行循环代码:输出i,i自加变为10i=10—判定条件i<10为假—退出循环3、do-while 循环基本形式:do{⋯⋯op⋯⋯}while(exp) ;执行逻辑:执行一次循环代码 op,判定exp,若为值则接着循环,否则退出循环应用方法:需要设置一个计数器,控制循环结束与while 循环的区别:x=1; x=1;标准文档实用文案while(x<1) do{ {printf( “x=%d”,x); printf( “x=%d”,x);} }while(x<1);不会输出x=1 会输出x=1先判定后执行 先执行后判定4、for循环基本形式:for(exp1;exp2;exp3){⋯⋯op⋯⋯}执行逻辑:exp1:计数器初始化; exp2:循环判定条件; exp3:计数器自加先执行exp1,接着判定 exp2,若为真则执行循环体,并执行 exp3使计数器加,否则退出循环应用方法:需要设置一个计数器,控制循环结束实例理解:inti; inti;简i=0;for(i=0;i<5;i++) while(i<5){ {printf(“i=%d”,i) printf( “i=%d”,i)标准文档实用文案} i++;}5、实例—— while 循环理解main(){inti;i=0;while(i<10){printf( “i=%d\n ”,i);i++;}}6、实例——用 while 循环改写 5数中找最大值和最小值main(){intx,min,max,i;printf("Number1:\n"); /* 第一步 */scanf("%d",&x);标准文档实用文案max=min=x;i=2;while(i<=5){printf("Number%d:\n",i); /*第二步 第三步 第四步 第五步*/scanf("%d",&x);if(x>max){max=x;}if(x<min){min=x;}i++;}printf("Max=%d\tMin=%d",max,min);/* 第六步*/getch();}7、实例—— do-while 与while 的区别main(){intx;x=1;printf("Theresultofwhile:\n");while(x<1)标准文档实用文案{printf("x=%d",x);}printf("Theresultofdo-while:\n");do{printf("x=%d",x);}while(x<1);getch();}8、实例——用 do-while 循环改写 5数中找最大值和最小值main(){intx,min,max,i;printf("Number1:\n"); /* 第一步 */scanf("%d",&x);max=min=x;i=2;do{printf("Number%d:\n",i); /*第二步 第三步 第四步 第五步*/scanf("%d",&x);标准文档实用文案if(x>max){max=x;}if(x<min){min=x;}i++;}while(i<=5);printf("Max=%d\tMin=%d",max,min);/* 第六步*/getch();}9、实例—— for循环理解main(){inti;for(i=0;i<10;i++){printf("i=%d\n",i);}getch();}10、实例——用 for循环改写 5数中找最大值和最小值main(){标准文档实用文案intx,min,max,i;printf("Number1:\n"); /* 第一步 */scanf("%d",&x);max=min=x;for(i=2;i<=5;i++){printf("Number%d:\n",i); /*第二步 第三步 第四步 第五步*/scanf("%d",&x);if(x>max){max=x;}if(x<min){min=x;}}printf("Max=%d\tMin=%d",max,min);/* 第六步*/getch();}第05讲 数组一、数组1、什么是数组?数组是一种组合的数据类型,是一组同类型数据组成的序列例如:1,2,9,,8,7 这5个数构成一个整型数组标准文档实用文案3.4,7.0,8.2,9.1 这4个数构成一个实型数组‘a’,’’,’d’,’o’,’g’这5个字符构成一个字符数组1,3.4,’a’ 因为元素类型不同,不能构成数组同一数组中的所有元素必须属于同一种数据类型2、为什么要用数组?把具有同一性质或同一用途的数据组合在一起,以便引用例如,要求输入 10名学生的学号,如果不使用数组,只能定义个变量:x1、x2、⋯⋯x10来承接;如果使用数组,则只需定义一个字符数组stuNo[9],stuNo[0]=stu_1,stuNo[1]=stu_2stuNo[i]二、一维数组的定义及引用1、声明:inta[9]; ------- 定义int型数组,可有元素 10个floata[9]; ------ 定义float 型数组,可有元素 10个chara[9]; ------ 定义字符数组,可有元素 10个2、相关术语数组类型:和元素的数据类型是一致的长度:指元素总数下标:放在[]里的整数,表示第几个元素维度:数组的维数3、数组元素的引用格式:x=a[i]规则:下标 i的值是从 0开始的,即 a[0]、a[1]、a[2]、⋯⋯a[8]标准文档实用文案4、数组元素的赋值格式:a[i]=x;规则:应确保 x的类型和数组 a的类型一致5、数组元素的初始化格式:在声明时同时进行 inta[4]={9,98,7,6}在声明后分别赋值: inta[4];a[0]=9;a[1]=98;a[2]=7;a[3]=6;6、实例5-1——数组的简单使用main(){inta[5]={1,2,3,4,5};intb[3];b[0]=9;b[1]=8;b[2]=7;printf("a[0]=%d\t",a[0]);printf("a[1]=%d\t",a[1]);printf("a[2]=%d\t",a[2]);printf("a[3]=%d\t",a[3]);printf("a[4]=%d\n",a[4]);printf("b[0]=%d\t",b[0]);printf("b[1]=%d\t",b[1]);标准文档实用文案printf("b[2]=%d\n",b[2]);getch();}7、实例5-2——对 5-1的改进main(){inta[5]={1,2,3,4,5};intb[3];intcount;b[0]=9;b[1]=8;b[2]=7;for(count=0;count<5;count++){printf("a[%d]=%d\n",count,a[count]);}for(count=0;count<3;count++){printf("b[%d]=%d\t",count,b[count]);}标准文档实用文案getch();}8、实例5-3Fibonaci 数列,见算法设计三、字符数组的使用1、C语言中对字符串的处理:在C语言中只有字符型变量( Char),一个字符变量只能存一个字符,不能存字符串;但C语言中没有设专门的字符串型变量( String),故处理字符串只能使用字符数组。理解:字符变量:charch; ch=’a’;(正确,只能存单个字符)ch=”adog”;(错误,不能存字符串)那如何把“adog”赋给一个变量,进行运算?其他语言的处理: stringch;ch= ”adog”C语言的处理:charch[5]; ch[0]=’a’;ch[1]=’’;ch[2]=’d’;ch[3]= ’o’;ch[4]= ’’;2、字符数组的使用1)声明:charch[10];2)初始化:在声明时同时进行初始化charch[10]={ ‘a’,’’,’d’,’o’,’g’};charch[]={ “adog”}(3)输入:接收键盘输入的字符串,方法有二方法1: charch[10];标准文档实用文案scanf(“%s”,ch); 以空格作为终结符,故输入的字串不能含空格方法2: charch[10];gets(ch); 输入的字串可以含有空格输入时常用 gets(),不用scanf()4)输出:将字符串输出到屏幕上,方法有二方法1:printf(“%s”,ch);方法2: puts(ch);3、实例5-4——字符数组的使用main(){charch1[10]={"adog!"};charch2[10];ch2[0]='a';ch2[1]='';ch2[2]='d';ch2[3]='o';ch2[4]='g';ch2[5]='!';printf("%s\n",ch1);printf("%c",ch2[0]);printf("%c",ch2[1]);printf("%c",ch2[2]);标准文档实用文案printf("%c",ch2[3]);printf("%c",ch2[4]);printf("%c",ch2[5]);getch();}4、实例5-5——字符串的输入与输出main(){charch1[10]; /*定义数组 ch1*/charch2[10]; /*定义数组 ch2*/printf("Pleaseinputastring:\n"); /*输入提示*/gets(ch1); /*方法一输入*/printf("Pleaseinputanotherstring:\n"); /*输入提示*/scanf("%s",ch2);/* 方法二输入*/printf("Firststring:\t"); /*输出提示*/puts(ch1); /*方法一输出*/printf("Secondstring:\t"); /*输出提示*/printf("%s",ch2); /*方法二输出*/getch();标准文档实用文案}四、二维数组的使用1、二维数组简介arr01230A1rr[0]2A二维数组可以看作是一维数组的嵌套例如 ,arr[0]、arr[1]、arr[2]是一个一维数组,如果每个元素存储的不是一个数值或字符,而是另一个数组,则就构成二维数组arr[0]=20,2、二维数组的使用1)声明:intarr[3][4];floatarr[3][4];chararr[3][4];标准文档实用文案(2)初始化:声明的同时进行初始化intarr[3][4]={{0,1,2,3},{0,1,2,3},{0,1,2,3}};intarr[3][4]={0,1,2,3,0,1,2,3,0,1,2,3};3)赋值:arr[i][j]=x;(4)引用:x=arr[i][ j];3、实例5-6——二维数组的简单使用4、实例5-7——综合应用第06讲函数一、函数简介1、什么是函数?与数学中的函数不同, C语言中的函数是“功能”的意思, function ,就是一段具有某种功能的程序代码。2、为什么要使用函数?结构化程序设计的要求提高代码重用性3、C语言中有哪些函数语言中的函数分为两大类:系统函数:系统定义,程序设计中直接调用即可,如 printf() 、scanf()就是两个重要的系统输入、输出函数; P352用户自定义函数:需要自行书写函数执行代码,然后再调用用户自定义函数使用时有两种形式:无参函数、有参函数标准文档实用文案二、无参函数的使用1、简介:无参函数是指运行时不需要给函数传递参数,这类函数主要是用来完成某项操作的2、声明:intfun1() 返回值类型 函数名(){ {⋯⋯op⋯⋯ ⋯⋯op⋯⋯} }规则:(1) 函数体代码 op可以包含多条语句,与普通语句无差别2)函数声明不能放在main()函数中,只能放在main()前或后3)返回值类型是指函数返回的执行结果的数据类型,如果函数没有返回值,声明时可省略返回值类型,或声明为void3、调用:main()函数中任意位置处执行:fun1();4、实例6-1——无参函数的使用main(){标准文档实用文案PrintPoint();PrintPoint();printf("CPrograming!\n");PrintPoint();getch();}PrintPoint(){printf("...........................\n");printf("...........................\n");}三、有参函数的使用1、简介:有参函数是指运行时需要传递参数的函数,传递给函数的参数称为输入,函数执行后,结果的输出称为函数输出;2、声明:intfun1(inta,intb ⋯⋯) 返回值类型 函数名(数据类型 变量,⋯⋯){ {⋯⋯op⋯⋯ ⋯⋯op⋯⋯} }3、函数的参数 inta,intb ⋯⋯声明时,应指明函数参数的数据类型,以供调用;参数个数可以有多个,多种数据类型,也可以只有 1个,1种数据类型标准文档实用文案函数代码体中应对参数进行处理4、函数的返回值函数执行后,如果需要返回结果,则声明时需指明返回值类型如果不需要返回值,可以省略或声明为 void5、函数的调用位置:main()中任意位置调用格式:fun1(x,y⋯⋯)规则:(1)调用时传给函数的参数可以是变量、也可以是常量2)传递的参数的数据类型、参数的位置、参数的个数必须与函数声明时的格式一一对应6、实例6-2——有参函数的简单使用7、实例6-3——对上例的改进8、实例6-4——利用 6-3求一组数的最大值问题描述:输入一组数字(整数) ,找出最大值并输出算法设计:如何接受输入的数字?方法一:定义若干个变量,分别来承接输入的数方法二:定义一个变量,循环接收输入的数,见4-3方法三:利用数组来接收输入的数标准文档实用文案data[5], 将输入的数分别存入数组 data[0]、data[1]-----如何比较最大值和最小值方法一:定义max、min,max、min初始化为第一个数,然后用 max/min 与第二个数比较:如果第二个数大于 max,则更新max为第二个数,否则不更新;如果第二个数小于 min,则更新 min为第二个数,否则不更新重复执行以上过程就能找出最大值和最小值 见4-3方法二:定义数组,用数组 x存放数据,定义 maxFlag、minFlag,把maxFlag、minFlag 初始化为数组的第一个下标值,然后用 x[maxFlag] 、x[minFlag]与x[第二个下标]比较:如果 x[第二个下标]大于x[maxFlag] ,则更新maxFlag 为第二个下标,否则不更新;如果 x[第二个下标]小于x[minFlag] ,则更新 minFlag 为第二个下标,否则不更新;重复执行以上过程就可找出最大值和最小值见5-方法三:数据已存入数组 data[5]中temp=data[0]45 53 24 67 52data[0] data[1] data[2] data[3] data[4]Max()Temp 53Max()Temp 53Max()标准文档实用文案Temp 67Max()Temp 67第07讲算法设计范例一、百马百担问题1、问题描述:100匹马驮100担货,大马驮 3担,中马驮 2担,2匹小马驮1担,问需要多少匹马?2、算法设计 1:设大马数量为 big,中马数量为 middle ,小马数量为 small,则由题意可知:马的总数:big+middle+small=100货的总数:3big+2middle+small/2=100可用穷举法筛选出可能的值:big=1 middle=1small=?middle=2small=?⋯⋯big=2 middle=1small=?middle=2small=?标准文档实用文案⋯⋯x=1003、程序设计 Horse_1:main(){intbig,middle,small,HorseNum,ComNum;for(big=0;big<=100;big++){for(middle=0;middle<=100;middle++){for(small=0;small<=100;small++){HorseNum=big+middle+small;ComNum=3*big+2*middle+small/2;if(HorseNum==100&&ComNum==100){printf("big=%d,middle=%d,small=%d\n",big,middle,small);}}}}标准文档实用文案getch();}4、算法设计 2(改进1):设大马数量为 big,中马数量为 middle,小马数量为 small,则由题意可知:马的总数:big+middle+small=100货的总数:3big+2middle+small/2=100对变量的约束:0<=big<=33 、0<=middle<=50 、0<=small<=100small%2==05、程序设计 Horse_2:main(){intbig,middle,small,HorseNum,ComNum;for(big=0;big<=33;big++){for(middle=0;middle<=50;middle++){for(small=0;small<=100;small++,small++){HorseNum=big+middle+small;ComNum=3*big+2*middle+small/2;if(HorseNum==100&&ComNum==100)标准文档实用文案{printf("big=%d,middle=%d,small=%d\n",big,middle,small);}}}}getch();}6、算法设计 Horse_3(改进算法 2)设大马数量为 big,中马数量为 middle,小马数量为 small,则由题意可知:马的总数:big+middle+small=100货的总数:3big+2middle+small/2=100对变量的约束:0<=big<=33 、0<=middle<=50 、0<=small<=100small%2==0对small的再约束:0<=small<=100-big-middle7、程序设计 Horse_3main(){intbig,middle,small,HorseNum,ComNum;for(big=0;big<=33;big++){标准文档实用文案for(middle=0;middle<=50;middle++){for(small=0;small<=100-big-middle;small++,small++){HorseNum=big+middle+small;ComNum=3*big+2*middle+small/2;if(HorseNum==100&&ComNum==100){printf("big=%d,middle=%d,small=%d\n",big,middle,small);}}}}getch();}二、猴子吃桃问题、问题描述:一小猴摘桃若干,第一天吃一半,不过瘾,再吃一个,第二天吃剩下的一半,又多吃一个,以后每天都吃前天剩下的一半,再多吃一个,到第 10天发现还有桃 1个,问小猴摘桃多少个?、算法设计:设小猴摘桃 x个,则有:标准文档实用文案总数吃剩下第一天x个0.5*x+1x-(0.5*x+1)第二天x-(0.5*x+1)0.5*(x-(0.5*x+1))+1x-(0.5*(x-(0.5*x+1))+1)第三天x-(0.5*(x-(0.5*x+1))+1)⋯⋯⋯⋯第十天1个-----------------------------------------------------------------------------------------------------第十天1第九天42+1=31第八天105+1=64⋯⋯第i-1天x今天第i天 2*(x+1) 昨天⋯⋯y=x-(0.5*x+1)=0.5x-1x=2*(y+1)3、程序设计 p_1main(){intday; /*天数*/intyesterdayNum,todayNum;标准文档实用文案todayNum=1; /*第10天有桃1个*/for(day=9;day>=1;day--){yesterdayNum=2*(todayNum+1);/* 求上一天的桃子数 */todayNum=yesterdayNum; /*上推一天,第九天*/}printf("todayNum=%d\n",todayNum);getch();}4、程序设计 p_2三、Fibonaci 数列的求解1、问题描述:有数列 1,1,2,3,5,8,13⋯⋯求第100个数的值、算法设计:数列的规律:i:1234567⋯⋯ai11235813⋯⋯ai=ai-1+ai-2i>=3a3=a2+a1=1+1=2a4=a3+a2=2+1=3\⋯⋯标准文档实用文案3、程序设计 fabinocimain(){doublefabi[100];inti;fabi[0]=1;fabi[1]=1;for(i=2;i<100;i++){fabi[i]=fabi[i-1]+fabi[i-2];}for(i=0;i<100;i++){printf("%f.0\t",fabi[i]);if(i%5==0){pr

温馨提示

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

评论

0/150

提交评论