作业1:定义有参函数实现,主调函数中输入两个数据,通过函数调用,交换该两个变量的值,主调函数输出交换后的结果。
运行结果
![](https://img-blog.csdnimg.cn/img_convert/2e58225f50189974c3e49010bdc55329.png)
代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void fun_huan(double *p1,double *q1){
double temp = 0;
//交换数值
temp=*p1;
*p1=*q1;
*q1=temp;
}
int main(int argc, const char *argv[])
{
double a = 0;
double b = 0;
//从终端输入两个数
printf("第一个数:");
scanf("%lf",&a);
printf("第二个数:");
scanf("%lf",&b);
//初始化两个指针
double *p = &a;
double *q = &b;
//执行函数
fun_huan(p,q);
//输出
printf("输出:%.2lf,%.2lf\n",a,b);
return 0;
}
作业2:定义函数实现,主调函数中,输入6名学生成绩,调用函数求6名学生成绩的平均值,将平均值返回给主函数并输出。
要求:使用主调函数中传递数组,被调函数使用指针接收
运行结果
![](https://img-blog.csdnimg.cn/img_convert/01c6fa6c081e061fa6da8ceca0b3a670.png)
代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
double fun_ping(double *p,int n){ //指针接受参数
double sum = 0;
int i = 0;
double ping = 0;
for(i=0;i<n;i++){ //遍历数组求和
sum += *(p+i);
}
ping = sum/6; //求平均值
return ping; //返回值
}
int main(int argc, const char *argv[])
{
double s[6]={0}; //初始化数组
int i = 0;
for(i=0;i<6;i++){ //遍历数组输入成绩
printf("第%d个同学成绩为:",i+1);
scanf("%lf",&s[i]);
if(s[i]>100||s[i]<0){ //判断成绩范围
printf("输入有误,重新输入\n");
i--;
}
}
double ping=fun_ping(s,6); //给函数传参
printf("平均值为:%.2lf\n",ping); //输出
return 0;
}
作业3:定义一个长度为5的一维数组,在主函数内实现输入元素功能,调用函数实现该数组的降序输出,要求形参与实参皆使用指针完成。
运行结果
![](https://img-blog.csdnimg.cn/img_convert/3590cfb08b7b454938163b8e3c4b9757.png)
代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void fun_pailie(int *q,int n){ 指针接收参数
int i = 0;
int j = 0;
int temp = 0;
for(i=1;i<n;i++){ //冒泡排序
for(j=0;j<n-i;j++){
if(q[j]<q[j+1]){
temp=q[j];
q[j]=q[j+1];
q[j+1]=temp;
}
}
}
for(i=0;i<n;i++){ //遍历数组输出
printf("%d ",q[i]);
}
printf("\n");
}
int main(int argc, const char *argv[])
{
int s[5]={0};
int i = 0;
for(i=0;i<5;i++){ //遍历数组输入
printf("第%d个数为:",i+1);
scanf("%d",&s[i]);
}
int *p=s; //初始化指针
fun_pailie(p,5); //执行函数
return 0;
}
作业4:定义一个长度为5的一维数组,在主函数内实现输入元素功能,调用函数实现该数组的逆置,要求形参与实参皆使用指针完成
运行结果
![](https://img-blog.csdnimg.cn/img_convert/3d7ad4b940a6c37d72dae429bbed16f3.png)
代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void fun_pailie(int *q,int n){ //指针接收参数
int i = 0;
int temp = 0;
for(i=0;i<n/2;i++){ //以一半为界,前一个数和最后一个数交换
temp=q[i]; //交换三部曲
q[i]=q[n-1-i];
q[n-1-i]=temp;
}
for(i=0;i<n;i++){ //遍历输出
printf("%d ",q[i]);
}
printf("\n");
}
int main(int argc, const char *argv[])
{
int s[5]={0};
int i = 0;
for(i=0;i<5;i++){ //遍历输入
printf("第%d个数为:",i+1);
scanf("%d",&s[i]);
}
int *p=s; //初始化数组
fun_pailie(p,5); //执行函数逆置
return 0;
}
作业5:一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶了多少只鸭子?使用递归函数求出鸭子总数。
运行结果
![](https://img-blog.csdnimg.cn/img_convert/d58486dba216e52b6bef40627470bdaa.png)
代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int f(int n){
if(n==0){
return 2; //最后一次结果为2
}else{
return (f(n-1)+1)*2; //每一天是前一天的+1再*2
}
}
int main(int argc, const char *argv[])
{
int ret = f(7); //经过7天,递归7次
printf("共有%d个鸭子\n",ret);
return 0;
}
作业6:小明想要编写一个递归函数,接收一个非负整数,输出该数的所有位,请你帮帮他吧。
运行结果
![](https://img-blog.csdnimg.cn/img_convert/3d0a59324648682062e2377ac7be892c.png)
代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int f(int m){ //接收参数
if(m){ //如果不为0,进入if
f(m/10); //一直循环除10,直到0;
printf("%d\t",m%10);
}
}
int main(int argc, const char *argv[])
{
int a = 0;
printf("输入:");
scanf("%d",&a); //从终端输入
f(a); //执行函数
printf("\n");
return 0;
}