C程序设计(第四版)第六章习题

版权声明:转载请注明出处 https://blog.csdn.net/nanhuaibeian/article/details/87565728

1. 例题

  1. 这里的a[4]代表定义数组时,指定数组包含4个元素
 int a[4] = {1,2,3,4};
  1. 使用数组求Fibonacci数列
# include <stdio.h>
int main()
{
	int i;
	int a[40] = {1,1};
	for(i=2;i<20;i++)
		a[i] = a[i-1] + a[i-2];
	for(i=0;i<20;i++)
	{
		if(i%5==0)	printf("\n");
		printf("%d\t",a[i]);
	}
	return 0;
 } 
  1. 对数组排序(简单选择排序)
# include <stdio.h>
int main()
{
	int a[10] = {2,1,4,3,6,9,10,5,8,7};
	int i=0,j,min,temp;
	for(i=0;i<10;i++)
	{
		min = i;
		for(j=min+1;j<10;j++)
		{
			if(a[j]<a[min])
			{
				min = j;
				flag = 1;
			}

		}
		if(min!=i)
		{
			temp = a[min];
			a[min] = a[i];
			a[i] = temp;
		}	
	}
	for(i=0;i<10;i++)
		printf("%d\n",a[i]);

	return 0;
 } 
  1. 矩阵转置
# include <stdio.h>
int main()
{
	int a[2][3] = {{1,2,3},{4,5,6}};
	int b[3][2];
	int i,j,temp;
	for(i=0;i<2;i++)
	{
		for(j=0;j<3;j++)
		{
			b[j][i] = a[i][j];
		}

	}
	printf("a矩阵:\n");
		for(i=0;i<2;i++)
	{
		for(j=0;j<3;j++)
		printf("%d\t",a[i][j]);
		printf("\n");
	}
		printf("b矩阵:\n");
		for(i=0;i<3;i++)
	{
		for(j=0;j<2;j++)
		printf("%d\t",b[i][j]);
		printf("\n");
	}

	return 0;
 } 
  1. 数组求最大值
# include <stdio.h>
int main()
{
	int a[2][2] = {{1,2},{4,5}};
	int i,j,max = a[0][0],max_i,max_j;
	for(i=0;i<2;i++)
	{
		for(j=0;j<2;j++)
		{
			if(a[i][j]>max)
			{
				max = a[i][j];
				max_i  = i;
				max_j = j;
			}
		}
	}
	printf("最大值:%d,行坐标:%d,列坐标:%d",max,max_i,max_j);

	return 0;
 } 
  1. 输出菱形
# include <stdio.h>
int main()
{
	char a[6][5] = {{' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},{' ','*',' ','*'},{' ',' ','*'}};
	int i,j;
	for(i=0;i<6;i++)
	{
		for(j=0;j<5;j++)
		printf("%c",a[i][j]);
		printf("\n");
	}

	return 0;
 } 
  1. 有三个字符串,找出其中最大的一个
#include <stdio.h>
#include <string.h>
int main()
{
	char str[3][20];
	char string[20];
	int i;
	for(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(string,str[2])>0)
		printf("%s",string);
	else printf("%s",str[2]);
	
	return 0;
}

2. 习题

  1. 使用选择法对10个整数排序参考例3
    下面是冒泡排序:
#include <stdio.h>
int main()
{
	int a[10] = {3,4,6,5,2,8,9,7,10,1};
	int i,j,temp;
	for(i=0;i<10;i++)
	{
		for(j=1;j<10-i;j++)
		{
			if(a[j-1]>a[j])
			{
				temp = a[j-1];
				a[j-1] = a[j];
				a[j] = temp;
			}
		}
	}
	for(i=0;i<10;i++)
		printf("%d\n",a[i]);
	
	return 0;
}
  1. 求一个3x3整型矩阵对角线元素之和
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
int main()
{
	int a[3][3];
	int i,j,sum = 0;
	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		{
			scanf("%d",&a[i][j]);
		}
	}
	
		for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		printf("%d\t",a[i][j]);
		printf("\n");
	}
	for(i=0;i<3;i++)
		sum = sum + a[i][i];
	printf("对角线元素之和为:%d",sum);
	
	return 0;
}
  1. 在一个排好序的数组中,插入一个数,仍然有序
#include <stdio.h>

int main()
{
	int a[10] = {1,3,5,7};
	int elem,i,j,len=4;
	printf("插入的数据为:");
	scanf("%d",&elem); 
	
	for(i=0;i<len;i++)
	{
		if (a[i]>elem)
		break;
	}

	for(j=len;j>i;j--)
	{
		a[j] = a[j-1];
	}
	len++;
	a[i] = elem;
	for(i=0;i<len;i++)
		printf("%d\n",a[i]);
	return 0;
}
  1. 逆序输出数组
#include <stdio.h>

int main()
{
	int a[10] = {1,3,5,7,9};
	int i,j,temp;
	i=0;j=4;
	while(i<j)
	{
		if(i<j)
		{
			temp = a[i];
			a[i] = a[j];
			a[j] = temp;
		}
		i++;
		j--;
	 } 
	 for(i=0;i<5;i++)
	 {
	 	printf("%d\n",a[i]);
	 }
	return 0;
}
  1. 杨辉三角
  2. 魔方阵(复杂,待处理)
  3. 找鞍点
#include <stdio.h>
# include <stdbool.h>
int main() {
	int a[3][3] = {{1,2,5},{3,4,6},{7,8,9}};
	int i,j,max,max_j;
	bool flag1,flag2 = true;
	//打印二维数组 
	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		printf("%d ",a[i][j]);
		printf("\n");
	}
	//寻找鞍点 
	for(i=0;i<3;i++)
	{
		flag1 = true;
		max = a[i][0];
		//寻找第i行最大值 ,同时记录它所在列max_j 
		for(j=0;j<3;j++)
		{
			if(max<a[i][j])
			{
				max = a[i][j];
				max_j = j;
			}
		}
		//判断行最大值是否是列最小值 
		for(j=0;j<3;j++)
		{
			if(max>a[j][max_j])
				flag1 = false;
		}
		
		if(flag1)	{
			printf("%d是鞍点",max);
			flag2 = false;	//存在鞍点,置flag2为false 
			
		}
	}
	if(flag2)	printf("无鞍点"); 
	return 0;
}
  1. 折半查找法找数
# include <stdio.h>
int main() {
	int a[20] = {30,28,26,25,19,17,16,14,12,11,10,8,7,5,1};
	int low=0,high=14,mid,elem;

	printf("请输入要查找的值:");
	scanf("%d",&elem);
	while(low<=high) {
		mid = (low+high)/2;

		if(a[mid]==elem) {
			printf("%d是数组中第%d个值",elem,mid+1);
			break;
		} 
		else if(a[mid]>elem)	low = mid+1;
		else high = mid-1;
	}

	if(low>high)	printf("数字%d不存在",elem);
	
	return 0;

}

10.统计字符个数
11. 输出图案

# include <stdio.h>
int main() {
	int i,j;
	for(i=0; i<5; i++) {
		for(j=0; j<=i; j++)
			printf(" ");
		for(j=1; j<5; j++) {
			printf("* ");
		}
		printf("\n");
	}

	return 0;

}
  1. 转译电文
# include <stdio.h>
# include <string.h>
int main() {
	char s[200];
	int i=0;
	printf("请输入电文:");
	gets(s);
	while(s[i]!='\0'){
		if((s[i]>='A')&&(s[i]<='Z'))
			s[i] = 90 - (s[i]-65);
		if((s[i]>='a')&&(s[i]<='z'))
			s[i] = 122 - (s[i] - 97);
			i++;
	}
	printf("转译后的电文为:"); 
	puts(s);
	return 0;

}

猜你喜欢

转载自blog.csdn.net/nanhuaibeian/article/details/87565728
今日推荐