【描述】
定义和调用swap函数,实现两个整数的交换。函数参数是指针。
在main函数中输入交换前和输出交换后的值。
【输入】
输入的第一行是一个正整数n(1≤n≤100),表示测试数据的总数。
接下来的n行,每行为测试数据,包含交换前的两个整数。
【输出】
输出包括n行,每行为测试结果,包含交换后的两个整数。
【输入示例】
2
12345 67890
213879 7892
【输出示例】
67890 12345
7892 213879
#include <stdio.h>
void swap(int *i1, int *i2);
int main(void) {
int i, n;
int i1, i2;
scanf("%d", &n);
for(i = 1; i <= n; ++i) {
scanf("%d%d", &i1, &i2);
swap(&i1, &i2);
printf("%d %d\n", i1, i2);
}
return 0;
}
/* 请在下面编写swap函数 */
void swap(int *i1, int *i2)
{
int t;
t=*i1;
*i1=*i2;
*i2=t;
}
【描述】
定义和调用函数:int sum(int (*fp)(int), int start, int end)和int f(int x),f函数的功能是求x的平方;sum函数的功能是求f(start)+…+f(end)的值。
输入两个整数num1和num2,要求num1 <= num2;调用函数sum(f, num1, num2),求出f(num1)+…+f(num2)的值。例如,假设num1为1,num2为5,则f(1)为1、f(2)为4、f(3)为9、f(4)为16、f(5)为25、f(1)+…+f(5)的值为55(1+4+9+16+25)。
【输入】
输入两个整数num1和num2,两个正整数以空格间隔。
【输出】
输出f(num1)+…+f(num2)的值
【输入示例】
1 5
【输出示例】
55
【来源】
《程序设计基础——以C为例》第5章上机实验题1。
#include <stdio.h>
int f(int);
int sum(int (*fp)(int), int, int);
int main(void) {
int num1, num2;
scanf("%d%d", &num1, &num2);
int result = sum(f, num1, num2);
printf("%d\n", result);
return 0;
}
/* 请在下面分别编写f函数和sum函数 */
int sum(int (*fp)(int), int start, int end){
int sum=0;
int i;
for(i=start;i<=end;i++){
sum+=fp(i);
}
return sum;
}
int f(int x){
return x*x;
}
【描述】
定义和调用如下函数:
double add(double x, double y);
double sub(double x, double y);
double mul(double x, double y);
double div(double x, double y);
求两个浮点数的和、差、积、商。
要求通过函数指针调用函数。
【输入】
输入两个浮点数num1和num2,两个浮点数以空格间隔。
【输出】
分行输出两个浮点数num1和num2的和、差、积、商。
【输入示例】
10.0 5.0
【输出示例】
15.000000
5.000000
50.000000
2.000000
【来源】
《程序设计基础——以C为例》第5章上机实验题2。
#include <stdio.h>
double add(double, double);
double sub(double, double);
double mul(double, double);
double div(double, double);
int main(void) {
double num1, num2, result;
double (*pf)(double, double);
scanf("%lf%lf", &num1, &num2);
pf = add;
result = pf(num1, num2);
printf("%lf\n", result);
pf = sub;
result = pf(num1, num2);
printf("%lf\n", result);
pf = mul;
result = pf(num1, num2);
printf("%lf\n", result);
pf = div;
result = pf(num1, num2);
printf("%lf\n", result);
return 0;
}
/* 请在下面分别编写add、sub、mul和div函数 */
double add(double x, double y){
return x+y;
}
double sub(double x, double y){
return x-y;
}
double mul(double x, double y){
return x*y;
}
double div(double x, double y){
return x/y;
}
【描述】
编写函数重置两个变量的值,该函数的原型为:
void reset(int *a,int *b);
函数内部将两个值重置为两个变量原值的平均数(出现小数则四舍五入)。
【输入】
两个待重置的值
【输出】
重置后的两个值
【输入示例】
7 14
【输出示例】
11 11
#include <stdio.h>
void reset(int *a, int *b);
int main(void) {
int a, b;
scanf("%d%d", &a, &b);
reset(&a, &b);
printf("%d %d\n", a, b);
return 0;
}
/* 请在下面编写reset函数 */
void reset(int *a, int *b){
int m,n;
m=*a;
n=*b;
*a=(m+n)/2.0+0.5;
*b=(m+n)/2.0+0.5;
}
【描述】
编写求数学函数区间平均值的通用函数,可以计算出在指定区间内函数的平均值(取整即可)。
待求区间平均值的两个函数的原型为:
int func1(int x);
int func2(int x);
只考虑参数为整数的情况即可。
func1的数学表达式为:
y=ax^2+bx+c
x^2表示x的平方,a,b,c由用户输入。
func2的数学表达式为:
y=x^m
x^m表示x的m次方,m由用户输入。
通用函数原型可设为:int avg(int (f)(int), int x1, intx2);
通用函数的参数为待求区间平均值函数的指针,以及给出的区间下界与上界。
例如:func1=3x^2+2*x+1,区间下界与上界分别为0和3,则
func1(0)=1
func1(1)=6
func1(2)=17
func1(3)=34
则平均值为:(1+6+17+34)/4=14(直接取整不四舍五入)
【输入】
用户依次输入:
func1的参数:a,b,c
func2的参数:m
给出的区间下界与上界
【输出】
func1的区间内平均值
func2的区间内平均值
【输入示例】
3 2 1
1
0 3
【输出示例】
14
1
【提示】
由于函数原型的限制,a,b,c和m参数可以使用全局变量传递。
#include <stdio.h>
#include <math.h>
int a, b, c, m;
int func1(int x);
int func2(int x);
int avg(int (*f)(int), int x1, int x2);
int main(void) {
scanf("%d%d%d", &a, &b, &c);
scanf("%d", &m);
int lower, upper;
scanf("%d%d", &lower, &upper);
printf("%d\n", avg(func1, lower, upper));
printf("%d\n", avg(func2, lower, upper));
return 0;
}
/* 请在下面分别编写func1、func2和avg函数 */
int func1(int x){
return a*pow(x,2)+b*x+c;
}
int func2(int x){
return pow(x,m);
}
int avg(int (*f)(int), int x1, int x2){
int sum=0;
int i;
for(i=x1;i<=x2;i++){
sum+=(*f)(i);
}
return sum/(x2-x1+1);
}