这个寒假复习回顾了学习c语言以来做过的典型例题,现把它总结如下。
求各位大神指点评论啊!
例(1)首先需要了解编译系统,所以对编译系统常用变量分配的字节数进行了测试。
#include
int main()
{
printf("%d\n",sizeof(int));
printf("%d\n",sizeof(float));
printf("%d\n",sizeof(double));
printf("%d\n",sizeof(char));
printf("%d\n",sizeof(long));
printf("%d\n",sizeof(short));
getch();
return 0;
}
例(2).分别用while语句、do-while语句编写程序,计算e≈1+1/1!+1/2!+...+1/n! (1)用单重循环编写程序(2)使误差小于给定的ε,设ε=10-5 (3)除了输出e以外,同时还要输出总的项数n
#include
int main()
{
doublen=0.0,m=1.0,i=1.0,sum=1.0,e = 2.71828 ;
do
{
m=m*i;
sum=sum+1/m ;
i++;
}while(e-sum>1e-5);
printf("%lf",i);
getch();
return 0;
}
#include
int main()
{
doublen=0.0,m=1.0,i=1.0,sum=1.0,e = 2.71828 ;
while(e-sum>1e-5)
{
m=m*i;
sum=sum+1/m ;
i++;
}while(e-sum>1e-5);
printf("%lf",i);
getch();
return 0;
例(3).奇偶对调,对N以内的整数进行奇偶对调,并输出结果
#include
int main()
{
int n,i;
printf("请输入一个数:\n");
scanf("%d",&n);
int a[n];
int b[n],x=0,y=1;
for(i=0;i
{
a[i]=i+1;
}
printf("原数组为:\n");
for(i=0;i
printf("%d ",a[i]);
printf("\n");
for(i=0;i
{
if(a[i]%2==0)
{
b[x]=a[i];
x++;
}
else
{
b[n-y]=a[i] ;
y++;
}
}
printf("\n");
printf("奇偶排序后的数组为:\n");
for(i=0;i
printf("%d ",b[i]);
printf("\n");
getch();
return 0;
}
例(4).如果一个数恰好等于它的所有因子(包括1但不包括自身)之和,则称之为“完数”。例如6的因子是1,2,3,且6=1+2+3,因此6是完数。编写程序找出1000之内的所有完数及这些完数的和。(1)要求使用for循环(2)输出形式为:完数1+完数2...=和值
#include
int main()
{
int i,j,sum,s=0,q=0;
for(i=1;i<=1000;i++)
{
sum=0;
for(j=1;j
{
if(i%j==0)
{
sum=sum+j;
}
}
if(sum==i)
{
q++;
printf("%d+",i);
s=s+i;
}
}
printf("\b=%d",s);
getch();
return 0;
}
例(5). 判断用户输入的正整数n是否为素数,直到用户输入1为止。(1)用while循环读入正整数n(2)对于每个正整数n,采用for循环判断是否为素数。(3)打印输出判断结果
#include
int action(int m)
{
int k;
for(k=2;k<=m;k++)
{
if(m%k==0)
break;
}
if(k==m)
printf("%d\n",m);
}
int main()
{
int m,k;
while(2)
{
if(m==1)
break;
else
{
scanf("%d",&m);
action(m);
}
}
getch();
return 0;
}
例(6).编写一个程序,循环从键盘接收一批学生的某门课的成绩,并依次保存在数组score的相应元素中,直到输入的成绩为999时结束。(1)对成绩按从高到低排序,并按排序后的顺序输出所有学生的成绩,(2)再输入一个学生的成绩,并插入排序后的成绩表中并保持有序,最后再输出所有学生的成绩(3)再输入一个成绩,并从数组中删除与该数相同的所有同学成绩,最后输出最终的成绩表
主要算法和程序清单
#include
void action1()
{
int m,n=0,i;
int a[100];
printf("请输入学生成绩,最后输入999时程序开始工作\n");
while(1)
{
scanf("%d",&m);
if(m==999) break;
else
{
a[n]=m;
n++;
}
}
action2(a,n);
}
int action2(int a[],int n)
{
int i,j,t;
for(i=0;i
{
for(j=i+1;j
{
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
printf("按从小到大的顺序排列为:\n");
for(i=0;i
printf("%d ",a[i]);
printf("\n");
action3(a,n);
}
int action3(int a[],int n)
{int i,j,t,m;
printf("请输入你要插入的数\n");
scanf("%d",&m);
a[n]=m;
for(i=0;i
{
for(j=i+1;j
{
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
printf("按从小到大的顺序排列为:\n");
for(i=0;i<=n;i++)
printf("%d ",a[i]);
printf("\n");
action4(a,n+1);
}
int action4(int a[],int n)
{
int i,m;
printf("请输入你想删除的学生成绩\n");
scanf("%d",&m);
for(i=0;i
{
if(a[i]!=m)
printf("%d ",a[i]);
}
}
int main()
{
action1();
getch();
return 0;
}
例(7).在主函数中输入一个十进制数,调用转换函数把这个十进制数转换成二、八、十六进制数。
#include
int action1(int m)
{
printf("%x\n",m);
}
int action2(int m)
{
printf("%o\n",m);
}
int action3(int m)
{
inta[30],n=0,i;
while(m)
{
a[n]=m%2;
m=m/2;
n++;
}
for(i=n-1;i>=0;i--)
printf("%d ",a[i]);
}
int main()
{
inta=10;
action1(a);
action2(a);
action3(a);
return 0;
}
例(8).定义一个函数,判断三个整形边长能否构成三角形,如果是三角形,则判断它是否是直角三角形。1)声明函数judge;2)实现函数judge,根据输入的三个边长判断是否可以构成一个三角形;3)在main中调用judge;4)在main中根据judge的返回值判断是否是三角形,如果构成三角形则判断是否为直角三角形,并给出结论。
#include
double action2(double a,double b,double c)
{
if(a*a+b*b==c*c||a*a+c*c==b*b||c*c+b*b==a*a)
printf("and this is a直角三角形\n");
else
printf("but thisis not a直角三角形\n");
}
double action1(double a,double b,double c)
{
if(a<=0||b<=0||c<=0)
printf("you are wrong\n");
else if(a-bc)
{
printf("this is a三角形");
action2(a,b,c);
}
else
printf("this is nota三角形");
}
int main()
{
double a,b,c;
printf("please input threenumbers\n");
scanf("%lf%lf%lf",&a,&b,&c);
action1(a,b,c);
return 0;
}
例(9).找出一个二维数组中的鞍点,即该位置上的元素在所在行为最大,在所在列为最小。如果没有这样的元素,请打印出相应的信息。(1) 画出此题的流程图。(2) 编写程序求矩阵中所有的鞍点并上机调试。(3) 输入的数据和输出的结果要详细记录。
流程图
主要算法和程序清单
#include
int action1(int i,int j)//找行中最大
{int m,max,t;
int b[3][4]={{1,2,13,4},{7,8,10,6},{3,5,9,7}};
max=b[i][0];
for(m=0;m<4;m++)
{
if(max
{
t=max;
max=b[i][m];
b[i][m]=max;
}
}
return max;
}
int action2(int i,int j)//找列中最大
{int n,min,t;
int b[3][4]={{1,2,13,4},{7,8,10,6},{3,5,9,7}};
min=b[0][j];
for(n=0;n<3;n++)
{
if(min>b[n][j])
{
t=min;
min=b[n][j];
b[n][j]=min;
}
}
return min;
}
int main()
{
int i,j,max,min;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
max=("%d",action1(i,j));
min=("%d",action2(i,j));
if(max==min)
printf("%d",max);
}
}
getch();
return 0;
}
例(10).统计一个班的学生成绩。要求程序具有如下功能:(1)每个学生的学号和四门功课的成绩从键盘读入。(2)计算每个学生的总分和平均分。(3)按平均成绩进行排序,输出排序后的成绩单(包括学号、四门功课的成绩和平均分),给出名次。如果分数相同,则名次并列,其他学生名次不变。提示:调试程序时,可先输入少量学生的成绩作为实验数据。如可输入3名学生4门课成绩:学号 成绩9701 67,72,65,80 9702 75,82,94,
#include
int main()
{
int num,i,e[3],m,j;
double a,b,c,f,average,d[3],t;
for(i=0;i<4;i++)
{
printf("请输入该生学号:\n");
scanf("%d",&num);
printf("请输入该生课程a的成绩:\n");
scanf("%lf",&a);
printf("请输入该生课程b的成绩:\n");
scanf("%lf",&b);
printf("请输入该生课程c的成绩:\n");
scanf("%lf",&c);
printf("请输入该生课程f的成绩:\n");
scanf("%lf",&f);
d[i]=(a+b+c+f)/4.0;
e[i]=num;
printf("d[%d]=%lfnum=%d\n",i,d[i],e[i]);
}
for(i=0;i<3;i++)
{
for(j=i+1;j<4;j++)
{
if(d[i]>d[j])
{
t=d[i],m=e[i];
d[i]=d[j],e[i]=e[j];
d[j]=t,e[j]=m;
}
}
}
for(i=0;i<4;i++)
printf("num=%d average=%lf\n",e[i],d[i]);
getch();
return 0;
}