? 一、 ?驗證歌德巴赫猜想:任意一個不小于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;?? }??
?三、題目:猜數字游戲
需求定義:
編寫程序,實現控制臺的猜數字游戲。游戲運行時產生一個0-100之間的隨機整數,要求用戶從控制臺輸入數字,若輸入的數字比產生的數字小,則輸出:“太小了,再大一點!”;若輸入的數字比產生的數字大,則輸出:“太大了,再小一點!”,若輸入的數字和產生的數字相等,則輸出:“恭喜你猜對了!”然后退出程序;若用戶猜了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;?? ????printf("請輸入字符串:\n");?? ????gets(b);?? ?????? ????while(*p?)?? ????{?? ????????if(*p?<=?'9'?&&?*p?>=?'0')?? ????????{?? ????????????flag?=?0;?? ????????????sum?=?sum*10?+?*p++?-?'0';?? ????????}????? ????????else??? ????????{?? ????????????while(flag?==?0)?? ????????????{?? ????????????????a[i++]?=?sum?;?? ????????????????sum?=?0;?? ????????????????flag?=?1;?? ????????????}?? ????????????p++;?? ????????}?? ????}?? ?? ????if(flag?==?0)?? ????????a[i]?=?sum;?? ????else??? ????????i--;?? ?????? ????count?=?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语言经典编程题--哥德巴赫猜想 、完数 、猜数字等的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。