1、华北电力大学信息网络管理华北电力大学信息网络管理中心计算机基础教研室中心计算机基础教研室办公室电话:办公室电话:2474 熟悉语法熟悉语法 掌握程序设计技巧掌握程序设计技巧 做好听课笔记做好听课笔记 程序规则程序规则 运算规则运算规则 语句规则等语句规则等第一章 C语言基础1.1计算机语言计算机语言1.3 C程序的开发及上机步骤程序的开发及上机步骤1.2 C语言概述语言概述1.4基本数据类型基本数据类型1.5 运算符和表达式运算符和表达式.机器语言.汇编语言.高级语言.用0、1组成,执行速度快,难记、不通用.用助记符便于记忆、不通用.类似自然语言和数学语言,通用性强.例如:A=10,B=4 求
2、A+B的值001111010000101011000110000001001111001101110110LD A,0AH LD B,04H ADD A,B HALTA=10B=4C=A+BPRINT*,CEND只能识别机器语言程序1.1 计算机语言计算机语言语言处理程序001111010000101011000110000001001111001101110110LD A,0AH LD B,04H ADD A,B HALTA=10B=4C=A+BPRINT*,CEND汇编语言源程序高级语言源程序汇编程序?解释编译目的程序源程序源程序目的程序目的程序可执行程序可执行程序链接程序编译程序源程序源
3、程序结果结果解释程序不同的语言需不同的编译程序机器语言汇编语言高级语言面向过程面向对象CPU指令系统,由0、1序列构成的指令码组成如:10000000 加 10010000 减用助记符号描述的指令系统如 ADD A, B面向机器的语言程序设计是数据被加工的过程客观世界可以分类,对象是类的实例对象是数据和方法的封装对象间通过发送和接受消息发生联系程序设计关键是定义类,并由类派生对象BASIC VBFORTRAN VFPASCAL DelphiCTurbo C+Visual C+Borland C+C+ Builder常用高级程序设计语言52 54 56 58 60 62 64 66 68 70
4、72 74 76 78 80 82 84 86 88 90 92 94 96AdaALGOL60ALGOL68PascalModula-2CPLBCPL BCC+JavaLISPPROLOGCOBOLFORTRAN77FORTRANPL/1Simula 67Smalltalk 80BASICANSI-BASICQBASIC VBFORTRAN9032个关键字:(auto break case char constcontinue default do double elseenum extern float for gotoif int long register returnshort si
5、gned sizeof static structswitch typedef unsigned union voidvolatile while9种控制语句:if( )elsefor( )while( )dowhile( )continuebreakswitchgotoreturn34种运算符:算术运算符:算术运算符: + - + - * * / % + - / % + -关系运算符:关系运算符: = != = !=逻辑运算符:逻辑运算符: ! & |& |位运算符位运算符 : | & | &赋值运算符:赋值运算符: = = 及其扩展及其扩展条件运算符:条件运算符: ?:?:逗号运算符:逗号
6、运算符: , ,指针运算符:指针运算符: * * & &求字节数求字节数 : sizeofsizeof强制类型转换:强制类型转换:( (类型)类型)分量运算符:分量运算符: . -. -下标运算符:下标运算符: 其它其它 : ( ) -( ) -C数据类型基本类型构造类型指针类型空类型void定义类型typedef数值类型字符类型char枚举类型enum整 型浮点型单精度型float双精度型double短整型short长整型long整型int数组结构体struct共用体union/* example1.1 The first C Program*/#include main() printf(
7、“Hello,World!”);注释编译预处理函数语句输出:Hello,World!/* example1.1 calculate the sum of a and b*/#include /* This is the main program */main() int a,b,sum; a=10; b=24; sum=add(a,b); printf(”sum= %dn,sum);/* This function calculates the sum of x and y */int add(int x,int y) int z; z=x+y; return(z);运行结果:sum=34函数
8、语句预处理命令注释main( ) . . . . . . .main( ) int i , j , sum; sum=0; for(i=1; i10;i+) for(j=1;jb _above $123M.D.John3days#33char$123ab1.4 基本数据类型基本数据类型如 #define PRICE 30例 符号常量举例(ch2_1.c)#define PRICE 30main() int num,total; num=10; total=num*PRICE; printf(total=%d,total);运行结果:total=3001.4 基本数据类型基本数据类型例 12 与
9、 12L例 30000 为int型 65536 为long int 型问题:0123 = ( )100 x123 = ( )100Xff = ( )1083291255问题:0123 = ( )100 x123 = ( )100Xff = ( )101.4 基本数据类型基本数据类型1.4 基本数据类型基本数据类型 b ) & ( x y )( (! ! a )+b) | | ( a b )a b & x y! a+b | | a b1.5 运算符和表达式运算符和表达式 逻辑运算的结果只可能为逻辑运算的结果只可能为1或或0; 逻辑运算的对象可以是任何类型的逻辑运算的对象可以是任何类型的数据数据,
10、 “非非0”为为“真真”, “0”为为“假假”。 a&b&c (与短路运算)(与短路运算) (m=ab) &(n=cd) a|b|c (或短路或短路)main() int m,n=10; m=2&n+; printf(m=%d,n=%dn,m,n); 条件运算条件运算1.5 运算符和表达式运算符和表达式顺序结构顺序结构 、选择结构、选择结构、循环结构、循环结构开开 始始赋赋 值值处处 理理int a , b, c;a=10; b=4; c=a+b;main( )printf(“%d,%d,%d”,a,b,c);输输 出出结束结束赋赋 值值处处 理理输输 出出赋值表达式赋值表达式格式格式 pri
11、ntf(“(“格式控制格式控制”, ,输出项输出项) ) 如如: printf(“%d,%d,%d”,a,b,a+b) 如如: printf(“ t= %f, sint= %f n ”,t,sin(t)格格式式说说明明%d按十进制输出整数按十进制输出整数格式控制格式控制意意 义义%f按小数形式输出实数按小数形式输出实数n换行换行其它字符其它字符原样输出原样输出例例: :当当a=10,b=-5.3a=10,b=-5.3时时, ,写出下面写出下面语句的输出结果语句的输出结果printf(“ 格式控制格式控制”,输出项输出项);printf(“%d , %f”,a,b);10,-5.300000pr
12、intf(“a=%d nb=%f”,a,b);a=10b=-5.300000输出项输出项: :变量、表达式、函数变量、表达式、函数格式控制:格式控制: 为输出项提供格式说明为输出项提供格式说明提供需要原样输出的文字或提供需要原样输出的文字或字符字符; ; ;格式说明的个数格式说明的个数= =输出项个数输出项个数格式说明的类型格式说明的类型= =输出项类型输出项类型格式说明格式说明意意 义义数据宽度数据宽度%d按十进制输出整数按十进制输出整数%f按小数形式输出实数按小数形式输出实数系统决定系统决定%md注:注:m、n为整型常数为整型常数按十进制输出整数按十进制输出整数占占m位位例例1 a=23,
13、b=34,c=-55,写出下面语句写出下面语句的运行结果的运行结果printf(“a=%d,b=%5d,c=%2d”,a,b,c)a=23,b= 34, c=-55%m.nf按小数形式输出实数按小数形式输出实数(小数占(小数占6 6位)位).(实际位数)(实际位数)系统决定系统决定.n位位m位位例例2 t=2.346写出下面语句的运行写出下面语句的运行结果结果printf(“t=%f,%5.2f,%3.2f”,t,t,t)t=2.346000, 2.35,2.35例例1 1 已知三边长,求三角形面积已知三边长,求三角形面积( (四舍五入保留两位小数四舍五入保留两位小数) )。输输 入入处处 理
14、理输输 出出c)(s*b)(s*a)(s*sarea2cbas如何保留小数如何保留小数? ?13.45613.461)移动小数点)移动小数点13.456*1002)加)加0.51345.6+0.53)取整)取整4)小数点还原)小数点还原1346/100area*100.0=1345.6=1346.11346=13.46(int)( )+0.5 /100用同一个程序计算边长为用同一个程序计算边长为任意值的三角形面积任意值的三角形面积设边长为设边长为a、b、c,则:则:问题问题s=(a+b+c)/2;float a,b,c,s,area; a=3.0;b=4.0;c=6.0;area=sqrt(s
15、*(s-a)*(s-b)*(s-c);printf(“area=%fn”,area);area=(int)(area*100+0.5)/100.0;#include “math.h”main( )%f%6.2fprintf(“a,b,c=%f,%f,%fn”,a,b,c);a,b,c=area=3.000000,4.0000005.336.004.00,6.0000005.330000a,b,c= 3.00area=scanf(“格式控制格式控制”,地址表地址表)如:如:scanf(“%d,%f”,&a,&b)地址表列:地址表列:&a:变量变量a的地址的地址&b:变量变量b的地址的地址scan
16、f(“格式控制格式控制”,地址表地址表);;%d按十进制输入整数按十进制输入整数格式格式说明说明格式控制格式控制意意 义义%f按小数形式输入实数按小数形式输入实数其它字符其它字符原样输入原样输入&:地址运算符地址运算符格式控制:格式控制:指定数据输入的格式指定数据输入的格式例如例如:设:设a=2,b=2.5,写出执行下写出执行下面的语句时,数据输入的形式。面的语句时,数据输入的形式。scanf(“%d%f”,&a,&b);scanf(“%d,%f”,&a,&b);scanf(“a=%d,b=%f”,&a,&b);数据间的分隔数据间的分隔符符输输 入入缓冲区缓冲区ab内存内存单元单元P79P82
17、程程序序运运行行时时例例2 2 将将两个变量中的值互换两个变量中的值互换。分分析析ab211a2b方法一:方法一:ab21a=bb=a11方法二:方法二:醋醋2a=bb=cc醋醋酱油酱油酱油酱油=acab2a1bc12输输 入入交交 换换输输 出出main( )int a,b,c;scanf(“%d,%d”,&a,&b);c=a;a=b;b=c;printf(“a=%d,b=%dn”,a,b);printf(“a=%d,b=%dn”,a,b);printf(“Please input a,b:”);中间变量的类型要与原始变量一致中间变量的类型要与原始变量一致Please input a,b:a
18、=2, b=1a=1, b=2实际问题实际问题数学模型数学模型计算方法计算方法 编编 程程编辑程序编辑程序编译查错编译查错 连接连接错错? ?修改程序修改程序修改算法修改算法修改模型修改模型错错? ?运行程序运行程序错错? ?小结小结main()() int x; scanf(“%d”,&x); if(x0) printf(“x=%d,YES”,x); else printf(“x=%d,NO”,x);x0真真YES假假NOP22P26条件条件根据条件是否为根据条件是否为真而选择执行不真而选择执行不同的程序块同的程序块同同 级级同同 级级得整数值:得整数值:0 0或或1 1b (a=4)+1得
19、整数值:得整数值:0 0或或1 1a+bc&b=c!(x=a)&(y=b)if子句或子句或else子句包含多个子句包含多个语句,就要用语句,就要用、括起来括起来表达式为真?表达式为真?真真If子句子句假假else子句子句x%3=0真真计算计算假假计算计算输入输入x输出输出输出输出结束结束表达式表达式为为 真?真?真真If子句子句假假ab?真真a、b交换交换假假输入输入a、b、c输出输出aac?真真a、c交换交换假假结束结束式式0 0为真?为真?A式式1 1为真?为真?式式2 2为真?为真?BCD A B C D式式0 0为真?为真?真真A假假式式1 1为真?为真?真真B假假式式2 2真?真?真
20、真C假假D例例4 读程序写运行结果读程序写运行结果例例5 编写程序计算表达式的值:编写程序计算表达式的值:10)(x1x10)x(01x0)(xxyx0真真y=x假假x=0)if(x0) y=1;else y=0;else y=-1;x 100-9 -1y=-1;if(x!=0)if(x0) y=1;else y=0;x 10 -1-9 0y=-1;if(x!=0)if(x0) y=1;else y=0; x 10 0-9 -1y40y 40y 40例例7 编写程序计算表达式的值:编写程序计算表达式的值:20)x(101x10)x(01x0)x(-5xy x-5&x-5&x20) if(x0)
21、 y=x;elseIf(x10)y=x-1;elsey=x+1; x10真真y=x-1y=x+1假假语语句句体体整型整型类型相同类型相同零个或一个以零个或一个以上的语句上的语句计算表达式的值计算表达式的值该值等于某常该值等于某常量表达式的值?量表达式的值?执行该常执行该常量表达式量表达式后各语句后各语句是是执行执行default后后各语句各语句不是不是退出退出例例8 写出下面程序的运行结果。写出下面程序的运行结果。main( )int g; scanf(“%d”,&g); switch(g/10) case 10:case 9: printf(“An”); case 8: printf(“Bn
22、”); case 7: printf(“Cn”); case 6: printf(“Dn”); default: printf(“En”); main( )int g; scanf(“%d”,&g); printf(“g=%d”,g); switch(g/10) case 10:case 9: printf(“An”);break;case 8: printf(“Bn”);break; case 7: printf(“Cn”);break; default: printf(“En”); g=100BCDEg=45g=100g=78g=45AEA跳出跳出switch语句体语句体CE printf
23、(“g=%d”,g);case 6: printf(“Dn”);break; goto 语句标号语句标号goto key;key: s+=x;语句标号:语句标号:s+=x被被反反复复执执行行标号标号:if(表达式表达式 )goto 标号标号循环体循环体表达式为真?表达式为真?真真假假退出退出当表达式为真当表达式为真循环体循环体例例1 编写程序计算表达式的值:编写程序计算表达式的值:x0真真y=x假假x10真真y=x-1假假y=x+120)x(101x10)x(01x0)x(-5xy 当当x=20输入输入x真真假假当表达式为真时当表达式为真时 循环体循环体i=i+1;循环前:循环前: i=1i第
24、一次第一次循环次数循环次数i511,第二次第二次22,第三次第三次33,第四次第四次44,退出循环:退出循环: i=5关注循环前、循环中、关注循环前、循环中、循环后控制变量的值循环后控制变量的值例例2 编程序,计算编程序,计算 s=1+2+3+100(1) 如何得到加数?如何得到加数?i:(2) 如何实现累加?如何实现累加? s为被加数为被加数初始:初始:s=0i=1: s+i ss=s+i;i=2:i=100:s+=i;1、2、100s=0;i=1,s=0当当 i=100时时s+=ii+输输 出出s+=i;s+i ss+i smain ( ) int i,s; i=1; s=0; while
25、(i=100) s+=i; i+; printf(“s=%d”,s); 1 1+2 1+2+.+100i=3: ss+i 1+2+3真真假假当表达式为真当表达式为真循环体循环体循环前:循环前:i=1i第一次第一次循环次数循环次数11,第二次第二次22,第三次第三次33,第四次第四次44,退出循环:退出循环:i=5例例2 输入任意输入任意n个数个数,计算其中奇数和及偶数和,并统计奇数个数。计算其中奇数和及偶数和,并统计奇数个数。i=n(2) 如何统计个数?如何统计个数?i=1,jh=0,oh=0,tj=0输入输入nx%2=0输入输入x真真oh+=x假假jh+=x,tj+i+当当i=n时时输出输出
26、(1) 如何得到如何得到n个数个数?main( ) int i=1,jh=0,oh=0,tj=0,n,x; printf(“Please input n:”); scanf(“%d”,&n); do scanf(“%d”,&x);if(x%2=0)oh+=x;elsejh+=x,tj+;i+;while(i=n);printf(“The result:”);printf(“oh=%d”,oh);printf(“jh=%d,tj=%d”,jh,tj);真真假假例例2 计算计算n的阶乘。的阶乘。n!=1 2 3 (n-1) n递归定义:递归定义:n!=(n-1)! n (n-1)!=(n-2)!
27、(n-1)结论:结论: 已知已知0!,求,求n!p:存放阶乘:存放阶乘i:计数:计数过程:过程:p=0!=11!p*12!p*2(n-1)! p*(n-1)n!p*n 确定确定n p=1 for i=1to np*=i 输出输出 main( ) scanf(“%d”,&n);p=1;for(i=1;i=n;i+) p*=i;ppppp*=i; int p,n,i; printf(“%d!=%d”,n,p);内内循循环环表达式为真?表达式为真?执行内循环执行内循环退出退出例例1 写出程序的运行结果写出程序的运行结果 main( ) m=0; for(j=k ; j=1 ; k - -) int
28、k,j,m; kjm505254441335056522694771178381586m=86 问题:语句问题:语句m=0;放在内放在内外层循环之间,结果?外层循环之间,结果?m= 9kjm例例2 写出程序的运行结果写出程序的运行结果 main( ) for(j=9-i;j=1;j- -) printf(“”); for( i= 1 ; i=5 ; i+) int i,j,k; for(k=1;k=2*i-1;k+) printf(“*”); printf(“n”); ijk1181 2 7113 36115 45117 54119 条件为真条件为真 退出循环退出循环算算ai 算算p 算算q
29、例例1 计算:计算:s=1+x 2!x2+x33!n!+ (1)n+1xn通项通项 ai=i!(1)i+1pmq=i=1,2,,n算算m s+= ai n次次for i=1 to np=1,输入输入x,n 输出输出s q=1,m= -1,s=1ximain( ) int i,m,n; p=1,q=1,m= - 1,s=1;for(i=1;i=n;i+) m= - m;q*=x;p*=i; ai=m*q/p; s+=ai; printf(“s=%.4f”,s); float x,p,q,s,ai; scanf(“%f,%d”,&x,&n);例例2 判断一个数判断一个数n是否是素数。是否是素数。只
30、能被只能被1 1和它本身整除的数。和它本身整除的数。2,3,n-1之中的数都之中的数都不是不是n的因子的因子n 1,nn是素数是素数验证验证:输入输入n当当j=k时时n%j!=0真真j+假假break j=2 k=sqrt(n)j=k+1真真yes假假no#include int n,j,k; while(j=k) if(n%j!=0) j+; else break; if(j=k+1) printf(“%d yes”,n); elseprintf(“%d no”,n); printf(“nInput n:”); scanf(“%d”,&n);sqrt(n) j=2,k=sqrt(n);j=k
31、+1 break退出退出j=kyesnomain( ) 正常退出正常退出例例3 找出所有的水仙花数。找出所有的水仙花数。若若m是水仙花数是水仙花数,则则:(2) b:m的百位数的百位数(1) 是三位数是三位数 s:m的十位数的十位数 g:m的个位数的个位数 m=b3+s3+g3 如何分解数如何分解数? 设设 m =2 7 3 b= m/100 s= m/10-b*10 g= m%10 main( )int m,b,s,g;for(m=100;mmax真真max=afor i=2 to n读入读入n输出输出假假大数大数max大数大数 max大数大数 max读数读数比较比较main( ) int
32、a,max,i,n;max=a;for(i=2;imax?a:max; printf(“max=%d”,max); printf(“nInput n,a:”);scanf(“%d,%d”,&n,&a);#include “stdio.h”main( ) char c;while(c=getchar( )!=n)putchar(c);Its a holiday!例例5 读程序写运行结果。读程序写运行结果。#include “stdio.h”main( ) char c;while(c=getchar( )!=n) if(c=a&cZ&c=Z+2)c - =26; printf(“%c”,c);
33、例例6 读程序写运行结果。读程序写运行结果。aCbDxZyAzB小写字母变化,其他字符不变小写字母变化,其他字符不变C Y02+ABM例例7 输入一行字符,统计出其中英文字母、空格、其它字符输入一行字符,统计出其中英文字母、空格、其它字符的个数。的个数。#include main( ) char c; int zm,kg,qt; zm=kg=qt=0; while(c=getchar( )!=n) if(c=a&c=A&c=Z)zm+;else if(c= )kg+;else qt+; printf(“zm=%d,kg=%d,qt=%d”,zm,kg,qt); 是是的一组的一组变量的集合体变量
34、的集合体组成数组的变量称为该数组的组成数组的变量称为该数组的如如 数组数组a中有十个整型变量,中有十个整型变量, 分别是:分别是:a0 ,a1,a2,a3 a9一维数组:一维数组:数组元素只有一个下标数组元素只有一个下标二维数组:二维数组:数组元素有两个下标数组元素有两个下标 例如:例如:b数组数组,实型实型, 12个变量个变量:b00,b01,b02, b03,b10,b23类型说明符类型说明符 数组名数组名常量常量 ;例如:例如: int a10;整型数组整型数组 名字为名字为a十个变量十个变量 a0 a1a9float b5=1,2,3,4,5;a0a1.a9数组数组ab0b1.b4数组
35、数组b1.02.05.0 1 1 数组元素数组元素在在内存中内存中顺次顺次存放存放 2 2 数组元素的数组元素的地址地址是是连续连续的的float b5=1;float b =1,2 ,3,4,5;b0b1b4数组数组b1.00.0.0.0例例1 将十个数据输入到数组中,并按逆序输出。将十个数据输入到数组中,并按逆序输出。main( ) int a10,i;for(i=0;i=0;i-)printf(“%5d”,ai); printf(“nResult:”);printf(“nInput data:”);ai i=09a0a1.a9数组数组a将数据输入到各将数据输入到各个数据元素中个数据元素中
36、例例2 数组数组a有五个元素,其值分别为:有五个元素,其值分别为:1、2、3、4、5,移动该,移动该数组的数,使其变成数组的数,使其变成2、3、4、5、1。a0a1a2a3a412345 m m=a0a1a0a2a1a3a2a4a3for i=1,4ai-1=ai a4= m 1a0mma4main( ) int a5=1,2,3,4,5;m=a0;for (i=1;i=4;i+)ai-1=ai;a4=m;int i,m;for(i=0;imax真真max=afor i=2 to n读入读入n输出输出假假给数组给数组a 赋值赋值aiaw真真for i=1 to n-1读入读入n 假假例例3 从
37、从n个数中找出最大的数,并与第一个数互换。个数中找出最大的数,并与第一个数互换。关键:关键:w=0w=iw!=0真真aw与与a0互换互换假假aw: 最大数最大数w:最大数的最大数的位置位置main( ) int a50,i,n,w; scanf(“%d”,&n); scanf(“%d”,&ai); for(i=0;in;i+) printf(“%2d”,ai); for(i=0;in;i+)w=0;1204W:120412041204找到最大的数及其所处的位置找到最大的数及其所处的位置 if(w!=0) i=a0;a0=aw;aw=i; for(i=1;iaw) w=i;例例4 将任意将任意n
38、个数按降序排序。个数按降序排序。设第设第 个数最大个数最大,与第与第个数依次比较个数依次比较设第设第 个数最大个数最大,与第与第个数依次比较个数依次比较设第设第 个数最大个数最大,与第与第个数依次比较个数依次比较设第设第个数最大个数最大,与第与第个数比较个数比较设第设第 个数最大个数最大, 与第与第个数依次比较个数依次比较 int a50,w,k,i,n;randomize( );for(i=0;in;i+)scanf(“%d”,&n);ai=random(100);for(k=0;k=n-2;k+) w=k;for(i=k+1;iaw)w=i; if(w!=k) i=ak,ak=aw,aw=
39、i; for(k=0;k=n-1;k+) printf(“%5d”,ak); #include #include main( )aiaw真真for i=1 to n-1 假假 w= 0w=iw!=0真真aw与与a0互换互换假假k:0n-2for k=0 to n-2共进行共进行k次找最大数次找最大数的操作的操作例例5 查找一个数是否在某数组中出现。查找一个数是否在某数组中出现。输入输入n,a,x flag=0flag:标记:标记1:查到:查到0:没查到:没查到 i=0 in & flag=0 x=ai真真flag=1假假i+main() int n,x,i,flag,a50; scanf(“%
40、d,%d”,&n,%x); flag=0,i=0; while(iai真真break假假 向后向后移动数据移动数据 插入插入7数组数组aa0a1a2a3a4a5a6a7a81085210-1-7数组数组a插入前插入前插入后插入后输入数据输入数据找插入点找插入点插入数据插入数据输出结果输出结果4i位置:位置:a7 a8ai=x108510-1-72位置位置0 xa0?操作操作真真 插入点是插入点是01xa1? 真真 插入点是插入点是1ixai? 是是 插入点是插入点是i7xa7? 真真 插入点是插入点是7假假 插入点是插入点是8操作结果操作结果2a6 a7forj=7toist-1aj+1=aj
41、4ajaj+1例例6 在一个降序排列的数列中插入一个数,使新数列保持原序。在一个降序排列的数列中插入一个数,使新数列保持原序。main( ) int a9,i,j,x;scanf(“%d”,&x);for(i=0;iai) break;for(j=7;j=i;j- -)aj+1=aj;ai=x;for(i=0;i=8;i+)printf(“%3d”,ai); for(i=0;iai真真break假假forj=7toist-1aj+1=aj输入数据输入数据输出数据输出数据类型说明符类型说明符 数组名数组名常量常量 常量常量 ;例如:例如: int a34;整型二维数组整型二维数组 名字为名字为a
42、a00 a01a00数组数组a共共12个变量个变量 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23是一个矩阵或一张表格是一个矩阵或一张表格第第0行行第第1行行第第2行行第第0列列 第第1列列 第第2列列 第第3列列a01a02a03a10a11a12a13a20a21a22a23 1 0 9 7 4 6 8 312 3 3 5二维数组二维数组a 3行行4列列a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a230行行0列列1列列 2列列 3列列1行行2行行main( ) int a34,i,j;输入输入aijfor j=0
43、 to 3for i=0 to 2j=03i=02for(i=0;i=2;i+)for(j=0;j=3;j+)scanf(“%d”,&aij);for(i=0;i=2;i+) for(j=0;j=3;j+) printf(“%3d”,aij); printf(“n”); a00数组数组aa01a02a03a10a11a12a13a20a21a22a231097 46 83 12 3 3 5 例例1 将一个将一个3 4矩阵输入到数组中并按行输出。矩阵输入到数组中并按行输出。例例3 从矩阵中找出这样的元素,该元素在行上最大,列上最小。从矩阵中找出这样的元素,该元素在行上最大,列上最小。16 15
44、4 2 101.找到该行的最大数找到该行的最大数,记录列号记录列号2.验证其在所处的列上是否是最小验证其在所处的列上是否是最小 for k=1 to 4 ai,pak,p真真t=00 4 2 3 65 6 7 9 8t=1真真aip yes假假假假假假找最大数的列号找最大数的列号验证列上是否最小验证列上是否最小for i=0 to 2第第i行最大数的列号行最大数的列号验证结果标志验证结果标志t=1yest=0no第第i i行的最大数行的最大数例例2 打印杨辉三角形打印杨辉三角形。 第第1列元素为列元素为1 其余:其余:main( ) int yh2020,i,j,n;scanf(“%d”,&n
45、);for(i=0;in;i+)for(j=1;ji;j+)yhij=yhi-1j-1+yhi-1j; yhi0=1;yhii=1; 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1yhi0=1yhii=1for(i=0;in;i+) printf(“n”); for(j=0;j=i;j+) printf(“%5d”,yhij); 对角线元素为对角线元素为1yhij=yhi-1j-1+yhi-1j 1=1jimain( ) int a35,i,k,p,t;for(i=0;i3;i+)for(k=0;k5;k+)scanf(“%d”,&aik);for(i=0;i3;i+) print
46、f(“n”);for(k=0;k5;k+) printf(“%4d”,aik); for(i=0;i=2;i+) p=0; for(k=1;k=4;k+) if(aipaik)p=k; t=1; for(k=0;kakp)t=0;break; if(t) printf(“a%d%d=%d”,i,p,aip); for k=1 to 4 ai,pak,p真真t=0t=1真真aip yes假假假假假假for i=0 to 2例例4 打印魔方阵打印魔方阵.由由1n2构成的矩阵构成的矩阵816357492放数的原则放数的原则1 1放在第一行中间一列放在第一行中间一列2 第第 i*n+1个数个数:放在第
47、放在第i*n个数的下一行个数的下一行,同一列同一列3 其余其余:行行-1 列列+1若行若行=0 行行=n若列若列=n+1 列列=1main( ) int a1111,i,h,l,n;scanf(“%d”,&n);h=1;l=n/2+1;ahl=1;for(i=2;i=n*n;i+) if(i%n=1) h+; else h-;l+; if(h=0)h=n; if(l=n+1)l=1; for(h=1;h=n;h+)for(l=1;l=n;l+) printf(“n”);printf(“%4d”,ahl); ahl=i; “8” “Boy”“ ”“ ”“8”8“thank you!”例例7 从下
48、面的数据中分别找从下面的数据中分别找出字符串常量与字符常数。出字符串常量与字符常数。1231 1 字符常量用单引号括起来字符常量用单引号括起来2 2 字符常量是单个字符字符常量是单个字符 字符串常量用双引号括起来字符串常量用双引号括起来字符串常量可有若干个字符字符串常量可有若干个字符3 3 字符串常量有结束符字符串常量有结束符“A”AA字符串结字符串结束标志束标志A例例8 改错改错main( ) char c;c=“yes”;printf(“%c”,c);char 数组名数组名常量常量;例例: char c10;c0 c1c9每个数组元素占一个字节每个数组元素占一个字节1 逐个数组元素赋初值逐
49、个数组元素赋初值char c6=P,a,r,t,y,0;Party02 应用字符串常量赋初值应用字符串常量赋初值char c6 =“party”;char c =P,a,r,t,y,0;char c = “party”;例例9 确定数组的值及长度确定数组的值及长度main( )char t1 =“student ”; char t2 =s,t,u,d,e,n,t ; t1 studentt2 student#include “stdio.h”for(i=0;si!=0;i+)printf(“%c”,si); char s20;int i; for(i=0;(si=getchar( )!=n;i
50、+);main( )si=0; scanf(“%s” , s ); printf(“%s”,s);例例10 写结果写结果main( ) char str20;scanf(“%s”,str); printf(“%s”,str); str0str19beistr0str19函数原型在函数原型在stdio.h中中例例11 写结果写结果main( ) char str20;gets(str); puts(str); bei#include “stdio.h”例例12 将两个字符串首尾相接后输出。将两个字符串首尾相接后输出。str1:str2:str1:H o wryHstr1str2l=0当当str1