全国计算机等级考试二级C语言考前复习资料.docx
- 文档编号:23781656
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:13
- 大小:63.10KB
全国计算机等级考试二级C语言考前复习资料.docx
《全国计算机等级考试二级C语言考前复习资料.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级C语言考前复习资料.docx(13页珍藏版)》请在冰豆网上搜索。
全国计算机等级考试二级C语言考前复习资料
第六章数组
例题1:
输入5个学生的数学成绩,求最低分
【分析】:
1输入五位同学数学成绩
2假定第0位同学成绩最低,赋予min(编号从零开始)
3依次比较min与第1、2、3、4同学的成绩,发现更小的就赋予min
4输出五位同学成绩
5输出最低分min
【源码】
#include"stdio.h"
main()
{
inti,min;
intmath[5];
printf("请输入5位同学的数学成绩:
\n");
for(i=0;i<5;i++)
{
scanf("%d",&math[i]);
}
min=math[0];
for(i=1;i<5;i++)
{
if(min>math[i])
{
min=math[i];
}
}
printf("5位同学的数学成绩为:
\n");
for(i=0;i<5;i++)
{
printf("%d\n",math[i]);
}
printf("最低分为:
%d\n",min);
}
练习:
输入10个学生的英语成绩,求最高分,最低分,平均分。
例题二、将矩阵a的右上三角元素置0
例如:
右上三角
【分析】
i\j
0
1
2
3
0
1
2
3
4
1
5
6
7
8
2
9
3
6
7
3
2
4
3
1
我们发现:
右上角元素a[i][j],就是j>i的元素
【思路】依次查看每个元素下标,如果j>i,那么将元素置0(依次查看每个元素,用双重循环)
【源码】
#include
main()
{
inti,j;
inta[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("%4d",a[i][j]);/*输出宽度为4,不够补空格*/
printf("\n");
}
}
练习:
求出数组周边元素的平均值。
例如,若a数组中的值为:
01279
19745
23831
45682
59141
输出结果应为:
aver=3.375
注意:
周边元素是那些元素?
结果aver是float型,数组a是什么类型?
例题3:
输入一行英文,如IMissYou!
,要求将大写字母换小写,小写字母换大写
【分析】
在本题中,一行英文里有三种字符:
大写字母、小写字母、其他(空格,标点符号),所以我们用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
#include
main()
{
charch[100];/*安排足够大的空间存字符串,只能多不能少*/
inti,len;
printf("请输入一行英文:
\n");
gets(ch);
len=strlen(ch);/*取字符串实际长度*/
for(i=0;i { if(ch[i]>='a'&&ch[i]<='z')/*判断字母是不是小写*/ { ch[i]=ch[i]-32;/*小写转大写,减去32即可*/ } elseif(ch[i]>='A'&&ch[i]<='Z')/*判断字母是不是大写*/ { ch[i]=ch[i]+32;/*大写转小写,加上32即可*/ } } printf("转换后为: \n"); puts(ch); } 练习: 有一行电文,已经按下面规律译成密码: A-Za-z B-Yb-y C-Xc-x 既第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。 非字母不变。 要求编程序将密码译成原文,并输出密码和原文。 如有密码: svool,nzirgrnv! 例题4: 冒泡排序 【冒泡排序】 依次比较相邻的两个数,将小数放在前面,大数放在后面。 相当于气泡往上升,质量轻的上浮,重的下沉,故称之为冒泡排序。 即在第一趟: 首先比较第1个和第2个数,将小数放前,大数放后。 然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。 至此第一趟结束,将最大的数放到了最后。 在第二趟: 仍从第一对数开始比较,将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。 如此下去,重复以上过程,直至最终完成排序。 原始: [985420] 第一趟排序后: [85420]9 第二趟排序后: [5420]89 第三趟排序后: [420]589 第四趟排序后: [20]4589 第五趟排序后: [0]24589 完成 024589 我们发现,对于6个数: 985420,总共进行了5趟排序,第1趟排序进行了5次两两比较,第i趟排序进行了6-i次两两比较 #include"stdio.h" main() { inti,j,k; inta[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("%d\n",a[i]); } } 练习: 编写程序,用冒泡法对字符串maritime排序(ASCII码小的在前面) 例题5: 选择排序 【选择排序】 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最前,直到全部待排序的数据元素排完。 【示例】: 初始[4938659776132749] 第一趟排序后13[38659776492749] 第二趟排序后1327[659776493849] 第三趟排序后132738[9776496549] 第四趟排序后13273849[76976549] 第五趟排序后1327384949[976576] 第六趟排序后132738494965[9776] 第七趟排序后13273849496576[97] 最后排序结果1327384949657697 第一步: 在[4938659776132749]找到min 使用另一种方法: 记录最大值的下标t, #include"stdio.h" main() { inti,t; inta[8]={49,38,65,97,76,13,27,49}; t=0;/*用a[t]代表max*/ for(i=1;i<8;i++) { if(a[t]>a[i]) { t=i; } } printf("%d\n",a[t]); printf("%d\n",t); } 回顾范例1 #include"stdio.h" main() { inti,min; inta[8]={49,38,65,97,76,13,27,49}; min=a[0]; for(i=1;i<8;i++) { if(min>a[i]) { min=a[i]; } } printf("%d\n",min); } 第二步: 找到min后,将min与第一个位置的元素相交换 交换13与49,即交换a[t]与a[0],此时t=5。 得到: 13[38659776492749] #include"stdio.h" main() { inti,t,temp; inta[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("%d\n",a[0]); } 最后,对于8个数: [4938659776132749],总共进行了7趟排序,第1趟排序进行了7次两两比较,第i趟排序进行了8-i次两两比较(此处i从1开始) #include"stdio.h" main() { inti,j,t,temp; inta[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("%d\n",a[i]); } } 练习: 编写程序,用选择法对大小为10的数组按从大到小排序 附录字符串的输入输出 (1)采用循环的方式读取字符串 #include"stdio.h" main() { chara[15]; inti; printf("请输入15个字符: \n"); for(i=0;i<=14;i++) scanf("%c",&a[i]); printf("\n"); printf("您刚输入的15个字符: "); for(i=0;i<=14;i++) printf("%c",a[i]); } 我们发现: 不输完15个字符就会一直等待你输入 (2)采用%s的方式读取字符串 #include"stdio.h" main() { charc[15]; printf("请输入15个以内的字符: \n"); scanf("%s",c); printf("您刚输入的字符为: \n"); printf("%s\n",c); } 注意: %s读取时遇到空格就认为是结束标志! (3)采用gets()的方式读取字符串 #include"stdio.h" main() { charc[15]; printf("请输入15个以内的字符: \n"); gets(c); printf("您刚输入的字符为: \n"); puts(c); } 说明: gets函数用来输入字符串,能够读取空格和回车符。 puts函数用来输出的,输出时会自动在字符串末尾加一个换行符。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国 计算机等级考试 二级 语言 考前 复习资料