1. 單片機c語言編程100個實例
51單片機C語言編程實例 基礎知識:51單片機編程基礎 單片機的外部結構: 1. DIP40雙列直插; 2. P0,P1,P2,P3四個8位準雙向I/O引腳;(作為I/O輸入時,要先輸出高電平) 3. 電源VCC(PIN40)和地線GND(PIN20); 4. 高電平復位RESET(PIN9);(10uF電容接VCC與RESET,即可實現上電復位) 5. 內置振盪電路,外部只要接晶體至X1(PIN18)和X0(PIN19);(頻率為主頻的12倍) 6. 程序配置EA(PIN31)接高電平VCC;(運行單片機內部ROM中的程序) 7. P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 單片機內部I/O部件:(所為學習單片機,實際上就是編程式控制制以下I/O部件,完成指定任務) 1. 四個8位通用I/O埠,對應引腳P0、P1、P2和P3; 2. 兩個16位定時計數器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3. 一個串列通信介面;(SCON,SBUF) 4. 一個中斷控制器;(IE,IP) 針對AT89C52單片機,頭文件AT89x52.h給出了SFR特殊功能寄存器所有埠的定義。 C語言編程基礎: 1. 十六進製表示位元組0x5a:二進制為01011010B;0x6E為01101110。 2. 如果將一個16位二進數賦給一個8位的位元組變數,則自動截斷為低8位,而丟掉高8位。 3. ++var表示對變數var先增一;var—表示對變數後減一。 4. x |= 0x0f;表示為 x = x | 0x0f; 5. TMOD = ( TMOD & 0xf0 ) | 0x05;表示給變數TMOD的低四位賦值0x5,而不改變TMOD的高四位。 6. While( 1 ); 表示無限執行該語句,即死循環。語句後的分號表示空循環體,也就是{;} 在某引腳輸出高電平的編程方法:(比如P1.3(PIN4)引腳) 代碼 1. #include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P1.3 2. void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口 3. { 4. P1_3 = 1; //給P1_3賦值1,引腳P1.3就能輸出高電平VCC 5. While( 1 ); //死循環,相當 LOOP: goto LOOP; 6. } 注意:P0的每個引腳要輸出高電平時,必須外接上拉電阻(如4K7)至VCC電源。 在某引腳輸出低電平的編程方法:(比如P2.7引腳) 代碼 1. #include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P2.7 2. void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口 3. { 4. P2_7 = 0; //給P2_7賦值0,引腳P2.7就能輸出低電平GND 5. While( 1 ); //死循環,相當 LOOP: goto LOOP; 6. } 在某引腳輸出方波編程方法:(比如P3.1引腳) 代碼 1. #include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P3.1 2. void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口 3. { 4. While( 1 ) //非零表示真,如果為真則執行下面循環體的語句 5. { 6. P3_1 = 1; //給P3_1賦值1,引腳P3.1就能輸出高電平VCC 7. P3_1 = 0; //給P3_1賦值0,引腳P3.1就能輸出低電平GND 8. } //由於一直為真,所以不斷輸出高、低、高、低……,從而形成方波 9. } 將某引腳的輸入電平取反後,從另一個引腳輸出:( 比如 P0.4 = NOT( P1.1) ) 代碼 1. #include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P0.4和P1.1 2. void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口 3. { 4. P1_1 = 1; //初始化。P1.1作為輸入,必須輸出高電平 5. While( 1 ) //非零表示真,如果為真則執行下面循環體的語句 6. { 7. if( P1_1 == 1 ) //讀取P1.1,就是認為P1.1為輸入,如果P1.1輸入高電平VCC 8. { P0_4 = 0; } //給P0_4賦值0,引腳P0.4就能輸出低電平GND 2 51單片機C語言編程實例 9. else //否則P1.1輸入為低電平GND 10. //{ P0_4 = 0; } //給P0_4賦值0,引腳P0.4就能輸出低電平GND 11. { P0_4 = 1; } //給P0_4賦值1,引腳P0.4就能輸出高電平VCC 12. } //由於一直為真,所以不斷根據P1.1的輸入情況,改變P0.4的輸出電平 13. } 將某埠8個引腳輸入電平,低四位取反後,從另一個埠8個引腳輸出:( 比如 P2 = NOT( P3 ) ) 代碼 1. #include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P2和P3 2. void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口 3. { 4. P3 = 0xff; //初始化。P3作為輸入,必須輸出高電平,同時給P3口的8個引腳輸出高電平 5. While( 1 ) //非零表示真,如果為真則執行下面循環體的語句 6. { //取反的方法是異或1,而不取反的方法則是異或0 7. P2 = P3^0x0f //讀取P3,就是認為P3為輸入,低四位異或者1,即取反,然後輸出 8. } //由於一直為真,所以不斷將P3取反輸出到P2 9. } 注意:一個位元組的8位D7、D6至D0,分別輸出到P3.7、P3.6至P3.0,比如P3=0x0f,則P3.7、P3.6、P3.5、P3.4四個引腳都輸出低電平,而P3.3、P3.2、P3.1、P3.0四個引腳都輸出高電平。同樣,輸入一個埠P2,即是將P2.7、P2.6至P2.0,讀入到一個位元組的8位D7、D6至D0。 第一節:單數碼管按鍵顯示 單片機最小系統的硬體原理接線圖: 1. 接電源:VCC(PIN40)、GND(PIN20)。加接退耦電容0.1uF 2. 接晶體:X1(PIN18)、X2(PIN19)。注意標出晶體頻率(選用12MHz),還有輔助電容30pF 3. 接復位:RES(PIN9)。接上電復位電路,以及手動復位電路,分析復位工作原理 4. 接配置:EA(PIN31)。說明原因。 發光二極的控制:單片機I/O輸出 將一發光二極體LED的正極(陽極)接P1.1,LED的負極(陰極)接地GND。只要P1.1輸出高電平VCC,LED就正向導通(導通時LED上的壓降大於1V),有電流流過LED,至發LED發亮。實際上由於P1.1高電平輸出電阻為10K,起到輸出限流的作用,所以流過LED的電流小於(5V-1V)/10K = 0.4mA。只要P1.1輸出低電平GND,實際小於0.3V,LED就不能導通,結果LED不亮。 開關雙鍵的輸入:輸入先輸出高 一個按鍵KEY_ON接在P1.6與GND之間,另一個按鍵KEY_OFF接P1.7與GND之間,按KEY_ON後LED亮,按KEY_OFF後LED滅。同時按下LED半亮,LED保持後松開鍵的狀態,即ON亮OFF滅。 代碼 1. #include <at89x52.h> 2. #define LED P1^1 //用符號LED代替P1_1 3. #define KEY_ON P1^6 //用符號KEY_ON代替P1_6 4. #define KEY_OFF P1^7 //用符號KEY_OFF代替P1_7 5. void main( void ) //單片機復位後的執行入口,void表示空,無輸入參數,無返回值 6. { 7. KEY_ON = 1; //作為輸入,首先輸出高,接下KEY_ON,P1.6則接地為0,否則輸入為1 8. KEY_OFF = 1; //作為輸入,首先輸出高,接下KEY_OFF,P1.7則接地為0,否則輸入為1 9. While( 1 ) //永遠為真,所以永遠循環執行如下括弧內所有語句 10. { 11. if( KEY_ON==0 ) LED=1; //是KEY_ON接下,所示P1.1輸出高,LED亮 12. if( KEY_OFF==0 ) LED=0; //是KEY_OFF接下,所示P1.1輸出低,LED滅 13. } //松開鍵後,都不給LED賦值,所以LED保持最後按鍵狀態。 14. //同時按下時,LED不斷亮滅,各佔一半時間,交替頻率很快,由於人眼慣性,看上去為半亮態 15. } 數碼管的接法和驅動原理 一支七段數碼管實際由8個發光二極體構成,其中7個組形構成數字8的七段筆畫,所以稱為七段數碼管,而餘下的1個發光二極體作為小數點。作為習慣,分別給8個發光二極體標上記號:a,b,c,d,e,f,g,h。對應8的頂上一畫,按順時針方向排,中間一畫為g,小數點為h。 我們通常又將各二極與一個位元組的8位對應,a(D0),b(D1),c(D2),d(D3),e(D4),f(D5),g(D6),h(D7),相應8個發光二極體正好與單片機一個埠Pn的8個引腳連接,這樣單片機就可以通過引腳輸出高低電平控制8個發光二極的亮與滅,從而顯示各種數字和符號;對應位元組,引腳接法為:a(Pn.0),b(Pn.1),c(Pn.2),d(Pn.3),e(Pn.4),f(Pn.5),g(Pn.6),h(Pn.7)。 如果將8個發光二極體的負極(陰極)內接在一起,作為數碼管的一個引腳,這種數碼管則被稱為共陰數碼管,共同的引腳則稱為共陰極,8個正極則為段極。否則,如果是將正極(陽極)內接在一起引出的,則稱為共陽數碼管,共同的引腳則稱為共陽極,8個負極則為段極。 以單支共陰數碼管為例,可將段極接到某埠Pn,共陰極接GND,則可編寫出對應十六進制碼的七段碼表位元組數據
2. c語言習題 麻煩高手來做一下
14:
1#include<stdio.h>
main()
{ int i,j;
for(i=0;i<9;i++)
{ j=i*10+6;
if(j%3==0)
printf("%d\n",j);
continue;
}
}
2)#include<stdio.h>
main()
{ int j,s,p,n;
scanf("%d",&n);
for(s=p=0,j=1;j<=n;j++)
{p=p+j;
s=s+p;
}
printf("%d",s);
}
13
#include<stdio.h>
void main()
{int i,a,b,c,d,e,n;
for(i=10000;i<=99999;i++)
{ a=i/10000;
b=i/1000%10;
c=i/100%10;
d=i/10%10;
e=i%10;
if (a==e&&b==d)
printf("%-8d",i);
n++;
}
if(n%5==0) printf("\n");
}
12
#include <stdio.h>
void main()
{
long int num;
int indiv,ten,hundred,thousand,tenthousand,place;
printf("請輸入一個整數(0-99999):");
scanf("%ld",&num);
if(num>9999)
place=5;
else if(num>999)
place=4;
else if(num>99)
place=3;
else if(num>9)
place=2;
else place=1;
printf("place=%d\n",place);
printf("每位數字為:");
tenthousand=num/10000;
thousand=(num-tenthousand*10000)/1000;
hundred=(num-tenthousand*10000-thousand*1000)/100;
ten=(num-tenthousand*10000-thousand*1000-hundred*100)/10;
indiv=num-tenthousand*10000-thousand*1000-hundred*100-ten*10;
switch(place)
{case 5: printf("%d,%d,%d,%d,%d",tenthousand,thousand,hundred,ten,indiv);
printf("\n反序數字為:");
printf("%d%d%d%d%d\n",indiv,ten,hundred,thousand,tenthousand);
break;
case 4:printf("%d,%d,%d,%d",thousand,hundred,ten,indiv);
printf("\n反序數字為:");
printf("%d%d%d%d\n",indiv,ten,hundred,thousand);
break;
case 3:printf("%d,%d,%d\n",hundred,ten,indiv);
printf("\n反序數字為:");
printf("%d%d%d\n",indiv,ten,hundred);
case 2:printf("%d,%d\n",ten,indiv);
printf("\n反序數字為:");
printf("%d%d\n",indiv,ten);
case 1:printf("%d\n",indiv);
printf("\n反序數字為:");
printf("%d\n",indiv);
}
}
11
#include<stdio.h>
main()
{ int n;
printf("請輸入 ASCII碼值:\n");
scanf("%d",&n);
if(n<32)
printf("這是一個控制字元");
else if(n>=48&&n<=57)
printf("這是一個數字");
else if(n>=65&&n<=90)
printf("這是一個大寫字母");
else if(n>=97&&n<=122)
printf("這是一個小寫字母");
}
10
main()
{
long int i;
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
scanf("%ld",&i);
bonus1=100000*0.1;
bonus2=bonus1+100000*0.075;
bonus4=bonus2+200000*0.05;
bonus6=bonus4+200000*0.03;
bonus10=bonus6+400000*0.015;
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
bonus=bonus10+(i-1000000)*0.01;
printf("bonus=%d",bonus);
}
9
#include<stdio.h>
main()
{ int n;
printf("請輸入年份:\n");
scanf("%d",&n);
if((n%400==0)||(n%4==0)&&(n%100!=0))
printf("這一年是閏年\n");
else
printf("這一年不是閏年\n");
}
3. 經典C語言程序例子
題目01:在一個已知的字元串中查找最長單詞,假定字元串中只含字母和空格,空格用來分隔不同的單詞。
(3)c語言習題100例擴展閱讀:
C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
4. c語言程序設計習題!!10道
1. 在C程序中,只能用於整型變數的運算符是___ 求余(%)___。
2. 在C語言中,char類型變數占 2 個位元組。
3. 若a已定義為double類型,請寫出從鍵盤給a輸入數據的語句 scanf("%lf",&a); 。
4. 為使以下程序能正確運行,請填空。
#include<stdio.h>
#include<math.h>
main()
{ double x, y;
scanf("%lf%lf",&x,&y);
printf("y=%f\n", pow(x,y));}
5. 以下程序執行後的輸出結果是 -2 。
main()
{ int m=3,n=4,x;
x=-m++;
x=x+8/++n;
printf("%d\n",x); }
6. 以下程序的輸出結果是 10 20 0 。
main()
{ int a,b,c;
a=10; b=20; c=(a%b<1)||(a/b>1);
printf("%d %d %d\n",a,b,c); }
7. 以下程序中調用fun函數,對主函數x和y中的值進行對調。請填空。
void fun( double *a, double *b)
{ double x;
x=*a; *a=*b ; *b=x ; }
main()
{ double x,y;
printf(「Enter x, y : 「); scanf(「%lf%lf」,&x,&y);
fun( x,y);
printf(「x=%f y=%f\n」,x,y );}
8. C語言規定:字元串以 '\0' 作為結束標志。
9. 以下程序的輸出結果是 3 。
long fun( int n)
{ long t;
if ( n==1 || n==2 ) t=1;
else t=fun(n-1) + fun(n-2);
return ( t );
}
main( )
{ printf(「%d\n」,fun(4) );}
10. 設有定義:
struct date
{ int year, month, day ; } d1;
請寫出利用輸入語句,為變數d1中的year成員從鍵盤輸入數值的語句 scanf ("%d",&(d1.year)); 。
5. 求一些C語言練習題,越多越好,有答案更好!
【程序1】
題目:有1、2、3、4個數字,能組成多少個互不相同且無重復數字的三位數?都是多少?
1.程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去
掉不滿足條件的排列。
2.程序源代碼:
#include "stdio.h"
#include "conio.h"
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);
}
getch();
}
==============================================================
【程序2】
題目:企業發放的獎金根據利潤提成。利潤(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.程序源代碼:
#include "stdio.h"
#include "conio.h"
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
bonus=bonus10+(i-1000000)*0.01;
printf("bonus=%d",bonus);
getch();
}
==============================================================
【程序3】
題目:一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?
1.程序分析:在10萬以內判斷,先將該數加上100後再開方,再將該數加上268後再開方,如果開方後
的結果滿足如下條件,即是結果。請看具體分析:
2.程序源代碼:
#include "math.h"
#include "stdio.h"
#include "conio.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);
}
getch();
}
==============================================================
【程序4】
題目:輸入某年某月某日,判斷這一天是這一年的第幾天?
1.程序分析:以3月5日為例,應該先把前兩個月的加起來,然後再加上5天即本年的第幾天,特殊
情況,閏年且輸入月份大於3時需考慮多加一天。
2.程序源代碼:
#include "stdio.h"
#include "conio.h"
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);
getch();
}
==============================================================
【程序5】
題目:輸入三個整數x,y,z,請把這三個數由小到大輸出。
1.程序分析:我們想辦法把最小的數放到x上,先將x與y進行比較,如果x>y則將x與y的值進行交換,
然後再用x與z進行比較,如果x>z則將x與z的值進行交換,這樣能使x最小。
2.程序源代碼:
#include "stdio.h"
#include "conio.h"
main()
{
int x,y,z,t;
scanf("%d%d%d",&x,&y,&z);
if (x>y)
{t=x;x=y;y=t;} /*交換x,y的值*/
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);
getch();
}
==============================================================
【程序6】
題目:用*號輸出字母C的圖案。
1.程序分析:可先用'*'號在紙上寫出字母C,再分行輸出。
2.程序源代碼:
#include "stdio.h"
#include "conio.h"
main()
{
printf("Hello C-world!\n");
printf(" ****\n");
printf(" *\n");
printf(" * \n");
printf(" ****\n");
getch();
}
==============================================================
【程序7】
題目:輸出特殊圖案,請在c環境中運行,看一看,Very Beautiful!
1.程序分析:字元共有256個。不同字元,圖形不一樣。
2.程序源代碼:
#include "stdio.h"
#include "conio.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);
getch();
}
==============================================================
【程序8】
題目:輸出9*9口訣。
1.程序分析:分行與列考慮,共9行9列,i控制行,j控制列。
2.程序源代碼:
#include "stdio.h"
#include "conio.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"); /*每一行後換行*/
}
getch();
}
==============================================================
【程序9】
題目:要求輸出國際象棋棋盤。
1.程序分析:用i控制行,j來控制列,根據i+j的和的變化來控制輸出黑方格,還是白方格。
2.程序源代碼:
#include "stdio.h"
#include "conio.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");
}
getch();
}
==============================================================
【程序10】
題目:列印樓梯,同時在樓梯上方列印兩個笑臉。
1.程序分析:用i控制行,j來控制列,j根據i的變化來控制輸出黑方格的個數。
2.程序源代碼:
#include "stdio.h"
#include "conio.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");
}
getch();
}
.:.:經典c程序100例==11--20 :.:.
經典c程序100例==11--20
【程序11】
題目:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月
後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?
1.程序分析: 兔子的規律為數列1,1,2,3,5,8,13,21....
2.程序源代碼:
#include "stdio.h"
#include "conio.h"
main()
{
long f1,f2;
int i;
f1=f2=1;
for(i=1;i<=20;i++)
{
printf("%12ld %12ld",f1,f2);
if(i%2==0) printf("\n"); /*控制輸出,每行四個*/
f1=f1+f2; /*前兩個月加起來賦值給第三個月*/
f2=f1+f2; /*前兩個月加起來賦值給第三個月*/
}
getch();
}
==============================================================
【程序12】
題目:判斷101-200之間有多少個素數,並輸出所有素數。
1.程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,
則表明此數不是素數,反之是素數。
2.程序源代碼:
#include "stdio.h"
#include "conio.h"
#include "math.h"
main()
{
int m,i,k,h=0,leap=1;
printf("\n");
for(m=101;m<=200;m++)
{
k=sqrt(m+1);
for(i=2;i<=k;i++)
if(m%i==0)
{
leap=0;
break;
}
if(leap)
{
printf("%-4d",m);
h++;
if(h%10==0)
printf("\n");
}
leap=1;
}
printf("\nThe total is %d",h);
getch();
}
==============================================================
【程序13】
題目:列印出所有的「水仙花數」,所謂「水仙花數」是指一個三位數,其各位數字立方和等於該數
本身。例如:153是一個「水仙花數」,因為153=1的三次方+5的三次方+3的三次方。
1.程序分析:利用for循環控制100-999個數,每個數分解出個位,十位,百位。
2.程序源代碼:
#include "stdio.h"
#include "conio.h"
main()
{
int i,j,k,n;
printf("'water flower'number is:");
for(n=100;n<1000;n++)
{
i=n/100;/*分解出百位*/
j=n/10%10;/*分解出十位*/
k=n%10;/*分解出個位*/
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
printf("%-5d",n);
}
getch();
}
==============================================================
【程序14】
題目:將一個正整數分解質因數。例如:輸入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的值,重復執行第一步。
2.程序源代碼:
/* zheng int is divided yinshu*/
#include "stdio.h"
#include "conio.h"
main()
{
int n,i;
printf("\nplease input a number:\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);
getch();
}
==============================================================
【程序15】
題目:利用條件運算符的嵌套來完成此題:學習成績>=90分的同學用A表示,60-89分之間的用B表示,
60分以下的用C表示。
1.程序分析:(a>b)?a:b這是條件運算符的基本例子。
2.程序源代碼:
#include "stdio.h"
#include "conio.h"
main()
{
int score;
char grade;
printf("please input a score\n");
scanf("%d",&score);
grade=score>=90?'A':(score>=60?'B':'C');
printf("%d belongs to %c",score,grade);
getch();
}
==============================================================
【程序16】
題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。
1.程序分析:利用輾除法。
2.程序源代碼:
#include "stdio.h"
#include "conio.h"
main()
{
int a,b,num1,num2,temp;
printf("please input two numbers:\n");
scanf("%d,%d",&num1,&num2);
if(num1<num2)/*交換兩個數,使大數放在num1上*/
{
temp=num1;
num1=num2;
num2=temp;
}
a=num1;b=num2;
while(b!=0)/*利用輾除法,直到b為0為止*/
{
temp=a%b;
a=b;
b=temp;
}
printf("gongyueshu:%d\n",a);
printf("gongbeishu:%d\n",num1*num2/a);
getch();
}
==============================================================
【程序17】
題目:輸入一行字元,分別統計出其中英文字母、空格、數字和其它字元的個數。
1.程序分析:利用while語句,條件為輸入的字元不為'\n'.
2.程序源代碼:
#include "stdio.h"
#include "conio.h"
main()
{
char c;
int letters=0,space=0,digit=0,others=0;
printf("please input some characters\n");
while((c=getchar())!='\n')
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
letters++;
else if(c==' ')
space++;
else if(c>='0'&&c<='9')
digit++;
else
others++;
}
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,
space,digit,others);
getch();
}
==============================================================
【程序18】
題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時
共有5個數相加),幾個數相加有鍵盤控制。
1.程序分析:關鍵是計算出每一項的值。
2.程序源代碼:
#include "stdio.h"
#include "conio.h"
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);
getch();
}
==============================================================
【程序19】
題目:一個數如果恰好等於它的因子之和,這個數就稱為「完數」。例如6=1+2+3.編程
找出1000以內的所有完數。
1. 程序分析:請參照程序<--上頁程序14.
2.程序源代碼:
#include "stdio.h"
#include "conio.h"
main()
{
static int k[10];
int i,j,n,s;
for(j=2;j<1000;j++)
{
n=-1;
s=j;
for(i=1;i<j;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<n;i++)
printf("%d,",k);
printf("%d\n",k[n]);
}
}
getch();
}
==============================================================
【程序20】
題目:一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在
第10次落地時,共經過多少米?第10次反彈多高?
1.程序分析:見下面注釋
2.程序源代碼:
#include "stdio.h"
#include "stdio.h"
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);
getch();
}
.:.:經典c程序100例==21--30:.:.
經典c程序100例==21--30
【程序21】
題目:猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個
第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以後每天早上都吃了前一天剩下
的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。
1.程序分析:採取逆向思維的方法,從後往前推斷。
2.程序源代碼:
#include "stdio.h"
#include "conio.h"
main()
{
int day,x1,x2;
day=9;
x2=1;
while(day>0)
{
x1=(x2+1)*2;/*第一天的桃子數是第2天桃子數加1後的2倍*/
x2=x1;
day--;
}
printf("the total is %d\n",x1);
getch();
}
==============================================================
【程序22】
題目:兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽簽決定
比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程序找出
三隊賽手的名單。
1.程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,
則表明此數不是素數,反之是素數。
2.程序源代碼:
#include "stdio.h"
#include "conio.h"
main()
{
char i,j,k;/*i是a的對手,j是b的對手,k是c的對手*/
for(i='x';i<='z';i++)
for(j='x';j<='z';j++)
{
if(i!=j)
for(k='x';k<='z';k++)
{
if(i!=k&&j!=k)
{
if(i!='x'&&k!='x'&&k!='z')
printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);
}
}
}
getch();
}
==============================================================
【程序23】
題目:列印出如下圖案(菱形)
*
***
*****
*******
*****
***
*
1.程序分析:先把圖形分成兩部分來看待,前四行一個規律,後三行一個規律,利用雙重
for循環,第一層控制行,第二層控制列。
2.程序源代碼:
#include "stdio.h"
#include "conio.h"
main()
{
int i,j,k;
for(i=0;i<=3;i++)
{
for(j=0;j<=2-i;j++)
printf(" ");
for(k=0;k<=2*i;k++)
printf("*");
printf("\n");
}
for(i=0;i<=2;i++)
{
for(j=0;j<=i;j++)
printf(" ");
for(k=0;k<=4-2*i;k++)
printf("*");
printf("\n");
}
getch();
}
==============================================================
【程序24】
題目:有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和。
1.程序分析:請抓住分子與分母的變化規律。
2.程序源代碼:
#include "stdio.h"
#include "conio.h"
main()
{
int n,t,number=20;
float a=2,b=1,s=0;
for(n=1;n<=number;n++)
{
s=s+a/b;
t=a;a=a+b;b=t;/*這部分是程序的關鍵,請讀者猜猜t的作用*/
}
printf("sum is %9.6f\n",s);
getch();
}
==============================================================
【程序25】
題目:求1+2!+3!+...+20!的和
1.程序分析:此程序只是把累加變成了累乘。
2.程序源代碼:
#include "stdio.h"
#include "conio.h"
main()
{
float n,s=0,t=1;
for(n=1;n<=20;n++)
{
t*=n;
s+=t;
}
printf("1+2!+3!...+20!=%e\n",s);
getch();
}
==============================================================
【程序26】
題目:利用遞歸方法求5!。
1.程序分析:遞歸公式:fn=fn_1*4!
2.程序源代碼:
#include "stdio.h"
#include "conio.h"
main()
{
int i;
int fact();
for(i=0;i<5;i++)
printf("\40:%d!=%d\n",i,fact(i));
getch();
}
int fact(j)
int j;
{
int sum;
if(j==0)
sum=1;
else
sum=j*fact(j-1);
return sum;
}
==============================================================
【程序27】
題目:利用遞歸函數調用方式,將所輸入的5個字元,以相反順序列印出來。
1.程序分析:
2.程序源代碼:
#include "stdio.h"
#include "conio.h"
main()
{
int i=5;
void palin(int n);
printf("\40:");
palin(i);
printf("\n");
getch();
}
void palin(n)
int n;
{
char next;
if(n<=1)
{
next=getchar();
printf("\n\0:");
putchar(next);
}
else
{
next=getchar();
palin(n-1);
putchar(next);
}
}
==============================================================
【程序28】
題目:有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第
3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第一個人大兩歲。最後
問第一個人,他說是10歲。請問第五個人多大?
1.程序分析:利用遞歸的方法,遞歸分為回推和遞推兩個階段。要想知道第五個人歲數,需知道
第四人的歲數,依次類推,推到第一人(10歲),再往回推。
2.程序源代碼:
#include "stdio.h"
#include "conio.h"
age(n)
int n;
{
int c;
if(n==1) c=10;
else c=age(n-1)+2;
return(c);
}
main()
{
printf("%d",age(5));
getch();
}
==============================================================
【程序29】
題目:給一個不多於5位的正整數,要求:一、求它是幾位數,二、逆序列印出各位數字。
1. 程序分析:學會分解出每一位數,如下解釋:(這里是一種簡單的演算法,師專數002班趙鑫提供)
2.程序源代碼:
#include "stdio.h"
#include "conio.h"
main( )
{
long a,b,c,d,e,x;
scanf("%ld",&x);
a=x/10000;/*分解出萬位*/
b=x%10000/1000;/*分解出千位*/
c=x%1000/100;/*分解出百位*/
d=x%100/10;/*分解出十位*/
e=x%10;/*分解出個位*/
if (a!=0) printf("there are 5, %ld %ld %ld %ld %ld\n",e,d,c,b,a);
else if (b!=0) printf("there are 4, %ld %ld %ld %ld\n",e,d,c,b);
else if (c!=0) printf(" there are 3,%ld %ld %ld\n",e,d,c);
else if (d!=0) printf("there are 2, %ld %ld\n",e,d);
else if (e!=0) printf(" there are 1,%ld\n",e);
getch();
}
==============================================================
【程序30】
題目:一個5位數,判斷它是不是迴文數。即12321是迴文數,個位與萬位相同,十位與千位相同。
1.程序分析:同29例
2.程序源代碼:
#include "stdio.h"
#include "conio.h"
main( )
{
long ge,shi,qian,wan,x;
scanf("%ld",&x);
wan=x/10000;
qian=x%10000/1000;
shi=x%100/10;
ge=x%10;
if(ge==wan&&shi==qian)/*個位等於萬位並且十位等於千位*/
printf("this number is a huiwen\n");
else
printf("this number is not a huiwen\n");
getch();
}
6. 10道經典的C語言例題(含參考程序)
1.列印出所有的「水仙花數」,所謂「水仙花數」是指一個三位數,其各位數字立方和等於該數本身。例如,153是一個「水仙花數」,因為153=1^3+5^3+3^3。
#include
#include
int main()
{
int _wei,shi_wei,ge_wei,i,sum=0;
for(i=100;i<1000;i++)
{
_wei=i/100;
shi_wei=(i%100)/10;
ge_wei=i%10;
if(i==pow(_wei,3)+pow(shi_wei,3)+pow(ge_wei,3))
{
printf("%d ",i);
sum++;
if(sum%5==0)
printf(" ");
}
}
printf(" ");
return 0;
}
2.請輸入任意兩個整數x和y,求其最大公約數和最小公倍數。
#include
int main()
{
int x,y,min,max,i;
printf("請輸入任意兩個整數:");
scanf("%d%d",&x,&y);
min=x>y?y:x;
max=x>y?x:y;
for(i=min;i>0;i--)
if(x%i==0&&y%i==0)
{
printf("這兩個整數的最大公約數為:%d ",i);
break;
}
for(i=max;i<=x*y;i++)
if(i%x==0&&i%y==0)
{
printf("這兩個整數的最小公倍數為:%d ",i);
break;
}
return 0;
}
3.輸入一行字元,分別統計出其中英文字母、空格、數字和其它字元的個數。
#include
#include
#define N 50
int main()
{
int sum1=0,sum2=0,sum3=0,sum4,i=0;
char str[N];
printf("請輸入一串字元串:");
scanf("%s",str);
for(i=0;i<strlen(str);i++) p=""> </strlen(str);i++)>
{
if((str[i]>='a'&&str[i]='A'&&str[i]<='Z'))
sum1++;
if(str[i]==' ')
sum2++;
if(str[i]>=Ɔ'&&str[i]<=Ə')
sum3++;
}
sum4=strlen(str)-sum1-sum2-sum3;
printf("英文字母的個數:%d ",sum1);
printf("空格的個數:%d ",sum2);
printf("數字的個數:%d ",sum3);
printf("其他符號的個數:%d ",sum4);
return 0;
}
4.求s=a+aa+aaa+aaaa+aa…a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。
#include
#include
int main()
{
int a,n,s=0,i,x=0,y=0;
printf("請輸入整數a的值:");
scanf("%d",&a);
printf("請輸入相加的個數n:");
scanf("%d",&n);
for(i=0;i<n;i++) p=""> </n;i++)>
{
x=y+2*pow(10,i);
y=x;
s=s+x;
}
printf("s=%d ",s);
return 0;
}
5.一個數如果恰好等於它的因子之和,這個數就稱為「完數」。例如6=1+2+3。編程找出1000以內的所有完數。
#include
int main()
{
int sum=0,i,j;
printf("在1000以內的完數有:");
for(i=2;i<=1000;i++)
{
for(j=1;j<i;j++) p=""> </i;j++)>
if(i%j==0)
sum=sum+j;
if(sum==i)
printf("%d ",i);
sum=0;
}
printf(" ");
return 0;
}
6.輸入一個不多於5位的正整數,要求:1、求它是幾位數;2、逆序列印出個位數字。
#include
int pows(int a,int n)
{
int sum=1,i;
for(i=0;i<n;i++) p=""> </n;i++)>
sum=sum*a;
return sum;
}
int main()
{
int n,i,k,x;
printf("n=");
scanf("%d",&n);
for(i=1;i<6;i++)
if(n/pows(10,i)==0)
{
printf("%d ",i);
k=i;
break;
}
for(i=0;i<k;i++) p=""> </k;i++)>
{
x=n/pows(10,i)%10;
printf("%d",x);
}
printf(" ");
return 0;
}
7.輸入一個5位數,判斷它是不是迴文數。即12321是迴文數,個位與萬位相同,十位與千位相同。
#include
int main()
{
int n,a[5],i=0;
printf("請輸入一個5位數:");
scanf("%d",&n);
while(n!=0)
{
a[i]=n%10;
n=n/10;
i++;
}
if(a[0]==a[4]&&a[1]==a[3])
printf("這個數是迴文數 ");
else
printf("這個數不是迴文數 ");
return 0;
}
8.利用遞歸演算法,將所輸入的5個字元,以相反順序列印出來。
#include
void digui(char a[],int n)
{
if(n==1)
printf("%c",a[0]);
else
{
printf("%c",a[n-1]);
digui(a,n-1);
}
}
int main()
{
char str[5];
printf("請輸入5個字元:");
scanf("%s",str);
digui(str,5);
printf(" ");
return 0;
}
9.有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13…球出這個序列的前20項之和。
#include
int main()
{
int i,a=1,b=1;
float sum=0.0;
for(i=1;i<=20;i++)
{
sum=sum+(float)(a+i)/b;
b=a+i;
a=i;
}
printf("sum=%f ",sum);
return 0;
}
10.利用遞歸演算法求5!。
#include
int digui(int n)
{
if(n==1)
return 1;
else
return n*digui(n-1);
}
int main()
{
int n,sum;
printf("n:");
scanf("%d",&n);
sum=digui(n);
printf("sum=%d ",sum);
return 0;
}
7. c語言練習題
#include"stdafx.h"
#include<stdio.h>//添加此頭文件
voidmain()
{floatscore;
printf(" Pleaseenterascore");
scanf("%f",&score);
if(score<0&&score>100)//最後的分號去掉,<=改為<,>=改為>,0和100分都是可能的分數
printf("Datawrong!!! ");//此句調到此處
else//添加此句
{//添加大括弧
if(score>=90)printf("excellent ");//80改為90,good改為excellent
elseif(score>=80)printf("good ");//90改為80,excellent改為good,excellent你拼寫錯了
elseif(score>=70)printf("medium ");
elseif(score>=60)printf("pass ");
elseprintf("notpass ");
}//添加大括弧
//elseprintf("Datawrong!!! ");}此句調到第一個if語句之後
}
未載入必要的頭文件、取值范圍錯誤、if語句邏輯錯誤、單詞拼寫錯誤。一個小程序竟然把各種錯誤都體現出來了,還是比較少見的。
8. 急求教:C語言的一個經典例題
//(int)s/500,主要演算法思想
#include<stdio.h>
int main()
{
float s,sum=0;
printf("輸入工資數:");
scanf("%f",&s);
switch((int)s/500)
{
case 0:sum=s;break;
case 1:sum=s*0.95;break;
case 2:
case 3:sum=s*0.92;break;
case 4:
case 5:sum=s*0.90;break;
case 6:sum=s*0.85;break;
default:sum=s*0.85;
}
printf("實發工資數:%.2f\n",sum);
return 0;
}
/*
我試了兩次,僅供參考:
輸入工資數:4000
實發工資數:3400.00
輸入工資數:2500
實發工資數:2250.00
至於輸入工資到實發工資的公式可以根據題意寫出來,可能跟yanh0606寫的公式差不多
*/
9. 求C語言試題
《C語言》綜合練習題一
注意:以下 「□」為空格,<CR>為回車
一、 單選題
1、閱讀以下程序,當輸入數據的形式為:25,13,10 <CR>,正確的輸出結果為( )
void main( )
{ int x,y,z;
scanf("%d%d%d",&x,&y,&z);
printf("x+y+z=%d\n",x+y+z);}
A) x+y+z=48 B) x+y+z=35 C) x+y+z=38 D) 不確定值
2、下面程序的輸出是( )
void main()
{ int y=0;
while(y--);
printf("y=%d\n",y); }
A) y=0 B) while 構成無限循環 C) y=-1 D) y=1
3、在以下各組標識符中,合法的用戶標識符是( )。
A) xy_ B) longdouble C) *p D) CHAR
變數1 signed history Float
4、以下能正確計算1*2*3…*10的程序段是( )
A) do { i=1;s=1;s=s*i;i++;}while (i<=10);
B) do {i=1;s=0;s=s*i;i++;} while(i<=10);
C) i=1;s=1; do{ s=s*i;i++;}while (i<=10);
D) i=1;s=0; do{ s=s*i;i++;}while (i<=10);
5、在下列各m的值中,能使表達式m%3==2 &&m%5==3 && m%7==2為真的是( )
A) 8 B) 23 C)17 D) 6
6、運行以下程序後,如果從鍵盤上輸入 china#<回車>,則輸出結果為( )
A) 2,3 B) 3,5
C) 5,2 D) 2,5
#include <stdio.h>
void main()
{ int v1=0,v2=0; char ch;
while((ch=getchar())!='#')
switch(ch)
{ case 'a':
case 'h': v1++;
default: v2++;
}
printf("%d,%d\n",v1, v2);
}
7、有如下程序
void main( )
{ int i,sum=0;
for(i=1;i<=3;sum++) sum+=i;
printf("%d\n",sum);
}
該程序的執行結果是( )
A) 6 B) 3 C) 死循環 D) 0
8、能正確表示a和b 同時為正或同時為負的邏輯表達式是( )
A) (a>=0‖b>=0)&&(a<0‖b<0)
B) (a>=0&&b>=0)&&(a<0&&b<0)
C) (a+b>0)&&(a+b<=0)
D) a*b>0
9、下列定義數組正確的是( )
A) #define size 10 B) int n=5;
char str1[size],str2[size+2]; int a[n][n+2];
C) char str[]; D) int num['10'];
10、以下程序的功能是計算:s= 1+1/2+1/3+… …+1/10
void main()
{ int n; float s
s=1.0;
for(n=10;n>1;n--)
s=s+1/n;
printf("%6.4f\n",s);
}
程序運行後輸出結果錯誤,導致錯誤結果的程序行是
A)s=1.0; B)for(n=10;n>1;n--)
C)s=s+1/n; D)printf("%6.4f\n",s);
11、以下說法正確的是( )
A) 輸入項可以為一個實型常量,如scanf("%f",3.5);
B) 只有格式控制,沒有輸入項,也能進行正確的輸入,如scanf("a=%d,b=%d");
C) 當輸入一個實型數據時,格式控制部分應規定小數點後的位數,如scanf("%4.2f",&f);
D) 當輸入數據時,必須指明變數的地址,如scanf("%f",&f);
12、設x=2.5、a=7,則算術表達式x+2*++a/3%3的值為( )。
A) 2.5 B)3.5
C) 4.5 D)5.5
13、若有說明:int a[3][4]={0}; 則下面正確的敘述是( )
A) 只有元素a[0][0]可得到初值0
B) 此說明語句不正確
C) 數組a中個元素都可以得到初始值,但其值不一定為0
D) 數組a中個元素都可得到初值0
14、設a=3,b=4,c=5, 則表達式 !(a+b)+c-1&&b+c/2的值為( )。
A)6.5 B) 6
C) 0 D)1
15、在下列有關#include命令的敘述中,錯誤的一條是( )
A)在#include命令中,文件名可以用雙引號或尖括弧括起來
B)在一個包含文件中又可以包含另一個被包含文件
C)在一個#include命令中可以指定一個包含文件
D)在一個#include命令中可以指定多個包含文件
16、以下不正確的if語句形式是( )
A) if(x>y && x!=y);
B) if( x= = y) x+=y;
C) if (x!=y) scanf("%d",&x) else scanf("%d",&y);
D) if(x<y) {x++;y++;}
17、有如下程序
void main()
{ int x=1,a=0,b=0;
switch(x){
case 0: b++;
case 1: a++
case 2: a++;b++
}
printf("a=%d,b=%d\n ",a,b);
}
該程序的輸出結果是
A) a=2,b=1 B) a=1,b=1
C) a=1,b=0 D) a=2,b=2
18、閱讀以下程序:
void main()
{ int x;
scanf("%d",&x);
if(x--<5) printf("%d",x);
else printf("%d",x++);
}
程序運行後,如果從鍵 盤上輸人5,則輸出結果是
A)3 B) 4 C) 5 D) 6
19、請閱讀以下程序:
void main( )
{ int a=5,b=0,c=0;
if(a=b+c) printf("***\n");
else printf("$$$\n");
}
以上程序( )
A) 有語法錯誤不能通過編譯 B) 可以通過編譯但不能通過連接`
C) 輸出 *** D) 輸出$$$
20、執行以下程序段時 ( )
x=-1; do {x=x*x; } while(! x);
A) 循環體將執行一次 B) 循環體將執行兩次
C) 循環體將執行無限次 D) 系統將提示有語法錯誤
21、若x是int型變數,且有下面的程序片段:
for(x=3; x<6; x++) printf((x%2)?("**%d"):("##%d\n"),x);
上面程序片段的輸出結果是
A) **3 B) ##3 C) ##3 D) **3##4
##4 **4 *4##5 **5
**5 ##5
22、以下敘述中不正確的是( )。
A. 一個好的程序應該有詳盡的注釋
B.C程序中的#include和#define均不是C語句
C. 在C程序中,賦值運算符的優先順序最低
D. 在C程序中,j++;是一條賦值語句二、 填空題
1、其後標有/* */的語句的執行次數是【 】
int y,i;
for(i=0;i<20;i++)
{
if(i%2==0) continue;
y+=i; /* */
}
2、下面程序的功能是從鍵盤輸入的10個數中,找出第一個能被7整除的數。若找到,列印此數後退出循環;若未找到,列印"not exist"。 請填空。
main( )
{ int n,a;
for(n=1; n<=10; n++)
{ scanf("%d",&a);
if(a%7==0) { printf("%d",a); 【 】;}
}
if (n==【 】) printf("not exist\n");
}
3、設i、j、k均為int型變數,則執行下面語句後k的值為【 】:
for(i=0, j=10, k=0; i<j; i++, j--)
k+=i+j;
4、. 以下程序是計算某年某月有幾天。判斷閏年的條件是:能被4整除但不被100整除或能被400整除的年份為閏年。
void main( )
{ int yy,mm,len;
printf(「輸入年份和月份:」);scanf(「%d%d」,&yy,&&mm);
switch(mm)
{ case 1: case 3: case 5: case 7: case 8: case 10: case 12: len=31 ; break;
case 4: case 6: case 9: case 11: len=30; break;
case 2:
if(【 】) len=29;
else len=28 ;
break;
default: printf(「輸入得月份無效!\n」);
}
printf(「%d年%d月有%d天\n」, 【 】);
}
5、下面程序讀入20個整數,然後統計非負數的平均值。
main ( )
{ int i, a[20], s, count;
s=count=0;
for ( i=0; i<20; i++ )
scanf (" %d" , 【 】 );
for ( i=0; i<20; i++ )
if ( a[i]>=0 ) {【 】; count++; }
printf ("ave=%f\n" , 【 】);
}
6、下面程序為求最小正整數n,使調和級數前n項之和大於預先給定的實數a。
> a,
main( ){
int n=0;
float s=0.0;
while (【 】) { 【 】; n++; }
print("「所求的數值為%f\n" ,s);
}
7、設數組a的元素均為正整數,以下程序是求a中偶數的個數和偶數的平均值。請填空。
main( )
{ int a[10]={1,2,3,4,5,6,7,8,9,10};
int k,s i;float ave;
for(k=s=i=0; i<10;i++)
{ if ( a[i]%2 !=0) 【 】;
s+=【 】;
k++;
}
if(k!=0) { ave=s/k; printf("%d,%d\n", k,ave);}
}
8.下面的程序輸出是【 】。
void main( ) {
int a=7, b=5;
printf("%d\n",b=a/b);
}
9. 若a=2,b=4,則表達式 !(x=a)||(y=b) && 0 的值是【 】.
10. 下面程序的運行結果是 【 】。
main()
{ int a[5][5],i,j,n=1;
for(i=0;i<5;i++)
for(j=0;j<5;j++) a[i][j]=n++;
printf("The result is \n");
for(i=0;i<3;i++)
{ for(j=0;j<=i;j++) printf("%3d",a[i][j]);
printf("\n");
}
}
11. .以下程序實現輸出x,y, z三個數中的最大者。
void main( )
{ int x,y,z,u;
scanf(「%d%d%d」,&x,&y,&z);
if【 】u=z; else u=y;
if【 】 u=x;
printf(「最大為:%d\n」,u);
}
12、以下程序的運行結果是【 】
void main()
{ int a1,a2,b1,b2; int i=5,j=7,k=0;
a1 = !k; a2=i!=j;
printf("a1=%d\ta2=%d\n",a1,a2);
b1=k &&j; b2= k||j;
printf("b1=%d\tb2=%d\n",b1,b2);
}
13、下面程序的運行結果是【 】。
void main()
{ int k,t,sum=0;
for(t=k=1; k<=10;)
{ sum+=t; ++k;
if(k%3==0) t=-k;
else t=k;
}
printf("sum=%d",sum);
}
14、下面程序的功能是輸入5個整數, 找出最大數和最小數所在的位置,並把二者對調,然後輸出調整後的5個數。請填空。
void main()
{ int a[5], max,min,i,j.k;
for(i=0;i<5;i++) scanf("%d",&a[i]);
min=a[0];max=a[0];
for(i=1;i<5;i++)
if((a[i]<min) {min=a[i];【 】;}
for(i=1;i<5;i++)
if((a[i]>max) {max=a[i];【 】;}
【 】;
printf("\n The position of min is : %3d\n",k);
printf("The position of max is: %3d\n",j);
for(i=0;i<5;i++) printf("%5d",a[i]);
}
15、變數x不小於1且小於10的表達式是【 】。
16、若有int ⅰ=10, j=0;
則執行完語句if (j=0)ⅰ+ +; else ⅰ- -; 後變數ⅰ的值為【 】。
17、下面程序段的運行結果是【 】。
x=2;
do { printf("*"); x--;} while(!x==0);
18.輸入以下數據:
How are you?<回車>
則下面程序段的執行結果是: 【 】。
#include <stdio.h>
main( )
{ while (putchar(getchar( )) !='?');
}
19、main( )
{ int number=3;
while(――number>0) printf(「*%d,」, number);
printf(「**%d」, number);
}
這個程序的輸出結果是:【 】。
20.華氏和攝氏的轉換公式為C=5/9*(F-32),其中C表示攝氏的溫度,F表示華氏的溫度。以下程序輸出從華氏0度到華氏300度,每隔20度輸出一個值,請填空。
main( )
{ int upper, step;
float fahr=0, celsius;
upper=300; step=20;
while (fahr <upper)
{ 【 】 ;
printf ("%4.Of, %6.1f\n", fahr, celsius);
【 】 ;
} }
21、求下列數列前20項之和
main( )
{ int i,f1=1,f2=2; float s=0.0;
for(【 】)
{ s=s+(float)f2/f1;
f2=f1+f2;
f1= 【 】。 ;
}
printf("%f\n",s);
}
22、程序讀入50個整數,統計非負數個數,並計算非負數之和。
#include " stdio.h"
main ( )
{ int i, a[50], s, count;
s=count=o;
for ( i=0; i<20; i++ )
scanf (" %d" , 【 】);
for ( i=0; i<20; i++ )
{ if ( a[i]<0 ) 【 】;
s += a[i];
count++;
}
printf ("s=%d\t count=%d\n" , s, count);
}
三、編程題(類似課本習題,如)
1. 按下面的近似公式計算
s = 1/1 -1/2 +1/3 - … +(-1)n-11/n +…
使誤差小於給定的e .
(其他略)
參考答案:
一、 單項選擇題
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
D C D C B C C D A C D C D D D C A B D C D C二、 填空題
1 2 3 4 5 6
10
break
11 50 (yy%4==0&&yy%100!=0||yy%400==0)
yy, mm, len &a[i]
s=s+a[i]
(float)s/conut s<=a
s=s+1.0/n7 8 9 10 11 12
continue
a[i]
1 0 The result is:
1
6 7
11 12 13 z>y
x>u
a1=1 a2=1
b1=0 b2=113 14 15 16 17 18
sum=19
j=i
k=i
a[j]=max;a[k]=min; (x>=1) && ( x<10) 9 ** How are you?19 20 21 22
*2, *1 , **0 Celsius=5/9*(fahr-32)
fahr+=step i=1;i<=20;i++ f2-f1 &a[i]
continue 三、 編程題 (答案不唯一!)#define E 1E5
void main( )
{
int n=1,k=-1;
float s=0;
do{
k=-k;
s=s+(float)k/n;
n++;
while(n<=E);
printf(「s=%f\n」, s2);
}
10. c語言經典100題,要過程
您好,c語言經典100題:
【程序1】
題目:有1,2,3,4個數字,能組成多少個互不相同且無重復數字的三位數
都是多少
1.程序分析:可填在百位,十位,個位的數字都是1,2,3,4.組成所有的排列後再去
掉不滿足條件的排列.
2.程序源代碼:
main()
{
int
i,j,k;
printf("\n");
for(i1;i<5;i++)
/*以下為三重循環*/
for(j1;j<5;j++)
for
(k1;k<5;k++)
{
if
(i!k&&i!j&&j!k)
/*確保i,j,k三位互不相同*/
printf("%d,%d,%d\n",i,j,k);
}
}
【程序2】
題目:企業發放的獎金根據利潤提成.利潤(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);
bonus1100000*0.1;bonus2bonus1+100000*0.75;
bonus4bonus2+200000*0.5;
bonus6bonus4+200000*0.3;
bonus10bonus6+400000*0.15;
if(i<100000)
bonusi*0.1;
else
if(i<200000)
bonusbonus1+(i-100000)*0.075;
else
if(i<400000)
bonusbonus2+(i-200000)*0.05;
else
if(i<600000)
bonusbonus4+(i-400000)*0.03;
else
if(i<1000000)
bonusbonus6+(i-600000)*0.015;
else
bonusbonus10+(i-1000000)*0.01;
printf("bonus%d",bonus);
}
【程序3】
題目:一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少
1.程序分析:在10萬以內判斷,先將該數加上100後再開方,再將該數加上268後再開方,如果開方後
的結果滿足如下條件,即是結果.請看具體分析:
2.程序源代碼:
#include
"math.h"
main()
{
long
int
i,x,y,z;
for
(i1;i2)/*如果是閏年且月份大於2,總天數應該加一天*/
sum++;
printf("it
is
the
%dth
day.",sum);}
【程序4】
題目:輸入某年某月某日,判斷這一天是這一年的第幾天?
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:sum0;break;
case
2:sum31;break;
case
3:sum59;break;
case
4:sum90;break;
case
5:sum120;break;
case
6:sum151;break;
case
7:sum181;break;
case
8:sum212;break;
case
9:sum243;break;
case
10:sum273;break;
case
11:sum304;break;
case
12:sum334;break;
default:printf("data
error");break;
}
sumsum+day;
/*再加上某天的天數*/
if(year%4000||(year%40&&year%100!0))/*判斷是不是閏年*/
leap1;
else
leap0;
if(leap1&&month>2)/*如果是閏年且月份大於2,總天數應該加一天*/
sum++;
printf("It
is
the
%dth
day.",sum);}
【程序5】
題目:輸入三個整數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)
{tx;xy;yt;}
/*交換x,y的值*/
if(x>z)
{tz;zx;xt;}/*交換x,z的值*/
if(y>z)
{ty;yz;zt;}/*交換z,y的值*/
printf("small
to
big:
%d
%d
%d\n",x,y,z);
}
【程序6】
題目:用*號輸出字母c的圖案.
1.程序分析:可先用'*'號在紙上寫出字母c,再分行輸出.
2.程序源代碼:
#include
"stdio.h"
main()
{
printf("hello
c-world!\n");
printf("
****\n");
printf("
*\n");
printf("
*
\n");
printf("
****\n");
}
【程序7】
題目:輸出特殊圖案,請在c環境中運行,看一看,very
beautiful!
1.程序分析:字元共有256個.不同字元,圖形不一樣.
2.程序源代碼:
#include
"stdio.h"
main()
{
char
a176,b219;
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);}
【程序8】
題目:輸出9*9口訣.
1.程序分析:分行與列考慮,共9行9列,i控制行,j控制列.
2.程序源代碼:
#include
"stdio.h"
main()
{
int
i,j,result;
printf("\n");
for
(i1;i<10;i++)
{
for(j1;j<10;j++)
{
resulti*j;
printf("%d*%d%-3d",i,j,result);/*-3d表示左對齊,佔3位*/
}
printf("\n");/*每一行後換行*/
}
}
【程序9】
題目:要求輸出國際象棋棋盤.
1.程序分析:用i控制行,j來控制列,根據i+j的和的變化來控制輸出黑方格,還是白方格.
2.程序源代碼:
#include
"stdio.h"
main()
{
int
i,j;
for(i0;i<8;i++)
{
for(j0;j<8;j++)
if((i+j)%20)
printf("%c%c",219,219);
else
printf("
");
printf("\n");
}
}
【程序10】
題目:列印樓梯,同時在樓梯上方列印兩個笑臉.
1.程序分析:用i控制行,j來控制列,j根據i的變化來控制輸出黑方格的個數.
2.程序源代碼:
#include
"stdio.h"
main()
{
int
i,j;
printf("\1\1\n");/*輸出兩個笑臉*/
for(i1;i<11;i++)
{
for(j1;j<i;j++)
printf("%c%c",219,219);
printf("\n");
}
}
【程序11】
題目:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月
後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少
1.程序分析:
兔子的規律為數列1,1,2,3,5,8,13,21....
2.程序源代碼:
main()
{
long
f1,f2;
int
i;
f1f21;
for(i1;i<20;i++)
{
printf("%12ld
%12ld",f1,f2);
if(i%20)
printf("\n");/*控制輸出,每行四個*/
f1f1+f2;
/*前兩個月加起來賦值給第三個月*/
f2f1+f2;
/*前兩個月加起來賦值給第三個月*/
}
}
【程序12】
題目:判斷101-200之間有多少個素數,並輸出所有素數.
1.程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,
則表明此數不是素數,反之是素數.
2.程序源代碼:
#include
"math.h"
main()
{
int
m,i,k,h0,leap1;
printf("\n");
for(m101;m<200;m++)
{
ksqrt(m+1);
for(i2;i<k;i++)
if(m%i0)
{leap0;break;}
if(leap)
{printf("%-4d",m);h++;
if(h%100)
printf("\n");
}
leap1;
}
printf("\nthe
total
is
%d",h);
}