C程序设计(第五版)谭浩强第六章课后练习题答案

#include <stdio.h>
#include <string.h>
#include <math.h>
void x1(){
	int x,i;
	for(x=2;x<=100;x++)
	{
		
		if(x<=10)//10以内的素数 
		{
			for(i=2;i<=x;i++)
			{
				if(i!=x&&x%i==0)break;
				else if(i==x)
				printf("%d是素数\n",x);
			}
		}
		
		else
		for(i=2;i<8;i++)//10以外的素数 
		{
			if(x%i==0)
			break;
			if(i==7&&x%i!=0)
			printf("%d是素数\n",x);
		}
	}
} 
void x2(){
	//可以使用冒泡法或者快排的方式进行排序
	//先自定义十个整数
	int a[]={31,23423,12,324,211,22,32314,21,32,11},term;
	for(int i=0;i<10;i++)
	{
		for(int j=i+1;j<10;j++){
			if(a[i]>a[j])//从小到大排序 
			{
				term=a[i];
				a[i]=a[j];
				a[j]=term;
			}
		}
	}
	for(int i=0;i<10;i++)
	printf("%d ",a[i]);
} 
void x3(){
	int a[3][3],sum=0;
	printf("请输入3x3对角矩阵元素:\n");
	for(int i=0;i<3;i++)
	for(int j=0;j<3;j++)
	scanf("%d",&a[i][j]);
	for(int i=0;i<3;i++)
	for(int j=0;j<3;j++)
	if(i==j)
	sum+=a[i][j];
	printf("对角元素之和为:%d\n",sum);
}
void x4(){
	int a[9]={1,4,6,98,324,486,2313,424324};
	int i;
	printf("请输入一个数:\n");
	scanf("%d",&i);
	for(int j=0;j<9;j++)
	{
		if(i<a[j])
		{
			for(int k=8;k>j;k--){
				a[k]=a[k-1];
			}
			a[j]=i;
			break;
		}
	}
	for(int j=0;j<9;j++){
		printf("%d ",a[j]);	
	}
	printf("\n");
}
void x6(){
	int i,j;
	int x=10;//杨辉三角的行数 
	int a[10][10];
	for(i=1;i<=x;i++)//将初始化的i,j值为1,是为了方便大家看到第几行,也可以为0但后面需要依次更改行数! 
	for(j=1;j<=i;j++){
		if(i==j||j==1)
		a[i-1][j-1]=1;
		else if(j>1&&j!=i)
		{
			a[i-1][j-1]=a[i-2][j-2]+a[i-2][j-1];
		}
	}
	for(i=1;i<=x;i++){
	for(j=1;j<=i;j++)
	{
		printf("%d  ",a[i-1][j-1]);
	}
	printf("\n");
	}
}
void x8(){
	printf("请输入5行6列的数字:\n");
	int a[4][5];
	int i,j,t;
	for(int i=0;i<4;i++){
		for(int j=0;j<5;j++){
		scanf("%d",&a[i][j]);
	}
	putchar('\n');
	}

	int w=0,p,q,x;//p为最大值的行,q为最大值的列 
	for(i=0;i<4;i++){
		x=a[i][0];
		p=i;
		q=0;
		for(j=0;j<5;j++){
			if(x<a[i][j]){
				p=i;q=j;
				x=a[p][q];//找到该行最大值 
			}
		}
		for(t=0;t<4;t++)
			if(a[t][q]<x)
			break;
		else if(t==3&&a[t][q]>x)
		{
			printf("鞍点为第%d行,第%d列,值为%d\n",p,q,x);
			w++;
		}
	}
	if(w==0)
	printf("无鞍点\n");
	
}
int x9(){
	int h,l,m;
	int a[15]={1,5,7,9,21,24,28,36,39,49,52,58,63,75,99};
	h=15-1;//上限 
	l=0;//下限
	m=(h+l)/2;
	int f;
	printf("请输入待查数:\n");
	scanf("%d",&f); 
	while(a[m]!=f&&l<=h)
	{
		m=(h+l)/2;
		if(a[m]==f)
		{
		printf("是第%d个元素!\n",m+1);
		return 0;
		}
		else if(a[m]>f)
		h=m-1;
		else 
		l=m+1;
	}
	printf("待查元素不在数组中!\n");
	return 0;
}
int main(){
	int ch;
	scanf("%d",&ch);
	switch(ch){
		case 1:x1();
		break;
		case 2:x2();
		break;
		case 3:x3();
		break;
		case 4:x4();
		break;
		case 5:printf("这道题不作,跟前面的方法类似!\n");
		break;
		case 6:x6();
		break;
		case 8:x8();
		break;
		case 9:x9();	
		default:printf("这道题没做哦,你可以试试其它的!\n");
	}
	return 0;
	}

做了前九道题,后面很简单就不一一列举了!

猜你喜欢

转载自blog.csdn.net/Songbook/article/details/123276276
今日推荐