nowitzki_诺诺吧 关注:148贴子:30,457

【诺诺技术】C语言程序经典百例

只看楼主收藏回复



IP属地:广东1楼2010-05-27 20:21回复
                   digit++;
               else
                   others++;
    }
    printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,
    space,digit,others);
    }
    ==============================================================
    【程序8】
    题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时
           共有5个数相加),几个数相加有键盘控制。
    1.程序分析:关键是计算出每一项的值。
    2.程序源代码:
    main()
    {
       int a,n,count=1;
       long int sn=0,tn=0;
       printf("please input a and n\n");
       scanf("%d,%d",&a,&n);
       printf("a=%d,n=%d\n",a,n);
       while(count<=n)
       {
         tn=tn+a;
         sn=sn+tn;
         a=a*10;
         ++count;
       }
    printf("a+aa+...=%ld\n",sn);
    }
    ==============================================================
    【程序9】
    题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
           找出1000以内的所有完数。
    1. 程序分析:请参照程序<--上页程序14.
    2.程序源代码:
    main()
    {
    static int k[10];
    int i,j,n,s;
    for(j=2;j<1000;j++)
       {
       n=-1;
       s=j;
         for(i=1;i      {
           if((j%i)==0)
           {   n++;
             s=s-i;
             k[n]=i;
           }
         }
       if(s==0)
       {
       printf("%d is a wanshu",j);
       for(i=0;i    printf("%d,",k[i]);
       printf("%d\n",k[n]);
       }
    }
    }
    ==============================================================
    【程序10】
    题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
           第10次落地时,共经过多少米?第10次反弹多高?
    1.程序分析:见下面注释
    2.程序源代码:
    main()
    {
    float sn=100.0,hn=sn/2;
    int n;
    for(n=2;n<=10;n++)
       {
         sn=sn+2*hn;/*第n次落地时共经过的米数*/
         hn=hn/2; /*第n次反跳高度*/
       }
    printf("the total of road is %f\n",sn);
    printf("the tenth is %f meter\n",hn);
    }


    IP属地:广东4楼2010-05-27 20:23
    回复
      在哪--
      我很忧郁。
      我有几个问题。
      诺姐还在读书?
      诺姐多大?
      诺姐学的什么--
      C语言


      删除|5楼2010-05-27 20:24
      回复
        回复:5楼
        我学的几乎涵盖所有专业了……


        IP属地:广东6楼2010-05-27 20:25
        回复
          【程序11】
          题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
          1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去
                       掉不满足条件的排列。
          2.程序源代码:
          main()
          {
          int i,j,k;
          printf("\n");
          for(i=1;i<5;i++)         /*以下为三重循环*/
             for(j=1;j<5;j++)  
               for (k=1;k<5;k++)
                 {
                   if (i!=k&&i!=j&&j!=k)        /*确保i、j、k三位互不相同*/
                   printf("%d,%d,%d\n",i,j,k);
                 }
          }
          ==============================================================
          【程序12】
          题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
                 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
                 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
                 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
                 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
          1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。            
          2.程序源代码:
          main()
          {
          long int i;
          int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
          scanf("%ld",&i);
          bonus1=100000*0.1;bonus2=bonus1+100000*0.75;
          bonus4=bonus2+200000*0.5;
          bonus6=bonus4+200000*0.3;
          bonus10=bonus6+400000*0.15;
             if(i<=100000)
               bonus=i*0.1;
             else if(i<=200000)
                     bonus=bonus1+(i-100000)*0.075;
                   else if(i<=400000)
                           bonus=bonus2+(i-200000)*0.05;
                         else if(i<=600000)
                                 bonus=bonus4+(i-400000)*0.03;
                               else if(i<=1000000)
                                       bonus=bonus6+(i-600000)*0.015;
                                     else
          


          IP属地:广东7楼2010-05-27 20:28
          回复
                                         bonus=bonus10+(i-1000000)*0.01;
            printf("bonus=%d",bonus);
            }
            ==============================================================
            【程序13】
            题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
            1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
                         的结果满足如下条件,即是结果。请看具体分析:
            2.程序源代码:
            #include "math.h"
            main()
            {
            long int i,x,y,z;
            for (i=1;i<100000;i++)
               { x=sqrt(i+100);      /*x为加上100后开方后的结果*/
                 y=sqrt(i+268);      /*y为再加上168后开方后的结果*/
                   if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
                     printf("\n%ld\n",i);
               }
            }
            ==============================================================
            【程序14】
            题目:输入某年某月某日,判断这一天是这一年的第几天?
            1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
                         情况,闰年且输入月份大于3时需考虑多加一天。
            2.程序源代码:
            main()
            {
            int day,month,year,sum,leap;
            printf("\nplease input year,month,day\n");
            scanf("%d,%d,%d",&year,&month,&day);
            switch(month)/*先计算某月以前月份的总天数*/
            {
               case 1:sum=0;break;
               case 2:sum=31;break;
               case 3:sum=59;break;
               case 4:sum=90;break;
               case 5:sum=120;break;
               case 6:sum=151;break;
               case 7:sum=181;break;
               case 8:sum=212;break;
               case 9:sum=243;break;
               case 10:sum=273;break;
               case 11:sum=304;break;
               case 12:sum=334;break;
               default:printf("data error");break;
            }
            sum=sum+day;    /*再加上某天的天数*/
               if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
                 leap=1;
               else
                 leap=0;
            if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
            sum++;
            printf("It is the %dth day.",sum);}
            ==============================================================
            【程序15】
            题目:输入三个整数x,y,z,请把这三个数由小到大输出。
            1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,
                         然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
            2.程序源代码:
            main()
            {
            int x,y,z,t;
            scanf("%d%d%d",&x,&y,&z);
            if (x>y)
            {t=x;x=y;y=t;} /*交换x,y的值*/
            


            IP属地:广东8楼2010-05-27 20:28
            回复
              if(x>z)
              {t=z;z=x;x=t;}/*交换x,z的值*/
              if(y>z)
              {t=y;y=z;z=t;}/*交换z,y的值*/
              printf("small to big: %d %d %d\n",x,y,z);
              }
              ==============================================================
              【程序16】
              题目:用*号输出字母C的图案。
              1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。
              2.程序源代码:
              #include "stdio.h"
              main()
              {
              printf("Hello C-world!\n");
              printf(" ****\n");
              printf(" *\n");
              printf(" * \n");
              printf(" ****\n");
              }
              ==============================================================
              【程序17】
              题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
              1.程序分析:字符共有256个。不同字符,图形不一样。            
              2.程序源代码:
              #include "stdio.h"
              main()
              {
              char a=176,b=219;
              printf("%c%c%c%c%c\n",b,a,a,a,b);
              printf("%c%c%c%c%c\n",a,b,a,b,a);
              printf("%c%c%c%c%c\n",a,a,b,a,a);
              printf("%c%c%c%c%c\n",a,b,a,b,a);
              printf("%c%c%c%c%c\n",b,a,a,a,b);}
              ==============================================================
              【程序18】
              题目:输出9*9口诀。
              1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
              2.程序源代码:
              #include "stdio.h"
              main()
              {
                 int i,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");/*每一行后换行*/
                   }
              }
              ==============================================================
              【程序19】
              题目:要求输出国际象棋棋盘。
              1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。
              2.程序源代码:
              #include "stdio.h"
              main()
              {
              int i,j;
              for(i=0;i<8;i++)
                 {
                   for(j=0;j<8;j++)
                     if((i+j)%2==0)
                       printf("%c%c",219,219);
                     else
                       printf(" ");
                     printf("\n");
                 }
              }
              ==============================================================
              【程序20】
              题目:打印楼梯,同时在楼梯上方打印两个笑脸。
              1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。
              2.程序源代码:
              #include "stdio.h"
              main()
              {
              int i,j;
              printf("\1\1\n");/*输出两个笑脸*/
              for(i=1;i<11;i++)
                 {
                 for(j=1;j<=i;j++)
                    printf("%c%c",219,219);
                 printf("\n");
                 }
              }


              IP属地:广东9楼2010-05-27 20:28
              回复
                【程序31】
                题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续
                       判断第二个字母。
                1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。
                2.程序源代码:
                #include <stdio.h>
                void main()
                {
                char letter;
                printf("please input the first letter of someday\n");
                while ((letter=getch())!='Y')/*当所按字母为Y时才结束*/
                { switch (letter)
                {case 'S':printf("please input second letter\n");
                           if((letter=getch())=='a')
                             printf("saturday\n");
                           else if ((letter=getch())=='u')
                                   printf("sunday\n");
                               else printf("data error\n");
                           break;
                case 'F':printf("friday\n");break;
                case 'M':printf("monday\n");break;
                case 'T':printf("please input second letter\n");
                           if((letter=getch())=='u')
                             printf("tuesday\n");
                           else if ((letter=getch())=='h')
                                   printf("thursday\n");
                               else printf("data error\n");
                           break;
                case 'W':printf("wednesday\n");break;
                default: printf("data error\n");
                     }
                   }
                }
                ==============================================================
                【程序32】
                题目:Press any key to change color, do you want to try it. Please hurry up!
                1.程序分析:                        
                2.程序源代码:
                #include <conio.h>
                void main(void)
                {
                int color;
                for (color = 0; color < 8; color++)
                   {
                   textbackground(color);/*设置文本的背景颜色*/
                   cprintf("This is color %d\r\n", color);
                   cprintf("Press any key to continue\r\n");
                   getch();/*输入字符看不见*/
                   }
                }
                ==============================================================
                【程序33】
                题目:学习gotoxy()与clrscr()函数      
                1.程序分析:
                2.程序源代码:
                #include <conio.h>
                void main(void)
                {
                clrscr();/*清屏函数*/
                textbackground(2);
                gotoxy(1, 5);/*定位函数*/
                cprintf("Output at row 5 column 1\n");
                textbackground(3);
                gotoxy(20, 10);
                


                IP属地:广东12楼2010-05-27 20:33
                回复
                  cprintf("Output at row 10 column 20\n");
                  }
                  ==============================================================
                  【程序34】
                  题目:练习函数调用
                  1. 程序分析:
                  2.程序源代码:
                  #include <stdio.h>
                  void hello_world(void)
                  {
                  printf("Hello, world!\n");
                  }
                  void three_hellos(void)
                  {
                  int counter;
                  for (counter = 1; counter <= 3; counter++)
                  hello_world();/*调用此函数*/
                  }
                  void main(void)
                  {
                  three_hellos();/*调用此函数*/
                  }
                  ==============================================================
                  【程序35】
                  题目:文本颜色设置
                  1.程序分析:
                  2.程序源代码:
                  #include <conio.h>
                  void main(void)
                  {
                  int color;
                  for (color = 1; color < 16; color++)
                     {
                     textcolor(color);/*设置文本颜色*/
                     cprintf("This is color %d\r\n", color);
                     }
                  textcolor(128 + 15);
                  cprintf("This is blinking\r\n");
                  }
                  ==============================================================
                  【程序36】
                  题目:求100之内的素数      
                  1.程序分析:
                  2.程序源代码:
                  #include <stdio.h>
                  #include "math.h"
                  #define N 101
                  main()
                  {
                  int i,j,line,a[N];
                  for(i=2;i<N;i++) a[i]=i;
                  for(i=2;i<sqrt(N);i++)
                     for(j=i+1;j<N;j++)
                     {
                       if(a[i]!=0&&a[j]!=0)
                       if(a[j]%a[i]==0)
                       a[j]=0;}
                  printf("\n");
                  for(i=2,line=0;i<N;i++)
                  {
                     if(a[i]!=0)
                     {printf("%5d",a[i]);
                     line++;}
                     if(line==10)
                     {printf("\n");
                  line=0;}
                  }
                  }
                  ==============================================================
                  【程序37】
                  题目:对10个数进行排序
                  1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,
                               下次类推,即用第二个元素与后8个进行比较,并进行交换。              
                  2.程序源代码:
                  #define N 10
                  main()
                  {int i,j,min,tem,a[N];
                  /*input data*/
                  printf("please input ten num:\n");
                  for(i=0;i<N;i++)
                  {
                  printf("a[%d]=",i);
                  scanf("%d",&a[i]);}
                  printf("\n");
                  for(i=0;i<N;i++)
                  printf("%5d",a[i]);
                  printf("\n");
                  /*sort ten num*/
                  for(i=0;i<N-1;i++)
                  {min=i;
                  for(j=i+1;j<N;j++)
                  if(a[min]>a[j]) min=j;
                  tem=a[i];
                  a[i]=a[min];
                  a[min]=tem;
                  }
                  /*output data*/
                  printf("After sorted \n");
                  for(i=0;i<N;i++)
                  printf("%5d",a[i]);
                  }
                  ==============================================================
                  【程序38】
                  题目:求一个3*3矩阵对角线元素之和
                  1.程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。
                  2.程序源代码:
                  main()
                  {
                  float a[3][3],sum=0;
                  int i,j;
                  printf("please input rectangle element:\n");
                  for(i=0;i<3;i++)
                     for(j=0;j<3;j++)
                     scanf("%f",&a[i][j]);
                  for(i=0;i<3;i++)
                     sum=sum+a[i][i];
                  


                  IP属地:广东13楼2010-05-27 20:33
                  回复
                    printf("duijiaoxian he is %6.2f",sum);
                    }
                    ==============================================================
                    【程序39】
                    题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
                    1. 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后
                               此元素之后的数,依次后移一个位置。
                    2.程序源代码:
                    main()
                    {
                    int a[11]={1,4,6,9,13,16,19,28,40,100};
                    int temp1,temp2,number,end,i,j;
                    printf("original array is:\n");
                    for(i=0;i<10;i++)
                       printf("%5d",a[i]);
                    printf("\n");
                    printf("insert a new number:");
                    scanf("%d",&number);
                    end=a[9];
                    if(number>end)
                       a[10]=number;
                    else
                       {for(i=0;i<10;i++)
                         { if(a[i]>number)
                           {temp1=a[i];
                             a[i]=number;
                           for(j=i+1;j<11;j++)
                           {temp2=a[j];
                             a[j]=temp1;
                             temp1=temp2;
                           }
                           break;
                           }
                         }
                    }
                    for(i=0;i<11;i++)
                       printf("%6d",a[i]);
                    }
                    ==============================================================
                    【程序40】
                    题目:将一个数组逆序输出。
                    1.程序分析:用第一个与最后一个交换。
                    2.程序源代码:
                    #define N 5
                    main()
                    { int a[N]={9,6,5,4,1},i,temp;
                       printf("\n original array:\n");
                       for(i=0;i<N;i++)
                       printf("%4d",a[i]);
                       for(i=0;i<N/2;i++)
                       {temp=a[i];
                         a[i]=a[N-i-1];
                         a[N-i-1]=temp;
                       }
                    printf("\n sorted array:\n");
                    for(i=0;i<N;i++)
                       printf("%4d",a[i]);
                    }


                    IP属地:广东14楼2010-05-27 20:33
                    回复
                      传说中的C语言?


                      15楼2010-05-27 20:34
                      回复
                        = =传说中最难的一部分


                        IP属地:广东16楼2010-05-27 20:36
                        回复
                          我只会打针 其余的都不懂


                          17楼2010-05-27 20:40
                          回复
                            回复:17楼
                            


                            IP属地:广东18楼2010-05-27 22:02
                            回复
                              【程序41】
                              题目:学习static定义静态变量的用法      
                              1.程序分析:
                              2.程序源代码:
                              #include "stdio.h"
                              varfunc()
                              {
                              int var=0;
                              static int static_var=0;
                              printf("\40:var equal %d \n",var);
                              printf("\40:static var equal %d \n",static_var);
                              printf("\n");
                              var++;
                              static_var++;
                              }
                              void main()
                              {int i;
                                 for(i=0;i<3;i++)
                                   varfunc();
                              }
                              ==============================================================
                              【程序42】
                              题目:学习使用auto定义变量的用法
                              1.程序分析:            
                              2.程序源代码:
                              #include "stdio.h"
                              main()
                              {int i,num;
                              num=2;
                                 for (i=0;i<3;i++)
                                 { printf("\40: The num equal %d \n",num);
                                   num++;
                                   {
                                   auto int num=1;
                                   printf("\40: The internal block num equal %d \n",num);
                                   num++;
                                   }
                                 }
                              }
                              ==============================================================
                              【程序43】
                              题目:学习使用static的另一用法。      
                              1.程序分析:
                              2.程序源代码:
                              #include "stdio.h"
                              main()
                              {
                              int i,num;
                              num=2;
                              for(i=0;i<3;i++)
                              {
                              printf("\40: The num equal %d \n",num);
                              num++;
                              {
                              static int num=1;
                              printf("\40:The internal block num equal %d\n",num);
                              num++;
                              }
                              }
                              }
                              ==============================================================
                              【程序44】
                              题目:学习使用external的用法。
                              1.程序分析:
                              2.程序源代码:
                              #include "stdio.h"
                              int a,b,c;
                              void add()
                              { int a;
                              a=3;
                              c=a+b;
                              }
                              void main()
                              { a=b=4;
                              add();
                              printf("The value of c is equal to %d\n",c);
                              }
                              ==============================================================
                              【程序45】
                              题目:学习使用register定义变量的方法。
                              1.程序分析:
                              2.程序源代码:
                              void main()
                              {
                              register int i;
                              int tmp=0;
                              for(i=1;i<=100;i++)
                              tmp+=i;
                              printf("The sum is %d\n",tmp);
                              }
                              ==============================================================
                              【程序46】
                              题目:宏#define命令练习(1)      
                              1.程序分析:
                              2.程序源代码:
                              #include "stdio.h"
                              #define TRUE 1
                              #define FALSE 0
                              #define SQ(x) (x)*(x)
                              void main()
                              {
                              int num;
                              int again=1;
                              printf("\40: Program will stop if input value less than 50.\n");
                              while(again)
                              {
                              printf("\40:Please input number==>");
                              scanf("%d",&num);
                              printf("\40:The square for this number is %d \n",SQ(num));
                              if(num>=50)
                                 again=TRUE;
                              else
                                 again=FALSE;
                              }
                              }
                              ==============================================================
                              【程序47】
                              题目:宏#define命令练习(2)
                              1.程序分析:                        
                              2.程序源代码:
                              #include "stdio.h"
                              


                              IP属地:广东19楼2010-05-27 22:02
                              回复