版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
会计学1C语言程序设计第十一讲例5:输入若干个正整数,以0或负数结束,将其中个位不为0的数输出,并统计满足条件的数据个数。输入xn=0
count++
fori=0ton-1a[i]%10!=0T输出a[i]F
x>0a[n]=xcount=0n++输入x#include<iostream.h>voidmain(){inta[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;}输出count第1页/共29页例6:输入任意n个数,将其中能被5整除的数组成一个新的数组。举例3106525715ab01234561052515mmmmm第2页/共29页#include"iostream.h"voidmain(){ inta[100],b[100],n,m,i; cin>>n; for(i=0;i<n;i++) cin>>a[i]; m=0; for(i=0;i<n;i++) if(a[i]%5==0) { b[m]=a[i]; m++; } for(i=0;i<m;i++) cout<<b[i]<<"";}输入nm=0
m++
fori=0ton-1a[i]%5==0Tb[m]=a[i]F
fori=0ton-1输入a[i]
fori=0tom-1输出b[i]第3页/共29页
基本思想:假设数组a已经按由小到大的顺序排好序,设三个变量low,high和mid分别代表首元素,最后一个元素以及中间元素的下标,初值分别为:low=0、high=n-1、mid=(low+high)/2。从中间元素开始查找,用x和a[mid]比较,此时有三种情况:1)若x==a[mid],则查找成功;2)若x<a[mid],则令high=mid-13)若x>a[mid],则令low=mid+1折半查找法第4页/共29页例:数组元素为:{5,13,19,21,37,56,64,75,80,88,92}1.查找x=21的情况(1)low=0;high=10;mid=(0+10)/2=5513192137566475808892lowmidhigh因为a[mid]>x,所以向左找,令high=mid-1=4(2)low=0;high=4;mid=(0+4)/2=2513192137566475808892lowmidhigh因为a[mid]<x,所以向右找,令low=mid+1=3(3)low=3;high=4;mid=(3+4)/2=3513192137566475808892lowmidhigh因为a[mid]==x,查找成功,所查元素的下标为mid012345678910012345678910012345678910第5页/共29页(1)low=0;high=10;mid=(0+10)/2=5因为a[mid]<x,所以向右找,令low=mid+1=6(2)low=6;high=10;mid=(6+10)/2=8513192137566475808892lowmidhigh因为a[mid]<x,所以向右找,令low=mid+1=9(3)low=9;high=10;mid=(9+10)/2=9513192137566475808892lowmidhigh因为a[mid]>x,所以向左找,令high=mid-1=82.查找x=85的情况513192137566475808892lowmidhigh此时low>high,查找失败012345678910012345678910012345678910第6页/共29页#include<iostream.h>voidmain(){ inta[100],i,n,x,low,high,mid;
cin>>n; for(i=0;i<n;i++) cin>>a[i]; cin>>x;
low=0; high=n-1; while(low<=high) { mid=(low+high)/2; if(x==a[mid]) break; elseif(x<a[mid]) high=mid-1; else low=mid+1; } if(x==a[mid]) cout<<"YES:"<<mid; else cout<<"NO";}第7页/共29页#include<iostream.h>voidmain(){inti,j,temp,n,a[100];
cin>>n;for(i=0;i<n;i++)cin>>a[i];
for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(a[i]>a[j]) {temp=a[i];a[i]=a[j]; a[j]=temp;}
for(i=0;i<n;i++) cout<<a[i]<<"";}例:将任意n个数由小到大排序。排序#include<iostream.h>voidmain(){inti,j,n,temp,di,a[100];
cin>>n;for(i=0;i<n;i++)cin>>a[i];
for(i=0;i<n-1;i++)
di=i;for(j=i+1;j<n;j++)if(a[di]>a[j]) di=j;if(i!=di){temp=a[i];a[i]=a[di]; a[di]=temp;}
for(i=0;i<n;i++) cout<<a[i]<<"";}{选择排序法}第8页/共29页例:用冒泡法对n个数进行排序(从小到大)排序过程:(1)比较第一个数与第二个数,若为逆序a[0]>a[1],则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止——第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上;(2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置;(3)重复上述过程,共经过n-1趟冒泡排序后,排序结束。相邻两数比较,大数小数
第9页/共29页3 8 4 2 13 8 4 2 13 8 4 2 13 4 8 2 13 4 2 8 13 4 2 1 8第一趟3 4 2 1 83 4 2 1 83 2 4 1 83 2 1 4 8第二趟3 2 1 4 82 3 1 4 82 1 3 4 8第三趟2 1 3 4 81 2 3 4 8第四趟a[1]a[2]a[3]a[4]a[5]
j=1to4
j=1to3
j=1to2
j=1to1由小到大排序第10页/共29页#include<stdio.h>voidmain(){inta[100],n,i,j,temp;scanf("%d",&n);for(i=1;i<=n;i++) scanf("%d",&a[i]);for(i=1;i<n;i++) for(j=1;j<=n-i;j++) if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; }for(i=1;i<=n;i++) printf("%5d",a[i]);}第11页/共29页1 3 4 98 5 2 35 2 4 67 6 2 1a0a1a2a30 1 2 3a0[0] a0[1] a0[2] a0[3]a1[0] a1[1] a1[2] a1[3]a2[0] a2[1] a2[2] a2[3]a3[0] a3[1] a3[2] a3[3]a第12页/共29页二维数组的基本概念类型名数组名[常量1][常量2];例如:inta[3][4];整型二维数组名字为a3行a[0]a[0]
存储结构
逻辑结构a[0][0]数组a
定义4列共12个元素a[0]a[0]a[1][0]a[1][1]
a[1][2]
a[1][3]
a[2][0]
a[2][1]
a[2][2]
a[2][3]是一个矩阵或一张表格第0行第1行第2行第0列第1列第2列第3列a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]按行存储a[0]a[1]a[2][0][1][2][3]一维数组个数一维数组中元素的个数第13页/共29页分行初始化例inta[2][3]={{1,2},{4}};例inta[][3]={{1,2},{4}};部分初始化a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]120400行长度可以省略例inta[2][3]={{1,2,3},{4,5,6}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456全部初始化a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]120400第14页/共29页按存储顺序初始化例inta[2][3]={1,2,4};例inta[2][3]={1,2,3,4,5,6};全部初始化部分初始化例inta[][3]={1,2,3,4,5};行长度可以省略a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]124000a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123450第15页/共29页123456789101112二维数组的输入和输出例1:将一个3×4矩阵输入到数组中并按行输出。#include"stdio.h"voidmain(){inta[3][4],i,j;for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);for(i=0;i<3;i++){for(j=0;j<4;j++)printf("%3d",a[i][j]);printf("\n");}}01 2 3012第16页/共29页举例例2:写结果。#include<stdio.h>voidmain(){ inti,x[3][3]={{6,5},{4,3},{2,1}}; for(i=0;i<3;i++) printf("%d",x[i][2-i]);}650430210012012032第17页/共29页例3:程序功能是求二维数组每列元素的平均值,修改程序中的错误。#include"iostream.h"#defineM3;voidmain(){inta[M][M]={1,2,3,4,5,6,7}inti,j;for(i=0;i<M;i++){for(j=0;j<M;j++) ave[i]=ave[i]+a[i][j];ave[i]=ave[i]/M;}for(j=0;j<M;j++)cout<<""<<ave[j];}#include"iostream.h"#defineM3voidmain(){inta[M][M]={1,2,3,4,5,6,7};inti,j;floatave[M];for(i=0;i<M;i++){for(j=0;j<M;j++) ave[i]=ave[i]+a[j][i];ave[i]=ave[i]/M;}for(j=0;j<M;j++) cout<<""<<ave[j];}={0}第18页/共29页#include<stdio.h>voidmain(){inta[50][50],m,n,i,j,row,column,max;cin>>m>>n;for(i=0;i<m;i++)for(j=0;j<n;j++)scanf("%d",&a[i][j]);
max=a[0][0];
for(i=0;i<m;i++)for(j=0;j<n;j++)
if(max<a[i][j])
{max=a[i][j]; row=i; column=j;}
printf("max=%d,row=%d,column=%d",max,row,column);}例4:求二维数组中最大元素值及其行列号row=0;column=0;第19页/共29页例5:将二维数组行列元素互换,存到另一个数组中a=123456b=142536举例#include<iostream.h>#include<iomanip.h>voidmain(){inta[50][50],b[50][50];intm,n,i,j;cin>>m>>n;for(i=0;i<m;i++)for(j=0;j<n;j++) cin>>a[i][j];for(i=0;i<n;i++)for(j=0;j<m;j++) b[i][j]=a[j][i];for(i=0;i<n;i++){for(j=0;j<m;j++)cout<<setw(3)<<b[i][j];cout<<endl;}}沿主对角线将矩阵a翻转所得到的矩阵就是a的转置矩阵第20页/共29页
矩阵的和运算123456789+111654987=234101010161616
矩阵的积运算123456789321654987=?????????1*3+2*6+3*9i行上的元素分别与j列上的元素相乘后的累加和作为结果矩阵的[i][j]矩阵的运算
矩阵的差运算123456789+111654987=012-202-202第21页/共29页例6:打印杨辉三角形。(a+b)n……111121133114641#include<stdio.h>#defineM30voidmain(){inta[M][M]={0},i,j,n;scanf("%d",&n);for(i=0;i<n;i++){a[i][0]=1; a[i][i]=1; }
for(i=2;i<n;i++)for(j=1;j<i;j++) a[i][j]=a[i-1][j]+a[i-1][j-1];for(i=0;i<n;i++){ for(j=0;j<=i;j++) printf("%5d",a[i][j]); printf("\n"); }}举例0123401234第22页/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026护理核心制度及团体标准考核试题及答案
- 办公区域中毒应急救援方案
- 2026年医疗器械生产质量管理规范培训考核试卷测试题及答案
- 社区工作者个人工作计划
- 给水管道施工方案范本
- 医院装修施工方案
- 政务运营面试题及答案
- 青少年学生《感恩父母感谢老师》感恩教育主题班会课件
- 技术等级考试(农艺工高级)能力提高训练题及答案汇-总
- 耕作学试题参考
- 2025年中国电源散热器配件市场调查研究报告
- 供应商账户管理制度
- 人教版六年级数学下册第四单元比例质量提升卷及答案
- 处方流转与电子处方管理制度
- 国家安全教育大学生读本-第一章完全准确领会总体国家安全观
- (完整版)《增广贤文》全文
- 《建筑施工土石方工程安全技术规范》JGJ180
- GB/T 19822-2024铝及铝合金硬质阳极氧化膜规范
- TSG+23-2021气瓶安全技术规程
- 重点传染病防治学习通超星课后章节答案期末考试题库2023年
- 机械制图机械制图基础知识课件
评论
0/150
提交评论