本次练习为C语言基础题目,题目来源牛客
题目1:
题目分析:
题目有多组输入,可以考虑scanf多组输入的方法,因为本题要去掉一个最大和一个最小值,所以定义最大值max=0,定义最小值min=100,(进行比较,分数范围0~100)。7个分数为一组,定义count计数,count为7时输出平均值,输出后重新初始化最大值,最小值,数据的和,同时计数器值重新赋值为0。
代码:
int main()
{
int a = 0;
int i = 0;
int sum = 0;
float average = 0;
int max = 0;
int min = 100;
int count = 0;
while ((scanf("%d", &a)) != EOF)
{
sum = sum + a;
if (a > max)
{
max = a;
}
if (a < min)
{
min = a;
}
count++;
if (count == 7)
{
average = (sum - max - min) / 5.0;
printf("%.2f\n", average);
sum = 0;
max = 0;
min = 100;
count = 0;
}
}
// average=(sum-max-min)/5.0;
//printf("%.2f\n",average);
}
题目2:
题目分析:
首先选择数组存储数据, 想要在有序数列中插入一个整数,必须保证的一个条件就是插入数据的位置的前一个元素比此数据小,后一个元素比此数据大。使用遍历数组的方法,从后向前遍历数组元素,从数组最后一个元素开始,如果比插入数据大,就向后移动,当不满足循环判定条件时,跳出循环,将被插入数据放在指定位置。
代码:
int main()
{
int arr[60] = { 0 };
int n = 0;
int a = 0;
scanf("%d", &n);
int i = 0;
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
scanf("%d", &a);
int j = n;
for (j = n; arr[j - 1] > a; j--)
{
arr[j] = arr[j - 1];//后移
}
arr[j] = a;
for (i = 0; i < n + 1; i++)
{
printf("%d ", arr[i]);
}
}
题目3:
题目分析:
多组输入,最大值为输入值n,数值范围2~n,题目提到利用数组存储数据,所以将元素值2~n依次赋值给数组。筛选素数,最后打印素数并使用计数器求出被清零的个数。
代码:
int main()
{
int arr[100] = { 0 };
int i = 0;
int n = 0;
int count = 0;
while ((scanf("%d", &n))!=EOF)
{
for(i=2;i<=n;i++)
{
arr[i]=i;
}
//开始筛选
for(i=2;i<=n;i++)
{
int j = 2;
for(j=2;j<i;j++)
{
if(i%j==0)
{
arr[i]=0;
}
}
}
for(i=2;i<=n;i++)
{
if(arr[i]!=0)
{
printf("%d ",arr[i]);
}
else if(arr[i]==0)
{
count++;
}
}
printf("\n");
printf("%d",count);
}
}
题目4:
代码:
int main()
{
int m = 0;
int n = 0;
int i = 0;
int j = 0;
int count = 0;
int num = 0;
int arr1[100][100]={0};
int arr2[100][100]={0};
double x = 0;
scanf("%d %d",&m,&n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&arr1[i][j]);
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&arr2[i][j]);
}
}
for(i=0;i<m;i++)
{
for(j = 0;j<n;j++)
{
if(arr1[i][j]==arr2[i][j])
{
count++;
}
}
}
num=2*m*n;
count = 2*count;
x=((double)count/num)*100;
printf("%.2f",x);
return 0;
}
欢迎各位大佬批评指正。