第三周实验(HZAU)——函数专题

1.函数1:数列求和

请输入两个整型数m和n(注:n>m),请编写函数sum(注意:函数的原型如下:int sum(int m,int n)),计算m+(m+1)+(m+2)+...+(n-1)+n的值。并在main函数中调用它。

#include<stdio.h>
//请输入两个整型数m和n(注:n>=m),请编写函数sum
//(注意:函数的原型如下:int sum(int m,int n)),
//计算m+(m+1)+(m+2)+...+(n-1)+n的值。并在main函数中调用它。
int sum(int m, int n)
{
	int i = 0;
	int num = 0;
	for (i = m; i <= n; i++)
	{
		num += i;
	}
	return num;
}
int main()
{
	int m = 0;
	int n = 0;
	scanf("%d %d", &m, &n);
	int ret = sum(m, n);
	printf("%d", ret);
	return 0;
}

2.函数2:求兀的值

编写函数,自己选用一种方法计算兀的近似值,并在main函数中调用它。请输出兀的值(要求保留小数点后2位)

【问题描述】根据公式π/4=1-1/3+1/5-1/7+...... ,直到最后一项小于10^-6。计算并输出π的值。
【输入形式】无输入
【输出形式】π的值
【输出样例】3.14159
#include<iostream>
#include<cmath>
#include<stdio.h>
//using namespace std;
int main()
{
	int i = 0;
	double sum = 0;
	int flag = -1;
	for (i = 1; fabs(1.0 / i )>1e-6; i+=2)
	{
		flag = -flag;
		sum +=( 1.0 / i)*flag;
	}
	sum = sum*4;
	printf("%.2lf", sum);
	return 0;
}

3.函数3:成绩

定义函数f,实现对某班4门课程成绩分别求出平均分,函数原型如下:void f(int score[][4],int n,double aver[]),其中score为四门课程的成绩,n为学生人数,aver为四门课的平均分。并在main函数中调用它。请在主函数中输入学生人数及四门课程成绩;并在主函数中输出score及aver(aver中的数组元素均保留一位小数)

#include<stdio.h>
//定义函数f,实现对某班4门课程成绩分别求出平均分,函数原型如下:
//void  f(int score[][4], int n, double aver[]), 
//其中score为四门课程的成绩,n为学生人数,aver为四门课的平均分。并在main函数中调用它。
//请在主函数中输入学生人数及四门课程成绩;
//并在主函数中输出数组score及aver(aver中的数组元素均保留一位小数)
void f(int score[10][4], int n, double aver[4])
{
	int i = 0;
	int ti = 0;
	static int j = 0;
	int s = 0;
	for (s = 0; s < 4; s++)
	{
		int sum = 0;
		for (i = 0; i <= n; i++)
		{
			j = ti;
			sum += score[i][j];
			j += 4;
		}
		ti++;
		aver[s] = (double)sum / n;
	}
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int score[10][4] = { 0 };
	//输入四门课的成绩
	int i = 0;
	for (i = 0; i < n; i++)
	{
		int j = 0;
		for (j = 0; j < 4; j++)
		{
			scanf("%d", &score[i][j]);
		}
	}
	double aver[4] = { 0 };
	//求每一门课的平均分数
	f(score, n, aver);
	//打印
	for (i = 0; i < n; i++)
	{
		int j = 0;
		for (j = 0; j < 4; j++)
		{
			printf("%d ", score[i][j]);
		}
		printf("\n");
	}
	for (i = 0; i < 4; i++)
	{
		printf("%.1lf ", aver[i]);
	}
	return 0;
}

4.函数4:进制转换

定义函数bin,实现将一个十进制整数n转换成二进制数s(注意:s为字符串),函数原型为void bin(int n,char s[]);并在main函数中调用它。请在主函数中输入十进制整数,并在主函数中输出字符串s

#include<iostream>
using namespace std;
#include<stdio.h>
//请使用函数改写数组题目9。定义函数bin,
//实现将一个十进制整数n转换成二进制数s(注意:s为字符串),函数原型为:void bin(int n,char s[]);,
//并在main函数中调用它。请在主函数中输入十进制整数,并在主函数中输出字符串s
int i = 0;
void bin(int n, char s[])
{
	while (n)
	{
		s[i] = n % 2;
		n /= 2;
		i++;
	}
}
int main()
{
	int n = 0;
	char s[1000] = { 0 };
	scanf("%d", &n);
	bin(n, s);
	int j = 0;
	for (j = i-1; j >= 0; j--)
	{
		printf("%d", s[j]);
	}
	//逆序打印s
}

5.函数5:求最大值与最小值

定义函数f,实现求出一批整数(最多10个)的最大值与最小值,函数的原型为void f(int a[],int n,int &max,int &min),其中max和min分别存储a的最大值和最小值。并在main函数中调用它。请在主函数中输入整型数的个数与这批整型数;并在主函数中输出这批数的最大值和最小值。

#include<iostream>
using namespace std;
#include<stdio.h>
//定义函数f,实现求出一批整型数(最多10个)的最大值与最小值,函数的原型为
//void f(int a[], int n, int& max, int& min)
//其中max和min分别存储a的最大值和最小值。并在main函数中调用它。
//请在主函数中输入整型数的个数与这批整型数;并在主函数中输出这批数的最大值与最小值。
void f(int arr[], int n, int& pmax, int& pmin)
{
	int i = 0;
	pmax = arr[0];
	pmin = arr[n - 1];
	for (i = 1; i < n; i++)
	{
		if (pmax < arr[i])
			pmax = arr[i];
		if (pmin > arr[i])
			pmin = arr[i];
	}
}

int main()
{
	int n = 0;
	scanf("%d", &n);
	int arr[10] = { 0 };
	int i = 0;
	int max;
	int min;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	f(arr, n, max, min);
	printf("%d %d", max, min);

	return 0;
}

6.函数6:函数重载

请分别编写两个函数,利用函数重载,分别求出两个整型数及三个double类型数的最大值。并在main函数中调用它。

#include<stdio.h>
using namespace std;
//请分别编写两个函数,利用函数重载,分别求出三个整型数及三个double类型数的最大值。并在main函数中调用它。
//请在主函数中输入三个整型数及三个实型数,并在主函数中输出两个最大值
int Find_max(int arr1[])
{
	int i = 0;
	int max = arr1[0];
	for (i = 1; i < 3; i++)
	{
		if (max > arr1[i])
		{
			;
		}
		else
		{
			max = arr1[i];
		}
	}
	return max;
}
double Find_max(double arr2[])
{
	int i = 0;
	double max = arr2[0];
	for (i = 1; i < 3; i++)
	{
		if (max > arr2[i])
		{
			;
		}
		else
			max = arr2[i];
	}
	return max;
}
int main()
{
	int arr1[3] = { 0 };
	double arr2[3] = { 0 };
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		scanf("%d", &arr1[i]);
	}
	for (i = 0; i < 3; i++)
	{
		scanf("%lf", &arr2[i]);
	}
	int ret1 = Find_max(arr1);
	double ret2 = Find_max(arr2);
	printf("%d\n", ret1);
	printf("%.1lf\n", ret2);
	return 0;
}

7.函数7:运算器

定义一个100以内的四则运算器的函数,实现系统随机生成n个运算式,用户分别输入运算结果,并返回结果正确率,函数原型为:double cal(int n);并在main函数中调用它。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//定义一个100以内的四则运算器的函数,实现系统随机生成n个运算式,用户分别输入运算结果,
//并返回运算结果正确率,函数原型为:double cal(int n);
//并在main函数中调用它。请在主函数中输入运算式的个数,
//并在主函数中输出运算结果正确率(保留小数点后2位)
char is_char(int e3)
{
	if (e3 == 1)
		return '+';
	if (e3 == 2)
		return '-';
	if (e3 == 3)
		return '*';
	if (e3 == 4)
		return '/';
}
double cal(int n)
{
	//随机数的生成,每次都生成不同的数,也就是应该在循环内部
	int i = 0;
	static int j = 0;
	int arr1[100] = { 0 };//存放正确答案的数组
	int arr2[100] = { 0 };//存放用户输入的数组
	for (i = 0; i < n; i++)
	{
		int e1 = rand() % 100 + 1;
		int e2 = rand() % 100 + 1;
		int e3 = rand() % 4 + 1;
		printf("%d %c %d = ", e1, is_char(e3), e2);
		int k = 0;//用户输入答案
		scanf("%d", &k);
		arr2[i] = k;//将用户输入的答案存放到一个数组中
		for (; j <= i; j++)
		{
			if (is_char(e3) == '+')
				arr1[j] = e1 + e2;
			if (is_char(e3) == '-')
				arr1[j] = e1 - e2;
			if (is_char(e3) == '*')
				arr1[j] = e1 * e2;
			if (is_char(e3) == '/')
				arr1[j] = e1 / e2;
		}
	}
	//两个数组元素进行比较,统计正确的个数
	int count = 0;
	for (i = 0; i < n; i++)
	{
		if (arr1[i] == arr2[i])
			count++;
	}
	double d = (double)count /n;
	return d;
}
int main()
{
	//实现随机生成数
	//打印算式
	//总体输入计算结果,存入数组中
	//将计算结果与正确答案配对,统计正确的个数
	//计算正确率
	int n = 0;
	scanf("%d", &n);
	srand((unsigned)time(NULL));//随机数的生成
	double ret = cal(n);
	printf("%.2lf", ret);
	return 0;
}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,这是一个计算问题,可以回答。以下是 C 语言的代码实现: ``` #include <stdio.h> int main() { float scores[20], sum = 0, avg; int count = 0; // 从键盘上输入 20 个学生的成绩 for (int i = 0; i < 20; i++) { printf("请输入第 %d 个学生的成绩:", i+1); scanf("%f", &scores[i]); sum += scores[i]; // 累加总分 } // 计算平均分 avg = sum / 20; // 输出低于平均分的学生成绩 printf("平均成绩为 %.2f 分\n", avg); printf("低于平均分的学生成绩为:\n"); for (int i = 0; i < 20; i++) { if (scores[i] < avg) { printf("%.2f ", scores[i]); count++; // 累加低于平均分的学生数 } } printf("\n共有 %d 个学生低于平均分", count); return 0; } ``` ### 回答2: 首先,我们可以使用一个数组来存储这20个学生的成绩。代码如下: ```c #include <stdio.h> #define NUM_OF_STUDENTS 20 int main() { int grades[NUM_OF_STUDENTS]; int sum = 0; float average; // 从键盘上输入20个学生的成绩 printf("请输入20个学生的成绩:\n"); for (int i = 0; i < NUM_OF_STUDENTS; i++) { scanf("%d", &grades[i]); sum += grades[i]; } // 计算平均成绩 average = (float) sum / NUM_OF_STUDENTS; // 输出低于平均分学生的成绩 printf("平均成绩为:%.2f\n", average); printf("低于平均分学生的成绩为:"); for (int i = 0; i < NUM_OF_STUDENTS; i++) { if (grades[i] < average) { printf("%d ", grades[i]); } } return 0; } ``` 在这段代码中,我们定义了一个数组`grades`来存储20个学生的成绩。然后,我们使用一个循环来从键盘上输入这20个学生的成绩,并累加到`sum`变量中。接下来,我们计算平均成绩,除以学生的数量,赋值给`average`变量。最后,我们再次使用循环来输出低于平均分的学生的成绩。 希望可以帮助到你! ### 回答3: 要实现从键盘上输入20个学生的成绩,并统计计算出平均成绩,并输出低于平均分的学生成绩,可以使用C语言编程进行实现。 首先,需要使用循环语句,将键盘输入的学生成绩存储到数组中。在声明一个大小为20的整型数组score,用于存储学生的成绩。使用for循环逐个接收学生成绩,并将其存储到score数组中。 然后,计算平均成绩,需要声明一个变量sum用于累积所有学生的成绩之和,初始值为0。继续使用for循环,将score数组中的每个元素累加到sum中。最后,将sum除以20计算出平均成绩average。 接下来,需要再次使用for循环遍历score数组,并通过if语句找出低于平均分的学生成绩,并输出这些成绩。在遍历过程中,判断每个学生的成绩是否小于average,若小于,则输出该成绩。 下面是具体的C语言代码实现: ```c #include <stdio.h> int main() { int score[20]; int sum = 0; float average; // 从键盘上输入20个学生的成绩,存储到score数组中 printf("请输入20个学生的成绩:\n"); for (int i = 0; i < 20; i++) { scanf("%d", &score[i]); sum += score[i]; } // 计算平均成绩 average = (float)sum / 20; // 输出低于平均分的学生成绩 printf("低于平均分的学生成绩为:\n"); for (int i = 0; i < 20; i++) { if (score[i] < average) { printf("%d ", score[i]); } } return 0; } ``` 这样,就可以实现从键盘上输入20个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值