课前任务
选择题
要想达到交换的目的,需要用到指针
函数的定义与使用
题目:
解题:
自定义一个函数判断一下,能被整除则返回值为0,不能被整除返回值为1.
#include<stdio.h>
int isPrime(int n);
int main()
{
int num=0;
scanf("%d",&num);
if(isPrime(num)==0)
{
printf("这不是素数");
}
else
{
printf("这是素数");
}
return 0;
}
int isPrime(int n)
{
int k;
for(k=2;k<n;k++)
{
if(n%k==0)
{
return 0;
}
}//如果一直没有返回为零,这完成循环直接为1就好了
return 1;
}
运行结果
注意:
题目已经给你主函数了,只用写个自定义函数就可以了
1.程序改错
题目1:
解题:
自定义函数的b没有定义
2.函数的定义与调用
题目:
解题:
用递归法:(别和迭代法搞混了)
不停调用自身函数进行计算
(1)递归法构造自定义函数
(2)主函数加个循环
#include<stdio.h>
long fact(long a);
void main()
{
long n,result=0;
long i;
scanf("%ld",&n);
for(i=1;i<=n;i++)
{
/******此处添加若干行代码开始******/
result+=fact(i) ;
/******此处添加若干行代码结束******/
}
printf("1!+2!+...+n!=%ld",result);
}
/******此处定义fact函数开始******/
long fact(long a)
{
long sum;
if(a==0)
sum=1;
else
sum=a*fact(a-1);
return sum;
}
/******此处定义fact函数结束******/
运行结果:
3.统计一个班学生平均成绩
题目:
解题
按照变成要求一步步实现
先记录一下错误的写法
两个自定义函数,都用了输入函数,这会造成什么问题?
当我输入的N=2时,在自定义含数里就会执行四次,从而导致错误。
&&和||这两个符号的理解
正确解题:
#include <stdio.h>
#include <stdlib.h>
#define MAXNUM 40
void inputScore(float score[],int N);
float avgScore(float score[],int N);
int main()
{
float score[MAXNUM],avg;
int N;
scanf("%d",&N);
/******添加对N的合法性检查的代码,若N不在2-40范围,则输出:输入错误,并退出程序******/
if(N<2||N>40)
{
printf("输入错误");
return 0;
}
/*******end*************************************************************************/
inputScore(score,N);
avg=avgScore(score,N);
printf("平均成绩为%.2f",avg);
return 0;
}
/******请根据任务要求在下面添加定义上面两个函数的代码*******/
void inputScore(float score[],int N)
{
int i;
float other;
for(i=0;i<N;i++)
{
scanf("%f",&other);
if(other<0||other>100)
{
printf("请重新输入\n");
i--;
continue;
}
else
{
score[i]=other;
}
}
}
float avgScore(float score[],int N)
{
int i;
float avg=0.0,sum=0.0;
for(i=0;i<N;i++)
{
sum+=score[i];
}
avg=sum/N;
return avg;
}
运行结果: