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;
}
}
来源:oschina
链接:https://my.oschina.net/u/4741313/blog/4865778