第6章 利用数组处理批量数据

本文通过一系列实例介绍了如何利用数组处理批量数据,包括Fibonacci数列、冒泡排序、矩阵转置、求最大值及其位置,以及字符串处理函数的应用,如puts、gets、strcat等,同时展示了统计单词数量和比较多个字符串的方法。
摘要由CSDN通过智能技术生成

【例6.1 】对四个数组元素依次赋值,并逆序输出。

代码如下:

#include <stdio.h>
int main()
{
	int a[5]={5,8,6,9,2};
	int i,j;
	printf("原始数组为:\n");
	for(i=0;i<5;i++)			//将数组中的元素依次赋值,并将其输出在屏幕上 
	{
		printf("%5d",a[i]); 
	}
	printf("\n");
	printf("逆序后的数组为:\n");
	for(j=4;j>-1;j--)			 
	{
		printf("%5d",a[j]); 	//将逆序后的数组输出
	}
	return 0;
 } 

运行结果如下:
在这里插入图片描述

【例6.2】用数组来处理求Fibonacci数列的问题。

代码如下:

#include <stdio.h>
int main ()
{
	int i;
	int a[20]={1,1};
	for(i=2;i<20;i++)				//对最前面两个数赋初值
		a[i]=a[i-1]+a[i-2];			//先后求出后18个数的值
	for(i=0;i<20;i++)
	{	
		if(i%5==0)printf("\n");		//控制每行输出5个数然后换行
		printf("%12d",a[i]);
	}
	printf("\n");
	return 0;
}

运行结果如下:
在这里插入图片描述

【例6.3】冒泡排序

先来一个简单的冒泡排序。
代码如下:

#include <stdio.h>
int main() 
{
	int i,t,j;
	int a[]={98,45,46,32,52};
	printf("原始数组是:\n");
	for(i=0;i<5;i++)
	{
		printf("%d ",a[i]);
	}
	printf("\n"); 
		for(j=0;j<5;j++)
		{
			for(i=0;i<5-j;i++)
			{
				if(a[i]>a[i+1])
				{	
					t=a[i];
					a[i]=a[i+1];
					a[i+1]=t;
				}
			}
		}
		printf("输出的数是:\n");
		for(i=0;i<5;i++)
		{
			printf("%d ",a[i]);
		}
	
	return 0;	
}

运行结果如下:
在这里插入图片描述

【例6.3.1】给出一个学生的部分成绩,求出给出成绩的和。

代码如下:

#include <stdio.h> 
void main ()
{
	int stu[5][4]={									//定义一个二维数组 
			{1,91,92,34},
			{2,80,82,74},
			{3,96,56,94},
			{4,25,62,84},
			{5,90,94,56},
			};
			double	sum;
			printf("学号\tC语言\t高数\t体育\t平均成绩\n");	//在屏幕上显示相应数据 
			int i,j;
			for(i=0;i<=4;i++)
			{
			sum=0;									//定义sum并赋值为0让每一次循环相加的都是从0开始 
				for(j=0;j<=3;j++)
				{
					printf("%d\t",stu[i][j]);
					sum+=stu[i][j];					//将除了第一列的其他数据相加 
				}
				printf("%.2lf",(sum-stu[i][0])/3);	//输出平均值小数点后保留两位有效数字 
				printf("\n");
			}
			 													
}

运行结果如下:
在这里插入图片描述

【例6.4.1】转置矩阵(一个矩阵的转换)

代码如下:

#include <stdio.h>
int main()
{
	int a[3][3]={1,2,3,4,5,6,7,8,9};
	int i,j,t;
	printf("原始数组是:\n");
	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		{
			printf("%d ",a[i][j]);	
		}
		printf("\n");
	}	
	printf("转制后的数组是:\n");
	for(i=0;i<3;i++)
		for(j=i;j<3;j++)
		{
			t=a[i][j];
			a[i][j]=a[j][i];
			a[j][i]=t;
		}  
//交换(a[0][1],a[1][0]),(a[0][2],a[2][0]),(a[0][3],a[3][0])1,5,9是a[i][j]:i=j; 
	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		{
			printf("%d ",a[i][j]);
		}
		printf("\n");
	}			
	return 0;
 } 

运行结果如下:
在这里插入图片描述

【6.4.2】转置矩阵,将一个矩阵转换为另一个矩阵,如图:

在这里插入图片描述
代码如下:

#include<stdio.h>
int main ()
{
	int a[2][3]={{1,2,3},{4,5,6}};
	int b[3][2],i,j;
	for(i=0;i<=1;i++)
	{
		for(j=0;j<=2;j++)
		{
			printf("%5d",a[i][j]);		//处理数组a中的每一个元素
			b[j][i]=a[i][j];			//将数组a中的元素赋值给b中的元素
		}printf("\n");
	}
	printf("array b:\n");
	for(i=0;i<=2;i++)
	{
		for(j=0;j<=1;j++)				//处理赋值后的b数组
			printf("%5d",b[i][j]);		//输出赋值后的数组
		printf("\n");
	}
	return 0;
}

运行结果如下:
在这里插入图片描述

【例6.5】一个3x4的矩阵,要求编程求出其中值最大的那个元素的值,以及其所在的行号和列号。

代码如下:

#include <stdio.h>
void main()
{
	int i,j,r=0,c=0,max;
	int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,48,70}};	//定义数组并赋初值 
	max=a[0][0];										//先认定a[0][0]最大 
	for(i=0;i<=2;i++)
		for(j=0;j<=3;j++)
			if(a[i][j]>max)								//如果某元素大于max,就取代max的原值 
			{
				max=a[i][j];
				r=i;									//记下此元素的行号 
				c=j;									//记下此元素的列号 
			}
		printf("max=%d\nr=%d\nc=%d\n",max,r,c);
} 

运行结果如下:
在这里插入图片描述

【例6.6】输出一个已知的字符串。

代码如下:

#include<stdio.h>
void main()
{
	char c[16]={'I','\0','l','o','v','e','\0','y','o','u','\0','y','i','j','i','a'};
	int i;
	for(i=0;i<16;i++)
		printf("%c",c[i]);
	printf("\n");
}

运行结果如下:
在这里插入图片描述

【例6.7】输出一个菱形图

代码如下:

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

运行结果如下:
在这里插入图片描述

【6.3】使用字符串处理函数

C函数库中提供了一些用来注射那么热呢处理字符串的函数,使用方便。下面介绍几种常用的函数。

  • puts 函数——输出字符串的函数:(puts(字符数组))
  • gets 函数——输入字符串的函数(gets(字符数组))
  • strcat 函数——字符串连接函数(strcat(字符数组1,字符数组2))
  • strcpy 和strncpy 函数——字符串复制函数(strcpy(字符数组1,字符数组2))
  • strcmp 函数——字符串比较函数(strcmp(字符串1,字符串2))
  • strlen 函数——测字符串长度的函数(strlen(字符数组))
  • stlwr 函数——转换为小写的函数(strlwr(字符串))
  • strupr 函数——转换为大写的函数(strupr(字符串))

【例6.8】输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。

代码如下:

#include<stdio.h>
int main()
{
	char string[81];
	int i,num=0,word=0;
	char c;
	gets(string);						//输入一个字符串给字符数组string
	for(i=0;(c=string[i])!='\0';i++)	//只要字符不是'\0'就继续执行循环
		if(c==' ')word=0;				//如果是空格字符,使word置0
		else if(word==0)				//如果不是空格字符且word原值为0
		{
			word=1;						//使word置1
			num++;						//num累加1,表示增加一个单词
		}
		printf("There are %d word in this line\n",num);//输出单词数
	return 0;
}

运行结果如下:
在这里插入图片描述

【例6.9】有三个字符串,要求找出其中“最大”者。

代码如下

#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(str[2],string)>0)
		strcpy(string,str[2]);
	printf("The largest string is:\n%s\n",string);
	return 0;
}

运行结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值