困难——循环控制结构
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 80int 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-4int 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;
}
困难——循环控制结构相关推荐
- Java语言的循环控制结构
Java语言的循环控制结构 循环控制结构:是在一定条件下,反复执行某段程序的流程结构,被反复执行的程序称为循环体.循环控制结构是程序中非常重要和基本的一种结构,它是由循环语句来实现的. Java 的循 ...
- 循环控制结构程序05 - 零基础入门学习C语言20
第五章:循环控制结构程序05 让编程改变世界 Change the world by program break和continue语句 break语句 break语句可以用来从循环体内跳出循环体,即提 ...
- c语言奇数正偶数负,C语言二级考试练习题循环控制结构(二)
<C语言二级考试练习题循环控制结构(二)>由会员分享,可在线阅读,更多相关<C语言二级考试练习题循环控制结构(二)(21页珍藏版)>请在人人文库网上搜索. 1.1)具有以下程序 ...
- Day1:C语言循环控制结构例题之求sinx近似值
利用sinx,计算sinx的值,直到最后一项的绝对值小于时为止. 首先,分析一下这个题.题目要求得出sinx的近似值,如果对C语言的数学函数有所了解的话,第一时间想到的应该是C语言中已经有了求sinx ...
- c语言中三种常用的循环控制结构是,三C语言的基本控制结构.ppt
三C语言的基本控制结构 第三章 C语言的基本控制结构 问题 一元二次方程根求解算法描述 3.1 程序的三种控制结构 ⒊循环结构Repetition ⒋复合语句 CompoundStatement 3. ...
- python的循环控制结构是什么_7.Python控制和循环结构
7.1 Python条件语句 • Python编程if 语句用于控制程序的执行,基本形式为:if 判断条件: -- 执行语句-- else: -- 执行语句-- 7.2 Python条件表达式if-e ...
- java的循环控制结构有哪些_java中的控制结构(if,循环)详解
1 说明JAVA语言中三种控制循环结构的代码形式(其他 1. while(condition){ statements; } 其中,condition是任何布尔表达式,其返回值为true 或 fals ...
- python的循环控制结构_Python的控制结构之For、While、If循环问题
传统Python语言的主要控制结构是for循环.然而,需要注意的是for循环在Pandas中不常用,因此Python中for循环的有效执行并不适用于Pandas模式.一些常见控制结构如下. for循环 ...
- linux循环控制结构,Linux Shell 之 Shell 基本控制结构(二)(循环结构)
与其他编程语言类似,Shell支持for循环,和while 循环. 1.for 循环 for循环一般格式为: for 变量 in 列表 do command1 command2 ... command ...
最新文章
- php 修改数据库表的字段的值
- Nat. Med.:iHMP之“微生物组与早产”
- 数字预失真技术基本原理
- c++11 call_once 使用方法
- 比神经网络更高级的算法,人工神经网络是算法吗
- 关于昆仑通态通道处理设置
- 通达信自编的选股公式如何使用
- PM_10 十大管理之项目沟通管理(七)和干系人管理(八)
- 什么是DNS云解析?云解析有哪些特点?
- yum 与pip区别
- 大学一年级计算机应用课程,计算机应用*的课程教学计划
- seo php,SEO技术:PHP页面的SEO优化
- 服务器之间如何传输数据
- 计算机视觉方向相关文献下载
- SSDP 简单服务发现协议
- 神经网络输入图片大小,神经网络 图像相似度
- GERL 2020 (WWW)Graph Enhanced Representation Learning for News Recommendation
- Mockito 框架用于单元测试
- 美度舵手系列多功能计时腕表伴你行走世界
- 路径追踪 SAH优化的Bvh