max=c;
printf("Thelargestnumberis%d\n",max);
}
方法二:
#include
voidmain()
{inta,b,c,temp,max;
printf("请输入三个整数:
");
scanf("%d,%d,%d",&a,&b,&c);
temp=(a>b)?
a:
b;/*将a和b中的大者存入temp中*/
max=(temp>c)?
temp:
c;/*将a和b中的大者与c比较,取最大者*/
printf("三个整数的最大数是%d\n",max);
}
习题4-6
方法一:
#include
voidmain()
{floatscore;
chargrade;
printf("请输入学生成绩:
");
scanf("%f",&score);
while(score>100||score<0)
{printf("\n输入有误,请重输");
scanf("%f",&score);
}
/*应用switch语句解决问题:
*/
switch((int)(score/10))
{case10:
case9:
grade='A';break;
case8:
grade='B';break;
case7:
grade='C';break;
case6:
grade='D';break;
default:
grade='E';
}
printf("成绩是%5.1f,相应的等级是%c.\n",score,grade);
}
方法二:
#include
voidmain()
{floatscore;
printf("请输入学生成绩:
");
scanf("%f",&score);
while(score>100||score<0)
{printf("\n输入有误,请重输");
scanf("%f",&score);
}
/*用多重if结构解决问题:
多重if,退而求其次*/
if(score>=90)
printf("成绩是%5.1f,相应的等级是A.\n",score);
elseif(score>=80)
printf("成绩是%5.1f,相应的等级是B.\n",score);
elseif(score>=70)
printf("成绩是%5.1f,相应的等级是C.\n",score);
elseif(score>=60)
printf("成绩是%5.1f,相应的等级是D.\n",score);
else
printf("成绩是%5.1f,相应的等级是E.\n",score);
}
习题4-8
方法一:
#include
voidmain()
{
longi;
doublebonus,bon1,bon2,bon4,bon6,bon10;
bon1=100000*0.1;
bon2=bon1+100000*0.075;
bon4=bon2+200000*0.05;
bon6=bon4+200000*0.03;
bon10=bon6+400000*0.015;
printf("请输入利润i:
");
scanf("%ld",&i);
if(i<=100000)
bonus=i*0.1;
elseif(i<=200000)
bonus=bon1+(i-100000)*0.075;
elseif(i<=400000)
bonus=bon2+(i-200000)*0.05;
elseif(i<=600000)
bonus=bon4+(i-400000)*0.03;
elseif(i<=1000000)
bonus=bon6+(i-600000)*0.015;
else
bonus=bon10+(i-1000000)*0.01;
printf("奖金是:
%10.2f\n",bonus);
}
方法二:
#include
voidmain()
{
longi;
doublebonus,bon1,bon2,bon4,bon6,bon10;
intbranch;
bon1=100000*0.1;
bon2=bon1+100000*0.075;
bon4=bon2+200000*0.05;
bon6=bon4+200000*0.03;
bon10=bon6+400000*0.015;
printf("请输入利润i:
");
scanf("%ld",&i);
branch=i/100000;
if(branch>10)branch=10;
switch(branch)
{case0:
bonus=i*0.1;break;
case1:
bonus=bon1+(i-100000)*0.075;break;
case2:
case3:
bonus=bon2+(i-200000)*0.05;break;
case4:
case5:
bonus=bon4+(i-400000)*0.03;break;
case6:
case7:
case8:
case9:
bonus=bon6+(i-600000)*0.015;break;
case10:
bonus=bon10+(i-1000000)*0.01;
}
printf("奖金是%10.2f\n",bonus);
}
习题4-9
#include
voidmain()
{intt,a,b,c,d;
printf("请输入四个数:
");
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
if(a>b)
{t=a;a=b;b=t;}
if(a>c)
{t=a;a=c;c=t;}
if(a>d)
{t=a;a=d;d=t;}
if(b>c)
{t=b;b=c;c=t;}
if(b>d)
{t=b;b=d;d=t;}
if(c>d)
{t=c;c=d;d=t;}
printf("排序结果如下:
\n");
printf("%d%d%d%d\n",a,b,c,d);
}
第五章循环结构程序设计
1、循环结构的特点是:
在给定条件成立时,重复执行某程序段,直到条件不成立为止。
2、设计循环结构要考虑两个问题:
一是循环体,二是循环结束条件。
3、while循环用于在给定条件为真的情况下重复执行一组操作
(1)while循环的一般形式及其执行过程:
一般形式:
while(表达式)语句(注意后面没有分号)
(2)while循环先判断后执行
4、do-while循环先执行后判断,因此循环将至少执行一次。
do-while循环的一般形式及其执行过程:
一般形式:
do
循环体语句
while(表达式);(注意后面有分号)
5、在循环中,需要修改循环变量的值以改变循环条件,使循环趋于结束,否则有可能形成死循环。
6、for循环与while循环类似,属于先判断后执行,既可用于循环次数确定的情况,也可用于次数不确定,仅给出循环结束条件的情况。
7、for语句的一般形式及其执行过程:
一般形式:
for(表达式1;表达式2;表达式3)语句(注意后面没有分号)
8、for语句的最简单应用形式:
for(循环变量赋初值;循环条件;循环变量增值)语句9、break语句用在循环中时,可以直接终止循环,将控制流转向循环后面的语句。
10、continue语句的作用是跳过循环体中剩余的语句而执行下一次循环。
11、嵌套循环时,必须将被嵌套的循环语句完整地包含在外层循环的循环体内。
习题5-1
#include
#include
voidmain()
{intm,k,i,n=0;
for(m=101;m<=200;m=m+2)
{k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)break;
if(i>=k+1)
{printf("%d″,m);
n=n+1;
}
if(n%10==0)printf(″\n″);
}
printf("\n");
}
习题5-3
#include
voidmain()
{
inti,j,k,n;
printf("parcissusnumbersare");
for(n=100;n<1000;n++)
{
i=n/100;
j=n/10-i*10;
k=n%10;
if(n==i*i*i+j*j*j+k*k*k)
printf("%d",n);
}
printf("\n");
}
习题5-4
#include
voidmain()
{
intday,x1,x2;
day=9;
x2=1;
while(day>0)
{x1=(x2+1)*2;/*第1天的桃子数是第2天桃子数加1后的2倍.*/
x2=x1;
day--;
}
printf("total=%d\n",x1);
}
习题5-5
#include
voidmain()
{
doublesn=100,hn=sn/2;
intn;
for(n=2;n<=10;n++)
{
sn=sn+2*hn;/*第n次落地时共经过的米数*/
hn=hn/2;/*第n次反跳高度*/
}
printf("第10次落地时共经过%f米\n",sn);
printf("第10次反弹%f米\n",hn);
}
习题5-7
#include
voidmain()
{
chari,j,k;/*i是a的对手;j是b的对手;k是c的对手*/
for(i='x';i<='z';i++)/*不考虑已设置的比赛名单问题,则a的对手可以是X~Y*/
for(j='x';j<='z';j++)/*不考虑已设置的比赛名单问题,则b的对手可以是X~Y*/
if(i!
=j)/*不考虑已设置的比赛名单问题,a和b的对手不能是同一人,所以i!
=j*/
for(k='x';k<='z';k++)
if(i!
=k&&j!
=k)/*不考虑已设置的比赛名单问题,c和a和b的对手不能是同一人*/
if(i!
='x'&&k!
='x'&&k!
='z')
/*在c和a和b的对手不是同一人的基础上,再满足a不和x比,c不和x、z比*/
printf("A--%c\nB--%c\nC--%c\n",i,j,k);
}
第六章利用数组处理批量数据
1、数组是可以在内存中连续存储多个元素的结构,数组中的所有元素必须属于相同的数据类型。
2、数组必须先声明,然后才能使用。
声明一个数组只是为该数组留出内存空间,并不会为其赋任何值。
3、一维数组的定义方式:
类型说明符数组名[整型常量表达式]4、数组的元素通过数组下标访问。
5、一维数组可用一个循环动态赋值,而二维数组可用嵌套循环动态赋值。
6、二维数组可以看作是由一维数组的嵌套而构成的。
例6.2例6.3例6.5
习题6-1
#include
voidmain()
{inta[10],i,sum=0;
floataver;
for(i=0;i<10;i++)
{printf(“请输入一个整数成绩:
\n”);
scanf(“%d”,&a[i]);
}
for(i=0;i<10;i++)
sum+=a[i];
aver=sum/10.0;
printf(“10个学生的平均成绩为aver=%5.2f\n”,aver);
}
习题6-2
#include
voidmain()
{inta[10],i,max,k;
for(i=0;i<10;i++)
{printf(“请输入一个整数成绩:
\n”);
scanf(“%d”,&a[i]);
}
max=a[0];k=0;
for(i=0;i<10;i++)
{if(a[i]>max)
{max=a[i];k=i;}
}
printf(“最高分max=%d,序号k=%d\n”,max,k);
}
习题6-3
#include
voidmain()
{inti,j;
floata[4][4]={0},sum;
for(i=0;i<3;i++)//控制行
for(j=0;j<4;j++)//控制列变化
scanf(“%f”,&a[i][j]);
for(j=0;j<4;j++)//控制列变化
{sum=0;
for(i=0;i<3;i++)//控制行
sum+=a[i][j];//求每列的和
a[3][j]=sum/3.0;//求每列平均值放在第4行
}
for(j=0;j<4;j++)//控制列
printf(“%5.2f”,a[3][j]);//输出第4行各列的值
}
习题6-4
方法一:
#include
voidmain()
{inttemp,i,j,m,n,k,flag[5];//flag数组存放学生学号
floata[5][5],sum,t;
for(i=0;i<5;i++)//控制行,学生
{printf("请输入第%d个学生四门课成绩\n",i+1);
for(j=0;j<4;j++)//控制列变化,科目成绩
scanf("%f",&a[i][j]);
}
printf("学号语文数学物理英语\n");
for(i=0;i<5;i++)//控制行,学生
{printf("%3d",i+1);//输出学生序号
for(j=0;j<4;j++)//控制列变化,科目成绩
printf("%6.1f",a[i][j]);//输出学生未操作成绩表
flag[i]=i+1;
printf("\n");//换行,输出下一个学生成绩
}
for(i=0;i<5;i++)//控制行变化,学生
{sum=0;
for(j=0;j<4;j++)//控制列,科目成绩
sum+=a[i][j];//对每列成绩求和
a[i][4]=sum/4;
}
//以下for循环给5个学生的平均成绩排序
for(m=0;m<4;m++)//进行4次循环,实现4趟比较
for(n=0;n<4-m;n++)//每趟4-m次比较
if(a[n][4]{
for(k=0;k<5;k++)//完成学生的四门成绩与平均成绩5个数的交换
{t=a[n][k];
a[n][k]=a[n+1][k];
a[n+1][k]=t;
}
temp=flag[n];
flag[n]=flag[n+1];
flag[n+1]=temp;
}
printf("名次学号语文数学物理英语平均\n");
for(i=0;i<5;i++)//控制行,学生
{
printf("%3d%3d",i+1,fl