全国计算机等级考试二级,C语言考前复习资料重点
更新时间:2024-07-11 06:56:01 阅读量:3 综合文库 文档下载
第六章 数组
例题1:输入5个学生的数学成绩,求最低分
【分析】:
1 输入五位同学数学成绩
2 假定第0位同学成绩最低,赋予min (编号从零开始)
3 依次比较min与第1、2、3、4同学的成绩,发现更小的就赋予min 4 输出五位同学成绩 5 输出最低分min
【源码】
#include \ main() { int i,min; int math[5]; printf(\请输入5位同学的数学成绩:\\n\ for(i=0;i<5;i++) { scanf(\&math[i]); } min=math[0]; for(i=1;i<5;i++) { if(min>math[i]) { min=math[i]; } } printf(\位同学的数学成绩为:\\n\ for(i=0;i<5;i++) { printf(\ } printf(\最低分为:%d\\n\ }
练习:输入10个学生的英语成绩,求最高分,最低分,平均分。
例题二、将矩阵a的右上三角元素置0
1 0 0 0 例如: 1 2 3 4 右上三角5 9 2 6 3 4 7 6 3 8 7 1 5 9 2 6 3 4 0 6 3 0 0 1
【分析】
i\\j 0 1 2 3 0 1 5 9 2 1 2 6 3 4 2 3 7 6 3 3 4 8 7 1 我们发现:右上角元素a[i][j],就是j>i的元素
【思路】依次查看每个元素下标,如果j>i,那么将元素置0(依次查看每个元素,用双重循环)
【源码】
#include
main()
{
int i,j;
int a[4][4]={1,2,3,4,5,6,7,8,9,3,6,7,2,4,3,1};
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(j>i) /*判断是否是右上三角*/
{a[i][j]=0; } /*置0*/
}
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
printf(\M\ /*输出宽度为4,不够补空格*/
printf(\
}
}
练习:求出数组周边元素的平均值。例如,若a 数组中的值为:
0 1 2 7 9 1 9 7 4 5 2 3 8 3 1 4 5 6 8 2 5 9 1 4 1
输出结果应为:aver=3.375
注意:周边元素是那些元素? 结果aver是float型,数组a是什么类型?
例题3:输入一行英文,如I Miss You!,要求将大写字母换小写,小写字母换大写
【分析】
在本题中,一行英文里有三种字符:大写字母、小写字母、其他(空格,标点符号),所以我们用if-elseif-else结构,而不是if-else结构。但又因为else里面没有做任何处理,所以只剩下了if-elseif。
我们翻开课本最后一页ASCII表,发现大写字符的ASCII值比小写字母小了32,故有: ?a?-32=?A? 、 ?A?+32=?a?。既:小写字母-32=大写字母 输入一行英文,我们有三种方式,
1、scanf(“%c”,&ch[0]) 2、scanf(“%s”,ch) 3、gets(ch)
在这里我们选用第三种,原因参考附录
【源码】 #include
练习:有一行电文,已经按下面规律译成密码: A-Z a-z B-Y b-y C-X c-x
既第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。非字母不变。要求编程序将密码译成原文,并输出密码和原文。如有密码:svool,nzirgrnv!
例题4:冒泡排序
【冒泡排序】
依次比较相邻的两个数,将小数放在前面,大数放在后面。相当于气泡往上升,质量轻的上浮,重的下沉,故称之为冒泡排序。
即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。
在第二趟:仍从第一对数开始比较,将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。
如此下去,重复以上过程,直至最终完成排序。
原始: [9 8 5 4 2 0] 第一趟排序后:[8 5 4 2 0] 9 第二趟排序后:[5 4 2 0 ]8 9 第三趟排序后:[4 2 0] 5 8 9 第四趟排序后:[2 0] 4 5 8 9 第五趟排序后:[0] 2 4 5 8 9 完成 0 2 4 5 8 9
我们发现,对于6个数:9 8 5 4 2 0 ,总共进行了5趟排序,第1趟排序进行了5次两两比较,第i趟排序进行了6-i次两两比较
#include \main() { int i,j,k; int a[6]={9,8,5,4,2,0}; for(i=1;i<6;i++) { for(j=0;j<6-i;j++) { if(a[j]>a[j+1]) { k=a[j]; a[j]=a[j+1]; a[j+1]=k; } } } for(i=0;i<6;i++) { printf(\ } } 练习:编写程序,用冒泡法对字符串maritime排序(ASCII码小的在前面)
例题5:选择排序
【选择排序】
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最前,直到全部待排序的数据元素排完。 【示例】:
初始 [49 38 65 97 76 13 27 49] 第一趟排序后 13 [38 65 97 76 49 27 49] 第二趟排序后 13 27 [65 97 76 49 38 49] 第三趟排序后 13 27 38 [97 76 49 65 49] 第四趟排序后 13 27 38 49 [76 97 65 49 ] 第五趟排序后 13 27 38 49 49 [97 65 76] 第六趟排序后 13 27 38 49 49 65 [97 76] 第七趟排序后 13 27 38 49 49 65 76 [97]
最后排序结果 13 27 38 49 49 65 76 97
第一步:在[49 38 65 97 76 13 27 49]找到min
回顾范例1 使用另一种方法:记录最大值的下标t, #include \#include \ main() main() { { int i,min; int i,t; int a[8]={49,38,65,97,76,13,27,49}; int a[8]={49,38,65,97,76,13,27,49}; min=a[0]; t=0; /*用a[t]代表max*/ for(i=1;i<8;i++) for(i=1;i<8;i++) { { if(min>a[i]) if(a[t]>a[i]) { { min=a[i]; t=i; } } } } printf(\ printf(\a[t]); } printf(\ t); }
第二步:找到min后,将min与第一个位置的元素相交换
交换13与49,即交换a[t]与a[0],此时t=5。得到:13 [38 65 97 76 49 27 49]
#include \ main() { int i,t,temp; int a[8]={49,38,65,97,76,13,27,49}; t=0; for(i=1;i<8;i++) { if(a[t]>a[i]) { t=i; } } if(t!=0) /*如果原本a[o]就最小,那么就不用换*/ { temp=a[t]; a[t]=a[0]; a[0]=temp; } printf(\ }
最后,对于8个数:[49 38 65 97 76 13 27 49] ,总共进行了7趟排序,第1趟排序进行了7次两两比较,第i趟排序进行了8-i次两两比较 (此处i从1开始)
#include \ main() { int i,j,t,temp; int a[8]={49,38,65,97,76,13,27,49}; for(i=0;i<8;i++) { t=i; /*第i趟从第i个元素开始比较,i从0开始*/ for(j=i+1;j<8;j++) { if(a[t]>a[j]) { t=j; } } if(t!=i) /*将第i趟中最大值放在a[i]的位置*/ { temp=a[t]; a[t]=a[i]; a[i]=temp; } } for(i=0;i<8;i++) { printf(\ } }
练习:编写程序,用选择法对大小为10的数组按从大到小排序
附录 字符串的输入输出
(1)采用循环的方式读取字符串 #include \ main() { char a[15]; int i; printf(\请输入15个字符:\\n\ for (i=0;i<=14;i++) scanf(\ printf(\ printf(\您刚输入的15个字符:\ for (i=0;i<=14;i++) printf(\ }
我们发现:不输完15个字符就会一直等待你输入
(2)采用%s的方式读取字符串 #include \ main() { char c[15]; printf(\请输入15个以内的字符:\\n\ scanf(\ printf(\您刚输入的字符为:\\n\ printf(\ }
注意:%s读取时遇到空格就认为是结束标志!
(3)采用gets()的方式读取字符串 #include \ main() { char c[15]; printf(\请输入15个以内的字符:\\n\ gets(c); printf(\您刚输入的字符为:\\n\ puts(c); } 输入:I am a worker. 输出结果:I am a worker. 输入:I am a worker. 输出结果:I 输入:I am a worker. 输出结果:I am a worker.
说明:gets函数用来输入字符串,能够读取空格和回车符。puts函数用来输出的,输出时会自动在字符串末尾加一个换行符。
正在阅读:
孩子生日宴会家长讲话稿内容04-10
最新小企业会计报表08-15
于娟《此生未完成》经典语录02-15
爸妈不在家作文五年级06-19
肌肉的练习题12-06
备战2015年高考政治(四)哲学生活主观题第四单元(历史唯物主义)04-21
压控振荡电路的设计05-16
带着失败飞翔作文700字07-02
武汉大学排球理论考试题库01-28
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 复习资料
- 等级考试
- 考前
- 二级
- 重点
- 语言
- 计算机
- 全国
- 中国汽车工业优秀归国人才奖推荐书
- 数字出版法律制度构建与文化安全
- 2016-2017学年天津市蓟州区等五区县联考八年级(上)期中物理试
- 会计电算化实验报告四
- 高中化学第三章第一节弱电解质的电离学案 新人教版
- 【语文中考真题】吉林省2018年中考语文试题(解析版)
- 高效液相色谱习题及参考答案
- 填料箱盖工艺夹具设计 工序卡片 工程图
- 西安交通大学17年3月课程考试《保险学》作业考核试题
- 水质在线监测 - 水质监测系统软件实时在线监测系统 - 水质监测系
- 中国汽车工业优秀(青年)科技人才奖推荐书
- XX小学2017年上半年综治民调方案
- 围堰施工方案
- 上海汽车工业教育基金会资助奖励办法
- 吊装方案 - 图文
- 价值分析案例-太阳公司—太原管道工程
- 挑选低价超跌潜力股只用三招
- 五年高考真题与解析:形容词和副词
- 中国资本市场重大审计失败案例研究_来自4个案例的实证研究
- 如何建立垂直型门户网站