第七章 (答案仅供参考),有问题大家可以在评论区一起讨论。
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;
}