C 语言程序设计第九讲解析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

引 例
例:读入三个数,由大到小排序,并打印出来。
读入a,b,c a>b a>c b>c 打 印 打 印 T 打 印 T F F 打 印 b>c a>c
流 程 图
F F F
T
T
T 打 印 打 印
b,a,c
a,b,c
c,b,a
c,a,b
a,c,b
b,c,a
void main( ) { 流程图: int a, b, c; scanf("%d%d%d", &a, &b, &c); 读入a,b,c if(a>b) a>b F T { if(b>c) printf("%d,%d,%d\n",a,b,c); a>c b>c F T T F else if(a>c) b>c a>c T打 F F T 打 printf("%d,%d,%d\n",a,c,b); else 打 打 印 打 打 印 印 印 印 印 printf("%d,%d,%d\n",c,a,b); } else { if(a>c) printf("%d,%d,%d\n",b,a,c); else if(b>c) printf("%d,%d,%d\n",b,c,a); else printf("%d,%d,%d\n",c,b,a); } }
排 序
举 例
输入n a[1]=1 a[2]=1 for i=3 to n
a[i]=a[i-1]+a[i-2]
例5: 求费波纳契数列中前n项的值,其中n值从键盘输入。
#include <iostream.h> void main( ) { int a[100], i, n; cin>>n; a[1]=1; a[2]=1; for(i=3; i<=n; i++) a[i]=a[i-1]+a[i-2]; for(i=1; i<=n; i++) cout<<a[i]<<" "; }
两个相差为2的素数称为素数对,如5和7、17和19等,本题目要求 找出小于等于n范围内的素数对,当输入为10时,输出为3 5和5 7。 每对素数对为1行,中间用空格隔开。如果没有找到任何素数对, 则输出empty。
输入n flag=0 for a=2 to n-2
判断a是否是素数 判断a+2是否是素数
输入n T
leap=0 x>0
s=0 a%7!=0 F x=a
for a=1 to n
x%10==7 T F leap=1 x/=10
T leap==0 s+=a*a F
输出s
if(a%7!=0) { leap=0; x=a; while(x>0) { if(x%10==7) leap=1; x/=10; } if(leap==0) s+=a*a; } cout<<s;
例3:输入n个数,找其中的最大值与最小值。
输入n for i=0 to n-1 #include <iostream.h> void main() { int a[100], i, n, di, xi; cin>>n; for(i=0; i<n; i++) cin>>a[i]; di=0; xi=0; for(i=1; i<n; i++) { if(a[di]<a[i]) di=i; if(a[xi]>a[i]) xi=i; } cout<<a[di]<<" "<<a[xi]<<endl; }
数组b b[0] 1 b[1] 2 ...... b[4] 5
一维数组的使用
• 数组的引用
不能一次引用整个数组,只能引用单个数组元素。 int a[5]; a[2]=2;


cin>>a[2]; cout<<a[2];
a={1,2,3,4,5};


下标越界

cin>>a;
cout<<a;

a[5]={1,2,3,4,5};
输入a[i] di=0
xi=0 for i=1 to n-1 T T
a[di]<a[i]
F F
di=i
a[xi]>a[i]
xi=i 输出a[di]和a[xi]
选择排序法
排 序
例4:将任意n个数由大到小排序。 #include <iostream.h> #include <iostream.h> void main( ) void main( ) { { int i, j, temp, n, a[100]; int i, j, temp, a[11]; cin>>n; for(i=1; i<=10; i++) for(i=0; i<n; i++) cin>>a[i]; cin>>a[i]; for(i=1; i<10; i++) for(i=0; i<n-1; i++) for(j=i+1; j<=10; j++) for(j=i+1; j<n; j++) if(a[i]<a[j]) if(a[i]<a[j]) { temp=a[i]; { temp=a[i]; a[i]=a[j]; a[i]=a[j]; a[j]=temp; } a[j]=temp; } for(i=1; i<=10; i++) for(i=0; i<n; i++) cout<<a[i]<<" "; cout<<a[i]<<" "; } }
for i=1 to n
输出a[i]
例6:输入若干个正整数,以0或负数结束,将其中 个位不为0的数输出,并统计满足条件的数据个数。
n=0 count=0 输入x x>0 a[n]=x n++ 输入x for i=0 to n-1 T 输出a[i] count++ 输出count
a[i]%10!=0
数组也要遵循“先定义后使用”的原则。
一维数组的使用
• 一维数组的定义
类型名 数组名[整型常量]; 数组长度
例如: int a[11];
char c[200];
float f[5];
注意:数组长度必须是一个整型常量,不允许出现变量。
int n; n=10; int a[n];
#define N 10 int a[N];
T
都是素数
F
输出 flag=1
T flag==0 emty F
一个正整数,如果它能被7整除,或者它的某一位上的数字为 7, int n, s=0, a, x, leap; 则称其为与7相关的数。现求所有小于等于 n的与7无关的正整数 cin>>n; 的平方和。 for(a=1; a<=n; a++)
• 数组的初始化
类型名 数组名[整型常量] = {初值表}; 数组b b[0] 0 b[1] 1 ......
例1:int b[5]={0, 1, 2, 3, 4};
b[4]
4
int b[5]={1, 2}; 例2: int b[5]={1, 2, 0, 0, 0}; 等价于:
数组b b[0] 1 b[1] 2
a[5]=5;
Leabharlann Baidu
a[3]=a[2]+1;

scanf("%d", &a[0]);
数组元素的使用方法与同类型的变量完全相同。
一维数组的输入和输出
例1:将十个数据输入到数组中,并按逆序输出。
数组a a[0] a[1] #include <stdio.h> int main() { int a[10], i; for(i=0; i<=9; i++) scanf("%d", &a[i]); for(i=9; i>=0; i--) printf("%5d", a[i]); return 0; }
......
b[4] 0
一维数组的使用
• 数组的初始化
类型名 数组名[数组长度] = {初值表}; 数组b 例3: int b[5]={0}; b[0] 0 0 等价于: int b[5]={0, 0, 0, 0, 0}; b[1] ...... 0
b[4]
例4: int b[ ]={1, 2, 3, 4, 5}; 等价于: int b[5]={1, 2, 3, 4, 5};
const int N=10; int a[N];
一维数组的使用
• 一维数组的定义
类型名 数组名[整型常量]; 数组长度
例如: int a[11];
char c[200];
float f[5];
注意:数组元素的下标是从0开始的。 比如:数组a中有11个数组元素: a[0] ,a[1] ,a[2],a[3] …… a[10] 都是int型 数组c中有200个数组元素: c[0] ,c[1] ,c[2],c[3] …… c[199] 都是字符型 数组f中有5个数组元素: f[0] , f[1] , f[2] , f[3] , f[4] 都是float型
一维数组的使用
• 一维数组的存储结构
数组在内存中占用一片连续的存储空间。 数组元素在内存中是顺序并且连续存放的。 例如: int a, b, c;
数组a
a[0] a[1] ......
a[10]
c
int a[3];
a
b
变量无序
a[0] a[1] a[2]
数组元素对号入座,顺序存储
一维数组的使用
#include <iostream.h> 选择排序法 void main( ) { int i, j, n, temp, di, a[100]; 例4:将任意n个数由大到小排序。 cin>>n; #include <iostream.h> for(i=0; i<n; i++) void main( ) cin>>a[i]; { int i, j, temp, n, a[100]; for(i=0; i<n-1; i++) cin>>n; { di=i; for(i=0; i<n; i++) for(j=i+1; j<n; j++) cin>>a[i]; if(a[di]<a[j]) for(i=0; i<n-1; i++) di=j; for(j=i+1; j<n; j++) if(i!=di) if(a[i]<a[j]) { temp=a[i]; { temp=a[i]; a[i]=a[di]; a[i]=a[j]; a[di]=temp; } } a[j]=temp; } for(i=0; i<n; i++) for(i=0; i<n; i++) cout<<a[i]<<" "; cout<<a[i]<<" "; } }
...... a[9]
将数据输入到各个 数组元素中 a[i] i=0~9
查 找
例2:查找一个数是否在某数组中出现。 #include <iostream.h>
设数组为a,待查找的数为x
• 顺序查找法
把x与数组a中的元素从头到 尾一一进行比较
输入n, a, x for i=0 to n-1 T a[i]==x F break i<n yes
F
#include <iostream.h> void main() { int a[100], x, n, i, count; n=0; count=0; cin>>x; while(x>0) { a[n]=x; n++; cin>>x; } for(i=0; i<n; i++) if(a[i]%10!=0) { cout<<a[i]<<" "; count++; } cout<<"个数是:"<<count; }

a[1]与a[2],a[3] …,a[10] a[2]与a[3],a[4] …,a[10]
a[9]与a[10]

引 例
for(i=1; i<10; i++) for(j=i+1; j<=10; j++) { { if(a[i]<a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } } 数组是一组具有相同数据类型的变量的有序集合。 数组中的每一个变量称为该数组的元素。
程序: #include "stdio.h"
b,a,c b,c,a c,b,a
a,b,c
c,a,b
a,c,b
引 例
对于三个数按大小排序 有6种情况 对于十个数按大小排序 有10!种情况
3628800
引 例
将10个数按大小排序
用a[1], a[2], a[3]…, a[10]来存放这10个数 1. 从10个数中找出最大的,放在 a[1]中; 2. 从9个数中找出最大的,放在a[2]中; 9. 从2个数中找出最大的,放在a[9]中。
T
F
no
void main() { int a[100], i, n, x; cin>>n; for(i=0; i<n; i++) cin>>a[i]; cin>>x; for(i=0; i<n; i++) if(a[i]==x) break; if(i<n) cout<<"YES:"<<i; else cout<<"NO"; }
相关文档
最新文档