好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

第4章 c语言习题课.ppt

14页
  • 卖家[上传人]:M****1
  • 文档编号:570032094
  • 上传时间:2024-08-01
  • 文档格式:PPT
  • 文档大小:313.01KB
  • / 14 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第第4 4章章 习题课习题课1. 改进的冒泡排序改进的冒泡排序为了解决问题为了解决问题, 在程序中设置一个在程序中设置一个变量变量flag, 用它记录在每一轮比较用它记录在每一轮比较中是否进行了交换中是否进行了交换; 在每轮比较在每轮比较开始前开始前flag=0, 如果在此轮比较中如果在此轮比较中进行了交换进行了交换, 则则flag=1, 在一轮比在一轮比较较结束后结束后, 判断判断flag的值是否为的值是否为1, 如如果果值为值为1, 则继续进行排序则继续进行排序; 如果值如果值为为0, 说明在此轮比较中没有进行说明在此轮比较中没有进行交换交换(即已经完成排序了即已经完成排序了), 此时就此时就可以终止循环可以终止循环(即结束排序即结束排序)#include #define N 6void main( ){ int a[N] , i , j , t , flag=1; for ( i=0; ia[j+1] ) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; flag=1; } } for ( i=0 ; i

      求每个人的总分和该学习小组各门课的平均成绩姓名姓名高数高数英语英语政治政治总分总分Mary857888?John908091?Mike799284?Alex838680?Stone877595????用一个二维数组用一个二维数组来存放成绩来存放成绩 int s[5][4];用一个一维数组用一个一维数组来存放来存放各门课各门课的平均的平均成绩成绩float ave[3];每个人三门课的成绩是输入的每个人三门课的成绩是输入的总分和各门课的平均成绩是计算出来的总分和各门课的平均成绩是计算出来的 #includevoid main( ){ int i, j, s[5][4], sum; float ave[3]; for(i=0; i<5; i++) { for(j=0; j<3; j++) scanf("%d", &s[i][j]); s[i][j]=s[i][0]+s[i][1]+s[i][2]; } for(j=0; j<3; j++) { sum=0; for(i=0; i<5; i++) sum=sum+s[i][j]; ave[j]=sum/5.0; } for(i=0; i<5; i++) { for(j=0; j<4; j++) printf("%4d", s[i][j]); printf(" \n "); } for(i=0; i<3; i++) printf(" %6.2f ", ave[i]);}输入成绩输入成绩计算总分计算总分对每一门课对每一门课(即每一列即每一列)进行处理进行处理: 先将每列先将每列的的5个成绩累加求和个成绩累加求和; 再将总和除再将总和除5, 得到每得到每门课的平均分门课的平均分输出结果输出结果 #include#define N 5void main( ){ int a[N], b[N], i, temp; for(i=0; i#includevoid main( ){ char s1[81], s2[40]; int i, j, len1, len2, max; printf("输入字符串输入字符串1::"); gets(s1); printf("输入字符串输入字符串2::"); gets(s2); max=0; len1=strlen(s1); len2=strlen(s2); for(i=1; s1[i]!=‘\0’; i++) //该循环是确定插入位置该循环是确定插入位置 if(s1[i]>s1[max]) max=i; for( i=len1; i>=max; i--) //将下标将下标i之后的字符后移之后的字符后移len2个字节个字节 s1[i+len2]=s1[i]; j=max+1; //j指向最大字符的下一个字节处指向最大字符的下一个字节处 for( i=0; i

      初始时,有序序列中只有第一个数,素值插入到有序序列的合适位置初始时,有序序列中只有第一个数,其余其余N-1个数组成无序序列,则个数组成无序序列,则N个数需进个数需进N-1次插入次插入寻找在有序序列寻找在有序序列中插入位置可以从有序序列的最后一个数往前找,在未找到插入点之前中插入位置可以从有序序列的最后一个数往前找,在未找到插入点之前可以同时向后移动元素,为插入元素准备空间可以同时向后移动元素,为插入元素准备空间原始数据:原始数据:int a[6]={8, 3, 1, 5, 9, 2}; 831592初始状态初始状态831592第第1轮,插入轮,插入33381592831第第2轮,插入轮,插入18138592第第3轮,插入轮,插入585第第4轮,插入轮,插入91358929第第5轮,插入轮,插入2135892 98532 教材例教材例4.8 插入排序插入排序# include #define N 20void main(){ int a[N], i, j, t; printf("Please input %d numbers:", N); for(i=0; i=0 && t#define N 10 void main( ){ int a[N][N], m, n, i, j, sign; printf("input m and n(m,n<=%d):\n", N); scanf("%d%d", &m, &n); printf("input the array:\n"); for(i=0; ia[j][sign]) //判断判断a[i][sign]是否是该列中的最小值是否是该列中的最小值 break; //如果不是最小值,终止如果不是最小值,终止for循环循环 if(j>=m) printf("鞍点鞍点:%d\n", a[i][sign]); }} 教材例教材例4.11:给定一个字符串,对其进行简单加密处理。

      给定一个字符串,对其进行简单加密处理 分别显示加密数据和解密数据分别显示加密数据和解密数据 加密规则:只对英文字母加密,其他字符不变加密规则:只对英文字母加密,其他字符不变 小写字母的小写字母的ASCII码码+2循环,大写字母的循环,大写字母的ASCII码码-2循环979899100…118119120121122abcd…vwxyzcdef…xyzababcdezyxwvu……ABCDEZYXWVU……65666768……87888990ABCD……WXYZYZAB……UVWX121-24=97122-24=9897+2=9965+24=8966+24=9067-2=65 #include "stdio.h"#define N 20void main( ){ char c[N]; int i;; printf("请输入一个字符串:请输入一个字符串:"); gets(c); for(i=0;c[i]!=‘\0’;i++) //对字符串对字符串c进行加密操作进行加密操作 { if(c[i]>='a'&&c[i]<'y') c[i]=c[i]+2; else if(c[i]=='y'||c[i]=='z') c[i]=c[i]-24; else if(c[i]>'B'&&c[i]<='Z') c[i]=c[i]-2; else if(c[i]=='A'||c[i]=='B') c[i]=c[i]+24; } puts(c); //输出加密后的字符串输出加密后的字符串 ... 见下页见下页教材例教材例4.11参考程序参考程序 /*对字符串对字符串c进行解密操作进行解密操作*/for(i=0; c[i]!='\0'; i++) { if(c[i]>'b'&&c[i]<='z') c[i]=c[i]-2; else if(c[i]=='a'||c[i]=='b') c[i]=c[i]+24; else if(c[i]>='A'&&c[i]<'Y') c[i]=c[i]+2; else if(c[i]=='Y'||c[i]=='Z') c[i]=c[i]-24; } puts(c); //输出解密后的字符串输出解密后的字符串}教材例教材例4.11参考程序参考程序 教材例教材例4.12::有有3个字符串个字符串,,编程序找出其中最大者。

      编程序找出其中最大者 分析:分析:3个字符串可考虑用二维字符数组来存放,现设一个二维的字符个字符串可考虑用二维字符数组来存放,现设一个二维的字符数组数组str,大小为,大小为3×20,即,即3行行20列用一个一维字符数组列用一个一维字符数组string来存放来存放那个最大的字符串,首先那个最大的字符串,首先str[0]和和str[1]比较,将其中大的字符串存放在比较,将其中大的字符串存放在string中,然后中,然后string与与str[2]比较,若比较,若str[2]大于大于string,则将,则将str[2]中的中的字符串存放到字符串存放到string中abcd\0abfgh\0xyz\0str[0]str[1]str[2]string a b f g h \0xyz\0 #include #include void main( ){ char str[3][20], string[20]; printf(“输入输入3个字符串个字符串:\n”); for( int i=0; i<3; i++) gets(str[i]); if (strcmp(str[0], str[1])>0) strcpy(string, str[0]); else strcpy(string, str[1]); if (strcmp(str[2], string)>0) strcpy(string, str[2]); printf(“\nthe largest string is:\n%s\n”, string);}教材例教材例4.12参考程序参考程序str[i]表示第表示第i行字符的首地址行字符的首地址 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.