程序设计与问题求解例题集综述.docx
《程序设计与问题求解例题集综述.docx》由会员分享,可在线阅读,更多相关《程序设计与问题求解例题集综述.docx(84页珍藏版)》请在冰豆网上搜索。
![程序设计与问题求解例题集综述.docx](https://file1.bdocx.com/fileroot1/2023-2/3/b1f3d27b-c0c4-4462-ba83-19b85f568305/b1f3d27b-c0c4-4462-ba83-19b85f5683051.gif)
程序设计与问题求解例题集综述
程序设计与问题求解例题集
(根据2015新大纲编写)
一、程序设计概述(2学时)
主要内容:
程序与程序设计、问题求解的一般步骤、算法与描述、C语言简介、C程序运行环境与运行步骤。
例1-1:
基本结构
#include
intmain()
{
//加入你编写的代码
printf("HelloGUET!
\n");
}
例1-2:
求两个数的和
#include
/*Thisisthemainprogram*/
voidmain()
{inta,b,sum;/*定义变量*/
a=10;
b=24;
sum=add(a,b);
printf(”sum=%d\n",sum);
}
/*Thisfunctioncalculatesthesumofxandy*/
intadd(intx,inty)
{intz;
z=x+y;
return(z);
}
例1-3:
从键盘输入两个整数,输出其中较大的数
#include
voidmain()
{intmax(intx,inty)
inta,b,c;
scanf(“%d,%d”,&a,&b);
c=max(a,b);
printf("max=%d",c);
}
intmax(intx,inty)
{intz;
if(x>y)z=x;
elsez=y;
return(z);
}
例1-4:
程序编写风格
优秀程序员的基本素质:
●使用TAB缩进
●{}对齐
●有足够的注释
●有合适的空行
voidmain()
{
inti,j,sum;
sum=0;
for(i=1;i<10;i++)
{
for(j=1;j<10;j++)
{
sum+=i*j;
}
}
printf(“%d\n”,sum);
}
二、数据类型、运算与表达式(2学时)
主要内容:
4种基本数据类型的存储:
整型、实型、字符型、布尔型。
算术运算与表达式、赋值运算与表达式。
例2-1:
浮点型数据的舍入误差
#include
voidmain()
{
floata,b;
a=123456.789e5;
b=a+20;
printf("%f\n",b);
}
注1:
浮点型数据的舍入误差:
●数据超过有效位数,则产生误差
●要避免一个很大的数与一个很小的数加减
注2:
舍入误差使1.0/3*3的结果并不等于1!
例2-2:
向字符变量赋整数
#include
voidmain()
{charc1,c2;
c1=97;
c2=98;
printf(“%c%c\n",c1,c2);
printf(“%d%d\n",c1,c2);
}
例2-3:
大小写字母的转换
#include
voidmain()
{
charc1,c2;
c1=‘a’;
c2=‘b’;
c1=c1-32;
c2=c2-32;
printf(“%c%c",c1,c2);
}
例2-4:
求华氏温度100°F对应的摄氏温度。
//摄氏温度C=(5/9)(F-32)
#include
intmain(void)
{
intcelsius,fahr;变量定义
fahr=100;变量使用
celsius=5*(fahr-32)/9;
printf("fahr=%d,celsius=%d\n",fahr,celsius);输出结果
return0;
}
三、顺序结构程序设计(4学时)
主要内容:
常量与变量声明、赋值语句、基本输入输出方法、数据类型的转换、顺序结构编程实例。
例3-1:
赋值语句
例3-2:
putchar输出(单字符变量)
#include
voidmain()
{chara,b,c;
a='B';b=‘O';c=‘Y';
putchar(a);putchar(b);putchar(c);
}
例3-3:
输出控制字符
#include
voidmain()
{chara,b;
a=‘O';b=‘k';
putchar(a);putchar(‘\n’);putchar(b);
}
例3-4:
输出转义字符
#include
voidmain()
{chara;
a='B';
putchar('\101');putchar(a);
}
运行结果:
AB
例3-5:
getchar函数实现单字符输入
#include
voidmain()
{charc;
c=getchar();
putchar(c);
}
例3-6:
scanf和printf的格式化输入输出
/*输入三角形边长,求面积*/
#include
#include
voidmain()
{floata,b,c,s,area;
scanf("%f,%f,%f",&a,&b,&c);
s=1.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n",a,b,c,s);
printf("area=%7.2f\n",area);
}
例3-7:
从键盘输入大写字母,用小写字母输出
#include"stdio.h"
voidmain()
{charc1,c2;
c1=getchar();
printf("%c,%d\n",c1,c1);
c2=c1+32;
printf("%c,%d\n",c2,c2);
}
例3-8:
一元二次方程求根
#include
#include
voidmain()
{floata,b,c,disc,x1,x2,p,q;
scanf("a=%f,b=%f,c=%f",&a,&b,&c);
disc=b*b-4*a*c;
p=-b/(2*a);q=sqrt(disc)/(2*a);
x1=p+q;x2=p-q;
printf("\n\nx1=%5.2f\nx2=%5.2f\n",x1,x2);
}
四、分支结构程序设计(6学时)
主要内容:
关系运算、逻辑运算、if-else语句、switch-case语句、选择结构编程实例。
例4-1:
输入两个数并判断两数是否相等
#include
voidmain()
{inta,b;
printf("Enterintegera:
");
scanf("%d",&a);
printf("Enterintegerb:
");
scanf("%d",&b);
if(a==b)
printf("a==b\n");
else
printf("a!
=b\n");
}
例4-2:
判断输入字符种类
#include
voidmain()
{charc;
printf("Enteracharacter:
");
c=getchar();
if(c<32)printf("Thecharacterisacontrolcharacter\n");
elseif(c>='0'&&c<='9')printf("Thecharacterisadigit\n");
elseif(c>='A'&&c<='Z')printf("Thecharacterisacapitalletter\n");
elseif(c>='a'&&c<='z')printf("Thecharacterisalowerletter\n");
elseprintf("Thecharacterisothercharacter\n");
}
例4-3:
任意三个整数的排序
#include
main()
{
intx,y,z,t;
printf("请任意输入三个整数程序将按从小到大的顺序输出:
");
scanf("%d%d%d",&x,&y,&z);
if(x>y)
{t=x;x=y;y=t;}/*交换x,y的值*/
if(x>z)
{t=z;z=x;x=t;}/*交换x,z的值*/
if(y>z)
{t=y;y=z;z=t;}/*交换z,y的值*/
printf("从小到大:
%d%d%d\n",x,y,z);
}
例4-4:
(if的嵌套)输入两个数并判断其大小关系
#include
voidmain()
{
intx,y;
printf("Enterintegerx,y:
");
scanf("%d,%d",&x,&y);
if(x!
=y)
if(x>y)
printf("X>Y\n");
else
printf("Xelse
printf("X==Y\n");
}
例4-5:
switch及其嵌套
#include
voidmain()
{intx=1,y=0,a=0,b=0;
switch(x)
{
case1:
switch(y)
{case0:
a++;break;
case1:
b++;break;
}
case2:
a++;b++;break;
case3:
a++;b++;
}
printf(“\na=%d,b=%d”,a,b);
}
例4-6:
闰年的判断
#include
voidmain()
{intyear,leap;
scanf(“Enteryear:
%d”,&year);
if((year%4==0&&year%100!
=0)||(year%400==0))
leap=1;
elseleap=0;
if(leap)printf(“%dis”,year);
elseprintf(“%disnot”,year);
printf(“aleapyear.\n”);
}
例4-7:
查询自动售货机中商品的价格
假设自动售货机出售4种商品,薯片(crisps)、爆米花(popcorn)、巧克力(chocolate)和可乐(cola),售价分别是每份3.0、2.5、4.0和3.5元。
在屏幕上显示以下菜单,用户可以连续查询商品的价格,当查询次数超过5次时,自动退出查询;不到5次时,用户可以选择退出。
当用户输入编号1~4,显示相应商品的价格;输入0,退出查询;输入其他编号,显示价格为0。
[1]Selectcrisps
[2]Selectpopcorn
[3]Selectchocolate
[4]Selectcola
[0]Exit
#include
Intmain(void)
{intchoice,i;doubleprice;
for(i=1;i<=5;i++){
printf("[1]Selectcrisps\n");
printf("[2]Selectpopcorn\n");
printf("[3]Selectchocolate\n");
printf("[4]Selectcola\n");
printf("[0]exit\n");
printf("Enterchoice:
");
scanf("%d",&choice);
if(choice==0)break;
switch(choice){
case1:
price=3.0;break;
case2:
price=2.5;break;
case3:
price=4.0;break;
case4:
price=3.5;break;
default:
price=0.0;break;
}
printf("price=%0.1f\n",price);
}
printf("Thanks\n");
}
例4-8:
输入一个形式如“操作数运算符操作数”的四则运算表达式,输出运算结果。
例如:
输入:
3.1+4.8
输出:
7.9
#include
intmain(void)
{charoperator;doublevalue1,value2;
printf("Typeinanexpression:
");
scanf("%lf%c%lf",&value1,&operator,&value2);
switch(operator){
case'+':
printf("=%.2f\n",value1+value2);
break;
case'-':
printf("=%.2f\n",value1-value2);
break;
case'*':
printf("=%.2f\n",value1*value2);
break;
case'/':
printf("=%.2f\n",value1/value2);
break;
default:
printf("Unknownoperator\n");
break;
}
return0;
}
例4-9:
输入10个字符,分别统计出其中空格或回车、数字和其他字符的个数。
intmain(void)
{
intblank,digit,i,other;charch;
blank=digit=other=0;
printf("Enter10characters:
");
for(i=1;i<=10;i++){
ch=getchar();
switch(ch){
case'':
case'\n':
blank++;
break;
case'0':
case'1':
case'2':
case'3':
case'4':
case'5':
case'6':
case'7':
case'8':
case'9':
digit++;
break;
default:
other++;
break;
}
}
printf("blank=%d,digit=%d,other=%d\n",blank,digit,other);
return0;
}
五、循环结构程序设计(8学时)
主要内容:
while、do-while、for语句、其他控制语句、递推法、穷举法编程实例。
例5-1:
用while语句构成循环,求1+2+...+100
#include
voidmain()
{
inti,sum=0;
i=1;
while(i<=100)
{sum=sum+i;
i++;
}
printf("%d",sum);
}
例5-2:
用for语句构成循环,求1+2+...+100
#include
voidmain()
{
inti,sum=0;
for(i=1;i<=100;i++)
sum+=i;
printf("%d",sum);
}
例5-3:
(循环的嵌套)打印九九乘法表
#include"stdio.h"
voidmain()
{
inti,j,result;
printf("\n");
for(i=1;i<10;i++)
{
for(j=1;j<10;j++)
{
result=i*j;
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/
}
printf("\n");/*每一行后换行*/
}
}
例5-4:
(break举例)小写字母转换成大写字母,直至输入非字母字符
#include
voidmain()
{charc;
while
(1)
{
c=getchar();
if(c>='a'&&c<='z')
putchar(c-32);
else
if(c>=‘A'&&c<=‘Z')
putchar(c);
else
break;
}
}
例5-5:
(continue举例)输出100~200之间不能被3整除的数
#include
voidmain()
{inti;
for(i=100;i<=200;i++)
{
if(i%3==0)
continue;
printf(“%d”,n);
}
}
例5-5:
用公式pi/4=1-1/3+1/5-1/7...计算pi的值,当某一项的绝对值小于10-6为止。
#include
#include
voidmain()
{ints;
floatn,t,pi;
t=1;pi=0;n=1.0;s=1;
while((fabs(t))>=1e-6)
{pi=pi+t;
n=n+2;
s=-s;
t=s/n;
}
pi=pi*4;
printf("pi=%10.6f\n",pi);
}
例5-6:
求PI精确值的怪异程序
#include
longa=10000,b,c=2800,d,e,f[2801],g;
main()
{
for(;b-c;)f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
}
/*(原程式第一行是inta=10000,b,c....因為在IBMPC
上int只有2-byte,所以我改成long以便各platform都
能run)
(本程式連可算出pi值連小數點前共800位)
(本程式節錄自sci.mathFAQ,原作者未詳,我猜是外星人:
)*/
注:
所用公式pi/2=1+1!
/3!
!
+2!
/5!
!
+3!
/7!
!
+...+k!
/(2*k+1)!
!
+...
例5-7:
求Fibonacci数列:
1、1、2、3、5、8……前40个数。
#include
#include
voidmain()
{
longintf1,f2;
inti;
f1=1;
f2=1;
for(i=1;i<=20;i++)
{
printf("%12ld%12ld",f1,f2);
if(i%2==0)
printf("\n");
f1=f1+f2;
f2=f2+f1;
}
}
例5-8:
求被8除不尽的自然数
#include
intmain()
{
inti;
for(i=0;;i++)/*试探商的值*/
if(((i*8+7)*8+1)*8+1==(34*i+15)*17+4)
{/*逆推判断所取得的当前i值是否满足关系式*/
/*若满足则输出结果*/
printf("Therequirednumberis:
%d\n",(34*i+15)*17+4);
break;/*退出循环*/
}
}
例5-9:
百钱百鸡问题
#include
intmain()
{
intx,y,z,j=0;
printf("Folleingarepossibleplanstobuy100fowlswith100Yuan.\n");
for(x=0;x<=20;x++)/*外层循环控制鸡翁数*/
for(y=0;y<=33;y++)/*内层循环控制鸡母数y在0~33变化*/
{
z=100-x-y;/*内外层循环控制下,鸡雏数z的值受x,y的值的制约*/
if(z%3==0&&5*x+3*y+z/3==100)
/*验证取z值的合理性及得到一组解的合理性*/
printf("%2d:
公鸡=%2d母鸡=%2d小鸡=%2d\n",++j,x,y,z);
}
}
例5-10:
打印楼梯并楼梯上有一个笑脸
#include"stdio.h"
main()
{
inti,j;
printf("\1\1\n");/*输出两个笑脸*/
for(i=1;i<11;i++)
{
for(j=1;j<=i;j++)
printf("##",219,219);
printf("\n");
}
}
例5-11:
歌星大奖赛
#include
intmain()
{
intinteger,i,max,min,sum;
max=-32768;/*先假设当前的最大值max为C++语言整型数的最小值*/
min=32767;/*先假设当前的最小值min为C++语言整型数的最大值*/
sum=0;/*将求累加和变量的初值置为0*/
for(i=1;i<=10;i++)
{
printf("请输入分数%d=",i);
scanf("%d",&integer);/*输入评委的评分*/
sum+=integer;/*计算总分*/
if(integer>max)max=integer;/*通过比较筛选出其中的最高分*/
if(integer}
printf("---------------------------------\n");
printf("最高分:
%d\n最低分:
%d\n",max,min);
printf("去掉最高分和最低分的平均分:
%d\