c语言典型例题及代码(1)

这个寒假复习回顾了学习c语言以来做过的典型例题,现把它总结如下。

求各位大神指点评论啊!

例(1)首先需要了解编译系统,所以对编译系统常用变量分配的字节数进行了测试。

#include<stdio.h>

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语句编写程序,计算e1+1/1!+1/2!+...+1/n! (1) 用单重循环编写程序 (2)使误差小于给定的ε,设ε=10-5 (3)除了输出e以外,同时还要输出总的项数n


#include<stdio.h>

int main()

{

 double n=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<stdio.h>

int main()

{

 double n=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<stdio.h>

int main()

{

 int n,i;

 printf("请输入一个数:\n");

 scanf("%d",&n);

 int a[n];

 int b[n],x=0,y=1;

 for(i=0;i<n;i++)

 {

   a[i]=i+1;              

 }

 printf("原数组为:\n");

  for(i=0;i<n;i++)

 printf("%d ",a[i]);

 printf("\n");

 for(i=0;i<n;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<n;i++)

 printf("%d ",b[i]);

 printf("\n");

getch();   

return 0;   

}

 

例(4).如果一个数恰好等于它的所有因子(包括1但不包括自身)之和,则称之为“完数”。例如6的因子是123,且6=1+2+3,因此6是完数。编写程序找出1000之内的所有完数及这些完数的和。(1) 要求使用for循环(2) 输出形式为:完数1+完数2...=和值

#include<stdio.h>

int main()

{

int i,j,sum,s=0,q=0;

for(i=1;i<=1000;i++)

{

 sum=0;

 for(j=1;j<i;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循环读入正整数n2)对于每个正整数n,采用for循环判断是否为素数。(3)打印输出判断结果

#include<stdio.h>

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<stdio.h>

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<n-1;i++)

 {

 for(j=i+1;j<n;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");     

 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<n;i++)

 {

 for(j=i+1;j<n+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<n;i++)

{

if(a[i]!=m)               

 printf("%d ",a[i]);              

}   

}

int main()

{

action1();     

getch();   

return 0;   

}

例(7).在主函数中输入一个十进制数,调用转换函数把这个十进制数转换成二、八、十六进制数。

 

 #include<stdio.h>

int action1(int m)

{

 printf("%x\n",m);

}

int action2(int m)

{

 printf("%o\n",m);

}

int action3(int m)

{

 int a[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()

{

int a=10;

action1(a);

action2(a);

action3(a);

return 0;

}

 

例(8.定义一个函数,判断三个整形边长能否构成三角形,如果是三角形,则判断它是否是直角三角形。 1)声明函数judge2) 实现函数judge,根据输入的三个边长判断是否可以构成一个三角形;3) main中调用judge4) main中根据judge的返回值判断是否是三角形,如果构成三角形则判断是否为直角三角形,并给出结论。

#include<stdio.h>

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 this  is 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-b<c&&a+b>c)

{

printf("this is a 三角形");

action2(a,b,c);

}

else

printf("this is not a 三角形");

}

 

int main()

{

double a,b,c;

printf("please input three numbers\n");

scanf("%lf%lf%lf",&a,&b,&c);

action1(a,b,c);

return 0;

}

例(9. 找出一个二维数组中的鞍点,即该位置上的元素在所在行为最大,在所在列为最小。如果没有这样的元素,请打印出相应的信息。(1) 画出此题的流程图。(2) 编写程序求矩阵中所有的鞍点并上机调试。(3) 输入的数据和输出的结果要详细记录。

流程图

 

主要算法和程序清单

#include<stdio.h>

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<b[i][m])

        {

        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 67726580 9702 758294

#include<stdio.h>

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]=%lf  num=%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;   

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值