第四天
练习题
1.计算n的阶乘
思路:利用for循环,从i=1一直乘到i=n,利用i++自增.
==练习使用“引用头文件”或者函数实现模块化,使main函数精简明了。==
- demo01.h
#include <stdio.h>
int demo01(int n) {
int result=1;
if (n > 0) {//对不合理n值进行过滤
for (int i = 1; i <=n; i++) {
result *= i;
}
}
else
{
return 0;//错误的输入返回0
}
return result;
}
- main.c
#include <stdio.h>
#include "demo01.h"
void factorial() {
int n = 0;
scanf("%d",&n);//从键盘获取n的值
printf("%d 的阶乘为%d\n",n, demo01(n));//传参数给demo01()函数
}
int main() {
factorial();//调用计算阶乘的函数
}
- 结果
2.计算1!+2!+3!+........+n!
1.方法一
- demo02.h
#include <stdio.h>
int demo02(int n) {
int result=0;//返回的结果
if (n > 0) {
for (int i=1; i <= n;i++) {
int fac = 1;//第n个数的阶乘
for (int j=1; j <= i; j++) {
fac *= j;
}
result += fac;
}
}
else
{
return 0;
}
return result;
}
- main.c
void fac_sum() {
int n = 0;
scanf("%d",&n);
printf("结果为%d\n",demo02(n));
}
int main() {
fac_sum();
}
2. 调用demo01.h的函数来完成
==两个头文件之间互相调用,需要用到#ifndef==
- demo01.h
#ifndef _DEMO01_H
#define _DEMO01_H
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int demo01(int n) {
int result = 1;
if (n > 0) {
for (int i = 1; i <= n; i++) {
result *= i;
}
}
else
{
return 0;
}
return result;
}
#endif // !_DEMO01_H
- demo02.h
#define _CRT_SECURE_NO_WARNINGS 1
#ifndef _DEMO02_H
#define _DEMO02_H
#include <stdio.h>
#include "demo01.h"
int demo02_2(int n) {
int result = 0;//返回的结果
if (n > 0) {
for (int i = 1; i <= n; i++) {
result += demo01(i);
}
}
else
{
return 0;
}
return result;
}
#endif // !
- main.c
#include <stdio.h>
#include "demo01.h"
#include "demo02.h"
void fac_sum() {
int n = 0;
scanf("%d",&n);
printf("结果为%d\n",demo02_2(n));
}
int main() {
fac_sum();
}
- 结果
3.在一组数组中查找具体的某个数字n,如果有则输出数组的下标
思路:用for循环读取数组的每个值,如果相等则返回下标,反之返回-1;
int binsearch(){
int n = 0;
int arr[] = { 1,52,74,689,951,1002,1354,1789,5214,6547 };//已知的数组
scanf("%d", &n);
for (int i = 0; i < sizeof(arr)/sizeof(int); i++) {//利用sizeof获取数组长度
if (arr[i] == n) {
return i;//返回下标
}
}
return -1;
}
int main() {
while (1) {
int subscript = binsearch();
if (subscript >=0) {
printf("找到了,下标是%d!\n", subscript);
break;
}
else {
printf("没找到!\n");
}
}
}
vs编译器无法识别bool类型?
修改项目属性即可。