1.
编写一个简单的23 根火柴游戏程序,实现人跟计算机玩这个游戏的程序。 为了方便程序自动评测,假设计算机移动的火柴数不是随机的,而是将剩余的火柴根数减1后对4求余来计算,如果计算结果为0,则取走1根。 游戏规则是: 1、两个游戏者开始拥有23 根火柴棒; 2、每个游戏者轮流移走1 根、2根或3根火柴; 3、谁取走最后一根火柴为失败者。 程序一次运行示例如下: 这里是23根火柴游戏!! 注意:最大移动火柴数目为三根 请输入移动的火柴数目: 3 您移动的火柴数目为:3 您移动后剩下的火柴数目为:20 计算机移动的火柴数目为:3 计算机移动后剩下的火柴数目为:17 请输入移动的火柴数目: 2 您移动的火柴数目为:2 您移动后剩下的火柴数目为:15 计算机移动的火柴数目为:2 计算机移动后剩下的火柴数目为:13 请输入移动的火柴数目: 3 您移动的火柴数目为:3 您移动后剩下的火柴数目为:10 计算机移动的火柴数目为:1 计算机移动后剩下的火柴数目为:9 请输入移动的火柴数目: 1 您移动的火柴数目为:1 您移动后剩下的火柴数目为:8 计算机移动的火柴数目为:3 计算机移动后剩下的火柴数目为:5 请输入移动的火柴数目: 2 您移动的火柴数目为:2 您移动后剩下的火柴数目为:3 计算机移动的火柴数目为:2 计算机移动后剩下的火柴数目为:1 请输入移动的火柴数目: 3 您移动的火柴数目为:3 您移动后剩下的火柴数目为:-2 对不起!您输了! 补充说明: 如果输入的火柴数超过3,则输出"对不起!您输入了不合适的数目,请点击任意键重新输入!\n",如果玩家赢了,则输出"恭喜您!您赢了! \n"
#include <stdio.h>
int iSum = 23;
int iPlayer;
int iComputer;
int iRes = 23;
int main (void)
{
printf ("这里是23根火柴游戏!!\n");
printf ("注意:最大移动火柴数目为三根\n");
while (1)
{
printf ("请输入移动的火柴数目:\n");
scanf ("%d", &iPlayer);
while (iPlayer > 3 || iPlayer <= 0)
{
printf ("对不起!您输入了不合适的数目,请点击任意键重新输入!\n");
printf ("请输入移动的火柴数目:\n");
scanf ("%d", &iPlayer);
}
printf ("您移动的火柴数目为:%d\n", iPlayer);
iRes -= iPlayer;
printf ("您移动后剩下的火柴数目为:%d\n", iRes);
if (iRes <= 0)
{
printf ("对不起!您输了! \n");
return 0;
}
iComputer = ((iRes - 1) % 4 == 0) ? 1 : ((iRes - 1) % 4);
printf ("计算机移动的火柴数目为:%d\n", iComputer);
iRes -= iComputer;
printf ("计算机移动后剩下的火柴数目为:%d\n", iRes);
if (iRes == 0)
{
printf ("恭喜您!您赢了! \n");
return 0;
}
}
}
(PS: 尝试一下赢过电脑 :D)
2.
程序模拟简单运算器的工作:输入一个算式(没有空格),遇等号'='说明输入结束,输出结果。假设计算器只能进行加、减、乘、除运算,运算数和结果都是整数,4种运算符的优先级相同,按从左到右的顺序计算。例如输入"1+2*10-10/2="后,输出10。 **输出格式要求:"%d" 出错提示信息:"错误的运算符:%c" 程序运行示例如下: 1+2*10-10/2= <===此行为输入 10 <===此行为输出
#include <stdio.h>
#include <stdbool.h>
bool bFlag = true;
int main (void)
{
int iAns;
int iPut;
char ch;
scanf ("%d", &iAns);
while ((ch = getchar ()) != '=')
{
scanf ("%d", &iPut);
if (iPut == 0 && ch == '/')
{
bFlag = false;
break;
}
switch (ch)
{
case '+':
iAns += iPut;
break;
case '-':
iAns -= iPut;
break;
case '*':
iAns *= iPut;
break;
case '/':
iAns /= iPut;
break;
default :
bFlag = false;
break;
}
if (bFlag == false)
{
break;
}
}
if (bFlag == false)
{
printf("错误的运算符:%c", ch);
}
else
{
printf ("%d", iAns);
}
return 0;
}
3.
*输出正六边型。编写程序输出连长为N的空心正六边型,其边由‘*’组成。 **输入格式要求:"%d" 提示信息:"Enter length:" **输出格式要求:"%c" 程序运行示例如下: Enter length:5 ***** * * * * * * * * * * * * * * *****
#include<stdio.h>
int main (void)
{
int n;
printf ("Enter length:");
scanf("%d", &n);
int i, j;
for (i = 1; i <= (2 * n - 1); i++)
{
if (i == 1 || i == (2 * n - 1))
{
for (j = 1; j <= (2 * n - 1); j ++)
{
(j < n) ? printf(" ") : printf("*");
}
}
if (i>1 && i <= n)
{
for (j = 1; j <= (2 * n + i - 2); j ++)
{
(j == (n - i + 1) || j == (2 * n + i - 2)) ? printf("*") : printf(" ");
}
}
if (i > n && i < (2 * n - 1))
{
for (j = 1; j <= (4 * n - i - 2); j ++)
{
(j == (i + 1 - n) || j == (4 * n - i - 2)) ? printf("*") : printf(" ");
}
}
printf("\n");
}
return 0;
}
4.
从键盘输入1行字符串(每行最多输入80个字符), 统计字符串中所包含的各个英文小写字符及其对应的数量。 **输入格式要求:不要有任何提示信息,直接输入1行字符。 **输出格式要求:按字母顺序输出统计结果,"%c=%d\n" 每行输出一个字母的统计信息。 如果某个字母没有出现,则不输出该字母的统计信息。 如:输入字符串: abc2ed a7bcdcd 则输出: a=2 b=2 c=3 d=3 e=1
#include<stdio.h>
#include<string.h>
#define MAXN 80
int main (void)
{
char letter[26]; // 存放小写字母
char str[MAXN];
int book[26] = {0}; // 记录出现次数
int i, j;
for (i = 0; i < 26; i++)
{
letter[i] = 'a' + i;
}
while ((gets(str)))
{
for (i = 0; i <= MAXN; i ++)
{
if (str[i] == '\0')
{
break;
}
else
{
for (j = 0; j < 26; j ++)
{
if (str[i] == letter[j])
{
book[j] ++;
}
}
}
}
for (i = 0; i < 26; i ++)
{
if (book[i] != 0)
{
printf("%c=%d\n", letter[i], book[i]);
}
}
}
return 0;
}
5.
程序改错-3 从键盘任意输入两个符号各异的整数,直到输入的两个整数满足要求为止,然后打印这两个数。请通过测试找出下面这个程序存在的问题(不止一个问题哦),并改正。同时用下面给出的运行结果示例检查修改后的程序。
|
程序正确的运行结果示例: Input x1, x2: a,s↙ Input x1, x2: a,1↙ Input x1, x2: 2,s↙ Input x1, x2: 1,2↙ Input x1, x2: -1,-2↙ Input x1, x2: 0,3↙ Input x1, x2: 1.2,3.4↙ Input x1, x2: 1.2,5↙ Input x1, x2: -1,3↙ x1=-1,x2=3 输入格式: "%d,%d" 输入提示信息:"Input x1, x2:\n" 输出格式:"x1=%d,x2=%d\n"
#include <stdio.h>
int main (void)
{
int x1, x2;
int flag = 0;
do
{
printf("Input x1, x2:\n");
flag = scanf("%d,%d", &x1, &x2);
while (getchar() != '\n');
}
while((flag != 2) || (x1 * x2 >= 0 ));
printf("x1=%d,x2=%d\n",x1,x2);
return 0;
}
6.
写一个程序显示如下的金字塔树: * *** * *** ***** * *** ***** ******* | ===V=== 树的特点是由一系列逐渐增加的层构成。上面显示的树有3层,最后一行的=数量分别左右各3个。例如,两层时显示下面的结果: * *** * *** ***** | ==V==
要求程序从键盘输入层数(最后一行的=数量随着树的层数增加)。 **输入格式要求:"%d" 提示信息:"请输入树的层数:"
#include <stdio.h>
void LeafPrint (int row, int n);
void TailPrint (int row);
int main (void)
{
int n;
printf ("请输入树的层数:");
scanf ("%d", &n);
int row = 2;
while (row <= n + 1)
{
LeafPrint (row, n);
row ++;
}
if (n == 1)
{
LeafPrint (2, 2);
}
TailPrint (n);
return 0;
}
void
LeafPrint (int row, int n)
{
int i, j, k, x;
for (i = 1; i <= row; i ++)
{
// 前空格
for (x = 0; x < n - row + 1; x ++)
{
printf (" ");
}
for (j = 1; j <= row - i; j ++)
{
printf(" ");
}
for (k = 1; k <= 2 * i - 1; k ++)
{
printf("*");
}
printf("\n");
}
}
void
TailPrint (int row)
{
int i;
for (i = 0; i < row; i ++)
{
printf (" ");
}
printf ("|\n");
for (i = 0; i < 2 * row + 1; i ++)
{
if (i == row)
{
printf ("V");
}
else
{
printf ("=");
}
}
}
7.
猴子吃桃程序_扩展2 猴子第一天摘了若干个桃子,吃了一半,不过瘾,又多吃了1个。第二天早上将剩余的桃子又吃掉一半,并且又多吃了1个。此后每天都是吃掉前一天剩下的一半零一个。到第n天再想吃时,发现只剩下1个桃子,问第一天它摘了多少桃子?为了加强交互性,由用户输入不同的天数n进行递推,即假设第n天的桃子数为1。同时还要增加对用户输入数据的合法性验证(如:不允许输入的天数是0和负数) 程序运行结果示例: Input days: 0↙ Input days: -5↙ Input days: a↙ Input days: 3↙ x=10 输入格式:"%d" 输出格式: 输入提示信息:"Input days:\n" 输出:"x=%d\n"
#include<stdio.h>
int peachSum (int day);
int main (void)
{
int day;
int flag;
do
{
printf ("Input days:\n");
flag = scanf ("%d", &day);
while (getchar () != '\n');
}
while (day <= 0 || flag != 1);
printf ("x=%d\n", peachSum (day));
return 0;
}
int
peachSum (int day)
{
if (day == 1)
{
return 1;
}
else
{
return (peachSum (day - 1) + 1) * 2;
}
}
8.
计算1-1/2+1/3-1/4+...+1/99-1/100+...,直到最后一项的绝对值小于1e-4为止。 **输出格式要求:"sum = %f\n"
#include <stdio.h>
#define EPS 1.0e-4
int main (void)
{
double sum = 0.0;
int sign = -1;
double part = 0;
int i = 1;
do
{
part = 1.0 / i;
sign = -sign;
sum += part * sign;
i ++;
}
while (part > EPS);
printf ("sum = %f\n", sum);
return 0;
}
9.
*对输入的行和字符进行计数。在计算机中,一行是以一个回车符\n作为行结束标记的,这样在程序中可以通过搜索\n对行进行计数。在UNIX操作系统中,一般有ctrl+d作为文件结束标记,其字符码为-1.当输入ctrl+d时表示文件输入结束,停止计数。在C语言中,以EOF(End Of File)作为文件结束标志 **输出格式要求:"chars=%d, lines=%d\n"
#include <stdio.h>
int main (void)
{
int lines = 0;
int chars = 0;
char ch;
while ((ch = getchar ()) != EOF)
{
chars ++;
if (ch == '\n')
{
lines ++;
}
}
printf ("chars=%d, lines=%d\n", chars, lines);
return 0;
}