余贞侠C语言程序设计课后参考答案

本文包含7个C语言编程实例,涉及数值排序、求平均值、找最接近平均值的数、二维数组操作、矩阵行列求和、字符串比较及复制、ASCII数字串转整数。通过这些实例,读者可以加深对C语言处理数值和字符串能力的理解。
摘要由CSDN通过智能技术生成

第七章 (答案仅供参考),有问题大家可以在评论区一起讨论。


7.1//输入m个浮点数,按升序排列并输出;
#include<stdio.h>
int main()
{
	int m;
	int t,i,j;
	double a[100];
	printf("please input m:");
	scanf("%d",&m);//数组元素个数;
	printf("please input m numbers:\n");
	for(i=0;i<m;i++)//将数据存入数组中
	{
		scanf("%lf",&a[i]);
	}
	for(i=0;i<m-1;i++)//冒泡排序
	{
		for(j=0;j<m-i-1;j++)
		{
			if(a[j]>a[j+1])
			{
				t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			}
		}
	}
	printf("line numbers:\n");
	for(i=0;i<m;i++)
	{
		printf("%lf ",a[i]);
	}
	putchar('\n');
	return 0;
}

7.2//输入十个整数,找出与平均值最接近的书数,并输出;
#include<stdio.h>
#define N 10
#include<math.h>//fabs()用于绝对值的文件
int Ave(int a[],int len);
int main()
{
	int s[N];
	int ave;
	printf("please input 10 numbers:\n");
	for(int i=0;i<N;i++)
	{
		printf("第%d:",i);
		scanf("%d",&s[i]);
	}
	ave=Ave(s,N);
	printf("ave=%d\n",ave);
	return 0;
}
int Ave(int a[],int len)
{
	int j,i,s=0;
	double n,min,m;
	for(i=0;i<len;i++)//总数的计算
	{
		s=s+a[i];
	}
	n=double(s)/len;//平均值的计算
	printf("平均值:%lf",n);
	min=fabs(n-a[0]);//绝对值符号
	for(i=1;i<len;i++)
	{
		m=fabs(n-a[i]);//用差值进行比较
		if(min>m)
		{
			min=m;
			j=i;
		}
	}
	printf("最接近的下标:%d\n",j);//最接近的下标
	return a[j];
}


7.3//找出二维数组中的最大值和最小值,并给出下标;
#include<stdio.h>
int main()
{
	int a[10][10];
	int i,j;
	int row,col;
	int min,max;
	int t,n,c,b;//存放最大与最小值的下标;
	printf("please input row,col:");
	scanf("%d%d",&row,&col);
	for(i=0;i<row;i++)//从键盘读入数据
	{
		printf("%d row numbers:",i);
		for(j=0;j<col;j++)
		{
			scanf("%d",&a[i][j]);
		}
	}
	min=max=a[0][0];//给最大最小值赋初值;
	for(i=0;i<row;i++)
	{
		for(j=0;j<col;j++)
		{
			if(min>a[i][j])
			{
				min=a[i][j];
				t=i;
				n=j;
			}
			if(max<a[i][j])
			{
				max=a[i][j];
				c=i;
				b=j;
			}
		}
	}
	printf("max=%d 下标:%d %d\n",max,c,b);
	printf("min=%d 下标:%d %d\n",min,t,n);
	return 0;
}

7.4//输入一个m行n列矩阵,并输出各行各列元素之和;
#include<stdio.h>
void row(int a[][100],int m,int n);
void col(int a[][100],int m,int n);
int main()
{
	int m,n;
	int i,j;
	int a[100][100];
	//int a[m],b[n];
	printf("please input m,n:");
	scanf("%d%d",&m,&n);
	for(i=0;i<m;i++)
	{
		printf("please input %d row numbers:",i);
		for(j=0;j<n;j++)
		{
			scanf("%d",&a[i][j]);
		}
	}
	row(a,m,n);
	col(a,m,n);
	return 0;
}
void row(int a[][100],int m,int n)
{
	int i,j;
	int sum;
	for(i=0;i<m;i++)
	{   
		sum=0;
		for(j=0;j<n;j++)
		{
			sum=sum+a[i][j];
		}
		printf("%d row sum=%d\n",i,sum);
	}
}

void col(int a[][100],int m,int n)
{	
	int i,j;
	int sum;
	for(i=0;i<n;i++)
	{   
		sum=0;
		for(j=0;j<m;j++)
		{
			sum=sum+a[j][i];
		}
		printf("%d col sum=%d\n",i,sum);
	}
}
7.5//输入三个字符串,找出其中最大的字符串;
#include<stdio.h>
#include<string.h>
#define row 3
#define col 11
int main()
{
	char str[row][col];
	int i,max;
	printf("please input %d strings:\n",row);
	for(i=0;i<row;i++)
	{
		printf("%d string:",i);
		//scanf("%s",str[i]);//不可输入空格的字符串

		gets(str[i]);//允许输入空格的字符串;
	}
	max=0;//最大值的下标赋值为零;
	for(i=1;i<row;i++)//三个字符串的循环
	{
		if(strcmp(str[max],str[i])<0)//strcmp()比较函数进行比较
		{
			max=i;//当前最大值的下标;
		}
	}
	printf("max=%s,下标:%d\n",str[max],max);
	return 0;
}
7.6//自编写字符串复制函数(功能与strcpy一样)
#include<stdio.h>
#include<string.h>
void My_strcpy(char s1[],char s2[]);//形参传的是数组的首地址,所以不用写数据类型;
int main()
{
	char s1[11],s2[11];
	printf("please input s1:");
	gets(s1);
	printf("please input s2:");
	gets(s2);
	My_strcpy(s1,s2);
	printf("finally s1:%s\n",s1);
	return 0;
}
void My_strcpy(char s1[],char s2[])//要保证字符串1的内存单元大小足够存的下字符串2;
{
	int i;
	for(i=0;s2[i]!='\0';i++)
	{
		s1[i]=s2[i];

	}
	s1[i]='\0';//字符串复制结束之后,给复制后的数组加上结束符,让后边多出的字符置为空。
}
	
7.7//编程将一个输入的ASCLL数字串转换成对应的整数
#include<stdio.h>
int Sort(char s[]);
int main()
{
	char s[10];
	int sum;
	printf("please input s:");
	gets(s);
	sum=Sort(s);
	printf("number is %d\n",sum);
	return 0;
}
/*void Sort(char s[])//将ASCLL字符串,转换成了对应十进制;
{
	int i;
	for(i=0;s[i]!='\0';i++)
	{
		printf("%d",s[i]);
	}
	putchar('\n');

}*/
int Sort(char s[])//ASCLL(字符串)中的数字字符转换为数字输出
{
	int i,n=0;
	int sum=0;
	for(i=0;s[i]!='\0';i++)
	{
		if(s[i]=='-')//标记负号
		{
			n=1;
		}

		if(s[i]>='0'&&s[i]<='9')
		{
			sum=sum*10+((int)s[i]-48);//强制转换
		}
	}
		if(n==1)//如果有负号,数字变成负数输出;
		{
			sum=-sum;
		}
	return sum;
}
			
	

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野性的鬼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值