1 年龄判断程序
1.1 问题
本案例需要使用交互的方式判断年龄的范围:用户从控制台输入一个年龄,由程序判断该年龄是否在18~50岁之间。程序交互过程如图-1所示:
图-1
1.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:定义变量
变量age,用于保存用户从控制台输入的年龄。
代码如下:
- #include <stdio.h>
- int main(int argc, const char * argv[])
- {
- int age;
- return 0;
- }
步骤二:从控制台输入年龄
首先,使用printf函数输出一行提示,提示输入一个年龄。
然后,使用scanf函数输入一个整数到变量age。
代码如下:
- #include <stdio.h>
- int main(int argc, const char * argv[])
- {
- int age;
- printf("请输入一个年龄:");
- scanf("%d", &age);
- return 0;
- }
步骤三:判断年龄所在的范围
接收到年龄后,判断年龄是否在18~50岁之间。
代码如下:
- #include <stdio.h>
- int main(int argc, const char * argv[])
- {
- int age;
- printf("请输入一个年龄:");
- scanf("%d", &age);
- if (age >= 18 && age <= 50)
- printf("该年龄在18~50岁之间 ");
- else
- printf("该年龄不在指定的范围之间 ");
- return 0;
- }
在上述代码中,使用了“&&”逻辑运算符来连接两个条件。年龄在18~50岁之间,应该使用age >= 18 && age <= 50的表达式来判断,而不能用18 <= age <= 50表达式判断。对于后一个表达式,它将永远为真,因为对于表达式18 <= age如果为真,其值为1,1 <= 50为真;如果为假,其值为0,0 <= 50也为真,所以表达式18 <= age <= 50的值始终为真。
1.3 完整代码
本案例的完整代码如下所示:
- #include <stdio.h>
- int main(int argc, const char * argv[])
- {
- int age;
- printf("请输入一个年龄:");
- scanf("%d", &age);
- if (age >= 18 && age <= 50)
- printf("该年龄在18~50岁之间 ");
- else
- printf("该年龄不在指定的范围之间 ");
- return 0;
- }
2 将输入字母以大写形式输出
2.1 问题
本案例需要使用交互的方式将从键盘上输入的字母统一转换成大写输出:用户从控制台输入一个字母,由程序判断其大小写,如果是小写字母,则将其转换成大写,然后输出该字母。程序交互过程如图-2所示:
图-2
2.2 方案
在计算机中,所有的数据在存储和运算时都要使用二进制数表示,同样的,象a、b、c、d这样的52个字母(包括大写)、以及0、1、2等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪个数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通讯而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了所谓的美国信息交换标准码,统一规定了上述常用符号用哪个二进制数来表示,称为ASCII码字符集。
在ASCII码字符集中,大写字母A的ASCII码为65,小写字母a的ASCII码为97,其差是32;大写字母B的ASCII码为66,小写字母b的ASCII码为98,其差也是32;依此类推,会发现大写字母与小写字母的ASCII码都差32。所以由小写字母转换成大写字母只需要将小写字母的ASCII码减去32,即变成大写字母的ASCII码。
2.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:定义变量
定义变量ch,用于存储从控制台输入的字母,代码如下:
- #include <stdio.h>
- int main(int argc, const char * argv[])
- {
- char ch;
- return 0;
- }
步骤二:从控制台输入一个字母
首先,使用printf函数输出一行提示,提示输入一个字母。
然后,使用scanf函数输入这个字母到变量ch。
代码如下:
- #include <stdio.h>
- int main(int argc, const char * argv[])
- {
- char ch;
- printf("请输入一个字母:");
- scanf("%c", &ch);
- return 0;
- }
步骤三:判断并输出
首先,判断输入的字符是否为字母。
判断的方法为:比较输入的字符的ASCII码是否在大写字母A的ASCII码到Z的ASCII码之间或者是否在小写字母a的ASCII码到z的ASCII码之间,如果是则说明输入的字符是字母,否则不是。
然后,如果是字母,则将其转换成大写后输出;不是字母,则属出错误提示。
代码如下:
- #include <stdio.h>
- int main(int argc, const char * argv[])
- {
- char ch;
- printf("请输入一个字母:");
- scanf("%c", &ch);
- if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'B'))
- {
- if(ch >= 'a' && ch <= 'z')
- ch = ch - ('a' - 'A');
- printf("输出结果为:%c ", ch);
- }
- else
- printf("输入的字符不是字母。 ");
- return 0;
- }
2.4 完整代码
本案例的完整代码如下所示:
- #include <stdio.h>
- int main(int argc, const char * argv[])
- {
- char ch;
- printf("请输入一个字母:");
- scanf("%c", &ch);
- if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'B'))
- {
- if(ch >= 'a' && ch <= 'z')
- ch = ch - ('a' - 'A');
- printf("输出结果为:%c ", ch);
- }
- else
- printf("输入的字符不是字母。 ");
- return 0;
- }
3 将输入的百分制成绩转换成等级成绩
3.1 问题
学员成绩等级计算程序要求根据学员的分数计算该分数的所属等级并输出。首先,用户输入学员的分数,该分数要求在0~100之间,如果录入错误,则提示错误信息,交互过程如图-3:
图-3
如果用户输入的分数正确(在0到100之间),则根据表-1中的规则计算该分数所对应的级别,并输出计算结果,交互过程如图-4所示:
图-4
3.2 方案
本案例要求使用if-else结构来实现。
3.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:定义变量
定义变量score,用于存储从控制台输入的成绩,代码如下:
- #include <stdio.h>
- int main(int argc, const char * argv[])
- {
- int score;
- return 0;
- }
步骤二:从控制台输入一个成绩
首先,使用printf函数输出一行提示,提示输入一个成绩。
然后,使用scanf函数输入成绩到变量score。
代码如下:
- #include <stdio.h>
- int main(int argc, const char * argv[])
- {
- int score;
- printf("请输入该学员的分数(0~100):");
- scanf("%d", &score);
- return 0;
- }
步骤三:使用if-else结构进行判断
先使用if语句判断所录入的分数是否在0到100之间;如果不在正确的范围,则先输出提示信息,再使用return终止方法的运行。代码如下所示:
- #include <stdio.h>
- int main(int argc, const char * argv[])
- {
- int score;
- printf("请输入该学员的分数(0~100):");
- scanf("%d", &score);
- if (score < 0 || score > 100)
- {
- printf("请输入0到100以内的分数 ");
- return 1;
- }
- return 0;
- }
如果录入的分数确实在0~100之间,则使用if-else结构判断不同的分数输出不同的级别。代码如下所示:
- #include <stdio.h>
- int main(int argc, const char * argv[])
- {
- int score;
- printf("请输入该学员的分数(0~100):");
- scanf("%d", &score);
- if (score < 0 || score > 100)
- {
- printf("请输入0到100以内的分数 ");
- return 1;
- }
- if (score >= 90)
- printf("优 ");
- else if (score < 60)
- printf("不及格 ");
- else
- printf("一般 ");
- return 0;
- }
3.4 完整代码
本案例的完整代码如下所示:
- #include <stdio.h>
- int main(int argc, const char * argv[])
- {
- int score;
- printf("请输入该学员的分数(0~100):");
- scanf("%d", &score);
- if (score < 0 || score > 100)
- {
- printf("请输入0到100以内的分数 ");
- return 1;
- }
- if (score >= 90)
- printf("优 ");
- else if (score < 60)
- printf("不及格 ");
- else
- printf("一般 ");
- return 0;
- }
4 实现闰年判断程序
4.1 问题
闰年(leap year)是为了弥补因人为立法规定造成的年度天数与地球实际公转周期的时间差而设立的。
地球绕太阳运转周期为365天5小时48分46秒(折合365.24219天),即1回归年。公立的平年(非闰年)只有365日,比一回归年短约0.2422日,所余下的时间约为4年累计一天,故每4年则于2月加一天,使当年的历年长度为366日,这一年就是闰年。但是,如果按照每4年一个闰年计算,平均每年就要多算出0.0078天,这样经过400年就会多算出3天来,因此,每400年中要减少3个闰年。所以规定,公立年份是100的倍数的,必须同时也是400的倍数才是闰年,不是400的倍数的,虽然是100的倍数,也是平年。这就是通常所说的:4年一闰,百年不闰,400年再闰。例如,2000年是闰年,1900年则是平年。
本案例需要使用交互的方式判断某年是否为闰年:用户从控制台输入需要判断的年份值,由程序判断该年是否为闰年,并将判断结果输出到控制台。程序交互过程如图-5所示:
图-5
4.2 方案
首先,此案例需要从控制台接收用户录入的年份值。然后,根据闰年的规则可以总结出,如果年份可以被400整除,则必然是闰年;另外,如果年份可以被4整除,但不能被100整除,则也是闰年;其他年份则是平年(非闰年)。因此,需要使用取余运算符(%)判断整除,并需要使用逻辑运算符来构建判断表达式,以进行判断。
4.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:定义变量
变量year,用于保存用户输入的年份。
代码如下:
- #include <stdio.h>
- int main()
- {
- int year;
- return 0;
- }
步骤二:输入年分值
首先,使用printf函数输出一行提示,提示输入一个年份。
然后,使用scanf函数输入成绩到变量year。
代码如下:
- #include <stdio.h>
- int main()
- {
- int year;
- printf("请输入一个年份:");
- scanf("%d", &year);
- return 0;
- }
步骤三:闰年判断
某年份只需要满足下列两个条件之一,即可认定是闰年:
1) 年份可以被4整除且不能被100整除;
2) 年份可以被400整除。
因此,需要使用%运算符、==运算符、!=运算符、&&和||运算符,来综合判断某年份是否为闰年。代码如下所示:
- #include <stdio.h>
- int main()
- {
- int year;
- printf("请输入一个年份:");
- scanf("%d", &year);
- if ((year%4==0/*能被4整除*/
- && year%100!=0)/*不能被100整除*/
- || year%400==0/*能被400整除*/) {
- printf("%d是闰年 ", year);
- }else{
- printf("%d不是闰年 ", year);
- }
- return 0;
- }
4.4 完整代码
本案例的完整代码如下所示:
- #include <stdio.h>
- int main()
- {
- int year;
- printf("请输入一个年份:");
- scanf("%d", &year);
- if ((year%4==0/*能被4整除*/
- && year%100!=0)/*不能被100整除*/
- || year%400==0/*能被400整除*/) {
- printf("%d是闰年 ", year);
- }else{
- printf("%d不是闰年 ", year);
- }
- return 0;
- }