300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 《C语言程序设计》第4版 何钦铭 颜晖主编 课后习题答案 第7章 课后习题

《C语言程序设计》第4版 何钦铭 颜晖主编 课后习题答案 第7章 课后习题

时间:2019-12-30 13:48:53

相关推荐

《C语言程序设计》第4版 何钦铭 颜晖主编 课后习题答案 第7章 课后习题

P165

练习7-1的第一问:有,结果只能输出一个下标,但输入数据中可能会有两个需查找的值

#include<stdio.h>//例7-3 #define N 10int main(void){int i,n,x,flag;//flag 的作用是为了方便输出找不到的情况,需要放到循环外面 int a[N];printf("Enter n(1<=n<=10),x:");scanf("%d%d",&n,&x);printf("输入%d个整数:",n);for(i=0;i<n;i++){scanf("%d",&a[i]);}flag=0;//是否有下标的判断标准,默认没有,有则改变,不等于0即可 for(i=0;i<n;i++){if(x==a[i]){printf("下标为:%d\n",i);flag=1;//有,则不需要输出Not,改变flag//break; //这里不能加break;否则 只能查找到一个下标,但输入数据中可能有两个或多个满足条件的元素 }}if(flag==0){printf("Not Found!\n");}return 0;}

练习7-2到7-4

#include<stdio.h>int main(void){/*求最大值及其下标(练习7-2)*/{ int n,a[10],i,max;printf("Enter n:");scanf("%d",&n);printf("Enter %d numbers:",n);for(i=0;i<n;i++){scanf("%d",&a[i]);} max=0;for(i=0;i<n;i++){if(a[i]>a[max]){max=i;}}printf("max=%d,min_index=%d\n\n",a[max],max);} /*将数组中的数逆序存放(练习7-3)*/{ int n,i,t,j;int a[10];printf("Enter n:");scanf("%d",&n);printf("Enter %d numbers:",n);for(i=0;i<n;i++){scanf("%d",&a[i]);//存放 } i=0;j=n-1;while(i<j){//逆序 t=a[j];a[j]=a[i];a[i]=t;i++;j--;}for(i=0;i<n;i++){printf("%4d",a[i]);}printf("\n\n");} /*找出不是两个数组共有的元素(练习7-4)*/int i,j,k,m,n;int a[10],b[10],c[20];printf("Enter n:");scanf("%d",&n);printf("Enter %d numbers:",n);for(i=0;i<n;i++){scanf("%d",&a[i]);}printf("Enter m:");scanf("%d",&m);printf("Enter %d numbers:",m);for(j=0;j<m;j++){scanf("%d",&b[j]);}for(i=0;i<n;i++){for(j=0;j<m;j++)//用a的元素分别与b的元素比较,共n*m次 {if(a[i]==b[j]){//如果a中的元素与b中的元素相等,就跳出内循环 break;}}if(j>=m){//正常比较了m次,但没有相等的,就把a中这个的元素 放到数组c中存起来 c[k]=a[i];k++;//记录有几个不相等的 }}for(i=0;i<m;i++)//外循环为m,内循环为n {for(j=0;j<n;j++)//用b中的元素去和a中的比较 {if(b[i]==a[j]){//如果相等就跳出内循环 break;}}if(j>=n){//如果b中第一个元素与a中每个元素都比较了,但没有找到相等的就把这个b中的元素存到数组c中 c[k]=b[i];k++;//累计不相等的 }}printf("两个数组的非共有元素:\n"); for(i=0;i<k;i++){printf("%4d",c[i]);//此输出满足非共有元素输出 }return 0;}

P172

练习7-5:原本3行2列,改后输出2行3列。

练习7-6(1):将for的外循环改为列循环,内循环改为行循环,即外j内i。

(2):相比较与遍历上/下三角,把判断条件if去掉,直接实现交换,再将输出改为先列后行。

练习7-7正确,练习7-8只可参考,不完全正确

#include<stdio.h>#define K 13int main(void){/*矩阵运算(练习7-7)*//*int n,i,j,sum=0;int a[6][6];printf("Enter n:");scanf("%d",&n);printf("Enter %d numbers:\n",n*n);for(i=0;i<n;i++){for(j=0;j<n;j++){scanf("%d",&a[i][j]);sum+=a[i][j];//求矩阵中所以数的和 }} for(i=0;i<n;i++){for(j=0;j<n;j++){if(i==n-1)//减去最后一行 {sum-=a[i][j];}else if(j==n-1){//减去最后一列 sum-=a[i][j];}else if(i+j==n-1){//减去副对角线 sum-=a[i][j];}}}printf("sum=%d\n\n",sum);/*方阵循环右移(练习7-8)*///暂时保留,此程序m的值无论为多少,最后的结果都是一样的 int m,n,i,j,t,k;//按照课本上的公式推,m=2,得到3 1 2,其他人的参考过程需要得到2 3 1,为三角形循环转动两次得到 int a[6][6],b[6][6]={0};//按照课本上的公式推,m=1,得到 2 3 1,三角形循环得到 3 1 2 printf("Enter n,m:");scanf("%d%d",&n,&m); printf("Enter %d numbers:\n",n*n);for(i=0;i<n;i++){for(j=0;j<n;j++){scanf("%d",&a[i][j]);}}m=m%n;//防止出现m=n或m>n的情况。若m=n,则是一个完整的循环,输出数列位置不变;若m>n,则移动位数为m%n,即余。 for(i=0;i<n;i++)//用循环解答,三阶就用三角形,四阶就用正方形,按一定顺序,从小到大转 {for(j=1;j<=m;j++){t=a[i][n-1];//n=3,m=2时,第一遍 3,第二遍2,第三遍为第二行最后一个6,然后是5,接着是第三行9,最后是8 for(k=n-2;k>=0;k--){a[i][k+1]=a[i][k];//后一项被前一项覆盖,到倒数第二项 第一遍2覆盖3,1覆盖2,行列式第一行为3 1 2, }//第二遍1覆盖2,3覆盖1,行列式第一行为2 3 1,为所求行列式第一行 a[i][0]=t; //t的作用就是把每次最后的那个值保留,然后存到最前面 }}/*for(i=0;i<n;i++)//此部分程序不正确,不管m的值为多少,输出结果都是一个,2 3 1或2 3 4 1 {if(j==0){//如果是第一列,就和最后一列交换 ,用三阶方阵举例,m=1,第一行输入1 2 3 t=a[i][j];a[i][j]=a[i][n-1];//此处将1和3交换,行列式第一行改变为:3 2 1 a[i][n-1]=t;}//第一列和最后一列交换后,最后一列变为第一列for(j=0;j<n-1;j++)//再从第一列开始,到倒数第二列 ,依次与右边相邻的列交换 {t=a[i][j];a[i][j]=a[i][j+1];//此处将3和2交换,行列式第一行改变为:2 3 1,为最终所要得到的排列 a[i][j+1]=t;}}*/for(i=0;i<n;i++){for(j=0;j<n;j++){printf("%4d",a[i][j]);}printf("\n");}return 0;}

练习7-9

#include<stdio.h>//例7-10,练习7-9 #define K 13int day_of_year(int year,int month,int day){int i,leap,k;//tab[leap][k],leap=0 非闰年 int tab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};//k的值为13,因为有12个月,所以tab[2][0]=0; leap=((year%4==0&&year%100!=0)||year%400==0);//计算leap=0还是=1 for(k=1;k<month;k++)//k本来是从0开始的,但为了更方便计算,从1月份开始到是12月份 {day=day+tab[leap][k];//第month个月的几天+前几个月每个月的天数 }return day;//得到一年中第几天 }int main(void){int year,month,day;printf("Enter year,month,day:");scanf("%d%d%d",&year,&month,&day);printf("上述时间是%d年第%d天",year,day_of_year(year,month,day));return 0;}

P180、181

练习7-10

#include<stdio.h> //练习7-10 查找特定字符 int main(void){char str[80],ch;int i,index=0;printf("输入一串字符:\n");gets(str);printf("输入需查找的字符:\n");ch=getchar();for(i=0;str[i]!='\0';i++){if(ch==str[i]){index=i;}}printf("ch=%c,index=%d",str[index],index);return 0;}

练习7-11

#include<stdio.h>//练习7-11 字符串逆序 #include<string.h>int main(void){char str1[80],str2[80];int i,j,t,len=0;gets(str1);/*用while循环求字符串长度,两个数组实现逆序*/ i=0;while(str1[i]!='\0'){i++;}j=0;i=i-1;for(i=i;i>=0;i--){str2[j]=str1[i];j++;}str2[j]='\0';puts(str2);/*调用函数求字符串长度,单个数组内部交换实现逆序*/{ i=strlen(str1);j=0;i=i-1;while(i>j){t=str1[i];str1[i]=str1[j];str1[j]=t;j++;i--;} puts(str1);}return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。