• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            姚明,81年,97年開始接觸電腦,6年的編程學(xué)習(xí)經(jīng)歷, 曾有4年工作經(jīng)驗,最終轉(zhuǎn)向基礎(chǔ)理論學(xué)習(xí)和研究, 現(xiàn)華中理工科技大學(xué)在讀,有志于圖形學(xué)領(lǐng)域工作發(fā)展

            EMAIL:alanvincentmail@gmail.com QQ:31547735

            隨筆分類(34)

            文章分類(99)

            相冊

            收藏夾(6)

            編程技術(shù)網(wǎng)站

            出國留學(xué)網(wǎng)站

            數(shù)學(xué)資源網(wǎng)站

            圖形學(xué)網(wǎng)站

            • ati
            • ati開發(fā)者
            • azure
            • 葉蔚的個人網(wǎng)站
            • cnblogs
            • 計算機(jī)圖形學(xué)群
            • directx
            • directx官方網(wǎng)站
            • Eurographics
            • 計算機(jī)圖形學(xué)年會
            • gamedev
            • 游戲編程網(wǎng)站
            • nvidia
            • nvidia開發(fā)者
            • opengl
            • opengl官方網(wǎng)站
            • opengpu
            • GPU 相關(guān)的圖形學(xué)技術(shù)
            • SCI
            • 圖形學(xué)論文
            • siggraph
            • 世界圖形學(xué)年會
            • Tim Rowley
            • 收集整理了頂級年會的論文合集

            英語資源網(wǎng)站

            自由職業(yè)者

            搜索

            •  

            最新評論

            /*--------------------------------------------------------------------------------------
            專業(yè):計算機(jī)原理與應(yīng)用
            姓名:姚明
            學(xué)號:04051
            日期:2007.12.3
            說明:C語言上機(jī)實(shí)驗1~6程序設(shè)計
            ---------------------------------------------------------------------------------------*/

             

            //------------------------------------------------------------
            //  
            //   實(shí)驗2 基本數(shù)據(jù)類型和運(yùn)算程序設(shè)計
            //
            //------------------------------------------------------------

            #include <stdio.h>
            #define PI 3.14159;

            void main(void)
            {
             int k,p;       /* for task 1*/
             int c;        /* for task 2*/
             int x,y,z,w;       /* for task 3*/
             float r, s;       /* for task 4*/
             unsigned short i,m,n,_result;     /* for task 5*/
             char a;        /* for task 6*/
             
             /*task 1*/
             /*輸入整數(shù)k、p,將整數(shù)k的高字節(jié)作為結(jié)果的低字節(jié),
             整數(shù)p的高字節(jié)作為結(jié)果的高字節(jié),拼成一個新的整數(shù),
             然后輸出;*/

             printf("input int k,p:");
             scanf("%x%x",&k,&p);
             int newint = (p&0xff00)|(k&0xff00)>>8;
             printf("new int = %x\n\n",newint);
             getchar();
             
             /*task 2*/
             /*輸入字符c。如果c是大寫字母,
             則將c轉(zhuǎn)換成對應(yīng)的小寫,否則c的值不變,
             最后輸出c;*/

             printf("input a character:");
             c = getchar();
             c >= 'A' && c <= 'Z'? putchar(c + 'a'- 'A'): putchar(c);
             putchar('\n');
             putchar('\n');
             
             /*task 3*/
             /*輸入整數(shù)x、y、z,輸出其中最小值;*/
             printf("input x, y, z:");
             scanf("%d%d%d", &x, &y, &z);
             w = x < y?x:y;
             w = w < z?w:z;
             printf("min = %d\n\n",w);
             
             /*task 4*/
             /*輸入圓的半徑值r,計算并輸出圓的面積
             s=∏r2(∏=3.14159);*/

             printf("input the radius r:");
             scanf("%f", &r);
             s = r * r * PI;
             printf("The acreage is %.2f\n\n",s);
             
             /*task 5*/
             /* 輸入無符號短整數(shù)
             i,m,n(0 <= m<= 15, 1 <= n<= 16-m),
             取出i從第m位開始向左的n位
             (m從右至左編號為0~15),
             并使其向左端(第15位)靠齊;*/

             printf("input i, m, n(0 <= m <= 15, 1 <= n <= 16 - m):");
             scanf("%hu%hu%hu", &i, &m, &n);
             _result = i << 16 - m - n & ~0xffff >> m + n;
             printf("The result is %hu\n\n", _result);
             getchar();
             
             /*task 6*/
             /*輸入一個字符,如果是數(shù)字(0~9)
             則輸出該數(shù)字代表的整數(shù)(8位)的反碼,
             否則原樣輸出。(反碼用十六進(jìn)制數(shù)表示,
             例如,整數(shù)0的反碼為0xff,整數(shù)1的反碼為0xfe,
             整數(shù)9的反碼0xf6。)*/

             printf("input a charater:");
             a = getchar();
             a >= '0' && a <= '9'?printf("%hx",~a - '0'):putchar(a);
             printf("\n\n");
             getchar();
            }


            //------------------------------------------------------------
            //  
            //   實(shí)驗3 C程序流程控制實(shí)驗
            //
            //------------------------------------------------------------
            #include <stdio.h>
            void main()
            {
                int c;    /* 每行的元素值(循環(huán)中生成), 初值為1 */
                int n;    /* 顯示的行數(shù) */
                int i, j; /* 循環(huán)控制 */
             
                /* 輸入行數(shù),顯示13行以內(nèi)為佳 */
                do
                {
                    printf("Input n=");
                    scanf("%d",&n);   
                } while(n <= 0 || n > 13);
                for(i = 0; i < n; i++)
                {

                    for(j = 0; j < n - i; j++) /* 輸入每行前的空格 */
                        printf("%3c", ' ');

                    c=1;                       /* 每行開始輸出前都將c重置為1 */

                    for(j = 0; j <= i; j++)
                    {
                        printf("%-3d", c);
                        printf("%-3c", ' ');
                        c = c * (i - j) / (j + 1); /* 核心: 遞推公式 */
                    }
                    printf("\n");
                }
            }

            運(yùn)行結(jié)果(VC):
            =======================================================================
            Input n=10↙
                                          1
                                       1     1
                                    1     2     1
                                 1     3     3     1
                              1     4     6     4     1
                           1     5     10    10    5     1
                        1     6     15    20    15    6     1
                     1     7     21    35    35    21    7     1
                  1     8     28    56    70    56    28    8     1
               1     9     36    84    126   126   84    36    9     1
            =======================================================================


            /* 編寫一個程序,將用戶輸入的任意正整數(shù)逆轉(zhuǎn),例如,輸入1234,輸出4321。*/
            #include <stdio.h>
            void main()
            {
                int num,_result=0;
             printf("enter number:");
             scanf("%d",&num);
             while(num)
             {
              _result=_result*10;
              _result= num%10+_result;
              num/=10;
             }
             printf("%d\n",_result);
            }

            /* 驗證歌德巴赫猜想:任何充分大(>=4)的偶數(shù)都可以用兩個素數(shù)之和表示,
            將4到100中的所有偶數(shù)分別用兩個素數(shù)之和的形式表示。(例如:4=2+2,100=3+97)*/


            #include <stdio.h>
            int IsPrime(int n);

            void main()
            {
             for(int i=4;i<=100;i+=2)
             {
              int x=0;

              for(x=2;x<i;x++)
              {
               if(IsPrime(x)&&IsPrime(i-x))
               {
                printf("%d = %d + %d\n",i,x,i-x);
                break;
               }
              }
             }
            }

            int IsPrime(int n)
            {
             int i;
             if (n == 1 || n == 2 || n == 3 || n == 5)
              return 1;
             else if (n % 2)
             {
              for (i = 3; i <= n / 2 + 1; i += 2)
              {
               if (n % i == 0) return 0;
              }
              return 1;
             }
             else
             {
              return 0;
             }
            }


            /*計算兩個數(shù)的最大公約數(shù)*/

            #include <stdio.h>
            unsigned int gcd(unsigned int,unsigned int);

            void main()
            {
             int x,y;
             printf("Enter 2 num:");
             scanf("%d%d",&x,&y);
             printf("common divisor:%d\n",gcd(x,y));
            }

            unsigned int gcd(unsigned int x,unsigned int y) // common divisor
            {
             unsigned int i,j,t;
             if(x==0)
              return y;
             if(y==0)
              return x;
             for(i=0;0==(x&1);x>>=1,++i);
             for(j=0;0==(y&1);y>>=1,++j);
             if(j<i)
              i=j;
             for(;;)
             {
              if(x<y)
               t=y,y=x,x=t;
              if(0==(x-=y))
               return y<<i;
              for(;0==(x&1);x>>=1);
             }
            }


            /* 輸出所輸入的正文。輸出時將連續(xù)的多個空格字符和橫向制表符縮減為一個空格字符,
            空行刪去不輸出(空行是指僅由空格字符、橫向制表符和行結(jié)束符組成的行)*/

            #include <stdio.h>
            int main()
            {
               int ch, flag1 =0, flag2 = 0;
                while((ch=getchar())!=EOF)
                switch(ch){
                    case '\n':
                        if(flag2) {
                            flag1=flag2=0;
                            putchar(ch);
                        }
                        break;
                    case ' ':
                    case '\t':
                        flag1=1;
                        break;
                    default:
                        if(flag1){
                            putchar(' ');
                            flag1=0;
                        }
                        putchar(ch);
                        flag2=1;
                        continue;
                }
                return 0;
            }

            //------------------------------------------------------------
            //  
            //   實(shí)驗4 C函數(shù)程序設(shè)計
            //
            //------------------------------------------------------------

            #include <stdio.h>

            int factorial(int n);     //計算階乘
            double reckon(int n);     //公式函數(shù)

            void main()
            {
             int num;
             printf("Enter num:");
             scanf("%d",&num);
             printf("out:%f\n",reckon(num));
            }

            int factorial(int n)
            {
             long _result;
                if(n>1) 
              _result=factorial(n-1)*n;
                else  _result=1;
                return(_result);
            }

            double reckon(int n)
            {
             double sum=0;
             for(int i=1;i<n;i++)
             {
              double ret = factorial(i);
              sum += 1/ret;
             }
             return sum;
            }


            //------------------------------------------------------------
            //  
            //   實(shí)驗5 數(shù)組程序設(shè)計
            //
            //------------------------------------------------------------

            /* 用rand函數(shù)模擬擲雙骰子,計算投擲出的兩個值的和。在程序中把這兩個骰子各擲3600次,
            用一維數(shù)組記錄每一種可能值的出現(xiàn)次數(shù),以表格格式打印出結(jié)果,判斷算出的和是否合理。*/

            #include <stdio.h>
            #include <stdlib.h>
            #include <memory.h>
            #include <time.h>

            void main()
            {
               int rands[13];int num1,num2;int i;
               memset(rands,0,sizeof(int)*13);
              
               /* Seed the random-number generator with current time so that
                * the numbers will be different every time we run.
                */
               srand( (unsigned)time( NULL ) );

               for(i = 1;   i < 3600; i++ )
               {
                num1 = rand()%6;
                num2 = rand()%6;
                num1==0?num1=6:num1;
                num2==0?num2=6:num2;
                rands[num1+num2]++;
               }

               printf("-------------------------------------------------------------------------------\n");
               printf("number:\t");
               for(i=2; i<13; i++)
               {
              printf("%d\t",i);
               }
               printf("\ntimes:\t");
               for(i=2; i<13; i++)
               {
              printf("%d\t",rands[i]);
               }
               printf("\n-------------------------------------------------------------------------------\n");
            }

            /* 定義函數(shù)stncat(s,t,n),從串t中至多取 n個字符添加到 s的尾部,在主函數(shù)中輸入兩個字符串和一個整數(shù)n,
            調(diào)用函數(shù)stncat按要求連接成一個字符串,輸出連接后的結(jié)果字符串。*/

            #include <stdio.h>

            char * strncat(char*,const char *,int);

            void main()
            {
               char string[80] = "This is the initial string!";
               char suffix[] = " extra text to add to the string...";
               /* Combine strings with no more than 19 characters of suffix: */
               printf( "Before: %s\n", string );
               strncat( string, suffix, 19 );
               printf( "After:  %s\n", string );

            }

            char * strncat(char *dest,const char *source,int count)

            {

               char *p = dest;

               while (*p) p++;

               while (count-- && (*p++ = *source++));

               *p = '\0';

               return(dest);
            }


            /* 找出二維數(shù)組b[3][3]的“鞍點(diǎn)”(即行上為最大,列上為最小的元素)
            及其位置(行、列下標(biāo)),如果不存在鞍點(diǎn)也輸出相應(yīng)信息。*/

            #include<stdio.h>
            #define N 3
            #define M 3

            void main()
            {
             int a[N][M],i,j,k,max=0,xmax,ymax,found=0,flag=1;
             
             printf("Input the array(%d numbers):\n",N*M);
             for( i=0;i<N;i++ )
             {
              for( j=0;j<M;j++ )
              {
               printf("array[%d][%d]=",i,j);
               scanf("%d",&a[i][j]);
              }
             }
             
             for( i=0;i<N;i++ )
             {
              for( j=0;j<M;j++ )
              {
               if( max<a[i][j] )
               {
                max=a[i][j];
               }
              }
              
              for( j=0;j<M;j++ )
              {
               if(max==a[i][j])
               {
                xmax=j;
                
                for( k=0;k<N;k++ )
                {
                 if( max>a[k][xmax] )
                  flag=0;
                }
                if( flag==1 )
                {
                 ymax = i;
                 printf("%d is the andian.\n",max);
                 printf("pt: x=%d\ty=%d\n",xmax+1,ymax+1);
                 found++;
                }
               }
              }
             }
             if( found==0 )
              printf("andian not found!\n");
            }


            /* 八皇后問題,在8*8方格國際象棋盤上放置8個皇后,任意兩個皇后不能位于同一行、
            同一列或同一斜線(正斜線或反斜線)上,輸出所有可能的放法。*/
            #include <stdio.h>
            #include "math.h"

            void paichu(char (*a)[8],int i,int j);

            void main()
            {
             int i,j,k,n;
             char a[8][8];
             for(k=0;k<8;++k)
             {
              n=0; 
              for(i=0;i<8;++i)
               for(j=0;j<8;++j)
                a[i][j]='*';
               for(i=0;i<8;++i)
                for(j=0;j<8;++j)
                {
                 if(i==0 && j<k) continue;
                 else if(a[i][j]=='*' && (fabs(j-k)<i+5))
                 {
                  paichu(a,i,j);
                  a[i][j]='*';
                 }
                }
                for(i=0;i<8;++i)
                 for(j=0;j<8;++j)
                  if(a[i][j]=='*') ++n;
                  if(n!=8) continue; 
                  for(i=0;i<8;++i)
                  {
                   for(j=0;j<8;++j)
                    printf("%c",a[i][j]);
                   printf("\n");
                  }
                  printf("\n");
                  getchar();
             }
            }

            void paichu(char (*a)[8],int i,int j)
            {
             int k,n,i1,i2,j1,j2;
             if(i>j) n=j;
             else n=i;
             for(k=0;k<8;++k)
             {
              *(*(a+k)+j)='o';
              *(*(a+i)+k)='o';
             }
             i1=i-n;
             j1=j-n;
             while(i1<8 && j1<8)
             {
              *(*(a+i1)+j1)='o';
              ++i1;
              ++j1;
             }
             if(i+j<8) i2=0;
                else i2=i-7+j;
             j2=j+i-i2;
             while(i2<8 && j2>=0)
             {
              *(*(a+i2)+j2)='o';
              ++i2;
              --j2;
             }
            }

            //------------------------------------------------------------
            //  
            //   實(shí)驗6 指針程序設(shè)計
            //
            //------------------------------------------------------------

            1.2 運(yùn)行下面的程序之前,先給出你自己認(rèn)為的結(jié)果,再看看運(yùn)行結(jié)果是否和你想的一樣,試著解釋程序輸出的結(jié)果。
            #include <stdio.h>
            #include <stdlib.h>
             
            void f(char s[100])
            {
               printf("s size in function f: %d\n", sizeof(s));
            }

            int main()
            {
               char s[] = "hello";   
               char *p, *mp;
               int n;
               char str[100];
              
               printf("s size: %d\n", sizeof(s));
             
               p = s;
               printf("p size: %d\n", sizeof(p));
             
               printf("n size: %d\n", sizeof(n));
             
               printf("str size: %d\n", sizeof(str));
             
               mp = malloc(100);
               printf("mp size: %d\n", sizeof(mp));
             
               f(str);
             
               return 0;
            }

            sizeof是是長度運(yùn)算符, 獲得數(shù)據(jù)類型或是變量的長度,如果是數(shù)據(jù)類型,
            則返回數(shù)據(jù)類型大小,如果是用數(shù)組,則返回數(shù)組所占空間大小

            s size:6  s是自動分配的數(shù)組,根據(jù)所給字符串長度,編譯器自動分配空間,(h,e, l, l, o, \0)
            p size:4  p是char*,通常,指針長度和計算機(jī)CPU的位數(shù)相等,此計算機(jī)為32位,即4字節(jié)
            str size:100 返回數(shù)組長度,str是用戶自定義長度的數(shù)組
            mp size:4 同上 p size
            s size in function f:4 f函數(shù)屬于傳參操作,即指針傳遞,沒有開辟新空間,函數(shù)對s做指針處理。

             

            2.判斷與改錯:
            #include <stdio.h>

            void upper(char *s)
            {
              while (*s != '\0')
              {
                if (*s >= 97 && *s <= 122)
                  *s -= 32;
                s++;
              }
            }

            void lower(char *s)
            {
              while (*s != '\0')
              {
                if (*s >= 65 && *s <= 90)
                  *s += 32;
                s++;
              }
            }

            int main ()
            {
              char str[100];
              char *p, *q;

              printf("Input a string with uppercase, lowercase or digits: \n");
              gets(str);
              printf("Original:  %s\n",str);

              p = str;
              upper(p);
              printf("Uppercase: %s\n",p);

              q = str;
              lower(q);
              printf("Lower:     %s\n",q);

              return 0;
            }

            錯誤原因:
            p,q兩個指針指向了同一個數(shù)據(jù)源str,對p,q的操作會直接改變str的內(nèi)容,
            printf函數(shù)必須在每次數(shù)據(jù)改變時,分別打印到屏幕,否則只能輸出3行同樣的str數(shù)據(jù)。


            /*編寫一個你自己的strlen函數(shù),輸入一個字符串,返回它的長度,
            并在一個完整的程序中驗證它。提示:字符串的結(jié)尾為 ‘\0’*/

            void main ()
            {
               char buffer[61] = "How long am I?";
               int  len;
               len = strlen( buffer );
               printf( "'%s' is %d characters long\n", buffer, len );
            }

            int strlen(const char * str) {
                 int length = 0 ;
                 while (*str++ )
                     ++ length;
                 return  length;
             }

            /*指針數(shù)組最頻繁的用處是存放具有不同長度的字符串。
            試用指針數(shù)組對輸入的n個長度不等的字符串進(jìn)行排序,
            升序。字符串的比較可以用標(biāo)準(zhǔn)庫中的strcmp函數(shù)。*/
            #include <stdio.h>

            void BubbleSort(char* pt[1024],int count);

            void main()
            {
             char buffer[1024];
             char *pBuffer;
             char *pt[1024];
             int i, ch;
             
             printf( "Do over please input '0'\n" );
             printf( "Before:\n" );
             
             /* Read in single line from "stdin": */
             for( i = 0; (i < 1024) &&  ((ch = getchar()) != EOF)
              && (ch != '0'); i++ )
              buffer[i] = (char)ch;
             
             /* Terminate string with null character: */
             buffer[i] = '\0';
             
             int pl=0;
             pt[pl] = buffer;

             pBuffer = buffer;
             while (*pBuffer++)
             {
              if(*pBuffer == '\n')
              {
               ++pl;
               *pBuffer = '\0';
               pBuffer++;
               pt[pl] = pBuffer;
              }
             }

             BubbleSort(pt,pl);

             printf( "After:\n" );
             for(i=0;i<pl;i++)
             {
              printf( "%s\n", pt[i]);
             }
            }

            void BubbleSort(char* in[1024],int count)
            {
             char* temp;
             for(int y=0;y<count-1;y++)
             {
              for(int x=1;x<count-y;x++)
              {
               if((in[x][0])<(in[x-1][0]))
               {
                temp=in[x-1];
                in[x-1]=in[x];
                in[x]=temp;
               }
              }
             }
            }


            /*編寫一個帶有命令行參數(shù)的程序showletter*/

            #include <stdio.h>
            #include <stdlib.h>

            int main(int argc, char* argv[])
            {

             printf("showletter [start] [end]\nstart\t a~z\nend\t0~99\n");

             int start=0,end=0;

             if(argc == 1)
             {
              start = 'a';
              end   = 'z';
             }
             else if(argc == 2)
             {
              start = (int)argv[1][0];
              end   = 'z';
             }
             else if(argc == 3)
             {
              start = (int)argv[1][0];
              end   =  start+atoi(argv[2]);
             }
             else
             {
              printf("The command parameter error!\n");
             }

              for(int i=start; i<end; i++)
             {
               if(i>'z')
               {
                printf("\n");
                end-=26;
                i='a';
               }
               printf("%c",i);
             }
             printf("\n");
             
             return 0;
            }

            posted on 2007-12-03 13:48 姚明 閱讀(1211) 評論(2)  編輯 收藏 引用 所屬分類: Win32API

            FeedBack:
            # re: C語言上機(jī)實(shí)驗[未登錄] 2007-12-03 21:44 夢在天涯
            C 現(xiàn)在用的是什么編譯器哦  回復(fù)  更多評論
              
            # re: C語言上機(jī)實(shí)驗 2007-12-04 23:14 aGAric
            樓主好名字。。

            不過注釋換成英文,就好啦  回復(fù)  更多評論
              
            国产精品禁18久久久夂久| 国产三级精品久久| 久久夜色精品国产| 久久九九有精品国产23百花影院| 久久99热这里只有精品66| 久久精品国产WWW456C0M| 一本色道久久88加勒比—综合| 日韩精品久久久久久免费| 久久精品中文字幕一区| 久久精品国产亚洲精品| 久久青青草原精品国产不卡| 99久久国产综合精品网成人影院| 欧美亚洲国产精品久久蜜芽 | 无码任你躁久久久久久老妇| 国产精品综合久久第一页| 国内精品久久久久久久久| 国产午夜精品久久久久九九电影| 18岁日韩内射颜射午夜久久成人| 99久久久久| 亚洲国产成人精品女人久久久| 中文字幕精品无码久久久久久3D日动漫| 日韩电影久久久被窝网| 欧美精品国产综合久久| 亚洲午夜久久久影院| 国产午夜久久影院| 91久久精品电影| 亚洲欧美另类日本久久国产真实乱对白| 久久人人爽人人人人片av| 久久福利青草精品资源站免费| 国产精品综合久久第一页| 中文字幕乱码人妻无码久久| 久久精品视频网| 亚洲国产日韩综合久久精品| 久久精品人人槡人妻人人玩AV| 久久综合久久综合九色| 青青热久久国产久精品 | 精品久久久久中文字幕日本| 国产精品久久久久久久久鸭| 97久久综合精品久久久综合| 久久国产成人精品麻豆| 久久99精品久久久久久不卡|