1、计算机等级考试二级C语言考前复习资料经典例题 数组部分例题1:输入5个学生的数学成绩,求最低分【分析】:1 输入五位同学数学成绩2 假定第0位同学成绩最低,赋予min (编号从零开始)3 依次比较min与第1、2、3、4同学的成绩,发现更小的就赋予min4 输出五位同学成绩 5 输出最低分min【源码】#include stdio.hmain() int i,min; int math5; printf(请输入5位同学的数学成绩:n); for(i=0;i5;i+) scanf(%d,&mathi); min=math0; for(i=1;imathi) min=mathi; printf(5
2、位同学的数学成绩为:n); for(i=0;ii的元素 【思路】依次查看每个元素下标,如果ji,那么将元素置0(依次查看每个元素,用双重循环)【源码】#includemain() int i,j; int a44=1,2,3,4,5,6,7,8,9,3,6,7,2,4,3,1; for(i=0;i4;i+) for(j=0;ji) /*判断是否是右上三角*/ aij=0; /*置0*/ for(i=0;i4;i+) for(j=0;j4;j+) printf(%4d,aij); /*输出宽度为4,不够补空格*/ printf(n); 练习:求出数组周边元素的平均值。例如,若a 数组中的值为:
3、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,故有
4、:a-32=A 、 A+32=a。既:小写字母-32=大写字母 输入一行英文,我们有三种方式,1、scanf(“%c”,&ch0)2、scanf(“%s”,ch)3、gets(ch)在这里我们选用第三种,原因参考附录【源码】#include #include main() char ch100; /*安排足够大的空间存字符串,只能多不能少*/ int i,len; printf(请输入一行英文:n); gets(ch); len=strlen(ch); /*取字符串实际长度*/ for(i=0;i=a&chi=A&chi=Z) /*判断字母是不是大写*/ chi=chi+32; /*大写转小写
5、,加上32即可*/ printf(转换后为:n); puts(ch);练习:有一行电文,已经按下面规律译成密码:A-Z a-zB-Y b-yC-X c-x既第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。非字母不变。要求编程序将密码译成原文,并输出密码和原文。如有密码:svool,nzirgrnv!例题4:冒泡排序【冒泡排序】 依次比较相邻的两个数,将小数放在前面,大数放在后面。相当于气泡往上升,质量轻的上浮,重的下沉,故称之为冒泡排序。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数
6、,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较,将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。原始: 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趟
7、排序,第1趟排序进行了5次两两比较,第i趟排序进行了6-i次两两比较#include stdio.hmain() int i,j,k; int a6=9,8,5,4,2,0; for(i=1;i6;i+) for(j=0;jaj+1) k=aj; aj=aj+1; aj+1=k; for(i=0;i6;i+) printf(%dn,ai); 练习:编写程序,用冒泡法对字符串maritime排序(ASCII码小的在前面)例题5:选择排序【选择排序】每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最前,直到全部待排序的数据元素排完。【示例】: 初始 49 38 65
8、 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使用另一
9、种方法:记录最大值的下标t, #include stdio.hmain() int i,t; int a8=49,38,65,97,76,13,27,49; t=0; /*用at代表max*/ for(i=1;iai) t=i; printf(%dn,at); printf(%dn, t);回顾范例1#include stdio.hmain() int i,min; int a8=49,38,65,97,76,13,27,49; min=a0; for(i=1;iai) min=ai; printf(%dn,min);第二步:找到min后,将min与第一个位置的元素相交换交换13与49,即交换
10、at与a0,此时t=5。得到:13 38 65 97 76 49 27 49#include stdio.hmain() int i,t,temp; int a8=49,38,65,97,76,13,27,49; t=0; for(i=1;iai) t=i; if(t!=0) /*如果原本ao就最小,那么就不用换*/ temp=at; at=a0; a0=temp; printf(%dn,a0);最后,对于8个数:49 38 65 97 76 13 27 49 ,总共进行了7趟排序,第1趟排序进行了7次两两比较,第i趟排序进行了8-i次两两比较 (此处i从1开始)#include stdio.
11、hmain() int i,j,t,temp; int a8=49,38,65,97,76,13,27,49; for(i=0;i8;i+) t=i; /*第i趟从第i个元素开始比较,i从0开始*/ for(j=i+1;jaj) t=j; if(t!=i) /*将第i趟中最大值放在ai的位置*/ temp=at; at=ai; ai=temp; for(i=0;i8;i+) printf(%dn,ai); 练习:编写程序,用选择法对大小为10的数组按从大到小排序附录 字符串的输入输出(1)采用循环的方式读取字符串#include stdio.hmain() char a15; int i; p
12、rintf(请输入15个字符:n); for (i=0;i=14;i+) scanf(%c,&ai); printf(n); printf(您刚输入的15个字符:); for (i=0;i=14;i+) printf(%c,ai);我们发现:不输完15个字符就会一直等待你输入(2)采用%s的方式读取字符串#include stdio.hmain() char c15; printf(请输入15个以内的字符:n); scanf(%s,c); printf(您刚输入的字符为:n); printf(%sn,c);注意:%s读取时遇到空格就认为是结束标志!(3)采用gets()的方式读取字符串#include stdio.hmain() char c15; printf(请输入15个以内的字符:n); gets(c); printf(您刚输入的字符为:n); puts(c);说明:gets函数用来输入字符串,能够读取空格和回车符。puts函数用来输出的,输出时会自动在字符串末尾加一个换行符。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1