




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言程序设计语言程序设计小结小结内容内容 C语言程序设计基础 数据类型、常用库函数 运算符、表达式、位运算控制结构与语句 数组 函数及其应用 编译预处理 指针结构体、共用体 、枚举文 件 C语言程序结构源程序文件1C程序源程序文件m源程序文件j内部数据定义语句序列函数n函数1函数i预编译命令外部数据说明函数是C语言程序的基本模块 【例】输入两个整数,判断大小,并输出大数。 #include /编译预处理命令void main() /主函数main() int a,b; int max (int, int); scanf(%d,%d, &a, &b); /输入数据 printf
2、(max=%dn, max(a, b) ); /调用函数max() /输出结果 int max (int x,int y) /函数max if ( x 目标程序 .obj 可执行文件 .exe 结果整型实型(浮点型)字符型 char枚举类型数组类型 结构体类型 struct共用体类型单精度型 float双精度型 double基本类型构造类型指针类型 *空类型 NULL自动类型 auto静态类型 static寄存器类型 register外部类型 extern数据类型存储类型数据类型的分类 各种数据类型所表示的数据有一定范围,若将超出其范围的数据放入其中,会产生数据的“溢出”。 Wirth 程序数
3、据结构算法基本整型 int短整型 short长整型 long 基本型无符号型 unsigned短整型 长整型变量类型第2章 基本数据类型与常用库函数n字符集与标识符n基本数据类型n常量、变量 n输入输出函数用法 n常用函数 n字符集基本符号是ASCII字符集n标识符程序设计过程中用到的各种元素的名字u组成:英文字母、数字和下划线“_” ,首字符为字母或下划线。建议字符数不超过8个。u定义:见名知义、区分大小写字母、禁用保留字YearYear,dayday,a_1a_1,A_1A_1,_Time_Time %A%A,356B ,abc$356B ,abc$n基本数据类型 :u整型数据 类型标识符
4、:unsigned short、int、long sizeof(int) 计算所占字节数u实型数据float、doubleu字符型数据 char以其ASCII码存放在内存 C语言保留字 语句保留字数据类型保留字存储类别保留字其他保留字break forcontinue gotodefault ifdo returncase switchelse whilechar shortdouble signedenum structfloat unionint unsignedlong voidautoexternstaticregister consttypedefsizeofvolatile除上述3
5、2个保留字(用小写字母表示)不能另作他用外,象main、printf等库函数名,include、define、undef、indef、infdef、endif等在C语言中具有特定的意义,也不要另作他用。n常量用来表示固定的数值和字符值的量u整型常量:十进制、八进制(0)、十六进制(0 x),L|l、U|u 0578、234u实型常量(浮点数): 十进制小数形式(.) 、指数形式E|e ,F|fu字符常量:A ,可以其ASCII码值参加运算, %c、%d 转义字符 :n、ddd、xhh 、 、 u符号常量代表常量的标识符 #define 符号常量 常量 #define PI 3.1415926n
6、变量程序执行过程中,其值可以改变的量。u变量定义:类型标识符变量名列表; double x, y =3.1; /使用前需定义、赋初值常量、变量表2.3常用转义字符及其含义 字符形式转义字符的意义b退格,将当前位置移到前一列n回车换行r回车,将当前位置移到本行开头t水平制表(跳到下个tab位置)反斜杠字符“”单引号字符”双引号字符ddd 13位8进制数所代表的字符xhh 12位16进制数所代表的字符输入输出函数n#include 从键盘读入一个字符: c = getchar();输出一个字符: putchar(c); putchar(65); putchar(x41); puts() 输出字符串
7、并换行puts(s1); gets() 读取字符串直到回车结束 gets(s1);n格式输出函数 printf(”格式控制字符串”, 表达式列表); n格式输入函数 scanf(“格式控制字符串”, 地址列表); scanf(“i=%d, j=%f”, &i, &j); i=12,j=34 scanf(“%c%c%c”, &c1, &c2, &c3); A B C int *p; scanf(%d,p);int x; double y;float z;long m; char c1;scanf(“%d%lf%f%ld%c”, &x, &y
8、, &z, &m, &c1); /对非字符型数据输入,可用空格,Tab,回车键作分隔符printf(“%d, %6.3f, %c, %d n”, x, y, c1, c1); 程序执行:2 3.1415 1.2 a2 3.142 a 97常用函数常用函数n#include /数学函数 函数原型:double sqrt(double x) sin cos tan exp pow log log10.n#include /字符函数 tolower(A) isalpha isupper isdigit isalnumn#include /其它常用函数 exit(0);/正常终
9、止程序,值传给调用过程;为1则异常终止程序表. 常用的数学函数(math.h) 类 别函数名作 用函 数 原 型三角函数sin正弦函数double sin(double x)cos余弦函数double cos(double x)tan正切函数double tan(double x)asin反正弦函数double asin(double x)acos反余弦函数double acos(double x)atan反正切函数double atan(double x)指数函数exp指数函数(e的x次方)double exp(double x)pow指数函数(x的y次方)double pow(double
10、 x,double y)pow10指数函数(10的p次方)double pow10(int p)对数函数log对数函数ln(x)double log(double x)log10对数函数log10 x double log10(double x)求绝对值fabs求绝对值double fabs(double x) sqrt计算平方根double sqrt(double x)第第3章章 运算符和表达式运算符和表达式 运算符优先级、结合性、运算对象表达式形式、求解过程类型转换 C语言的表达式语言的表达式 n书写规则:写在同一行,只能使用圆括号且匹配 1 a+b1.0/2 * ( (a+b) / (3
11、*c) ) 2 3c (x+r)*8-a+b)7、b*b-4ac -b /(2*a) 不能写成不能写成 -b/2*a = n算术运算符: +、-、*、/、 %、+ +、- - (整型变量)n关系运算符: 、=、=、= =、!= n逻辑运算符: ! 、&、|n赋值运算符: .简单赋值运算符: = .复合算术赋值运算符: +=、-=、*=、/=、%=具右结合性(自右至左)的运算符: 赋值、条件、单目运算符运算符优先级n条件运算符(三目运算符) ? :n逗号运算符: ,n求字节数运算符: sizeofn强制类型转换 (类型)n括号运算符: () n指针运算符: *、&n成员运算符:
12、、.n下标运算符: n位操作运算符: &、|、 .复合位运算赋值运算符: &=、|=、=、=、,=,c2; / bc; a=0; 0y=0&yb)?a:b; /*if (ab) max=a; else max=b; */fabs(x-y) 1e-5 / x = = y 判断实型数据相等否x=y=z=0; m = +x & +y | +z; /* z=0 &、|组成的逻辑表达式, 只对能确定整个表达式值的最少数目的子表达式进行计算 */sizeof(char) / 1 sizeof (类型标识符| 常量 |变量) , 返回字节长度。 算术运算中的类型转换方
13、向n强制类型转换:(类型标识符)表达式 i=5; j=2; (double)i/j (double)(i/j) double(i/j) / 2.5, 2.0, (int)(d*1000)/1000.0 / 将实数d保留3位小数 ,不四舍五入 k / (int)pow(10,n-1) % 10 / 求整数的右边第n位上的数字 / pow返回值为double型,k/10n-1%10char 、shortintunsignedlongdoublefloat内容内容 c1/c1.ppt语言程序设计基础 数据类型、常用库函数 运算符、表达式 分支、循环结构程序设计 *数组 函数及其应用 编译预处理指针结
14、构体、共用体 、枚举位运算文 件 结构化程序设计n顺序结构按语句的先后次序依次执行程序n选择结构根据给定条件,从两条或多条路径选择要执行的操作路径u双分支(单分支,if嵌套) if (表达式) 语句1 else 语句2u多分支 switch (表达式) case 常量表达式1: 语句序列1 default:语句序列n+1 n循环结构在满足给定的条件下,反复执行某一组操作 while (表达式) do for (表达式1; 表达式2; 表达式3) 语句 语句 语句 while (表达式); 先判断,后执行 先执行,后判断 循环次数确定,先判断,后执行n循环的嵌套 1!2! 10!、矩阵运算n转向
15、语句break立即结束循环,执行循环语句的后续语句。continue跳过循环体尚未执行的语句,结束本次循环。 goto if语句的双分支形式流程图语句1语句2表达式 真(非0) 假(0)if语句的单分支形式流程图语句表达式假(0)真(非0) if语句的单分支形式: if (表达式) 语句; if语句的双分支形式:if (表达式) 语句1; else 语句2; if语句嵌套 注意:注意:= = 、=n else-if嵌套的一般形式:if (表达式1) 语句1else if (表达式2) 语句2 else if (表达式3) 语句3 else if (表达式n-1) 语句n-1 else 语句n
16、/*用于处理“非上述情况”、前面各个if都不满足的缺 省情况(若无时,可省略)、出错检查 */图4.5 else-if嵌套执行流程图语句1语句2 语句3语句n-1语句n真假真真真假假假假表达式1表达式3表达式n-1表达式2【例】已知一分段函数 x+lnx 当1x2 y = x2+ex 当2x3 log10 x 当3x4 1+x+x2 当x为其他值当输入x的值时,编程计算出相应的函数值y。#include ? void main() 变量类型定义 输入? if 、while、for 结构 ? 输出?#include #include void main() double x,y; printf(
17、“Enter x=”); scanf(“%lf”,&x); if (x=1&x=2 & x=3 & x4) y=log10(x); else y=1+x+x*x ; printf(“x=%f ,y=%fn”,x,y);当当1x2当当2x3当当3x=1&x=1&x=1&x2) y= sqrt(x) +log(x); printf(“y =%fn”);else printf(“y =%fn”, sqrt(x) +log(x)”);y=sqrt(x)+double log(double x)#include #include void main
18、() double x,y; printf(“Enter x=”); scanf(“%lf”,&x); if (x=4) y=1+x+x*x ; else if(x=3) y=log10(x); else if(x=2) y =x*x+exp(x); else if(x=1) y =sqrt(x) +log(x); else y=1+x+x*x ; printf(“x=%f ,y=%fn”,x,y);当当1x2当当2x3当当3x=1&x=2 & x=3 & x=1 & x=2 & x=3 & x=4 | x=1 & x=2 &am
19、p; x=3 & x4) y=log10(x); else y=1+x+x*x ; C语言规定:else总是与前面最接近的、不带else的if配对。if (a=b) if (b=c) printf(“a=b=c”);else /else与第2个if配对 printf (“a!=c”); if (a=b) if (b=c) printf(“a=b=c”); /加上 “”else /else与第1个if配对 printf (“a!=c”); #include void main() int i, j, k; scanf(“%d”, &i); j=k=0; if ( (i/10) 0
20、 ) /* 第7行 */ j=i ; if ( (i!=0) & (j=0) ) k=i; else k=-1 ; /* 第12行 */ printf(“j=%d , k=%dn”, j, k);j=0, k=5 j=99, k=-1 j=9, k=-1 j=0, k=0二级题,程序运行:5?99?12行改为:k=-1; j=i/10;99?7行改为:if( (i/10)0) 12行改为:k=-1;5?switch语句多路分支嵌套的if语句,程序的可读性较低。switch的一般形式: switch (表达式) /表达式值为整型或字符型 case 常量1:语句组1 /语句组可为空或多条语
21、句 case 常量2:语句组2 case 常量n:语句组n default:语句组n+1 /可省略 功能:表达式值为常量i 从语句组i执行至break语句 均不等 default:执行语句n+1例】设考试成绩采用A(90-100分)、B(80-89分)、C(70-79分)、D(60-69分)、E(60分) 5级等级计分,编程判别某考试成绩等级是否满60分。 #include void main() char grade; printf(”Please input the grade:”); scanf(”%c”,&grade); switch(grade) case A: /case的
22、语句组为空时将顺序下延至遇到语句再执行的语句组为空时将顺序下延至遇到语句再执行 case B: case C: case D: printf(“= 60”); break; case E: printf(“ 60”); break; default: printf(“input error!”); 真假表达式语句while 语句流程图while() 语句假真表达式do-while 语句流程图do while();语语 句句假假真真表达式表达式2表达式表达式3表达式表达式1forfor语句之下一语句语句之下一语句 for语句流程图for(表达式1; 表达式2; 表达式3) while 语句 一般
23、形式:while(表达式) 语句 1; 语句 2; 表达式循环条件,语句循环体。while(表达式) 语句s;真假表达式语句1;图4.8 while 语句流程图【例】统计输入字符的个数,并统计其中有多少个字符a,用【Enter】结束字符输入。 #include void main() int n=0, i=0; char c; while ( (c =getchar() != n) i+; if (c = = a) n+; printf(“输入字符总数i=%d,字符a数n=%dn,i,n);【例4.13】 输入一个整数,统计它有几位数。#include void main()int m, n=
24、0; / n存放位数printf(“Input m: n); scanf(“%d”,&m); do / while? n+; / 位数加1 m/=10; / m的位数减少1位 while (m!=0) ; printf(”n=%d n”, n); 【例】求sum=ai,其中,ai为从键盘输入的整数。 100i=1#include void main() int i, sum=0, a; for (i=1; i=100; i+) printf(Enter a%d= ,n); scanf(%d,&a); sum=sum+a; printf(”sum=%dn”,sum); int i
25、=1, sum=0, a; while (i=100) printf(Enter a%d= ,n); scanf(%d,&a); sum=sum+a; i+; 【例】用for 语句求sum=n。 100n=1#include void main() int n, sum=0; for (n=1; n=100; n+) sum=sum+n; printf(sum=%dn, sum); 阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。*【程序说明】求 1 + 2/3 + 3/5 + 4/7 + 5/9 + 的前20项之和。 运行示例:sum = 11.239837【
26、程序】#include void main( ) int i, b = 1; double s; (1) ; for (i = 1; i = 20; i+) s = s + (2) ; (3) printf( (4) , s);【供选择的答案】(1) A、s = 0B、s = 1 C、s = -1D、s = 2(2) A、i/b B、double(i)/double(b) C、i/2*i-1 D、(double)i/(double)b(3) A、; B、b = 2 * i 1; C、b = 1.0 * b; D、b = b + 2; (4) A、sum = %dn B、s = %cn C、su
27、m = %fn D、s = %sn“ADDC #include void main() int i, m; printf(input m:); scanf(%d, &m); for (i=2; im/2) printf( %d is a prime numbern,m); else printf(%d is not a prime numbern,m);【例】判断整数m(m2)是否为素数。素数是除了1和他本身外,没有其他的因子的一个大于1的自然数。int flag=1;for (i=2; i=m/2; i+) if (m%i= =0) flag=0;if (flag=1) printf
28、(“Yes”);else printf(“No”);【例5.13】输出100以内的所有素数。 在外层套一层循环,使数m(从2100)由该循环自动生成,并将判别出的素数直接输出。设置标志以标明某种状态的变化。#include void main() int i, m, flag; for (m=2; m100; m+) flag=1; / 设置标志flag, 1表示素数 for (i=2; i=m/2; i+) if( m%i= = 0) flag=0; / 修改标志flag, 0表示非素数 break; / m不是素数, 不需继续循环 if (flag= =1) printf(%d, m);
29、/判断标志,素数则输出m 【例5.13】输出100以内的所有素数。 在外层套一层循环,使数m(从2100)由该循环自动生成,并将判别出的素数直接输出。设置标志以标明某种状态的变化。#include void main() int i, m, flag; for (m=2; m100; m+) flag=1; / 设置标志flag, 1表示素数 for (i=2; i=m/2; i+) if( m%i= = 0) flag=0; / 修改标志flag, 0表示非素数 break; / m不是素数, 不需继续循环 if (flag=0) continue; /判断标志,非素数, 跳过输出m, 进入
30、下一次循环 printf(%d, m); 【例6.5】判别和输出2100之间的素数,按每行8个素数输出。 #include #include int isprime(int n) int i; for (i=2; i= sqrt(n); i+) if (n%i=0) return 0; / 返回0,k非素数 return 1; / 返回1,k为素数; void main() int k, count=0; for (k=2; k=100; k+) / k从2100,穷举i是否素数 if (isprime(k)=1) /调用函数prime(), 将实参k传递给形参n. 若返回1, k为素数 pr
31、intf(%5d, k); count+; if (count%8=0) printf(n); /控制每行输出8个数据 2 3 5 7 11 13 17 1923 29 31 37 41 43 47 5359 61 67 71 73 79 83 8997【例4.25 】 计算 1!+2!+3!+10!#include void main() int i, n, s=0, y; for (n=1; n=10; n+) /外循环 y=1; for (i=1; i=n; i+)/内循环计算n! y*=i; s+=y; /将n!累加到s printf(“1!+2!+3!+10! =%d n”, s);
32、 int i;long s=0, y=1;for (i=1; i= 10 B、power = 100 C、t != 0 D、number !=0(3) A、power = 0 B、digit != 0 C、number != 0 D、power = 1(4) A、number /= power; B、number %= 10; C、number %= power; D、number /= 10;BADC#include void main( ) int digit, number, power, t; printf(Enter an integer:); scanf(%d, &numb
33、er); number = number 0 ? -number : number; power = 1; (1) while( (2) ) power *= 10; t /= 10; ; printf(The digits are:); while( (3) ) digit = number / power; printf(%d , digit); (4) ; power /= 10; 阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。*【程序】#include void main( ) int k; for(k = 5; k 0; k-) if(k=3) contin
34、ue; /* 第6行 */ printf(%d , k); (13) 程序的输出是 。 A、5 4 3 2 1 B、5 4 2 1 C、5 4 D、3(14) 将第6行中的continue改为break后,程序的输出是 。 A、5 4 3 2 1 B、5 4 2 1 C、5 4 D、3 (15) 将第6行中的continue删除(保留分号)后,程序的输出是 A、5 4 3 2 1 B、5 4 2 1 C、5 4 D、3 (16) 将第6行全部删除后,程序的输出是 。 A、5 4 3 2 1 B、5 4 2 1 C、5 4 D、3BCAD比较:for写程序较紧凑、清晰,能利用表达式给变量初始化并
35、修改其值;while和do-while语句只能在循环之前进行初始化,在循环体中进行修改。 若循环的次数确定,使用for较合适;否则,采用while或dowhile语句较为清晰。dowhile语句是“先执行、后判断”,至少执行一次循环体;而while、for是“先判断、后执行”,若条件一开始就不成立,循环体一次都不执行。 while( ).do while( );for()dowhile( );dowhile( )while( );(A) 正确的嵌套形式 (B) 不正确的嵌套形式 嵌套形式示意图 数组 一维数组排序、查找算法二维数组 字符数组和字符串数组一批同类型相关数据的有序集合n一维数组由一
36、个下标确定元素的数组 u定义形式:数据类型 数组名 常量表达式 int t10; int n=10,an; u通过对单个数组元素的引用来使用数组: 数组名下标u初始化: int j, t10; for(j=0;j10;j+) tj = j; for(j=0;j10;j+) scanf(%d, &tj); n二维数组u定义形式:数据类型 数组名常量表达式1 常量表达式2 行数 每行元素个数 double b510; double b5,10; int a=1,2; u引用形式:数组名下标1 下标2u初始化 int j, k, b34; for (j=0; j3; j+) for (k=0
37、; k4; k+) scanf(%d, &bjk); / bjk=0; #define M 4double aM;字符数组u定义、初始化: char c5=L,i,k,e,0; char a3; a0=N ; char c5=Like; char c5=Like; char c5; c=Like; char c20; scanf(“%s”,c); printf(“String is %s”,c); / 回车,Tab,空格 结束输入u逐个字符的输入/输出:getchar、putchar, scanf、printf用格式符%c char c81; int i; for(i=0; (ci=g
38、etchar() != n; i+) ; / 输入字符串u字符串输入/输出函数: gets(str); / 回车结束输入 puts(str);u常用字符串函数: string.h strcat(c1,c2); / c1=c1c2 strcpy(c1,c2); / c1=c2 strcmp(c1,c2) / =返回0; 返回1 strlen(c1); / 注意110n二维字符数组: char str39=”Hzhou”, ”Shai”, ”Bjing”; gets(str1); strcpy(str0,”Abc”); puts(str2);#include void main() int i;
39、int f40=1,1; for (i=2; i40; i+) fi=fi-1+fi-2; for (i=0; i40; i+) if (i%5=0) printf(n); /每行输出5个数据 printf(%8d, fi); 程序执行: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 .【例6.2】利用数组求Fibonacci数列的前40项。fibonacci数列具有下面的性质: f1=1 (n=1) f2=1 (n=2) fn=fn-1+fn-2 (n3)分析:利用数组元素fn-1 存储数列的第n项fnint f40;for (i=0; i40; i+
40、) if(i=0|i=1) fi=1; else fi=fi-1+fi-2; 排序冒泡法排序选择法排序【例】用冒泡法对8个数排序(从小到大)。分析:将相邻两个数进行比较,将大数调换到后面,经过一轮操作将最大数放在最后; 7次, j=0; jaj+1 ? 再对前n-1个数进行相同的比较交换操作,将次大数放在倒数第二的位置; 7次, i=0; ia1? a0a1a1a2? a1a2a2a3? a2a3a6a7? a6a7for(i=0; iai+1) aiai+1; /第1趟for(i=0; iai+1) aiai+1;for(i=0; iai+1) aiai+1;for(i=0; iai+1)
41、aiai+1; /第7趟for(j=0; j7;j+) for(i=0; iai+1) aiai+1;#include 冒泡法排序(升序冒泡法排序(升序)#define N 8void main() int i, j; double aN, t; printf(Input %d numbers:n“, N); for (i=0; iN; i+) scanf(%lf, &ai); for (i=0; iN-1; i+) /n个数进行个数进行n-1趟排序趟排序 for (j=0; jaj+1) /若相邻两元素不是小到大升序,则互换若相邻两元素不是小到大升序,则互换 t=aj; aj=aj+
42、1; aj+1=t; printf(The sorted numbers are:n); for (i=0; iN; i+) printf(%5.2f, ai);#include 冒泡法排序(升序)冒泡法排序(升序)#define N 8void main() int i, j; double aN, t; printf(Input %d numbers:n“, N); for (i=0; iN; i+) scanf(%lf, &ai); for (i=0; iN-1; i+) / for (i=1; i ;i+) for (j=0; jN-i-1; j+) / for (j= ; i
43、aj+1) t=aj; aj=aj+1; aj+1=t; printf(The sorted numbers are:n); for (i=0; i ak ? k=j a0ak第2次选择:在a1至a7中找最小数ak,将a1与ak值交换,第2次排序后将次小的数放在a1处; k=1, j=27, aj ak ? k=j a1ak每次从未排序数中选最小数与未排序数中位置最前的数交换,直至所有数都按从小到大排列。 i=0, i ak ? k=j#include 选择法排序(升序)#define N 8void main() int i, j, k; double aN, t; printf(Input
44、 %d numbers: n“, N); for (i=0; iN; i+) scanf(%lf, &ai); for (i=0; iN-1; i+) /N个数进行N-1趟排序,每趟将当前最小数置前 k=i; /k是本次要找的最小元素的下标 for (j=i+1; jN; j+) if (ajak)k=j; /保留最小元素的下标 t=ak; ak=ai; ai=t;/将当前最小元素交换到本趟排序数最前面 printf(The sorted numbers are: n); for (i=0; iN; i+) printf(%.2f, ai);#include 机考(程序改错):机考(程
45、序改错):#define N 10 用选择法对用选择法对10个整数按升序排序个整数按升序排序void main() int i, j, min, temp; int aN=5, 4, 3, 2, 1, 9, 8, 7, 6, 0; printf(“n The array is: n“); /* 输出数组元素输出数组元素 */ for (i=0; iN; i+) printf(%5d, ai); for (i=0; iN-1; i+) /* 排序操作排序操作 */ min=i; for (j=i+1; jN; j+) /*1*/ if (amin=aj)min=j; /*2*/ temp=ami
46、n; amin=aj; aj=temp; /*数据交换数据交换*/ printf(The sorted numbers are: n); for (i=0; iaj)min=j;temp=amin; amin=ai; ai=temp;【例】使用顺序查找法,在n个数中查找某个数。#include #include #define N 10void main() int aN, i, x; printf(Input %d numbers:n“,N); for(i=0; iN; i+) scanf(%d, &ai); printf(“input x to look for:n”); scan
47、f(“%d”, &x); for (i=0; iN; i+) if (ai= x) printf(“find: %d it is a%dn“,x,i); exit(0); printf(%d not been found.n,x);#include void main() int a33,temp; int i,j; for (i=0; i3; i+) / 输入 for (j=0; j3; j+)scanf(%d, &aij); for (i=0; i3; i+) / 转置 for (j=0; j3; j+)if (ij) temp=aij; aij=aji; aji=temp
48、; printf(“Turn after placing: n); for (i=0; i3; i+) / 输出 for (j=0; jj) 【程序说明】输入一个2 * 3的二维数组,找出最大值以及它的行下标和列下标,并输出该矩阵。运行示例:Enter a array(2*3):3 2 10 -9 6 -1max = a02 = 103 2 10-9 6 -1【供选择的答案】(9) A、&aij B、&aji C、aij D、aji(10) A、row = col = 2; B、row = col = 0; C、arowcol = 0; D、arowcol = -1;(11)
49、A、row = j; col = i; B、arowcol = aij C、row = i; col = j; D、arowcol = aji(12) A、printf(“n”) B、printf(“n”); C、; D、printf(“n”); ABCD【程序】#include main( ) int col, i, j, row; int a23; printf(Enter array(2*3):); for(i = 0; i 2; i+) for(j = 0; j 3; j+) scanf(%d, (9) ); (10) ; for(i = 0; i 2; i+) for(j = 0;
50、j arowcol) (11) ; printf(max = a%d%d = %dn, row, col, arowcol); for(i = 0; i 2; i+) for(j = 0; j 3; j+) printf(%4d, aij); (12) ;【例【例6.14】输入一串字符,将其逆序存放并输出。】输入一串字符,将其逆序存放并输出。 #include void main() char s81, t; int i, j; gets(s); for (j=0; sj!=0; j+) ; / 字符串长度字符串长度 j=strlen(s); for (i=0, j-; ij; i+, j-)
51、 t=si; si=sj; sj=t; printf(%s, s);for (j=0; (sj=getchar()!=n; j+) ;第5章 函数概述 函数的定义与调用 函数间参数传递函数的嵌套调用和递归调用 变量的作用域和存储类别 图6.1 C语言程序结构源程序文件1C程序源程序文件m源程序文件j内部数据定义语句序列函数n函数1函数i预编译命令外部数据说明C程序是由一个或多个函数组合而成,函数是C语言程序的基本模块。唯一主函数唯一主函数main是程序开始执行处,可调用其它函数。是程序开始执行处,可调用其它函数。 Review 函数是具有独立功能的程序模块, 是C语言的基本构件。函数是一个“黑
52、盒子”。 在引用一个函数时,用户只需了解被调用函数的功能、是否需要提供数据、函数返回值即可;不必了解其内部的工作细节。由于采用了函数结构,程序的层次结构清晰,便于编写、阅读和调试。分类: 从用户的角度:标准库函数,用户自定义函数 y=sin(x); 从函数的结果:无返回值的函数,有返回值的函数 void 从函数的形式看:有参函数,无参函数函数的定义与调用函数定义的一般形式:数据类型 函数名(类型形参, ) 函数体; 函数调用的一般形式为:函数名(实参1, 实参2, ) 用作函数表达式 z=max(x, y); 作实参使用 z= max( max(x1, x2), x3); 独立构成表达式语句
53、printf(maxmum=%d, z); 函数声明一般形式为:数据类型 函数名(类型 形参, ); 或:数据类型 函数名 (类型, 类型,); 如被调函数定义的位置在主调函数前,声明可省略。#include void main() int x, y, z; int max(int a, int b); /函数声明 printf(input two numbers:); scanf(%d%d, &x, &y); z = max(x, y); /函数调用,作表达式、语句、形参 printf(max=%d, z); printf(max=%d, max(3, 6) );int ma
54、x(int a, int b) /函数定义 int c; if (ab) c=a; else c=b; return c;【例】编写函数,输出10 个“*”号,并回车。#include void star() /无参函数 int i; for (i=0; i10; i+) printf(“*”); printf(“n); return; /无返回值、返回主调函数 void main() star();/ 函数调用 函数间参数传递函数间参数传递:传数值(形参,实参,return) 传地址(形参是数组或指针变量) 一维形参数组定义的一般形式: void sort(int a , int n) in
55、t b10=1,6,7,0,8,4,3,2,9,5; sort(b,10); 二维形参数组定义的一般形式: void change(int x 5, int n, int m)函数的嵌套调用:在一个函数的函数体内调用另一个函数 不允许嵌套定义递归调用:被调用的函数是调用函数自身时。 递归方法:将要解决的问题分解成比原问题规模小的类似子问题,而解决此子问题时又可用原问题的解决方法,依此原则逐步递推转化,最终将原问题转化为较小且有已知解的子问题。例:数列的第1、2项均为1,此后各项值均为该项前二项之和。计算数列第30项的值。(省二级上机填空题)#include 1 . void main() pr
56、intf( %ldn,f(30) ); long f(int n) if ( 2 ) return 1; else return f(n-1)+f(n-2); /long f(int n); n = =1| n = = 2【例】分析函数调用前后的实参值、形参值。#include void main() double a, z; double mult(double); a=5.2; printf(“调用mult前:a=%.2lf n, a); z=mult(a); /函数调用,形参值改变不影响 实参值a printf(“调用mult后:a=%.2lf n, a); printf(“z=%.2l
57、f n, z); double mult(double a) /形参a a=a*a; printf(“在mult中:a=%.2lf n, a); return (a); 程序执行:调用mult前:a=5.20在mult中:a=27.04调用mult后:a=5.20z=27.04形参变量和实参变量是各自独立的变量,占有不同存储空间变量的存储类别变量的作用域:局部变量在函数体或复合语句内定义的变量全局变量在函数外部定义的变量。Extern全局变量和局部变量同名在局部变量的作用域内,全局变量不起作用变量的存储类型说明有种:自动变量、寄存器变量动态存储方式(函数调用或复合语句结束时释放)静态变量、外部
58、变量静态存储方式(整个程序运行结束时释放空间)自动变量 auto(缺省) 寄存器变量register:存储在CPU中,存放使用频率较高的数据,访问速度快静态变量 static:静态局部变量在函数内部定义且只在该函数内使用。值具可继承性静态全局变量只在定义该变量的源文件内有效 外部变量extern:外部变量可作用于整个源程序。如一个源程序由若干个源文件组成,在一个源文件中可以使用其他源文件中的外部变量(该全局变量只需在一个文件中定义),但必需要在使用前对该变量作extern外部变量说明。 auto int i, j, k; static float x,y; extern float x, y;
59、#include int s;float f2(int x) int y,s; static int a; main() int m,n; int a,b; m=a+b; n=a-b; 变量的作用域变量的作用域:全局变量、局部变量全局变量、局部变量在同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,全局变量不起作用。x x、y y、s s的作用域的作用域a a、b b的作用域的作用域m m、n n的作用域的作用域s s的的作作用用域域全局变量与局部变量同名:在局部变量的作用域内,全局变量不起作用(例6.20) #include double add, mult; /全局变量voi
60、d func( double x, double y) double add, mult; /局部变量 add=x+y; mult=x*y;void main()double a, b; scanf(“%lf%lf”, &a, &b); func(a, b); printf(“%.2lf %.2lfn”, add, mult); /全局变量若未初始化,初值0 7 50.00 0.00#include (省二级题)int k=1;void main() int j; void Fun(); for (j=0; j2; j+) Fun(); printf(k=%d, k);void Fun() int k=1; / static int k=1; k=1; ; printf(k=%d, , k); k+;输出:k=1, k=1, k=1k=1, k=2, k=1k=1, k=1, k=2k=1, k=2, k=3【例】判别和输出2100之间的素数,按每行8个素数输出。 #include #include int isprime(int n) int i; for (i=2; i= sqrt(n); i+) if (n%i=0) return 0; / 返回0,k非素数 return 1; /
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 协议书和合同怎么查找
- 租地协议书合同
- 求兼职主播合同协议书
- 租房协议书没有合同
- 双人餐饮合同协议书
- 合同违约协议书范本
- 运费协议书合同
- 种植基地终止合同协议书
- 男女合同协议书
- 网络员考试题及答案
- 火灾自动报警系统设计规范完整版2025年
- 2025届广东省燕博园联考(CAT)高三下学期3月模拟测试物理试题(原卷版+解析版)
- 德庆县2024-2025学年三年级数学第二学期期末统考模拟试题含解析
- 安全意识教育试题及答案
- 2025年铁路小型养路机械市场分析现状
- 《海参的品种与功效》课件
- SZDBZ 171-2016 物业服务人员管理规范
- 《食品营养与健康》课件
- 初级社工师《社会工作实务》考试(重点)题库300题(含答案解析)
- 2024年天津市高考物理试题含答案解析
- 机器狗:技术成熟性能优越场景刚需放量在即2025
评论
0/150
提交评论