日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言经典编程题--哥德巴赫猜想 、完数 、猜数字等

發布時間:2023/12/9 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言经典编程题--哥德巴赫猜想 、完数 、猜数字等 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? 一、 ?驗證歌德巴赫猜想:任意一個不小于6的偶數都可以表示成兩個素數的和。從鍵盤任意給一個符合條件的數,輸出相應的兩個素數。

素數:指在一個大于1的自然數中,除了1和此整數自身外,沒法被其他自然數整除的數

代碼如下:

[cpp]?view plaincopy
  • #include?<stdio.h>??
  • #include?<math.h>??
  • ??
  • int?sushu(int?n)??
  • {??
  • ????int?i,j;??
  • ????for(i?=?2;i?<=?sqrt(n?+?1);i++)??
  • ????{??
  • ????????if(!(n%i))??
  • ????????????return?0;??
  • ????????break;??
  • ????}??
  • ????return?1;??
  • }??
  • ??
  • int?main()??
  • {??
  • ????int?a,b,N;??
  • ????int?i;??
  • ????printf("Please?input?a?number?N:?N?>=?6?&&?N%2==0\n");??
  • ????scanf("%d",&N);??
  • ????if((N?<?6)?||?(N?&?1))??
  • ????{??
  • ????????printf("Please?input?a?correct?number!\n");??
  • ????????return?0;??
  • ????}??
  • ????else??
  • ????{??
  • ????????for(i?=?2;i?<=?N/2;i++)??
  • ????????{??
  • ????????????if(sushu(i)?&&?sushu(N?-i))??
  • ????????????????printf("%d?=?%d?+?%d\n",N,i,N-i);??
  • ????????????break;????????
  • ????????}??
  • ??????????
  • ????}??
  • ????return?0;??
  • }??
  • 判定一個數是否為素數的簡單方法:

    [cpp]?view plaincopy
  • #include?<stdio.h>??
  • ??
  • int?sushu(int?n)??
  • {??
  • ????int?i,j;??
  • ????for(i?=?2;i?<=?sqrt?(n?+?1);i++)??
  • ????{??
  • ????????if(!(n%i))??
  • ????????????return?0;??
  • ????}??
  • ????return?1;??
  • }??
  • 二、完數問題:

    題目:一個數如果恰好等于它的因子之和,這個數就稱為“完數”。例如6=1+2+3.編程
        找出1000以內的所有完數。

    代碼如下:

    [cpp]?view plaincopy
  • #include?<stdio.h>??
  • ??
  • int?Sum(int?n)??
  • {??
  • ????int?i;??
  • ????int?sum?=?0;??
  • ????for(i?=?1;i?<?n;i++)??
  • ????{??
  • ????????if(!(n%i))???
  • ????????????sum?+=?i;??
  • ????}??
  • ????return?sum;??
  • }??
  • ??
  • int?main()??
  • {??
  • ????int?j;??
  • ????for(j?=?2;j?<?1000;j++)??
  • ????{??
  • ????????if(Sum(j)?==?j)??
  • ????????????printf("%d?is?a?wanshu!\n",j);??
  • ????}??
  • ????return?0;??
  • }??

  • ?三、題目:猜數字游戲

    需求定義:

    編寫程序,實現控制臺的猜數字游戲。游戲運行時產生一個0100之間的隨機整數,要求用戶從控制臺輸入數字,若輸入的數字比產生的數字小,則輸出:“太小了,再大一點!”;若輸入的數字比產生的數字大,則輸出:“太大了,再小一點!”,若輸入的數字和產生的數字相等,則輸出:“恭喜你猜對了!”然后退出程序;若用戶猜了10次還未猜對,則輸出:“你太笨了,下次再來吧!”然后退出程序。

    程序如下:

    [cpp]?view plaincopy
  • #include?<stdio.h>??
  • #include?<stdio.h>??
  • ??
  • int?main()??
  • {??
  • ????int?n,m;??
  • ????int?count?=?0;??
  • ????srand((unsigned?int)time(NULL));??
  • ????n?=?rand();??
  • ????n?%=?100;??
  • ????while(count?<?10)??
  • ????{??
  • ????????printf("Please?input?a?number:\n");??
  • ????????scanf("%d",&m);??
  • ????????if(m?==?n)??
  • ????????{??
  • ????????????printf("You?are?right!\n");??
  • ????????????return?0;??
  • ????????}??
  • ????????else?if(m?<?n)??
  • ????????{??
  • ????????????printf("Too?small?!Please?bigger!\n");??
  • ????????????count++;??
  • ????????}??
  • ????????else??
  • ????????{??
  • ????????????printf("Too?big!Please?smaller!\n");??
  • ????????????count++;??
  • ????????}??
  • ????}??
  • ????????printf("You?are?stupid!Next!\n");??
  • ????????printf("This?num?is?%d",n);??
  • ????????return?1;??
  • ??????
  • }??
  • 執行結果如下:

    [cpp]?view plaincopy
  • fs@ubuntu:~/qiang/caishuzi$?./caishuzi??
  • Please?input?a?number:??
  • 50??
  • Too?big!Please?smaller!??
  • Please?input?a?number:??
  • 25??
  • Too?small?!Please?bigger!??
  • Please?input?a?number:??
  • 37??
  • Too?small?!Please?bigger!??
  • Please?input?a?number:??
  • 43??
  • Too?big!Please?smaller!??
  • Please?input?a?number:??
  • 40??
  • Too?big!Please?smaller!??
  • Please?input?a?number:??
  • 39??
  • You?are?right!??

  • ?這里有個函數,產生一個隨機數,大家可以記一下

    [cpp]?view plaincopy
  • srand((unsigned?int)time(NULL));????
  • n?=?rand();????
  • 實際產生的數可能會很大,這里可以 n %=100,生成的數就是1~100之內的數了,可能不符合規范,但可以達到目的!

    四、題目:將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。
    程序分析:對n進行分解質因數,應先找到一個最小的質數k,然后按下述步驟完成:?
    (1)如果這個質數恰等于n,則說明分解質因數的過程已經結束,打印出即可。
    (2)如果n<>k,但n能被k整除,則應打印出k的值,并用n除以k的商,作為新的正整數你n,
      重復執行第一步。
    (3)如果n不能被k整除,則用k+1作為k的值,重復執行第一步

    執行程序:

    [cpp]?view plaincopy
  • #include?<stdio.h>??
  • ??
  • int?main()??
  • {??
  • ????int?i,n;??
  • ????printf("Please?input?a?num:\n");??
  • ????scanf("%d",&n);??
  • ????printf("%d?=?",n);??
  • ????for(i?=?2;i?<=?n;i++)??
  • ????{??
  • ????????while(n?!=?i)??
  • ????????{??
  • ????????????if(n%i?==?0)??
  • ????????????{??
  • ????????????????printf("%d*",i);??
  • ????????????????n?=?n/i;??
  • ????????????}??
  • ????????????else??
  • ????????????????break;??
  • ????????}??
  • ????}??
  • printf("%d\n",n);??
  • }??
  • 執行結果如下:

    [cpp]?view plaincopy
  • fs@ubuntu:~/qiang/14$?./14??
  • Please?input?a?num:??
  • 9??
  • 9?=?3*3??
  • fs@ubuntu:~/qiang/14$?./14??
  • Please?input?a?num:??
  • 36??
  • 36?=?2*2*3*3??
  • fs@ubuntu:~/qiang/14$???
  • ?

    五、題目:寫一個函數,統計一個int型數據中有多少位為1;

    程序分析:我們知道,如果判定某位是否為1的方法,一個整型數據有多少位為1,可以對此數據進行移位操作,然后判定最后一位是否為1,代碼如下:

    [cpp]?view plaincopy
  • #include?<stdio.h>??
  • ??
  • int?main()??
  • {??
  • ????int?n,count?=?0;??
  • ????int?i;??
  • ????printf("Please?input?a?num:\n");??
  • ????scanf("%d",&n);??
  • ??
  • ????for(i?=?0;?i?<?32;i++)??
  • ????{??
  • ????????if(n?&?0x01)??
  • ????????{??
  • ????????????count++;??
  • ????????}??
  • ??
  • ????????n?>>=?1;??
  • ????}??
  • ??????
  • ????printf("Total?1?=?%d\n",count);??
  • }??
  • 執行結果如下:

    [cpp]?view plaincopy
  • fs@ubuntu:~/qiang/int$?./3??
  • Please?input?a?num:??
  • 8??
  • Total?1?=?1??
  • fs@ubuntu:~/qiang/int$?./3??
  • Please?input?a?num:??
  • 15??
  • Total?1?=?4??
  • fs@ubuntu:~/qiang/int$???

  • 六、鞍點問題

    題目:有一個3X4矩陣,要求輸出其鞍點(行列均最大的值),以及它的行號和列號。

    int a[3][4] = {{123,94,-10,218},

    ???????????????????????? {3,9,10,-83},

    ????????????????????????? {145,16,44,-99}

    ?????????????????????????};

    程序分析:首先要搞明白鞍點不止一個,這題肯定涉及到對二維數據的遍歷,然后比較大小,先找出當前行最大值,然后判定其在當前列是否為最大值,如果是,則輸出
    ?代碼如下:

    [cpp]?view plaincopy
  • #include?<stdio.h>??
  • ??
  • int?main()??
  • {??
  • ????int?a[3][4]?={??
  • ????????????{123,94,-10,218},??
  • ????????????{3,9,10,-83},??
  • ????????????{145,16,44,-99}??
  • ????????????};??
  • ??
  • ????int?i,j,k;??
  • ????char?flag,flag1;??
  • ????for(i?=?0;?i?<?3;?i++?)??
  • ????{??
  • ????????for(j?=?0;?j?<?4;?j++)??
  • ????????{??
  • ????????????flag?=?0;??
  • ????????????flag1?=?0;??
  • ????????????for(k?=?0?;k?<?4;k++)??
  • ????????????{??
  • ????????????????if(a[i][j]?<?a[i][k])//當前行是否最大??
  • ????????????????????flag?=?1;??
  • ????????????}??
  • ????????????for(k?=?0?;k?<?3;k++)??
  • ????????????{??
  • ????????????????if(a[i][j]?<?a[k][j])//當前列是否最大??
  • ????????????????????flag1?=?1;??
  • ????????????}??
  • ????????????if(!flag?&&?!flag1)//當前行當前列是否都是最大??
  • ????????????????printf("hang:%d?lie:%d?=?%d\n",i,j,a[i][j]);??
  • ????????}??
  • ????}??
  • ????return?0;??
  • }??
  • 執行結果如下:

    [cpp]?view plaincopy
  • fs@ubuntu:~/qiang/andian$?./andian??
  • hang:0?lie:3?=?218??
  • hang:2?lie:0?=?145??
  • fs@ubuntu:~/qiang/andian$???
  • ?

    七、題目、數組歸并

    已知兩個升序數組a、b及空數組c:

    int a[] = {1,3,5,7,9,11,13,15,17,19};

    int b[] = {2,4,6,8,10,12,14,16,18,20};

    int c[20]?;

    編寫程序將兩個數組完成歸并,并存入數組c中;

    ?

    [cpp]?view plaincopy
  • #include?<stdio.h>??
  • ??
  • int?main()??
  • {??
  • ????int?a[]?=?{1,3,5,7,9,11,13,15,17,19};??
  • ????int?b[]?=?{2,4,6,8,10,12,14,16,18,20};??
  • ????int?c[20];??
  • ??
  • ????int?i,?j,?k;??
  • ?????i?=?j?=?k?=?0;??
  • ????while(i?<?10?&&?j?<?10)??
  • ????{??
  • ????????if(a[i]?>?b[j])??
  • ????????????c[k++]?=?b[j++];??
  • ????????else??
  • ????????????c[k++]?=?a[i++];??
  • ????}??
  • ????while(i?<?10)??
  • ????????c[k++]?=?a[i++];??
  • ????while(j?<?10)??
  • ????????c[k++]?=?b[j++];??
  • ??
  • ????printf("c[]?=?");??
  • ????for(k?=?0;k<?20;k++)??
  • ????????printf("%d?",c[k]);??
  • ??
  • ????printf("\n");??
  • ??
  • ????return?0;??
  • }??
  • 執行結果如下:

    [cpp]?view plaincopy
  • fs@ubuntu:~/qiang/shuzu$?gcc?-o?shuzu7?shuzu7.c??
  • fs@ubuntu:~/qiang/shuzu$?./shuzu7??
  • c[]?=?1?2?3?4?5?6?7?8?9?10?11?12?13?14?15?16?17?18?19?20???
  • fs@ubuntu:~/qiang/shuzu$???
  • ?

    八、指針輸入一個字符串,內有數字和非數字字符,如a123X456 ?17960? 302tab5876 將其中連續的數字作為一個整數,一次存放到整數型數組a中,例如123放到 a[0],456放到 a[1]中,統計有多少個整數,并輸出這些數;

    代碼如下:

    [cpp]?view plaincopy
  • <pre?name="code"?class="cpp">#include?<stdio.h>??
  • #include?<string.h>??
  • ??
  • int?main(int?argc,?const?char?*argv[])??
  • {??
  • ????char?b[100];??
  • ????int??a[100];??
  • ????memset(a,'\0',100);??
  • ????char?*p?=?b;??
  • ????int?i?=?0;??
  • ????int?j;??
  • ????int?sum?=?0;??
  • ????int?count?=?0;??
  • ????int?flag?=?1;//標志位,遇到數字為0,遇到非數字為1;此處其初始值為1,默認首字符前面還是非數字,不輸出整數,主要配合下面的程序??
  • ????printf("請輸入字符串:\n");??
  • ????gets(b);??
  • ??????
  • ????while(*p?)??
  • ????{??
  • ????????if(*p?<=?'9'?&&?*p?>=?'0')??
  • ????????{??
  • ????????????flag?=?0;//遇到數字,flag=0??
  • ????????????sum?=?sum*10?+?*p++?-?'0';//將字符數字轉化成整數,此時并不輸出。當下一個字符為非數字時,才輸出??
  • ????????}?????
  • ????????else???
  • ????????{??
  • ????????????while(flag?==?0)//此時讀到非數字字符,判斷此時flag,如果此時flag為0.說明上一個字符為數字??
  • ????????????{??
  • ????????????????a[i++]?=?sum?;//此時將數字輸出,賦給a[i],i++??
  • ????????????????sum?=?0;//將sum清零??
  • ????????????????flag?=?1;//非數字字符,flag置1??
  • ????????????}??
  • ????????????p++;//此時flag為1,沒有整數輸出,則看下一個字符??
  • ????????}??
  • ????}??
  • //字符串結束后,會遇到兩種情況,一個是最后一個字符為數字,另一種是非數字字符??
  • ????if(flag?==?0)//因為前面的程序中,整數的下一個字符為非數字時,才會輸出整數,若最后一個是數字的話,則無法輸出,所以這里對最后一個字符進行判斷??
  • ????????a[i]?=?sum;//將最后一個整數輸出??
  • ????else???
  • ????????i--;//此時最后一個字符為非數字,沒有整數輸出,但i多加了一次,所以此處i--??
  • ??????
  • ????count?=?i?+?1;//整數個數為i+1??
  • ????printf("共有%d個整數\n",count);??
  • ????printf("這些整數是:\na[]=");??
  • ????for(j?=?0;?j?<?i+1;?j++)??
  • ????????printf("%d?",a[j]);??
  • ????printf("\n");??
  • ??
  • ????return?0;??
  • }??
  • 執行結果如下:

    [cpp]?view plaincopy
  • fs@ubuntu:~/qiang/tmp$?./zhizhen1??
  • 請輸入字符串:??
  • 123xiao45???<er97??
  • 共有3個整數??
  • 這些整數是:??
  • a[]=123?45?97???
  • fs@ubuntu:~/qiang/tmp$?./zhizhen1??
  • 請輸入字符串:??
  • xiao12jian5w4gd67dd??
  • 共有4個整數??
  • 這些整數是:??
  • a[]=12?5?4?67???
  • fs@ubuntu:~/qiang/tmp$???
  • 九、鏈表問題

    創建一個單向鏈表,實現一個簡單的學生成績統計系統

    代碼如下:

    [cpp]?view plaincopy
  • #include?<stdio.h>??
  • #include?<stdlib.h>??
  • #include?<malloc.h>??
  • #include?<string.h>??
  • #define?DEBUG()?printf("%s?%s?%d\n",__FILE__,__FUNCTION__,__LINE__)??
  • ??
  • typedef?struct?grade??
  • {??
  • ????int??score;??
  • ????char?name[10];??
  • ????struct?grade?*next;??
  • }Node;??
  • ??
  • Node?*CreateList()??
  • {??
  • ????Node?*p,*head,*tail;??
  • ????head?=?(Node?*)malloc(sizeof(Node));??
  • ????if(head?==?NULL)??
  • ????{??
  • ????????printf("malloc?fails!\n");??
  • ????????return?0;??
  • ????}??
  • ????head->next?=?NULL;??
  • ????tail?=?head;??
  • ??
  • ????int?i?=?0;??
  • ????while(1)??
  • ????{??
  • ????????int??s;???
  • ????????char?n[10];??
  • ????????printf("Please?input?the?student's?name!\n");??
  • ????????gets(n);??
  • ????????printf("Please?input?the?student's?score!\n");??
  • ????????scanf("%d",&s);??
  • ????????getchar();??
  • ????????if(?s?)??
  • ????????{??
  • ????????????p?=?(Node?*)malloc(sizeof(Node));??
  • ????????????if(p?==?NULL)??
  • ????????????{??
  • ????????????????printf("malloc?fails!\n");??
  • ????????????????return?0;??
  • ????????????}??
  • ????????????p->score?=?s;??
  • ????????????strcpy(p->name,n);??
  • ????????????p->next?=?NULL;??
  • ????????????printf("name:%s?score:%d\n",p->name,p->score);??
  • ??
  • ????????????tail->next?=?p;??
  • ????????????tail?=?p;??
  • ????????}??
  • ????????else??
  • ????????{?????
  • ????????????return?head;??
  • ????????}??
  • ????}??
  • }??
  • ??
  • DisplayList(Node?*pnode)??
  • {??
  • ????pnode?=?pnode->next;??
  • ????while?(?pnode?)??
  • ????{??
  • ????????printf("name:%-6s?score:%d\n",pnode->name,pnode->score);??
  • ????????pnode?=?pnode->next;??
  • ????}??
  • }??
  • ??
  • LookupList(Node?*p)??
  • {??
  • ????char?n[10];??
  • ????char?*t?=?n;??
  • ????printf("Please?input?the?name?you?want:\n");??
  • ????gets(n);??
  • ????p?=?p->next;??
  • ????while(?p?!=?NULL)??
  • ????{??
  • ????????if?(!strcmp(p->name,t))??
  • ????????{??
  • ????????????printf("%s'?score?is:?%d\n",t,p->score);??
  • ????????????return?0;??
  • ????????}??
  • ????????else??
  • ????????????p?=?p->next;??
  • ????}??
  • ????printf("%s?is?not?exeit!Please?input?the?correct?name\n",t);??
  • }??
  • ??
  • DestroyList(Node?*p)??
  • {??
  • ????Node?*q;??
  • ????if(p->next?!=?NULL)??
  • ????{??
  • ????????q?=?p;??
  • ????????p?=?p->next;??
  • ????????free(q);??
  • ????????q?=?NULL;??
  • ????}??
  • }??
  • ??
  • InsertList(Node?*p)??
  • {??
  • ????char?n[10];??
  • ????char?*t?=?n;??
  • ????printf("Please?input?the?name?you?want?to?insert?after:\n");??
  • ????gets(n);??
  • ????p?=?p->next;??
  • ????while(?p?!=?NULL)??
  • ????{??
  • ????????if?(!strcmp(p->name,t))??
  • ????????{??
  • ????????????int??s;???
  • ????????????char?m[10];??
  • ????????????printf("Please?input?the?student's?name!\n");??
  • ????????????gets(m);??
  • ????????????printf("Please?input?the?student's?score!\n");??
  • ????????????scanf("%d",&s);??
  • ????????????getchar();??
  • ????????????Node?*q;??
  • ????????????q?=?(Node?*)malloc(sizeof(Node));??
  • ????????????strcpy(q->name,m);??
  • ????????????q->score?=?s;??
  • ????????????q->next?=?p->next;??
  • ????????????p->next?=?q;??
  • ??????????????
  • ????????????return?0;??
  • ????????}??
  • ????????else??
  • ????????????p?=?p->next;??
  • ????}??
  • }??
  • ??
  • int?main()??
  • {??
  • ????Node?*p1;??
  • ????p1?=?CreateList();??
  • ????DisplayList(p1);??
  • ????LookupList(p1);??
  • ????InsertList(p1);??
  • ????DisplayList(p1);??
  • ????DestroyList(p1);??
  • ??
  • ????return?0;??
  • }??
  • 執行結果如下:

    [cpp]?view plaincopy
  • fs@ubuntu:~/qiang/link$?./link2??
  • Please?input?the?student's?name!??
  • xiao??
  • Please?input?the?student's?score!??
  • 100??
  • name:xiao?score:100??
  • Please?input?the?student's?name!??
  • zhi???
  • Please?input?the?student's?score!??
  • 85??
  • name:zhi?score:85??
  • Please?input?the?student's?name!??
  • qiang??
  • Please?input?the?student's?score!??
  • 88??
  • name:qiang?score:88??
  • Please?input?the?student's?name!??
  • ming??
  • Please?input?the?student's?score!??
  • 77??
  • name:ming?score:77??
  • Please?input?the?student's?name!??
  • hui??
  • Please?input?the?student's?score!??
  • 78??
  • name:hui?score:78??
  • Please?input?the?student's?name!??
  • null??
  • Please?input?the?student's?score!??
  • 0??
  • name:xiao???score:100??
  • name:zhi????score:85??
  • name:qiang??score:88??
  • name:ming???score:77??
  • name:hui????score:78??
  • Please?input?the?name?you?want:??
  • qiang???
  • qiang'?score?is:?88??
  • Please?input?the?name?you?want?to?insert?after:??
  • ming??
  • Please?input?the?student's?name!??
  • fang??
  • Please?input?the?student's?score!??
  • 92??
  • name:xiao???score:100??
  • name:zhi????score:85??
  • name:qiang??score:88??
  • name:ming???score:77??
  • name:fang???score:92??
  • name:hui????score:78??
  • fs@ubuntu:~/qiang/link$ ??
  • 總結

    以上是生活随笔為你收集整理的C语言经典编程题--哥德巴赫猜想 、完数 、猜数字等的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。