• 1. 顺序与选择结构程序设计www.mingribook.com
  • 2. 判断回文数何为“回文”?正读和倒读都有意义的文字称为“回文”,王融有诗《春游回文诗》“风朝指锦幔,月晓照莲池”,反读也是有意义的“池莲照晓月,幔锦指朝风”。“回文数”,则是一种数字,例如98789就是回文数,这个数正读是98789,倒读也是98789。#include int palind(char str[],int k, int i) /*自定义函数检测是否为回文字符串*/ { if(str[k]==str[i-k]&&k==0) /*递归结束条件*/ return 1; else if(str[k]==str[i-k]) /*判断相对应的两个字符是否相等*/ palind(str,k-1,i); /*递归调用*/ else return 0; } int main() { int i=0,n=0; /*i记录字符个数,n是函数返回值*/ char ch,str[20]; while ((ch=getchar())!='\n') { str[i]=ch; i++; }
  • 3. 判断回文数 if(i%2==0) /*当字符串中字符个数为偶数时*/ n=palind(str,(i/2),i-1); else n=palind(str,(i/2-1),i-1); /*当字符串中字符个数为奇数时*/ if(n==0) printf("不是回文数\n"); /*当n为0说明不是回文数,否则是回文数*/ else printf("是回文数\n"); return 0; } 在本例中,palind(str,k-1,i);是函数调用语句,这个函数是用户自定义的,调用该函数前,必须对该函数先进行定义。该函数的作用就是判断输入的数是否是回文数,具体是怎么判断的呢,分析一下: 假设要判断的数是98789,我们会发现该数有5个数字,但是用数组来存储这5个数字,最后一个数字对应的数组下标将会是4,我们首先对str[1]与str[3]进行判断,看这两个数字是否相等,若相等再接着判断str[0]与str[4]是否相等,若相等且此时已经判断到最外层,则说明该数相对位置上的数字相同,是回文数,否则不是回文数。
  • 4. 阶梯问题 在你面前有一条长长的阶梯。如果你每步跨2阶,那么最后剩1阶;如果你每步跨3阶,那么最后剩2阶;如果你每步跨5阶,那么最后剩4阶;如果你每步跨6阶,那么最后剩5阶;只有当你每步跨7阶时,最后才正好走完,一阶也不剩。请问条阶梯至少有多少阶?(求所有三位阶梯数#include void main() { int i; /*定义基本整型变量i*/ for (i = 100; i < 1000; i++) /*for循环求一百到一千内的所有三位数*/ if (i % 2 == 1 && i % 3 == 2 && i % 5 == 4 && i % 6 == 5 && i % 7 == 0) /*根据题意写出对应的条件*/ printf("阶梯数是:%d\n", i); /*输出阶梯数*/ }
  • 5. 阶梯问题本实例中,for语句和if语句都是控制语句,for语句是循环执行语句,在这里是用来穷举100到1000之间的数,而if语句是条件判断语句,用来判断条件,本题的关键就是如何来写判断条件,根据题意来看,“每步跨2阶,那么最后剩1阶……当每步跨7阶时,最后才正好走完,一阶也不剩”从这几句可以看出题的规律:总的阶梯数对每步跨的阶梯数取余得的结果就是剩余阶梯数,这5种情况是&&的关系也就说必须同时满足。
  • 6. 将输入的小写字母转换为大写字母 从键盘上输入一个小写字母,按回车键以后,程序即可将该字母转换为大写字母,并将大写字母的ASCII码值输出。(范例位置:光盘\TM\fl\3\3) #include void main() { char c1,c2; /*定义字符变量*/ printf("输入一个小写字母\n"); /*输出提示信息,提示用户输入一个字符*/ c1=getchar(); /*将这个字符赋给变量c1*/ c2=c1-32; /*将小写字母对应的ASCII值减去32得到大写字母的ASCII值*/ printf("转换以后的字母为:%c,%d\n",c2,c2); /*输出这个大写字母*/ }由于大写字母与小写字母的ASCII码值相差32,故将小写字母转化成大写字母的方法就是将小写字母的ASCII码减去32,便可得到与之对应的大写字母。输出时只要先输出字符,然后将字符以整数的形式输出,就可以实现ASCII码值的输出。
  • 7. 使用字符函数输入/输出字符 使用各种字符输入函数接收用户的输入,最后使用输出函数将用户所输入的数据进行输出显示在屏幕上。 #include void main() { char c1,c2,c3; /*定义字符变量*/ printf("输入一个字符,使用getche函数接收\n"); /*提示用户输入一个字符*/ c1=getche(); /*使用getche()函数接收*/ printf("\n"); /*输出一行空行*/ printf("输入一个字符,使用getch函数接收\n"); /*提示用户输入一个字符*/ c2=getch(); /*使用getch()函数接收*/ printf("\n"); /*输出一行空行*/ printf("输入一个字符,使用getchar函数接收\n"); /*提示用户输入一个字符*/ c3=getchar(); /*使用getchar()函数接收*/ printf("\n输入的这三个字符是:\n"); /*输出一行空行及提示信息*/ /*将这些字符输出*/ putchar(c1); putchar(c2); putchar(c3); printf("\n"); }
  • 8. 使用字符函数输入/输出字符本例中使用了三个输入函数(这些函数都是用于读入一个字符)和一个输出函数。 getche()函数用于从键盘中读入一个字符,然后直接运行下一条语句; getch()函数用于从键盘读入一个字符,但是不显示在屏幕上,之后也是执行下一条语句; getchar()函数用于从键盘上读入一个字符,然后等待输入是否结束,如果用户按下回车键,则执行下一条语句。 putchar()函数用于将字符常量或者字符变量输出到屏幕上。 说明:字符的输入输出函数包含在stdio库中,因此在使用之前需要将头文件stdio.h包含到程序中,这样编译系统才能够调用库中的函数进行输入和输出。
  • 9. 求一元二次方程的根 求解一元二次方程ax2+bx+c=0的根,由键盘输入系数,输出方程的根。(范例位置:光盘\TM\fl\3\5) #include #include void main() { double a,b,c; /*定义系数变量*/ double x1,x2,p; /*定义根变量和表达式的变量值*/ printf("请输入a,b,c:"); /*提示用户输入三个系数*/ scanf("%lf%lf%lf",&a,&b,&c); /*接收用户输入的系数*/ printf("\n"); /*输出回行*/ p=b*b-4*a*c; /*给表达式赋值*/ x1=(-b+sqrt(p))/(2*a); /*根1的值*/ x2=(-b-sqrt(p))/(2*a); /*跟2的值*/ printf("x1=%f,x2=%f\n",x1,x2); /*输出两个根的值*/ } 本例是顺序结构程序设计的典型应用,其类似于给出公式计算,按照输入数据、计算、输出三步方案来设计运行程序。已知一元二次方程的求根公式为和,a、b、c为要输入的数据,方程的根为待求的数据,设两根为x1、x2,数据的类型为double类型。这样便可以根据公式直接求得方程的根。为了使得求解的过程更简单,可以考虑使用中间变量来存放判别式b2-4ac的值。最后使用标准输出函数把求得的结果输出。
  • 10. 求直角三角形的斜边 从键盘中输入直角三角形俩直角边a和b,用数学函数hypot来求直角三角形的斜边。#include #include main() { float a, b, c; printf("请输入两条直角边:\n"); scanf("%f,%f", &a, &b); /*从键盘中输入两个直角边*/ c = hypot(a, b); /*调用hypot函数,返回斜边值赋给c*/ printf("hypotenuse is:%f\n", c); /*将斜边值输出*/ } 运行程序,效果如图3.16所示。 图3.16 字符型数据进行算术运算 本例实现了顺序结构程序的设计,其具体过程如下: 首先定义了3个单精度类型的变量,然后由用户输入两个单精度的数据,使用函数求得斜边,最后进行输出。本例使用了求直角三角形的斜边的函数hypot(),具体使用说明如下: double hypot(double a,double b) 该函数的作用是对给定的直角三角形的两个直角边,求其斜边的长度,函数的返回值为所求的斜边值。该函数的原型在math.h中。
  • 11. 检查字符类型
  • 12. 判断偶数 利用单条件单分支选择语句判断输入的一个整数是否是偶数。如果输入的数字是偶数,则输出该数为偶数,否则将不输出任何信息。(范例位置:光盘\TM\fl\3\7) #include void main() { int value; printf("输入一个整数:\n"); /*输出提示信息*/ scanf("%d",&value); /*输入value*/ if (value%2==0) /*判断value是否能被2整除*/ { printf("%d 是偶数!\n",value); /*输出value的值*/ } }本例主要是使用if语句的最基本的形式——单分支选择语句,如果表达式的值为真,若能整除则执行其后的语句,否则不执行该语句。即判断输入的数是否能被2整除,若能被2整除,则执行if下的输出语句,若不能被2整除,则什么也不执行。
  • 13. 平方和值判断 编程要求输入整数a和b,若a2+b2的结果大于100,则输出a2+b2的值,否则输出a+b的结果。(范例位置:光盘\TM\fl\3\8) #include void main() { int a, b, x, y; /*定义变量为基本整型*/ printf("请输入a和b:\n"); scanf("%d%d", &a, &b); /*输入变量a和b的值*/ x = a * a + b * b; /*计算出平方和*/ y = a + b; /*计算出a与b的和*/ if (x > 100) /*判断平方和是否大于100*/ { printf("a^2+b^2="); printf("%d\n", x); /*如果平方和大于100,则输出平方和*/ } else printf("a+b=%d\n", y); /*如果平方和不大于100,则输出两数之和*/ } 本例使用了双分支if结构,首先求出输入的两个数的平方和,再对该平方和进行判断,如果平方和大于100,则将平方和输出,否则输出这两个数的和的值。
  • 14. 评定成绩等级 输入百分制分数给出相应的等级,当分数大于等于90分为’A’,80~89为‘B’,70~79为‘C’,60~69为‘D’,60分以下为‘E’。#include main() { int score; printf("请输入分数(score<=100):"); scanf("%d", &score); /*输入学生成绩*/ if (score == 100) /*如果成绩是100则和90是一样的等级*/ score = 90; score = score / 10; /*求出成绩的高位数字*/ switch (score) { case 9: printf("等级为 A\n"); break; case 8: printf("等级为 B\n"); break; case 7: printf("等级为 C\n"); break; case 6: printf("等级为 D\n"); break; default: printf("等级为 E\n"); } }
  • 15. 评定成绩等级本例使用switch语句根据分数段输入成绩评定成绩等级,当输入的成绩是100时,这时只需把它看成90分,因为100和90分都是A等的,对输入的成绩使用除法便求出其高位数字,因为通过高位数字就可以判断出输出的成绩在那个等级,使用switch语句对取出的高位数字进行选择判断,如果高位数为9则是A等,如果是8则是B等,依此类推,分别出现C、D、E等。
  • 16. 加油站加油 某加油站有a、b、c三种汽油,售价分别为3.25、3.00、2.75(元/千克),也提供了“自己加”或“协助加”两个服务等级,这样用户可以得到5%或10%的优惠。编程实现针对用户输入加油量x,汽油的品种y和服务的类型z,输出用户应付的金额。(范例位置:光盘\TM\fl\3\10) #include void main() { float x, m1, m2, m; char y, z; scanf("%f,%c,%c", &x, &y, &z); /*输入选择油的千克数、种类及服务*/ switch (y) /*选择汽油种类*/ { case 'a': m1 = 3.25; break; case 'b': m1 = 3.00; break; case 'c': m1 = 2.75; break; } switch (z) /*选择服务种类*/
  • 17. 加油站加油 { case 'n': /*不需要提供服务*/ m2 = 0; break; case 'm': m2 = 0.05; break; case 'e': m2 = 0.1; break; } m = x * m1 - x * m1 * m2; /*计算应付的钱数*/ printf("汽油种类是:%c\n", y); printf("服务等级是:%c\n", z); printf("用户应付金额是:%.3f\n", m); } 本实例是通过switch循环来实现不同的选择。switch分支解决问题的关键是在于确定switch分支表达式和case常量的关系。本例常量的个数是一定的,汽油有a、b、c三种类型,服务种类也有三种情况,“不需要提供服务”(n)、“自己加”(m)、“协助加”(e),变量输入的数据是规定好的常量。根据已知的条件和确定switch和case的关系就可以写出switch语句。
  • 18. 计算运输公司的计费某运输公司的收费按照用户运送货物的路程进行计费。路程(s)越远,每公里运费越低,其收费标准如下表3.3所示。路程(km)运费s<250没有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣 #include int main() { int iDiscount; /*表示折扣*/ int iSpace; /*表示路程*/ int iSwitch; /*表示折扣的检验情况*/ float fPrice,fWeight,fAllPrice; printf("请输入单价,重量和距离\n"); scanf("%f%f%d",&fPrice,&fWeight,&iSpace); if(iSpace>3000) { iSwitch=12; /*折扣的检验情况为12*/ } else { iSwitch=iSpace/250; /*计算折扣的检验情况*/ }
  • 19. 计算运输公司的计费 switch(iSwitch) { case 0: iDiscount=0; break; case 1: iDiscount=2; break; case 2: case 3: iDiscount=5; break; case 5: case 6: case 7: iDiscount=8; break; case 8: case 9: case 10: case 11: iDiscount=10; break; case 12: iDiscount=12; break; default: break; } fAllPrice=fPrice*fWeight*iSpace*(1-iDiscount/100.0); /*计算总价格*/ printf("您一共需要交付:%.4f\n",fAllPrice); /*输出结果*/ return 0; }
  • 20. 计算运输公司的计费在程序代码中,定义的变量fPrice、fWeight和fAllPrice分别表示的是单价、重量和计算得到最终的总价格。通过对路程进行除法得到条件,然后使用switch语句进行检验。 其中需要注意的是,在计算iSwitch=iSpace/250时,由于iSwitch定义的类型为整型,所以iSwitch的值为计算后得到的整数部分。
  • 21. 一年的日期情况 要求设计程序通过输入一年中的月份,得到这个月所包含的天数。判断数量的情况,根据需求选择使用if语句和switch语句。 #include int main() { int iMonth=0,iDay=0; /*定义变量*/ printf("请输入您想知道的所包含日期数的月份:\n"); /*提示信息*/ scanf("%d",&iMonth); /*输入数据*/ switch(iMonth) /*检验变量*/ { /*多路开关模式switch语句进行检验*/ case 1: /*1表示一月份*/ case 3: case 5: case 7: case 8: case 10: case 12:
  • 22. 一年的日期情况 iDay=31; /*为iDay赋值为31*/ break; /*跳出switch结构*/ case 4: case 6: case 9: case 11: iDay=30; break; case 2: iDay=28; /*为iDay赋值为28*/ break; /*跳出switch结构*/ default: /*默认情况*/ iDay=-1; /*赋值为-1*/ break; /*跳出switch结构*/ } if(iDay==-1) /*使用if语句判断iDay的值*/ { printf("您的输入有误!\n"); } else /*默认的情况*/ { printf("2011年%d月份 有 %d 天\n",iMonth,iDay); } return 0; }
  • 23. 一年的日期情况因为要判断一年中12月份所包含的日期数,所以要对12种不同的情况进行检验。因为检验数量的比较多,所以使用switch结构判断月份比较合适,并且可以使用多路开关模式,使得编写更为简洁。其中case语句用来判断月份iMonth的情况,并且为iDay赋相应的值。default默认处理为输入的月份不符合检验条件时,为iDay赋值为-1。 switch检验完成之后,要输出得到的日期数,因为有可能日期为-1,也就是出现月份错误的情况。这时判断的情况只有两种,就是iDay是否为-1,检验的条件少所以使用if语句更为方便。
  • 24. 模拟自动售货机 设计一个自动售货机的程序,运行程序,提示用户输入要选择的选项,当用户输入以后,提示所选择的内容。(范例位置:光盘\TM\fl\3\13) #include #include void main() { int button; /*定义变量*/ system("cls"); /*清屏*/ printf("**********************\n"); /*输出普通字符*/ printf("* 可选择的按键: *\n"); printf("* 1. 巧克力 *\n"); printf("* 2. 蛋糕 *\n"); printf("* 3. 可口可乐 *\n"); printf("**********************\n"); printf("从1~3中选择按键:\n"); /*输出提示信息*/ scanf("%d",&button);
  • 25. 模拟自动售货机 switch(button) /*根据button决定输出结果*/ { case 1: printf("你选择了巧克力"); break; case 2: printf("你选择了蛋糕"); break; case 3: printf("你选择了可口可乐"); break; default: printf("\n 输入错误 !\n"); /*其它情况*/ break; } printf("\n"); }使用switch语句构成本程序的选择功能,当输入1时,代表你选择了巧克力,当输入2时,代表你选择了蛋糕,当输入3时,代表你选择了可口可乐。这样就将case语句的常量表达式的值表示成这些食物,当选择完某种食物后便可取到相应的食物。
  • 26. Thank youwww.mingribook.com