实验五

眉间皱痕 提交于 2020-12-28 23:12:25

1.编写函数 fact(int n) 实现求 n!,在主函数中输入 m 和 n,调用 fact( )函数求 的值。

#include<stdio.h>
#include<stdlib.h>

int Face(int x);

int main(){
	int m,k,p;
	printf("m=");
	scanf("%d",&m);
	printf("k=");
	scanf("%d",&k);
	while (m<k)
	{
		printf("m必须大于k,请重新输入.\n");
		printf("m=");
		scanf("%d",&m);
		printf("k=");
		scanf("%d",&k);
	}
	p=Fact(m)/Fact(k)*Fact(m-k);
	printf("p=%d\n",p);
	system("pause");
	return 0;
}


int Fact(int x){
	int f=1;
	if(x==0){
		f=1;
	}
	else{
		for(int i=1;i<=x;i++){
		f*=i;
		}
	}
	return 0;
}

2.编写 fun 函数求两个数之差的绝对值,将差值返回主调函数,编写完整程序实现函 数调用;

#include<stdio.h>
int fun(int a, int b);
int main()
{
    int a, b, y;
    printf("输入a的值:\n");
    scanf_s("%d", &a);
    printf("输入b的值:\n");
    scanf_s("%d", &b);
    y = fun(a, b);
    printf("输出y=%d:", y);
    system("pause");
    return 0;
}
int fun(int a, int b)
{
    int x;
    if (a - b >= 0) {
        x = a - b;
    }
    else {
        x = b - a;
    }
    return x;

}

3.编写程序,要求用户录入一串整数(把这串整数存储在数组中),然后通过调用selection_sort 函数来排序这些整数。在给定 n 个元素的数组后,selection-sort 函数必须做下列工作: (a)搜索数组找出最大元素 (b)递归调用函数本身来对前 n-1 个数组元素进行排序

#include<stdio.h>
#include<stdlib.h>

#define N 10

void seletion_sort(int a[], int n);

int main()
{
    int a[N];
    printf("enter 10 number to sort:");
    for (int i = 0; i < N; i++) {
        scanf_s("%d", &a[i]);
    }
    seletion_sort(a, N);
    printf("the result is:\n");
    for (int i = 0; i < N; i++) {
        printf("%d ", a[i]);
    }
    printf("\n");
    system("pause");
    return 0;
}

void seletion_sort(int a[], int n)
{
    int largest = n - 1, temp;
    if (n == 1)
        return;
    for (int i = 0; i < n - 1; i++) {
        if (a[i] > a[largest])
            largest = i;
    }
    if (largest < n - 1) {
        temp = a[n - 1];
        a[n - 1] = a[largest];
        a[largest] = temp;
    }
    seletion_sort(a, n - 1);

}

4.编写函数计算下面多项式的值: 3x ^5 +2x^ 4 -5x^ 3 -x^ 2 +7x-6 编写程序要求用户输入 x 的值,调用该函数计算多项式的值并显示函数返回的值

#include<stdio.h>
#include<stdlib.h>

double f(double x);

int main()
{
    double x;
    printf("enter a x:");
    scanf_s("%lf", &x);
    printf("f(x)=%lf.\n", f(x));
    system("pause");
    return 0;
}

double f(double x)
{
    return ((((3 * x + 2) * x - 5) * x - 1) * x + 7) * x - 6;
}

5. (1)编写函数 power,利用公式 x n =x*x n- 计算 x n

#include<stdio.h>
#include<stdlib.h>

int power(int x, int n);
int power2(int x, int n);

int main()
{
    int x, n;
    printf("enter a x:");
    scanf_s("%d", &x);
    printf("enter a n:");
    scanf_s("%d", &n);
    printf("xn=%d", power(x, n));
    system("pause");
    return 0;
}

int power(int x, int n)
{
    if (n == 0)
        return 1;
    else
        return x * power(x, n - 1);
}

(2)如果换一种方法计算 xn,power 函数速度可以更快。如果 n 是 2 的幂,则可以通过自乘的方法计算 xn,例如,x4 是 x2 的平方,所以 x4 可以用两次乘法计算,而不需要三次乘法。这种方法甚至可以用于 n 不是 2 的幂的情况,如果 n 是偶数,可以用公式,如果 n 是奇数,则 x n =x.x n-1 编写用于计算的递归函数

#include<stdio.h>
#include<stdlib.h>

int power(int x, int n);
int power2(int x, int n);

int main()
{
    int x, n;
    printf("enter a x:");
    scanf_s("%d", &x);
    printf("enter a n:");
    scanf_s("%d", &n);
    printf("xn=%d", power2(x, n));
    system("pause");
    return 0;
}


int power2(int x, int n)
{
    if (n == 0)
        return 1;
    else if (n % 2 == 1)
        return x * power2(x, n - 1);
    else {
        int y = power2(x, n / 2);
        return y * y;
    }
}

6.编写函数模拟掷骰子的游戏(两个骰子),第一次掷的时候,如果点数之和为 7 或11 则获胜,如果点数之和为 2、3、12 则落败,其他情况下点数之和称为“目标”,游戏继续。在后续的投掷中,如果玩家再次掷出目标点数,则获胜,掷出 7 则落败,其他情况都 忽略,游戏继续进行,每局游戏结束时,程序询问用户是否再玩一次,如果用户输入的回答不是’y’或‘Y’,程序会显示胜败的次数然后停止 You rolled:8 Your point is 8; You rolled:3 You rolled: 10 You rolled: 8 You win! Play again? y You rolled:6 Your point is 6 You rolled:5 You rolled:12 You rolled :3 You rolled:7 You lose! Play again? y You rolled:11 You win! Play again? n Wins:2 Losses 1 编写三个函数:main、roll_dice 和 play_game。下面给出了后两个函数的原型: int roll_dice(void); bool play_game(void); roll_dice 应生成两个随机数(每个都在 1-6 之间),并返回他们的和。play_game 应进行 一次掷骰子游戏(调用 roll_dice 确定每次掷的点数),如果玩家获胜则返回 true,如果玩家落败则返回 false。play_game 函数还要显示玩家每次掷骰子的结果。main 函数反复调用 play_game 函数,记录获胜和落败的次数,并显示“you win”和”you lose” 消息。提示:使用 rand 函数生成随机数,

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<stdbool.h>
#include<ctype.h>

int roll_dice(void);
bool play_game(void);

int main()
{
    int wins = 0, losses = 0;
    char again;
    srand(time(NULL));
    do {
        if (play_game()) {
            printf("You win!\n");
            wins++;
        }
        else {
            printf("You lose!\n");
            losses++;
        }
        printf("play again?(Y/N)");
        scanf_s("%c", &again);
        printf("\n");
    } while (toupper(again) == 'Y');
    printf("Wins:%d,Losses:%d\n", wins, losses);
    system("pause");
    return 0;
}

int roll_dice(void)
{
    return (rand() % 6 + 1) + (rand() % 6 + 1);
}

bool play_game(void)
{
    int roll, point;
    roll = roll_dice();
    printf("you rolled:%d\n", roll);

    switch (roll) {
    case 7:
    case 11:
        return true;
        break;
    case 2:
    case 3:
    case 12:
        return false;
    }
    point = roll;
    printf("you point is %d\n", point);
    for (;;) {
        roll = roll_dice();
        printf("you rollde:%d\n", roll);
        if (roll = point)
            return true;
        else if (roll == 7)
            return false;
    }
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!