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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

C语言经典程序100例

發(fā)布時(shí)間:2023/12/31 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言经典程序100例 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【程序1】

題目:古典問(wèn)題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子長(zhǎng)到第三個(gè)月

   后每個(gè)月又生一對(duì)兔子,假如兔子都不死,問(wèn)每個(gè)月的兔子總數(shù)為多少?

1.程序分析: 兔子的規(guī)律為數(shù)列1,1,2,3,5,8,13,21....

2.程序源代碼:

#include<stdio.h>

void main(){

???????? long f1,f2;???????????????????????????????????? //前兩個(gè)月的兔子數(shù)

???????? f1=f2=1;

???????? for(int i=1;i<=20;i++){???????????????????????? //i為月份

?????????????????? printf("%12ld %12ld ",f1,f2);

?????????????????? if(i%2==0) printf("\n");???? ???????? //每行輸出4個(gè)

?????????????????? f1=f1+f2;?????????????????? //前兩個(gè)月加起來(lái)賦值給第三個(gè)月

?????????????????? f2=f2+f1;

???????? }

}

/*

?????????? 1??????????? 1??????????? 2??????????? 3

?????????? 5??????????? 8?????????? 13?????????? 21

????????? 34?????????? 55?????????? 89????????? 144

???????? 233????????? 377????????? 610????????? 987

??????? 1597???????? 2584???????? 4181???????? 6765

?????? 10946??????? 17711??????? 28657??????? 46368

?????? 75025?????? 121393?????? 196418?????? 317811

????? 514229?????? 832040????? 1346269????? 2178309

???? 3524578????? 5702887????? 9227465???? 14930352

??? 24157817???? 39088169???? 63245986??? 102334155

Press any key to continue

*/

==============================================================

【程序2】

題目:判斷101-200之間有多少個(gè)素?cái)?shù),并輸出所有素?cái)?shù)。

1.程序分析:判斷素?cái)?shù)的方法:用一個(gè)數(shù)分別去除2到sqrt(這個(gè)數(shù)),如果能被整除,

      則表明此數(shù)不是素?cái)?shù),反之是素?cái)?shù)。       

2.程序源代碼:

#include<stdio.h>

#include<math.h>

void main(){

???????? int k=0,leap=1;

???????? for(int n=101;n<=200;n++){????????????? //101--200

?????????????????? for(int i=2;i<=sqrt(n);i++){???????? //2--sqrt(i)

??????????????????????????? if(n%i==0){

???????????????????????????????????? leap=0;

???????????????????????????????????? break;

??????????????????????????? }

?????????????????? }

?????????????????? if(leap){

??????????????????????????? printf("%-4d",n);

??????????????????????????? k++;

??????????????????????????? if(k%10==0) printf("\n");

?????????????????? }

?????????????????? leap=1;

???????? }

???????? printf("\nThe total is %d\n",k);

}

/*

101 103 107 109 113 127 131 137 139 149

151 157 163 167 173 179 181 191 193 197

199

The total is 21

Press any key to continue

*/

==============================================================

【程序3】

題目:打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個(gè)三位數(shù),其各位數(shù)字立方和等于該數(shù)

   本身。例如:153是一個(gè)“水仙花數(shù)”,因?yàn)?53=1的三次方+5的三次方+3的三次方。

1.程序分析:利用for循環(huán)控制100-999個(gè)數(shù),每個(gè)數(shù)分解出個(gè)位,十位,百位。

2.程序源代碼:

#include<stdio.h>

void main(){

???????? int a,b,c;

???????? int n;

???????? printf("water flower'munber is: ");

???????? for(n=100;n<=999;n++){

?????????????????? a=n/100;? //百位

?????????????????? b=n%100/10;?? //十位

?????????????????? c=n%10;??????????? //個(gè)位

?????????????????? if(n=a*a*a+b*b*b+c*c*c){

??????????????????????????? printf("%5d ",n);

?????????????????? }

???????? }

???????? printf("\n");

}

/*

water flower'munber is:???? 1???? 8?? 729?? 370?? 371?? 378? 1099

Press any key to continue

*/

==============================================================

【程序4】

題目:將一個(gè)正整數(shù)分解質(zhì)因數(shù)。例如:輸入90,打印出90=2*3*3*5。

程序分析:對(duì)n進(jìn)行分解質(zhì)因數(shù),應(yīng)先找到一個(gè)最小的質(zhì)數(shù)k,然后按下述步驟完成:

(1)如果這個(gè)質(zhì)數(shù)恰等于n,則說(shuō)明分解質(zhì)因數(shù)的過(guò)程已經(jīng)結(jié)束,打印出即可。

(2)如果n<>k,但n能被k整除,則應(yīng)打印出k的值,并用n除以k的商,作為新的正整數(shù)你n,

 重復(fù)執(zhí)行第一步。

(3)如果n不能被k整除,則用k+1作為k的值,重復(fù)執(zhí)行第一步。

2.程序源代碼:

#include<stdio.h>

void main(){

???????? int n;

???????? printf("Please input a number: ");

???????? scanf("%d",&n);

???????? printf("%d= ",n);

???????? for(int i=2;i<=n;i++){

?????????????????? while(n!=i){

??????????????????????????? if(n%i==0){

???????????????????????????????????? printf("%d * ",i);

???????????????????????????????????? n=n/i;

??????????????????????????? }else

???????????????????????????????????? break;

?????????????????? }

???????? }

???????? printf("%d",n);

???????? printf("\n");

}

/*

Please input a number: 90

90= 2 * 3 * 3 * 5

Press any key to continue

*/

==============================================================

【程序5】

題目:利用條件運(yùn)算符的嵌套來(lái)完成此題:學(xué)習(xí)成績(jī)>=90分的同學(xué)用A表示,60-89分之間的用B表示,

   60分以下的用C表示。

1.程序分析:(a>b)?a:b這是條件運(yùn)算符的基本例子。

2.程序源代碼:

#include<stdio.h>

void main(){

???????? int score;

???????? char grade;

???????? printf("Please input a score: ");

???????? scanf("%d",&score);

???????? grade=score>=90?'A':(score>=60?'B':'C');

???????? printf("%d belongs to %c \n",score,grade);

}

/*

Please input a score: 91

91 belongs to A

Press any key to continue

?

Please input a score: 87

87 belongs to B

Press any key to continue

?

Please input a score: 50

50 belongs to C

Press any key to continue

*/

==============================================================

【程序6】

題目:輸入兩個(gè)正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù)。

1.程序分析:利用輾除法。

2.程序源代碼:

#include<stdio.h>

void main(){

???????? int m,n,temp,a,b;

???????? printf("Please input two numbers: ");

???????? scanf("%d %d",&m,&n);

???????? if(m<n){

?????????????????? temp=m;

?????????????????? m=n;

?????????????????? n=temp;

???????? }

???????? a=m;

???????? b=n;

???????? while(b!=0){

?????????????????? temp=a%b;

?????????????????? a=b;

???????? ???????? b=temp;

???????? }

???????? printf("最大公約數(shù)為:%d\n",a);

???????? printf("最小公倍數(shù)為:%d\n",n*m/a);

}

/*

Please input two numbers: 12 3

最大公約數(shù)為:3

最小公倍數(shù)為:12

Press any key to continue

*/

==============================================================

【程序7】

題目:輸入一行字符,分別統(tǒng)計(jì)出其中英文字母、空格、數(shù)字和其它字符的個(gè)數(shù)。

1.程序分析:利用while語(yǔ)句,條件為輸入的字符不為'\n'.

2.程序源代碼:

#include<stdio.h>

void main(){

???????? char c;

???????? int letters=0,space=0,digit=0,others=0;? //字母、空格、數(shù)字、其他字符

???????? 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: English letters=%d space=%d digit=%d others=%d\n",letters,space,digit,others);

}

/*

Please input some characters

QJ3409V3O TEU40T93EJT934 34erj%j*a4

all in all: English letters=16 space=2 digit=15 others=2

Press any key to continue

*/

==============================================================

【程序8】

題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個(gè)數(shù)字。例如2+22+222+2222+22222(此時(shí)

   共有5個(gè)數(shù)相加),幾個(gè)數(shù)相加有鍵盤控制。

1.程序分析:關(guān)鍵是計(jì)算出每一項(xiàng)的值。

2.程序源代碼:

#include<stdio.h>

void main(){

???????? int a,n,count=1;?? //數(shù)字a,n個(gè)數(shù)相加

???????? long sn=0,tn=0;

???????? printf("Please input a and 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+...=%d\n",sn);

}

/*

Please input a and n: 3 4

a=3,n=4

a+aa+...=3702

Press any key to continue

*/

==============================================================

【程序9】

題目:一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)數(shù)就稱為“完數(shù)”。例如6=1+2+3.編程

   找出1000以內(nèi)的所有完數(shù)。

1. 程序分析:請(qǐng)參照程序<--上頁(yè)程序14.

2.程序源代碼:

#include<stdio.h>

void main(){

???????? int k[10];

???????? int n,s,i,m;

???????? for(n=2;n<1000;n++){

?????????????????? i=-1;

?????????????????? s=n;

?????????????????? for(m=1;m<n;m++){

??????????????????????????? if(n%m==0){

???????????????????????????????????? i++;

???????????????????????????????????? s=s-m;

???????????????????????????????????? k[i]=m;

??????????????????????????? }

?????????????????? }

?????????????????? if(s==0){

??????????????????????????? printf("%d is a wanshu\n",n);

?????????????????? }

???????? }

}

/*

6 is a wanshu

28 is a wanshu

496 is a wanshu

Press any key to continue

*/

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次落地時(shí),共經(jīng)過(guò)多少米?第10次反彈多高?

1.程序分析:見下面注釋

2.程序源代碼:

#include<stdio.h>

void main(){

???????? float sn=100.0,hn=sn/2;

???????? int n;

???????? for(n=2;n<=10;n++){

?????????????????? sn=sn+2*hn;????????????? //第n次落地時(shí)共經(jīng)過(guò)的米數(shù)

?????????????????? hn=sn/2;??????????? //第n次反彈高度

???????? }

???????? printf("the total of road is %f \n",sn);

???????? printf("the tenth is %f meters\n",hn);

}

/*

the total of road is 51200.000000

the tenth is 25600.000000 meters

Press any key to continue

*/

=============================================================

【程序11】

題目:有1、2、3、4個(gè)數(shù)字,能組成多少個(gè)互不相同且無(wú)重復(fù)數(shù)字的三位數(shù)?都是多少?

1.程序分析:可填在百位、十位、個(gè)位的數(shù)字都是1、2、3、4。組成所有的排列后再去掉不滿足條件的排列。

2.程序源代碼:

#include<stdio.h>

void main(){

???????? int i,j,k;

???????? int n=0;

???????? for(i=1;i<=4;i++){? //以下為三重循環(huán)

?????????????????? for(j=1;j<=4;j++){

??????????????????????????? for(k=1;k<=4;k++){

???????????????????????????????????? if(i!=j&&j!=k&&i!=k){? //排除i、j、k相同的情況

?????????????????????????????????????????????? printf("%d,%d,%d???? ",i,j,k);

?????????????????????????????????????????????? printf("the number is %d%d%d\n",i,j,k);

?????????????????????????????????????????????? n++;

???????????????????????????????????? }

??????????????????????????? }

?????????????????? }

???????? }

???????? printf("\nA total of number is %d\n",n);

}

/*

1,2,3???? the number is 123

1,2,4???? the number is 124

1,3,2???? the number is 132

1,3,4???? the number is 134

1,4,2???? the number is 142

1,4,3???? the number is 143

2,1,3???? the number is 213

2,1,4???? the number is 214

2,3,1???? the number is 231

2,3,4???? the number is 234

2,4,1???? the number is 241

2,4,3???? the number is 243

3,1,2???? the number is 312

3,1,4???? the number is 314

3,2,1???? the number is 321

3,2,4???? the number is 324

3,4,1???? the number is 341

3,4,2???? the number is 342

4,1,2???? the number is 412

4,1,3???? the number is 413

4,2,1???? the number is 421

4,2,3???? the number is 423

4,3,1???? the number is 431

4,3,2???? the number is 432

?

A total of number is 24

Press any key to continue

*/

==============================================================

【程序12】

題目:企業(yè)發(fā)放的獎(jiǎng)金根據(jù)利潤(rùn)提成。利潤(rùn)(I)低于或等于10萬(wàn)元時(shí),獎(jiǎng)金可提10%;利潤(rùn)高于10萬(wàn)元,低于20萬(wàn)元時(shí),低于10萬(wàn)元的部分按10%提成,高于10萬(wàn)元的部分,可可提成7.5%;20萬(wàn)到40萬(wàn)之間時(shí),高于20萬(wàn)元的部分,可提成5%;40萬(wàn)到60萬(wàn)之間時(shí)高于40萬(wàn)元的部分,可提成3%;60萬(wàn)到100萬(wàn)之間時(shí),高于60萬(wàn)元的部分,可提成1.5%,高于100萬(wàn)元時(shí),超過(guò)100萬(wàn)元的部分按1%提成,從鍵盤輸入當(dāng)月利潤(rùn)I,求應(yīng)發(fā)放獎(jiǎng)金總數(shù)?

1.程序分析:請(qǐng)利用數(shù)軸來(lái)分界,定位。注意定義時(shí)需把獎(jiǎng)金定義成長(zhǎng)整型。      

2.程序源代碼:

#include<stdio.h>

void main(){

???????? long int i;

???????? int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;

???????? printf("Please input the profit I:");

???????? 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\n",bonus);

}

/*

Please input the profit I:340000

bonus=24500

Press any key to continue

*/

==============================================================

【程序13】

題目:一個(gè)整數(shù),它加上100后是一個(gè)完全平方數(shù),再加上168又是一個(gè)完全平方數(shù),請(qǐng)問(wèn)該數(shù)是多少?

1.程序分析:在10萬(wàn)以內(nèi)判斷,先將該數(shù)加上100后再開方,再將該數(shù)加上268后再開方,如果開方后的結(jié)果滿足如下條件,即是結(jié)果。請(qǐng)看具體分析:

2.程序源代碼:

#include<stdio.h>

#include<math.h>

void main(){

???????? long int i,x,y;

???????? for(i=1;i<100000;i++){

?????????????????? x=sqrt(i+100);//x為加上100后開方后的結(jié)果

?????????????????? y=sqrt(i+268);//y為再加上168后開方后的結(jié)果

?????????????????? if(x*x==i+100&&y*y==i+268)//如果一個(gè)數(shù)的平方根的平方等于該數(shù),這說(shuō)明此數(shù)是完全平方數(shù)

??????????????????????????? printf("the number is %ld\n",i);

???????? }

}

/*

the number is 21

the number is 261

the number is 1581

Press any key to continue

*/

==============================================================

【程序14】

題目:輸入某年某月某日,判斷這一天是這一年的第幾天?

1.程序分析:以3月5日為例,應(yīng)該先把前兩個(gè)月的加起來(lái),然后再加上5天即本年的第幾天,特殊情況,閏年且輸入月份大于3時(shí)需考慮多加一天。

2.程序源代碼:

#include<stdio.h>

void main(){

???????? int day,month,year,sum,leap;

???????? printf("Please input year,month,day: ");

???????? scanf("%d %d %d",&year,&month,&day);

???????? switch(month){ //先計(jì)算某月以前月份的總天數(shù)

?????????????????? 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;? //再加上某天的天數(shù)

???????? if((year%4==0&&year%100!=0)||(year%400==0)) //判斷是否是閏年

?????????????????? leap=1;

???????? else

?????????????????? leap=0;

???????? if(leap==1&&month>2)???? //如果是閏年且月份大于2,總天數(shù)應(yīng)該加一天

?????????????????? sum++;

???????? printf("It is the %dth day.\n",sum);

}

/*

Please input year,month,day: 2019 3 1

It is the 60th day.

Press any key to continue

*/

==============================================================

【程序15】

題目:輸入三個(gè)整數(shù)x,y,z,請(qǐng)把這三個(gè)數(shù)由小到大輸出。

1.程序分析:我們想辦法把最小的數(shù)放到x上,先將x與y進(jìn)行比較,如果x>y則將x與y的值進(jìn)行交換,然后再用x與z進(jìn)行比較,如果x>z則將x與z的值進(jìn)行交換,這樣能使x最小。

2.程序源代碼:

#include<stdio.h>

void main(){

???????? int x,y,z,temp;

???????? printf("Please input three numbers:");

???????? scanf("%d %d %d",&x,&y,&z);

???????? if (x>y){?? //交換x,y的值

?????????????????? temp=x;

???????? ???????? x=y;

?????????????????? y=temp;

???????? }

???????? if(x>z){???? //交換x,z的值

?????????????????? temp=x;

?????????????????? x=z;

?????????????????? z=temp;

???????? }

???????? if(y>z){???? //交換z,y的值

?????????????????? temp=y;

?????????????????? y=z;

?????????????????? z=temp;

???????? }

???????? printf("small to big: %d %d %d\n",x,y,z);

}

/*

Please input three numbers:34 13 23

small to big: 13 23 34

Press any key to continue

*/

==============================================================

【程序16】

題目:用*號(hào)輸出字母C的圖案。

1.程序分析:可先用'*'號(hào)在紙上寫出字母C,再分行輸出。

2.程序源代碼:

#include <stdio.h>

void main(){

???????? printf("Hello C-world!\n");

???????? printf(" ****\n");

???????? printf(" *\n");

???????? printf(" * \n");

???????? printf(" ****\n");

}

/*

Hello C-world!

?****

?*

?*

?****

Press any key to continue

*/

==============================================================

【程序17】

題目:輸出特殊圖案,請(qǐng)?jiān)赾環(huán)境中運(yùn)行,看一看,Very Beautiful!

1.程序分析:字符共有256個(gè)。不同字符,圖形不一樣。      

2.程序源代碼:

#include <stdio.h>

void main(){

???????? char a=32,b=64;

???????? 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);

}

/*

@?? @

?@ @

? @

?@ @

@?? @

Press any key to continue

*/

==============================================================

【程序18】

題目:輸出9*9口訣。

1.程序分析:分行與列考慮,共9行9列,i控制行,j控制列。

2.程序源代碼:

#include <stdio.h>

void main(){

???????? int i,j,result;

???????? for (i=1;i<=9;i++){

?????????????????? for(j=1;j<=9;j++){

??????????????????????????? result=i*j;

??????????????????????????? printf("%d*%d=%-3d",i,j,result);//-3d表示左對(duì)齊,占3位

?????????????????? }

?????????????????? printf("\n"); //每一行后換行

???????? }

}

/*

1*1=1? 1*2=2? 1*3=3? 1*4=4? 1*5=5? 1*6=6? 1*7=7? 1*8=8? 1*9=9

2*1=2? 2*2=4? 2*3=6? 2*4=8? 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18

3*1=3? 3*2=6? 3*3=9? 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27

4*1=4? 4*2=8? 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36

5*1=5? 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45

6*1=6? 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54

7*1=7? 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63

8*1=8? 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72

9*1=9? 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81

Press any key to continue

*/

==============================================================

【程序19】

題目:要求輸出國(guó)際象棋棋盤。

1.程序分析:用i控制行,j來(lái)控制列,根據(jù)i+j的和的變化來(lái)控制輸出黑方格,還是白方格。

2.程序源代碼:

#include<stdio.h>

void 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");

???????? }

}

/*壙 壙 壙 壙

?壙 壙 壙 壙

壙 壙 壙 壙

?壙 壙 壙 壙

壙 壙 壙 壙

?壙 壙 壙 壙

壙 壙 壙 壙

?壙 壙 壙 壙

Press any key to continue

*/

==============================================================

【程序20】

題目:打印樓梯,同時(shí)在樓梯上方打印兩個(gè)笑臉。

1.程序分析:用i控制行,j來(lái)控制列,j根據(jù)i的變化來(lái)控制輸出黑方格的個(gè)數(shù)。

2.程序源代碼:

#include<stdio.h>

void main(){

???????? int i,j;

???????? printf("\1\1\n"); //輸出兩個(gè)笑臉

???????? for(i=1;i<11;i++){

?????????????????? for(j=1;j<=i;j++){

??????????????????????????? printf("%c%c",219,219);

?????????????????? }

?????????????????? printf("\n");

???????? }

}

/*

..

壙壙

壙壙壙

壙壙壙壙

壙壙壙壙壙

壙壙壙壙壙壙

壙壙壙壙壙壙壙

壙壙壙壙壙壙壙壙

壙壙壙壙壙壙壙壙壙

壙壙壙壙壙壙壙壙壙壙

Press any key to continue

*/

============================================================

【程序21】

題目:猴子吃桃問(wèn)題:猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不癮,又多吃了一個(gè)

   第二天早上又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天早上都吃了前一天剩下

   的一半零一個(gè)。到第10天早上想再吃時(shí),見只剩下一個(gè)桃子了。求第一天共摘了多少。

1.程序分析:采取逆向思維的方法,從后往前推斷。

2.程序源代碼:

#include<stdio.h>

void main(){

???????? int day,x1,x2=1;

???????? for(day=9;day>0;day--){

?????????????????? x1=(x2+1)*2;? //第一天的桃子數(shù)是第2天桃子數(shù)加1后的2倍

?????????????????? x2=x1;

???????? }

???????? printf("the total is %d\n",x1);

}

/*

the total is 1534

Press any key to continue

*/

==============================================================

【程序22】

題目:兩個(gè)乒乓球隊(duì)進(jìn)行比賽,各出三人。甲隊(duì)為a,b,c三人,乙隊(duì)為x,y,z三人。已抽簽決定

   比賽名單。有人向隊(duì)員打聽比賽的名單。a說(shuō)他不和x比,c說(shuō)他不和x,z比,請(qǐng)編程序找出

   三隊(duì)賽手的名單。

1.程序分析:判斷素?cái)?shù)的方法:用一個(gè)數(shù)分別去除2到sqrt(這個(gè)數(shù)),如果能被整除,

      則表明此數(shù)不是素?cái)?shù),反之是素?cái)?shù)。       

2.程序源代碼:

#include<stdio.h>

void main(){

???????? char i,j,k;? //i是a的對(duì)手,j是b的對(duì)手,k是c的對(duì)手

???????? 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);

?????????????????????????????????????????????? }

???????????????????????????????????? }

??????????????????????????? }

?????????????????? }

???????? }

}

/*

order is a--z?? b--x??? c--y

Press any key to continue

*/

==============================================================

【程序23】

題目:打印出如下圖案(菱形)

?

*

***

******

********

******

***

*

1.程序分析:先把圖形分成兩部分來(lái)看待,前四行一個(gè)規(guī)律,后三行一個(gè)規(guī)律,利用雙重

      for循環(huán),第一層控制行,第二層控制列。

2.程序源代碼:

#include<stdio.h>

void 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");

???????? }

}

/*

?? *

? ***

?*****

*******

?*****

? ***

?? *

Press any key to continue

*/

==============================================================

【程序24】

題目:有一分?jǐn)?shù)序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個(gè)數(shù)列的前20項(xiàng)之和。

1.程序分析:請(qǐng)抓住分子與分母的變化規(guī)律。

2.程序源代碼:

#include<stdio.h>

void main(){

???????? int n,t;

???????? float a=2,b=1,s=0;

???????? for(n=1;n<=20;n++){

?????????????????? s=s+a/b;

?????????????????? t=a;

?????????????????? a=a+b;

?????????????????? b=t;

???????? }

???????? printf("sum is %9.6f\n",s);

}

/*

sum is 32.660259

Press any key to continue

*/

==============================================================

【程序25】

題目:求1+2!+3!+...+20!的和

1.程序分析:此程序只是把累加變成了累乘。

2.程序源代碼:

#include<stdio.h>

void 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);

}

/*

1+2!+3!...+20!=2.561327e+018

Press any key to continue

*/

==============================================================

【程序26】

題目:利用遞歸方法求5!。

1.程序分析:遞歸公式:fn=fn_1*4!

2.程序源代碼:

#include<stdio.h>

int fact(int j){

???????? int sum;

???????? if(j==0)

?????????????????? sum=1;

???????? else

?????????????????? sum=j*fact(j-1);

???????? return sum;

}

void main(){

???????? int i;

???????? int fact(int);

???????? for(i=0;i<6;i++)

?????????????????? printf(" %d!=%d\n",i,fact(i));

}

/*

?0!=1

?1!=1

?2!=2

?3!=6

?4!=24

?5!=120

Press any key to continue

*/

==============================================================

【程序27】

題目:利用遞歸函數(shù)調(diào)用方式,將所輸入的5個(gè)字符,以相反順序打印出來(lái)。

1.程序分析:

2.程序源代碼:

#include<stdio.h>

void main(){

???????? int i=5;

???????? void palin(int n);

???????? printf("Please input five characters: ");

???????? palin(i);

???????? printf("\n");

}

void palin(int n){

???????? char next;

???????? if(n<=1){

?????????????????? next=getchar();

?????????????????? printf("the opposite characters is: ");

?????????????????? putchar(next);

???????? }

???????? else{

?????????????????? next=getchar();

?????????????????? palin(n-1);

?????????????????? putchar(next);

???????? }

}

/*

Please input five characters: rterd

the opposite characters is: dretr

Press any key to continue

*/

==============================================================

【程序28】

題目:有5個(gè)人坐在一起,問(wèn)第五個(gè)人多少歲?他說(shuō)比第4個(gè)人大2歲。問(wèn)第4個(gè)人歲數(shù),他說(shuō)比第

   3個(gè)人大2歲。問(wèn)第三個(gè)人,又說(shuō)比第2人大兩歲。問(wèn)第2個(gè)人,說(shuō)比第一個(gè)人大兩歲。最后

   問(wèn)第一個(gè)人,他說(shuō)是10歲。請(qǐng)問(wèn)第五個(gè)人多大?

1.程序分析:利用遞歸的方法,遞歸分為回推和遞推兩個(gè)階段。要想知道第五個(gè)人歲數(shù),需知道

      第四人的歲數(shù),依次類推,推到第一人(10歲),再往回推。

2.程序源代碼:

#include<stdio.h>

age(int n){

???????? int c;

???????? if(n==1)

?????????????????? c=10;

???????? else

?????????????????? c=age(n-1)+2;

???????? return c;

}

void main(){

???????? printf("the age of the five is: %d\n",age(5));

}

/*

the age of the five is: 18

Press any key to continue

*/

==============================================================

【程序29】

題目:給一個(gè)不多于5位的正整數(shù),要求:一、求它是幾位數(shù),二、逆序打印出各位數(shù)字。

1. 程序分析:學(xué)會(huì)分解出每一位數(shù),如下解釋:(這里是一種簡(jiǎn)單的算法,師專數(shù)002班趙鑫提供)

2.程序源代碼:

#include<stdio.h>

void main( ){

???????? long a,b,c,d,e,x;

???????? printf("Please input the number: ");

???????? scanf("%ld",&x);

???????? a=x/10000;??????????????? //分解出萬(wàn)位

???????? b=x%10000/1000;?? //分解出千位

???????? c=x%1000/100;???????????????? //分解出百位

???????? d=x%100/10;??????????? //分解出十位

???????? e=x%10;??????????? //分解出個(gè)位

???????? 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);

}

/*

Please input the number: 23458

there are 5,? 8 5 4 3 2

Press any key to continue

*/

==============================================================

【程序30】

題目:一個(gè)5位數(shù),判斷它是不是回文數(shù)。即12321是回文數(shù),個(gè)位與萬(wàn)位相同,十位與千位相同。   

1.程序分析:同29例

2.程序源代碼:

#include<stdio.h>

void main( ){

???????? long ge,shi,qian,wan,x;

???????? printf("Please input a number: ");

???????? scanf("%ld",&x);

???????? wan=x/10000;

???????? qian=x%10000/1000;

???????? shi=x%100/10;

???????? ge=x%10;

???????? if (ge==wan&&shi==qian)? //個(gè)位等于萬(wàn)位并且十位等于千位

?????????????????? printf("this number is a huiwen.\n");

???????? else

?????????????????? printf("this number is not a huiwen.\n");

}

/*

Please input a number: 24542

this number is a huiwen.

Press any key to continue

*/

=============================================================

【程序31】

題目:請(qǐng)輸入星期幾的第一個(gè)字母來(lái)判斷一下是星期幾,如果第一個(gè)字母一樣,則繼續(xù)判斷第二個(gè)字母。

1.程序分析:用情況語(yǔ)句比較好,如果第一個(gè)字母一樣,則判斷用情況語(yǔ)句或if語(yǔ)句判斷第二個(gè)字母。

2.程序源代碼:

#include <stdio.h>

void main(){

???????? char letter1,letter2;

???????? printf("please input the first letter of someday: ");

???????? scanf("%c",&letter1);

???????? getchar();

???????? switch (letter1){

?????????????????? case 'M':printf("Monday\n");break;

?????????????????? case 'W':printf("Wednesday\n");break;

?????????????????? case 'F':printf("Friday\n");break;

?????????????????? case 'S':

??????????????????????????? printf("please input the second letter: ");

??????????????????????????? if((letter2=getchar())=='a')

???????????????????????????????????? printf("Saturday\n");

??????????????????????????? else if((letter2=getchar())=='u')

???????????????????????????????????? printf("Sunday\n");

??????????????????????????? else

???????????????????????????????????? printf("data error\n");

??????????????????????????? break;

?????????????????? case 'T':

??????????????????????????? printf("please input second letter: ");

??????????????????????????? if((letter2=getchar())=='u')

???????????????????????????????????? printf("Tuesday\n");

??????????????????????????? else if((letter2=getchar())=='h')

???????????????????????????????????? printf("Thursday\n");

??????????????????????????? else

???????????????????????????????????? printf("data error\n");

??????????????????????????? break;

?????????????????? default: printf("data error\n");

???????? }

}

/*

please input the first letter of someday: S

please input the second letter: a

Saturday

Press any key to continue

*/

#include <stdio.h>

void main()

{

char letter;

printf("please input the first letter of someday\n");

while ((letter=getch())!='Y')/*當(dāng)所按字母為Y時(shí)才結(jié)束*/

{ 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.程序分析:

textbackground() 文本背景函數(shù)

功能: 函數(shù)textbackground()設(shè)置字符屏幕下文本背景顏色(或字符背景顏色)。

用法: 此函數(shù)調(diào)用方式為void textbackground(int bcolor);

說(shuō)明: 參數(shù)bcolor 的有效值取表1-4背景顏色(即宏名)或等價(jià)值。

表1-4 背景顏色與等價(jià)值

-------------------------------------------------

? 背景顏色 等價(jià)值 含 義

-------------------------------------------------

? BLACK 0 黑

? BLUE 1 藍(lán)

? GREEN 2 綠

? CYAN 3 青

? RED 4 紅

? MAGENTA 5 洋紅

? BROWN 6 棕

-------------------------------------------------

調(diào)用該函數(shù)只影響后續(xù)寫的字符背景顏色,而不改變當(dāng)前顯示在屏幕上的字符背景顏色。

? 這個(gè)函數(shù)對(duì)應(yīng)的頭文件是conio.h

返回值: 無(wú)

例: 設(shè)置文本背景顏色為藍(lán)色:

? textbackground(BLUE));

?

[我的疑問(wèn)]:

1 我該如何做才能實(shí)現(xiàn)“Press any key to change color”的功能;

2 在VC++6.0中運(yùn)行,這種顏色變化在哪可以體現(xiàn)呢?

3 textbackground(BLUE));

[解決方案]

這個(gè)TC是支持的GDI,你放VC上跑有什么用

[解決方案]

vc6.0不支持TC下的圖形相關(guān)的編程的,像#include都是不行的。

如果非要用,考慮boost庫(kù)(但非標(biāo)準(zhǔn)庫(kù),需另行安裝!)

轉(zhuǎn)            

2.程序源代碼:

#include <conio.h>

#include <stdio.h>

void main(){

???????? int color;

???????? for(color=0;color<8;color++){

?????????????????? textbackground(color);//設(shè)置文本的背景顏色

?????????????????? cprintf("This is color %d\n",color);

?????????????????? cprintf("Press any key to continue\r\n");

?????????????????? getchar();? //輸入字符看不見

???????? }

}

==============================================================

【程序33】

題目:學(xué)習(xí)gotoxy()與clrscr()函數(shù)

1.程序分析:

2.程序源代碼:

#include <conio.h>

void main(){

???????? clrscr();?????????????? //清屏函數(shù)

???????? textbackground(2);

???????? gotoxy(1, 5);???? //定位函數(shù)

???????? cprintf("Output at row 5 column 1\n");

???????? textbackground(3);

???????? gotoxy(20, 10);

???????? cprintf("Output at row 10 column 20\n");

}

==============================================================

【程序34】

題目:練習(xí)函數(shù)調(diào)用

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();? //調(diào)用此函數(shù)

}

void main(void){

???????? three_hellos();??????????? //調(diào)用此函數(shù)

}

/*

Hello, world!

Hello, world!

Hello, world!

Press any key to continue

*/

==============================================================

【程序35】

題目:文本顏色設(shè)置

1.程序分析:

2.程序源代碼:

#include <conio.h>

void main(void){

???????? int color;

???????? for (color = 1; color < 16; color++){

?????????????????? textcolor(color);? //設(shè)置文本顏色

?????????????????? cprintf("This is color %d\r\n", color);

???????? }

???????? textcolor(128 + 15);

???????? cprintf("This is blinking\r\n");

}

==============================================================

【程序36】

題目:求100之內(nèi)的素?cái)?shù)   

1.程序分析:

2.程序源代碼:

#include <stdio.h>

#include <math.h>

#define N 101

void 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&&a[j]%a[i]==0)

???????????????????????????????????? a[j]=0;

?????????????????? }

???????? }

???????? for(i=2,line=0;i<N;i++){

?????????????????? if(a[i]!=0){

??????????????????????????? printf("%5d",a[i]);

??????????????????????????? line++;

?????????????????? }

?????????????????? if(line==10){??? //十個(gè)數(shù)換行

??????????????????????????? printf("\n");

??????????????????????????? line=0;

?????????????????? }

???????? }

???????? printf("\n");

}

/*

??? 2??? 3 ???5??? 7?? 11?? 13?? 17?? 19?? 23?? 29

?? 31?? 37?? 41?? 43?? 47?? 53?? 59?? 61?? 67?? 71

?? 73?? 79?? 83?? 89?? 97

Press any key to continue

*/

==============================================================

【程序37】

題目:對(duì)10個(gè)數(shù)進(jìn)行排序

1.程序分析:可以利用選擇法,即從后9個(gè)比較過(guò)程中,選擇一個(gè)最小的與第一個(gè)元素交換,

      下次類推,即用第二個(gè)元素與后8個(gè)進(jìn)行比較,并進(jìn)行交換。       

2.程序源代碼:

#include <stdio.h>

#define N 10

void main(){

???????? int i,j,min,tem,a[N];

???????? /*input data*/

???????? printf("please input ten number: \n");

???????? for(i=0;i<N;i++){

?????????????????? scanf("%d",&a[i]);

???????? }

???????? printf("\n");

???????? printf("before sorted \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]);

???????? printf("\n");

}

/*

please input ten number:

5 4 8 7 0 9 4 6 2 1

?

before sorted

??? 5??? 4??? 8??? 7??? 0??? 9??? 4??? 6??? 2??? 1

After sorted

??? 0??? 1??? 2??? 4??? 4??? 5??? 6??? 7??? 8??? 9

Press any key to continue

*/

==============================================================

【程序38】

題目:求一個(gè)3*3矩陣對(duì)角線元素之和

1.程序分析:利用雙重for循環(huán)控制輸入二維數(shù)組,再將a[i][i]累加后輸出。

2.程序源代碼:

#include <stdio.h>

void 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];

???????? printf("The sum of duijiaoxian is %6.2f.\n",sum);

}

/*

please input rectangle element:

6 5 4 8 7 9 3 0 1 2

The sum of duijiaoxian is? 14.00.

Press any key to continue

*/

==============================================================

【程序39】

題目:有一個(gè)已經(jīng)排好序的數(shù)組。現(xiàn)輸入一個(gè)數(shù),要求按原來(lái)的規(guī)律將它插入數(shù)組中。

1. 程序分析:首先判斷此數(shù)是否大于最后一個(gè)數(shù),然后再考慮插入中間的數(shù)的情況,插入后

     此元素之后的數(shù),依次后移一個(gè)位置。

2.程序源代碼:

#include <stdio.h>

void 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("%5d",a[i]);

???????? }

???????? printf("\n");

}

/*

original array is:

??? 1??? 4??? 6??? 9?? 13?? 16?? 19?? 28?? 40? 100

insert a new number: 11

??? 1??? 4??? 6??? 9?? 11?? 13?? 16?? 19?? 28?? 40? 100

Press any key to continue

*/

==============================================================

【程序40】

題目:將一個(gè)數(shù)組逆序輸出。

1.程序分析:用第一個(gè)與最后一個(gè)交換。

2.程序源代碼:

#include <stdio.h>

#define N 10

void main(){

???????? int a[N]={9,6,5,4,1,8,9,6,4,2},i,temp;

???????? printf(" 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]);

???????? printf("\n");

}

/*

?original array:

?? 9?? 6?? 5?? 4?? 1?? 8?? 9?? 6?? 4?? 2

?sorted array:

?? 2?? 4?? 6?? 9?? 8?? 1?? 4?? 5?? 6?? 9

Press any key to continue

*/

==============================================================

【程序41】

題目:學(xué)習(xí)static定義靜態(tài)變量的用法   

#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();

}

/*

?:var equal 0

?:static var equal 0

?

?:var equal 0

?:static var equal 1

?

?:var equal 0

?:static var equal 2

?

Press any key to continue

*/

==============================================================

【程序42】

題目:學(xué)習(xí)使用auto定義變量的用法

2.程序源代碼:

#include <stdio.h>

void main(){

???????? int i,num;

???????? num=2;

???????? for (i=0;i<3;i++){

?????????????????? printf(" The num equal %d \n",num);

?????????????????? num++;

?????????????????? {

??????????????????????????? auto int num=1;

??????????????????????????? printf(" The internal block num equal %d\n",num);

??????????????????????????? num++;

?????????????????? }

???????? }

}

/*

?The num equal 2

?The internal block num equal 1

?The num equal 3

?The internal block num equal 1

?The num equal 4

?The internal block num equal 1

Press any key to continue

==============================================================

【程序43】

題目:學(xué)習(xí)使用static的另一用法。   

2.程序源代碼:

#include <stdio.h>

void main(){

???????? int i,num;

???????? num=2;

???????? for(i=0;i<3;i++){

?????????????????? printf(" The num equal %d \n",num);

?????????????????? num++;

?????????????????? {

??????????????????????????? static int num=1;

??????????????????????????? printf(" The internal block num equal %d\n",num);

??????????????????????????? num++;

?????????????????? }

???????? }

}

/*

?The num equal 2

?The internal block num equal 1

?The num equal 3

?The internal block num equal 2

?The num equal 4

?The internal block num equal 3

Press any key to continue

*/

==============================================================

【程序44】

題目:學(xué)習(xí)使用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);

}

/*

The value of c is equal to 7

Press any key to continue

*/

==============================================================

【程序45】

題目:學(xué)習(xí)使用register定義變量的方法。

1.程序分析:

2.程序源代碼:

#include <stdio.h>

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命令練習(xí)(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(" Program will stop if input value less than 50.\n");

???????? while(again){

?????????????????? printf(" Please input number==>");

?????????????????? scanf("%d",&num);

?????????????????? printf(" The square for this number is %d \n",SQ(num));

?????????????????? if(num>=50)

??????????????????????????? again=TRUE;

?????????????????? else

??????????????????????????? again=FALSE;

???????? }

}

/*

?Program will stop if input value less than 50.

?Please input number==>54

?The square for this number is 2916

?Please input number==>32

?The square for this number is 1024

Press any key to continue

*/

==============================================================

【程序47】

題目:宏#define命令練習(xí)(2)

1.程序分析:            

2.程序源代碼:

#include <stdio.h>

#define exchange(a,b){int t;t=a;a=b;b=t;}

void main(){

???????? int x=10;

???????? int y=20;

???????? printf("x=%d; y=%d\n",x,y);

???????? exchange(x,y);

???????? printf("x=%d; y=%d\n",x,y);

}

/*

x=10; y=20

x=20; y=10

Press any key to continue

*/

==============================================================

【程序48】

題目:宏#define命令練習(xí)(3)   

1.程序分析:

2.程序源代碼:

#include <stdio.h>

#define LAG >

#define SMA <

#define EQ ==

#include <stdio.h>

void main(){

???????? int i=10;

???????? int j=20;

???????? if(i LAG j)

?????????????????? printf(" %d larger than %d \n",i,j);

???????? else if(i EQ j)

?????????????????? printf(" %d equal to %d \n",i,j);

???????? else if(i SMA j)

?????????????????? printf(" %d smaller than %d \n",i,j);

???????? else

?????????????????? printf(" No such value.\n");

}

/*

?10 smaller than 20

Press any key to continue

*/

==============================================================

【程序49】

題目:#if #ifdef和#ifndef的綜合應(yīng)用。

1. 程序分析:

2.程序源代碼:

#include <stdio.h>

#define MAX

#define MAXIMUM(x,y) (x>y)?x:y

#define MINIMUM(x,y) (x>y)?y:x

void main(){

???????? int a=10,b=20;

???????? #ifdef MAX

???????? printf(" The larger one is %d\n",MAXIMUM(a,b));

???????? #else

???????? printf(" The lower one is %d\n",MINIMUM(a,b));

???????? #endif

???????? #ifndef MIN

???????? printf(" The lower one is %d\n",MINIMUM(a,b));

???????? #else

???????? printf(" The larger one is %d\n",MAXIMUM(a,b));

???????? #endif

???????? #undef MAX

???????? #ifdef MAX

???????? printf(" The larger one is %d\n",MAXIMUM(a,b));

???????? #else

???????? printf(" The lower one is %d\n",MINIMUM(a,b));

???????? #endif

???????? #define MIN

???????? #ifndef MIN

???????? printf(" The lower one is %d\n",MINIMUM(a,b));

???????? #else

???????? printf(" The larger one is %d\n",MAXIMUM(a,b));

???????? #endif

}

/*

?The larger one is 20

?The lower one is 10

?The lower one is 10

?The larger one is 20

Press any key to continue

*/

3.補(bǔ)充

預(yù)編譯命令之 if、#if、#ifdef、#ifnde、#undef之間的區(qū)別

以#開頭的都是預(yù)編譯指令,就是在正式編譯之前,編譯器做一些預(yù)處理的工作;

一、?if 就是判斷語(yǔ)句,不是預(yù)編譯指令

二、#if

#if 條件語(yǔ)句
程序段1
??????? ?//如果條件語(yǔ)句成立,那么就編譯程序段1??
#endif
程序段2??????? //如果條件不語(yǔ)句成立,那么就編譯程序段2

三、#ifdef

#ifdef x??????????????//先測(cè)試x是否被宏定義過(guò)??
程序段1????????????//如果x被宏定義過(guò),那么就編譯程序段1??
#endif?
程序段2??????????? //如果x沒有被定義過(guò)則編譯程序段2的語(yǔ)句,“忽視”程序段1。

四、#ifndef
#ifndef x
????????????????? //先測(cè)試x是否被宏定義過(guò)??
#define?? 程序段1??? //如果x沒有被宏定義過(guò),那么就編譯程序段1???
#endif??
程序段2?????????????????? //如果x已經(jīng)定義過(guò)了則編譯程序段2的語(yǔ)句,“忽視”程序段1。

五、#undef

#undef x????????????????? //先測(cè)試x是否被宏定義過(guò)?

#undef 標(biāo)識(shí)符 .其中,標(biāo)識(shí)符是一個(gè)宏名稱。如果標(biāo)識(shí)符當(dāng)前沒有被定義成一個(gè)宏名稱,那么就會(huì)忽略該指令.一旦定義預(yù)處理器標(biāo)識(shí)符,它將保持已定義狀態(tài)且在作用域內(nèi),直到程序結(jié)束或者使用#undef 指令取消定義。?

==============================================================

【程序50】

題目:#include 的應(yīng)用練習(xí)   

1.程序分析:

2.程序源代碼:

test.h 文件如下:

#define LAG >

#define SMA <

#define EQ ==

#include "test.h" /*一個(gè)新文件50.c,包含test.h*/

#include <stdio.h>

void main(){

???????? int i=10;

???????? int j=20;

???????? if(i LAG j)

?????????????????? printf("\40: %d larger than %d \n",i,j);

???????? else if(i EQ j)

?????????????????? printf("\40: %d equal to %d \n",i,j);

???????? else if(i SMA j)

?????????????????? printf("\40:%d smaller than %d \n",i,j);

???????? else

?????????????????? printf("\40: No such value.\n");

}

==============================================================

【程序51】

題目:學(xué)習(xí)使用按位與 & 。   

1.程序分析:0&0=0; 0&1=0; 1&0=0; 1&1=1

2.程序源代碼:

#include <stdio.h>

void main(){

???????? int a,b;

???????? a=077;

???????? b=a&3;

???????? printf(" The a & b(decimal) is %d \n",b);

???????? b&=7;

???????? printf(" The a & b(decimal) is %d \n",b);

}

/*

?The a & b(decimal) is 3

?The a & b(decimal) is 3

Press any key to continue

*/

==============================================================

【程序52】

題目:學(xué)習(xí)使用按位或 | 。

1.程序分析:0|0=0; 0|1=1; 1|0=1; 1|1=1

2.程序源代碼:

#include <stdio.h>

void main(){

???????? int a,b;

???????? a=077;

???????? b=a|3;

???????? printf(" The a & b(decimal) is %d \n",b);

???????? b|=7;

???????? printf(" The a & b(decimal) is %d \n",b);

}

/*

?The a & b(decimal) is 63

?The a & b(decimal) is 63

Press any key to continue

*/

==============================================================

【程序53】

題目:學(xué)習(xí)使用按位異或 ^ 。   

1.程序分析:0^0=0; 0^1=1; 1^0=1; 1^1=0

2.程序源代碼:

#include <stdio.h>

void main(){

???????? int a,b;

???????? a=077;

???????? b=a^3;

???????? printf(" The a & b(decimal) is %d \n",b);

???????? b^=7;

???????? printf(" The a & b(decimal) is %d \n",b);

}

/*

?The a & b(decimal) is 60

?The a & b(decimal) is 59

Press any key to continue

*/

==============================================================

【程序54】

題目:取一個(gè)整數(shù)a從右端開始的4~7位。

程序分析:可以這樣考慮:

(1)先使a右移4位。

(2)設(shè)置一個(gè)低4位全為1,其余全為0的數(shù)。可用~(~0<<4)

(3)將上面二者進(jìn)行&運(yùn)算。

2.程序源代碼:

#include <stdio.h>

void main(){

???????? unsigned a,b,c,d;

???????? printf("Please input a number: ");

???????? scanf("%o",&a);

???????? b=a>>4;

???????? c=~(~0<<4);

???????? d=b&c;

???????? printf("%o\n%o\n",a,d);

}

/*

Please input a number: 4365476587

43654765

17

Press any key to continue

*/

==============================================================

【程序55】

題目:學(xué)習(xí)使用按位取反~。   

1.程序分析:~0=1; ~1=0;

2.程序源代碼:

#include <stdio.h>

void main(){

???????? int a,b;

???????? a=234;

???????? b=~a;

???????? printf(" The a's 1 complement(decimal) is %d \n",b);

???????? a=~a;

???????? printf(" The a's 1 complement(hexidecimal) is %x \n",a);

}

?

/*

?The a's 1 complement(decimal) is -235

?The a's 1 complement(hexidecimal) is ffffff15

Press any key to continue

*/

==============================================================

【程序56】

題目:畫圖,學(xué)用circle畫圓形。   

1.程序分析:

2.程序源代碼:

#include <stdio.h>

#include <graphics.h>

main(){

???????? int driver,mode,i;

???????? float j=1,k=1;

???????? driver=VGA;mode=VGAHI;

???????? initgraph(&driver,&mode,"");

???????? setbkcolor(YELLOW);

???????? for(i=0;i<=25;i++){

?????????????????? setcolor(8);

?????????????????? circle(310,250,k);

?????????????????? k=k+j;

?????????????????? j=j+0.3;

???????? }

}

==============================================================

【程序57】

題目:畫圖,學(xué)用line畫直線。

1.程序分析:           

2.程序源代碼:

#include "graphics.h"

main(){

???????? int driver,mode,i;

???????? float x0,y0,y1,x1;

???????? float j=12,k;

???????? driver=VGA;mode=VGAHI;

???????? initgraph(&driver,&mode,"");

???????? setbkcolor(GREEN);

???????? x0=263;y0=263;y1=275;x1=275;

???????? for(i=0;i<=18;i++){

?????????????????? setcolor(5);

?????????????????? line(x0,y0,x0,y1);

?????????????????? x0=x0-5;

?????????????????? y0=y0-5;

?????????????????? x1=x1+5;

?????????????????? y1=y1+5;

?????????????????? j=j+10;

???????? }

???????? x0=263;y1=275;y0=263;

???????? for(i=0;i<=20;i++){

?????????????????? setcolor(5);

?????????????????? line(x0,y0,x0,y1);

?????????????????? x0=x0+5;

?????????????????? y0=y0+5;

?????????????????? y1=y1-5;

???????? }

}

==============================================================

【程序58】

題目:畫圖,學(xué)用rectangle畫方形。   

1.程序分析:利用for循環(huán)控制100-999個(gè)數(shù),每個(gè)數(shù)分解出個(gè)位,十位,百位。

2.程序源代碼:

#include "graphics.h"

main(){

???????? int x0,y0,y1,x1,driver,mode,i;

???????? driver=VGA;mode=VGAHI;

???????? initgraph(&driver,&mode,"");

???????? setbkcolor(YELLOW);

???????? x0=263;y0=263;y1=275;x1=275;

???????? for(i=0;i<=18;i++){

?????????????????? setcolor(1);

?????????????????? rectangle(x0,y0,x1,y1);

?????????????????? x0=x0-5;

?????????????????? y0=y0-5;

?????????????????? x1=x1+5;

?????????????????? y1=y1+5;

???????? }

???????? settextstyle(DEFAULT_FONT,HORIZ_DIR,2);

???????? outtextxy(150,40,"How beautiful it is!");

???????? line(130,60,480,60);

???????? setcolor(2);

???????? circle(269,269,137);

}

==============================================================

【程序59】

題目:畫圖,綜合例子。

1.程序分析:

2.程序源代碼:

#include<stdio.h>

#define PAI 3.1415926

#define B 0.809

#include <graphics.h>

#include <math.h>

main(){

???????? int i,j,k,x0,y0,x,y,driver,mode;

???????? float a;

???????? driver=CGA;mode=CGAC0;

???????? initgraph(&driver,&mode,"");

???????? setcolor(3);

???????? setbkcolor(GREEN);

???????? x0=150;y0=100;

???????? circle(x0,y0,10);

???????? circle(x0,y0,20);

???????? circle(x0,y0,50);

???????? for(i=0;i<16;i++){

???????? a=(2*PAI/16)*i;

???????? x=ceil(x0+48*cos(a));

???????? y=ceil(y0+48*sin(a)*B);

???????? setcolor(2); line(x0,y0,x,y);}

???????? setcolor(3);circle(x0,y0,60);

???????? /* Make 0 time normal size letters */

???????? settextstyle(DEFAULT_FONT,HORIZ_DIR,0);

???????? outtextxy(10,170,"press a key");

???????? getch();

???????? setfillstyle(HATCH_FILL,YELLOW);

???????? floodfill(202,100,WHITE);

???????? getch();

???????? for(k=0;k<=500;k++){

?????????????????? setcolor(3);

?????????????????? for(i=0;i<=16;i++){

??????????????????????????? a=(2*PAI/16)*i+(2*PAI/180)*k;

??????????????????????????? x=ceil(x0+48*cos(a));

??????????????????????????? y=ceil(y0+48+sin(a)*B);

??????????????????????????? setcolor(2); line(x0,y0,x,y);

?????????????????? }

?????????????????? for(j=1;j<=50;j++){

??????????????????????????? a=(2*PAI/16)*i+(2*PAI/180)*k-1;

??????????????????????????? x=ceil(x0+48*cos(a));

??????????????????????????? y=ceil(y0+48*sin(a)*B);

??????????????????????????? line(x0,y0,x,y);

?????????????????? }

???????? }

???????? restorecrtmode();

}

==============================================================

【程序60】

題目:畫圖,綜合例子。   

1.程序分析:

2.程序源代碼:

#include "stdio.h"

#include "graphics.h"

#define LEFT 0

#define TOP 0

#define RIGHT 639

#define BOTTOM 479

#define LINES 400

#define MAXCOLOR 15

main(){

???????? int driver,mode,error;

???????? int x1,y1;

???????? int x2,y2;

???????? int dx1,dy1,dx2,dy2,i=1;

???????? int count=0;

???????? int color=0;

???????? driver=VGA;

???????? mode=VGAHI;

???????? initgraph(&driver,&mode,"");

???????? x1=x2=y1=y2=10;

???????? dx1=dy1=2;

???????? dx2=dy2=3;

???????? while(!kbhit()){

?????????????????? line(x1,y1,x2,y2);

?????????????????? x1+=dx1;y1+=dy1;

?????????????????? x2+=dx2;y2+dy2;

?????????????????? if(x1<=LEFT||x1>=RIGHT)

??????????????????????????? dx1=-dx1;

?????????????????? if(y1<=TOP||y1>=BOTTOM)

??????????????????????????? dy1=-dy1;

?????????????????? if(x2<=LEFT||x2>=RIGHT)

??????????????????????????? dx2=-dx2;????????

?????????????????? if(y2<=TOP||y2>=BOTTOM)

??????????????????????????? dy2=-dy2;

?????????????????? if(++count>LINES){

??????????????????????????? setcolor(color);

??????????????????????????? color=(color>=MAXCOLOR)?0:++color;

?????????????????? }

???????? }

???????? closegraph();

}

========================================================

【程序61】

題目:打印出楊輝三角形(要求打印出10行如下圖)   

1.程序分析:

       1

      1  1

      1  2  1

      1  3  3  1

      1  4  6  4  1

      1  5  10 10 5  1 

2.程序源代碼:

#include<stdio.h>

void main(){

???????? int i,j;

???????? int a[10][10];

???????? printf("\n");

???????? for(i=0;i<10;i++){

?????????????????? a[i][0]=1;

?????????????????? a[i][i]=1;

???????? }

???????? for(i=2;i<10;i++)

?????????????????? for(j=1;j<i;j++)

??????????????????????????? a[i][j]=a[i-1][j-1]+a[i-1][j];

???????? for(i=0;i<10;i++){

?????????????????? for(j=0;j<=i;j++)

??????????????????????????? printf("%5d",a[i][j]);

?????????????????? printf("\n");

???????? }

}

/*

??? 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

Press any key to continue

*/

==============================================================

【程序62】

題目:學(xué)習(xí)putpixel畫點(diǎn)。

1.程序分析:            

2.程序源代碼:

#include "stdio.h"

#include "graphics.h"

main(){

???????? int i,j,driver=VGA,mode=VGAHI;

???????? initgraph(&driver,&mode,"");

???????? setbkcolor(YELLOW);

???????? for(i=50;i<=230;i+=20)

?????????????????? for(j=50;j<=230;j++)

??????????????????????????? putpixel(i,j,1);

???????? for(j=50;j<=230;j+=20)

?????????????????? for(i=50;i<=230;i++)

??????????????????????????? putpixel(i,j,1);

}

==============================================================

【程序63】

題目:畫橢圓ellipse   

1.程序分析:

2.程序源代碼:

#include "stdio.h"

#include "graphics.h"

#include "conio.h"

main(){

???????? int x=360,y=160,driver=VGA,mode=VGAHI;

???????? int num=20,i;

???????? int top,bottom;

???????? initgraph(&driver,&mode,"");

???????? top=y-30;

???????? bottom=y-30;

???????? for(i=0;i<num;i++){

?????????????????? ellipse(250,250,0,360,top,bottom);

?????????????????? top-=5;

?????????????????? bottom+=5;

???????? }

???????? getch();

}

==============================================================

【程序64】

題目:利用ellipse and rectangle 畫圖。

2.程序源代碼:

#include "stdio.h"

#include "graphics.h"

#include "conio.h"

main(){

???????? int driver=VGA,mode=VGAHI;

???????? int i,num=15,top=50;

???????? int left=20,right=50;

???????? initgraph(&driver,&mode,"");

???????? for(i=0;i<num;i++){

?????????????????? ellipse(250,250,0,360,right,left);

?????????????????? ellipse(250,250,0,360,20,top);

?????????????????? rectangle(20-2*i,20-2*i,10*(i+2),10*(i+2));

?????????????????? right+=5;

?????????????????? left+=5;

?????????????????? top+=10;

???????? }

???????? getch();

}

==============================================================

【程序65】

題目:一個(gè)最優(yōu)美的圖案。   

1.程序分析:

2.程序源代碼:

#include "graphics.h"

#include "math.h"

#include "dos.h"

#include "conio.h"

#include "stdlib.h"

#include "stdio.h"

#include "stdarg.h"

#define MAXPTS 15

#define PI 3.1415926

struct PTS {

???????? int x,y;

};

double AspectRatio=0.85;

void LineToDemo(void){

???????? struct viewporttype vp;

???????? struct PTS points[MAXPTS];

???????? int i, j, h, w, xcenter, ycenter;

???????? int radius, angle, step;

???????? double rads;

???????? printf(" MoveTo / LineTo Demonstration" );

???????? getviewsettings( &vp );

???????? h = vp.bottom - vp.top;

???????? w = vp.right - vp.left;

???????? xcenter = w / 2;????????????????????????????????????? //Determine the center of circle

???????? ycenter = h / 2;

???????? radius = (h - 30) / (AspectRatio * 2);

???????? step = 360 / MAXPTS;???????????????????????? // Determine # of increments

???????? angle = 0;??????????????????????????????????????????????? //Begin at zero degrees

???????? for( i=0 ; i<MAXPTS ; ++i ){???? //Determine circle intercepts

?????????????????? rads = (double)angle * PI? //180.0; /* Convert angle to radians

?????????????????? points[i].x = xcenter + (int)( cos(rads) * radius );

?????????????????? points[i].y = ycenter - (int)( sin(rads) * radius * AspectRatio );

?????????????????? angle += step;?????????????????????????????? // Move to next increment

???????? }

???????? circle( xcenter, ycenter, radius );?????????????????????????? // Draw bounding circle

???????? for( i=0 ; i<MAXPTS ; ++i ){???????????????????????????????? // Draw the cords to the circle

?????????????????? for( j=i ; j<MAXPTS ; ++j ){??????????????????????? //For each remaining intersect

??????????????????????????? moveto(points[i].x, points[i].y);???????? // Move to beginning of cord

??????????????????????????? lineto(points[j].x, points[j].y);?? //Draw the cord

?????????????????? }

???????? }

}

main(){

???????? int driver,mode;

???????? driver=CGA;mode=CGAC0;

???????? initgraph(&driver,&mode,"");

???????? setcolor(3);

???????? setbkcolor(GREEN);

???????? LineToDemo();

}

==============================================================

【程序66】

題目:輸入3個(gè)數(shù)a,b,c,按大小順序輸出。   

1.程序分析:利用指針?lè)椒ā?/p>

2.程序源代碼:

#include<stdio.h>

swap(int *p1,int *p2){

???????? int p;

???????? p=*p1;

???????? *p1=*p2;

???????? *p2=p;

}

void main(){

???????? int n1,n2,n3;

???????? int *pointer1,*pointer2,*pointer3;

???????? printf("please input 3 number:n1,n2,n3:");

???????? scanf("%d %d %d",&n1,&n2,&n3);

???????? pointer1=&n1;

???????? pointer2=&n2;

???????? pointer3=&n3;

???????? if(n1>n2) swap(pointer1,pointer2);

???????? if(n1>n3) swap(pointer1,pointer3);

???????? if(n2>n3) swap(pointer2,pointer3);

???????? printf("the sorted numbers are:%d,%d,%d\n",n1,n2,n3);

}

/*

please input 3 number:n1,n2,n3:4 5 3

the sorted numbers are:3,4,5

Press any key to continue

*/

==============================================================

【程序67】

題目:輸入數(shù)組,最大的與第一個(gè)元素交換,最小的與最后一個(gè)元素交換,輸出數(shù)組。

1.程序分析:譚浩強(qiáng)的書中答案有問(wèn)題。      

2.程序源代碼:

#include<stdio.h>

input(int number[10]){

???????? int i;

???????? printf("Please input nine numbers: ");

???????? for(i=0;i<9;i++)

?????????????????? scanf("%d ",&number[i]);

???????? scanf("%d",&number[9]);

}

max_min(int array[10]){

???????? int *max,*min,k,l;

???????? int *p,*arr_end;

???????? arr_end=array+10;

???????? max=min=array;

???????? for(p=array+1;p<arr_end;p++)

?????????????????? if(*p>*max)

??????????????????????????? max=p;

?????????????????? else if(*p<*min)

??????????????????????????? min=p;

???????? k=*max;

???????? l=*min;

???????? *p=array[0];array[0]=l;l=*p;

???????? *p=array[9];array[9]=k;k=*p;

???????? return;

}

output(int array[10]){

???????? int *p;

???????? for(p=array;p<array+9;p++)

???????? printf("%d,",*p);

???????? printf("%d\n",array[9]);

}

void main(){

???????? int number[10];

???????? input(number);

???????? max_min(number);

???????? output(number);

}

==============================================================

【程序68】

題目:有n個(gè)整數(shù),使其前面各數(shù)順序向后移m個(gè)位置,最后m個(gè)數(shù)變成最前面的m個(gè)數(shù)

1.程序分析:

2.程序源代碼:

#include<stdio.h>

move(int array[20],int n,int m){

???????? int *p,array_end;

???????? array_end=*(array+n-1);

???????? for(p=array+n-1;p>array;p--)

?????????????????? *p=*(p-1);

???????? *array=array_end;

???????? m--;

???????? if(m>0)

?????????????????? move(array,n,m);

}

void main(){

???????? int number[20],n,m,i;

???????? printf("the total numbers is:");

???????? scanf("%d",&n);

???????? printf("back m:");

???????? scanf("%d",&m);

???????? printf("Please input all the number: ");

???????? for(i=0;i<n-1;i++)

?????????????????? scanf("%d ",&number[i]);

???????? scanf("%d",&number[n-1]);

???????? move(number,n,m);

???????? for(i=0;i<n-1;i++)

?????????????????? printf("%d,",number[i]);

???????? printf("%d",number[n-1]);

???????? printf("\n");

}

/*

the total numbers is:5

back m:9

Please input all the number: 7 6 5 4 9

6,5,4,9,7

Press any key to continue

*/

==============================================================

【程序69】

題目:有n個(gè)人圍成一圈,順序排號(hào)。從第一個(gè)人開始報(bào)數(shù)(從1到3報(bào)數(shù)),凡報(bào)到3的人退出

   圈子,問(wèn)最后留下的是原來(lái)第幾號(hào)的那位。

1. 程序分析:

2.程序源代碼:

#include<stdio.h>

#define nmax 50

void main(){

???????? int i,k,m,n,num[nmax],*p;

???????? printf("please input the total of numbers:");

???????? scanf("%d",&n);

???????? p=num;

???????? for(i=0;i<n;i++)

?????????????????? *(p+i)=i+1;

???????? i=0;

???????? k=0;

???????? m=0;

???????? while(m<n-1){

?????????????????? if(*(p+i)!=0)

??????????????????????????? k++;

?????????????????? if(k==3){

??????????????????????????? *(p+i)=0;

??????????????????????????? k=0;

??????????????????????????? m++;

?????????????????? }

?????????????????? i++;

?????????????????? if(i==n) i=0;

???????? }

???????? while(*p==0)

?????????????????? p++;

???????? printf("%d is left\n",*p);

}

/*

please input the total of numbers:5

4 is left

Press any key to continue

*/

==============================================================

【程序70】

題目:寫一個(gè)函數(shù),求一個(gè)字符串的長(zhǎng)度,在main函數(shù)中輸入字符串,并輸出其長(zhǎng)度。   

1.程序分析:

2.程序源代碼:

#include<stdio.h>

#include<math.h>

length(char *p){

???????? int n;

???????? n=0;

???????? while(*p!='\0'){

?????????????????? n++;

?????????????????? p++;

???????? }

???????? return n;

}

void main(){

???????? int len;

???????? char *str[20];

???????? printf("please input a string:\n");

???????? scanf("%s",str);

???????? len=length(*str);

???????? printf("the string has %d characters.",len);

}

==============================================================

【程序71】

題目:編寫input()和output()函數(shù)輸入,輸出5個(gè)學(xué)生的數(shù)據(jù)記錄。

1.程序分析:

2.程序源代碼:

#include<stdio.h>

#define N 5

struct student{

???????? char num[6];

???????? char name[8];

???????? int score[4];

} stu[N];

input(struct student stu[]){

???????? int i,j;

???????? for(i=0;i<N;i++){

?????????????????? printf("\n please input %d of %d ",i+1,N);

?????????????????? printf("num: ");

?????????????????? scanf("%s",stu[i].num);

?????????????????? printf("name: ");

?????????????????? scanf("%s",stu[i].name);

?????????????????? for(j=0;j<3;j++){

??????????????????????????? printf("score %d: ",j+1);

??????????????????????????? scanf("%d",&stu[i].score[j]);

?????????????????? }

?????????????????? printf("\n");

???????? }

}

print(struct student stu[]){

???????? int i,j;

???????? printf("\nNo. Name Sco1 Sco2 Sco3\n");

???????? for(i=0;i<N;i++){

?????????????????? printf("%-6s%-10s",stu[i].num,stu[i].name);

?????????????????? for(j=0;j<3;j++)

??????????????????????????? printf("%-8d",stu[i].score[j]);

?????????????????? printf("\n");

???????? }

}

void main(){

???????? input(stu);

???????? print(stu);

}

==============================================================

【程序72】

題目:創(chuàng)建一個(gè)鏈表。

1.程序分析:           

2.程序源代碼:

#include <stdlib.h>

#include<stdio.h>

struct list{

???????? int data;

???????? struct list *next;

};

typedef struct list node;

typedef node *link;

void main(){

???????? link ptr,head;

???????? int num,i;

???????? ptr=(link)malloc(sizeof(node));

???????? ptr=head;

???????? printf("please input 5 numbers==>\n");

???????? for(i=0;i<=4;i++){

?????????????????? scanf("%d",&num);

?????????????????? ptr->data=num;

?????????????????? ptr->next=(link)malloc(sizeof(node));

?????????????????? if(i==4) ptr->next=NULL;

?????????????????? else ptr=ptr->next;

???????? }

???????? ptr=head;

???????? while(ptr!=NULL){

?????????????????? printf("The value is ==>%d\n",ptr->data);

?????????????????? ptr=ptr->next;

???????? }

}

==============================================================

【程序73】

題目:反向輸出一個(gè)鏈表。   

1.程序分析:

2.程序源代碼:

/*reverse output a list*/

#include "stdlib.h"

#include "stdio.h"

struct list{

???????? int data;

???????? struct list *next;

};

typedef struct list node;

typedef node *link;

void main(){

???????? link ptr,head,tail;

???????? int num,i;

???????? tail=(link)malloc(sizeof(node));

???????? tail->next=NULL;

???????? ptr=tail;

???????? printf("\nplease input 5 data==>\n");

???????? for(i=0;i<=4;i++){

?????????????????? scanf("%d",&num);

?????????????????? ptr->data=num;

?????????????????? head=(link)malloc(sizeof(node));

?????????????????? head->next=ptr;

?????????????????? ptr=head;

???????? }

???????? ptr=ptr->next;

???????? while(ptr!=NULL){

?????????????????? printf("The value is ==>%d\n",ptr->data);

?????????????????? ptr=ptr->next;

???????? }

}

/*

please input 5 data==>

43213

544

7

87

5

The value is ==>5

The value is ==>87

The value is ==>7

The value is ==>544

The value is ==>43213

Press any key to continue

*/

==============================================================

【程序74】

題目:連接兩個(gè)鏈表。

1.程序分析:

2.程序源代碼:

#include "stdlib.h"

#include "stdio.h"

struct list{

???????? int data;

???????? struct list *next;

};

typedef struct list node;

typedef node *link;

link delete_node(link pointer,link tmp){

???????? if (tmp==NULL)???????????????????????????????????????????? //delete first node

?????????????????? return pointer->next;

???????? else{

?????????????????? if(tmp->next->next==NULL)??? //delete last node

??????????????????????????? tmp->next=NULL;

?????????????????? else???????????????????????????????????????????????? //delete the other node

??????????????????????????? tmp->next=tmp->next->next;

?????????????????? return pointer;

???????? }

}

void selection_sort(link pointer,int num){

???????? link tmp,btmp;

???????? int i,min;

???????? for(i=0;i<num;i++){

?????????????????? tmp=pointer;

?????????????????? min=tmp->data;

?????????????????? btmp=NULL;

?????????????????? while(tmp->next){

??????????????????????????? if(min>tmp->next->data){

???????????????????????????????????? min=tmp->next->data;

???????????????????????????????????? btmp=tmp;

??????????????????????????? }

??????????????????????????? tmp=tmp->next;

?????????????????? }

?????????????????? printf(" %d\n",min);

?????????????????? pointer=delete_node(pointer,btmp);

???????? }

}

link create_list(int array[],int num){

???????? link tmp1,tmp2,pointer;

???????? int i;

???????? pointer=(link)malloc(sizeof(node));

???????? pointer->data=array[0];

???????? tmp1=pointer;

???????? for(i=1;i<num;i++){

?????????????????? tmp2=(link)malloc(sizeof(node));

?????????????????? tmp2->next=NULL;

?????????????????? tmp2->data=array[i];

?????????????????? tmp1->next=tmp2;

?????????????????? tmp1=tmp1->next;

???????? }

???????? return pointer;

}

link concatenate(link pointer1,link pointer2){

???????? link tmp;

???????? tmp=pointer1;

???????? while(tmp->next)

???????? tmp=tmp->next;

???????? tmp->next=pointer2;

???????? return pointer1;

}

void main(void){

???????? int arr1[]={3,12,8,9,11};

???????? link ptr;

???????? ptr=create_list(arr1,5);

???????? selection_sort(ptr,5);

}

==============================================================

【程序75】

題目:放松一下,算一道簡(jiǎn)單的題目。

1.程序分析:

2.程序源代碼:

#include<stdio.h>

void main(){

int i,n;

for(i=1;i<5;i++){

???????? n=0;

???????? if(i!=1)

?????????????????? n=n+1;

???????? if(i==3)

?????????????????? n=n+1;

???????? if(i==4)

?????????????????? n=n+1;

???????? if(i!=4)

?????????????????? n=n+1;

???????? if(n==3)

?????????????????? printf("zhu hao shi de shi:%c\n",64+i);

???????? }

}

/*

zhu hao shi de shi:C

Press any key to continue

*/

==============================================================

【程序76】

題目:編寫一個(gè)函數(shù),輸入n為偶數(shù)時(shí),調(diào)用函數(shù)求1/2+1/4+...+1/n,當(dāng)輸入n為奇數(shù)時(shí),調(diào)用函數(shù)

   1/1+1/3+...+1/n(利用指針函數(shù))

1.程序分析:

2.程序源代碼:

#include "stdio.h"

float peven(int n){

???????? float s;

???????? int i;

???????? s=1;

???????? for(i=2;i<=n;i+=2)

?????????????????? s+=1/(float)i;

???????? return(s);

}

float podd(int n){

???????? float s;

???????? int i;

???????? s=0;

???????? for(i=1;i<=n;i+=2)

?????????????????? s+=1/(float)i;

???????? return(s);

}

float dcall(float (*fp)(int n),int n){

???????? float s;

???????? s=(fp)(n);

???????? return(s);

}

void main(){

???????? //float peven(),podd(),dcall();

???????? float sum;

???????? int n;

???????? printf("Please input a number: ");

???????? while (1){

?????????????????? scanf("%d",&n);

?????????????????? if(n>1)

??????????????????????????? break;

???????? }

???????? if(n%2==0){

?????????????????? printf("Even=");

?????????????????? sum=dcall(peven,n);

???????? }

???????? else{

?????????????????? printf("Odd=");

?????????????????? sum=dcall(podd,n);

???????? }

???????? printf("%f\n",sum);

}

/*

Please input a number: 66

Even=3.044399

Press any key to continue

*/

==============================================================

【程序77】

題目:填空練習(xí)(指向指針的指針)

1.程序分析:     

2.程序源代碼:

#include<stdio.h>

void main(){

???????? char *s[]={"man","woman","girl","boy","sister"};

???????? char **q;

???????? int k;

???????? for(k=0;k<5;k++){

?????????????????? /*這里填寫什么語(yǔ)句?*/

?????????????????? printf("%s\n",*q);

???????? }

}

==============================================================

【程序78】

題目:找到年齡最大的人,并輸出。請(qǐng)找出程序中有什么問(wèn)題。

1.程序分析:

2.程序源代碼:

#include "stdio.h"

#define N 4

static struct man{

???????? char name[20];

???????? int age;

} person[N]={"li",18,"wang",19,"zhang",20,"sun",22};

main(){

???????? struct man *q,*p;

???????? int i,m=0;

???????? p=person;

???????? for (i=0;i<N;i++){

?????????????????? if(m<p->age)

??????????????????????????? q=p++;

??????????????????????????? m=q->age;

???????? }

???????? printf("%s,%d",(*q).name,(*q).age);

}

==============================================================

【程序79】

題目:字符串排序。

1.程序分析:

2.程序源代碼:

#include<stdio.h>

void main(){

???????? char *str1[20],*str2[20],*str3[20];

???????? char swap();

???????? printf("please input three strings\n");

???????? scanf("%s",str1);

???????? scanf("%s",str2);

???????? scanf("%s",str3);

???????? if(strcmp(str1,str2)>0) swap(str1,str2);

???????? if(strcmp(str1,str3)>0) swap(str1,str3);

???????? if(strcmp(str2,str3)>0) swap(str2,str3);

???????? printf("after being sorted\n");

???????? printf("%s\n%s\n%s\n",str1,str2,str3);

}

char swap(char *p1,char *p2){

???????? char *p[20];

???????? strcpy(p,p1);

???????? strcpy(p1,p2);

???????? strcpy(p2,p);

}

==============================================================

【程序80】

題目:海灘上有一堆桃子,五只猴子來(lái)分。第一只猴子把這堆桃子憑據(jù)分為五份,多了一個(gè),這只

   猴子把多的一個(gè)扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了

   一個(gè),它同樣把多的一個(gè)扔入海中,拿走了一份,第三、第四、第五只猴子都是這樣做的,

   問(wèn)海灘上原來(lái)最少有多少個(gè)桃子?

1.程序分析:

2.程序源代碼:

#include<stdio.h>

void main(){

???????? int i,m,j,k,count;

???????? for(i=4;i<10000;i+=4){

?????????????????? count=0;

?????????????????? m=i;

?????????????????? for(k=0;k<5;k++){

??????????????????????????? j=i/4*5+1;

??????????????????????????? i=j;

??????????????????????????? if(j%4==0)

???????????????????????????????????? count++;

??????????????????????????? else

???????????????????????????????????? break;

?????????????????? }

?????????????????? i=m;

?????????????????? if(count==4){

??????????????????????????? printf("%d\n",i);

??????????????????????????? break;

?????????????????? }

???????? }

}

/*

Please input a number: 66

Even=3.044399

Press any key to continue

*/

==============================================================

【程序81】

題目:809*??=800*??+9*??+1 其中??代表的兩位數(shù),8*??的結(jié)果為兩位數(shù),9*??的結(jié)果為3位數(shù)。求??代表的兩位數(shù),及809*??后的結(jié)果。

1.程序分析:

2.程序源代碼:

#include<stdio.h>

output(long b,long i){

???????? printf("%ld/%ld=809*%ld+%ld\n",b,i,i,b%i);

}

void main(){

???????? long int a,b,i;

???????? a=809;

???????? for(i=10;i<100;i++){

?????????????????? b=i*a+1;

?????????????????? if(b>=1000&&b<=10000&&8*i<100&&9*i>=100)

??????????????????????????? output(b,i);

???????? }

}

/*

9709/12=809*12+1

Press any key to continue

*/

==============================================================

【程序82】

題目:八進(jìn)制轉(zhuǎn)換為十進(jìn)制

1.程序分析:           

2.程序源代碼:

#include<stdio.h>

void main(){

???????? char *p,s[6];

???????? int n;

???????? p=s;

???????? printf("Please input a character: ");

???????? gets(p);

???????? n=0;

???????? while(*(p)!='\0'){

?????????????????? n=n*8+*p-'0';

?????????????????? p++;

???????? }

???????? printf("after is: %d\n",n);

}

/*

Please input a character: a

after is: 49

Press any key to continue

*/

==============================================================

【程序83】

題目:求0—7所能組成的奇數(shù)個(gè)數(shù)。

1.程序分析:

2.程序源代碼:

#include<stdio.h>

void main(){

???????? long sum=4,s=4;

???????? int j;

???????? for(j=2;j<=8;j++){ //j is place of number

?????????????????? printf(" The number is: %ld",sum);

?????????????????? if(j<=2)

??????????????????????????? s*=7;

?????????????????? else

??????????????????????????? s*=8;

?????????????????? sum+=s;

???????? }

???????? printf("\nsum=%ld",sum);

}

/*

The number is: 4

The number is: 32

The number is: 256

The number is: 2048

The number is: 16384

The number is: 131072

The number is: 1048576

sum=8388608Press any key to continue

*/

==============================================================

【程序84】

題目:一個(gè)偶數(shù)總能表示為兩個(gè)素?cái)?shù)之和。

1.程序分析:

2.程序源代碼:

#include<stdio.h>

#include <math.h>

void main(){

???????? int a,b,c,d;

???????? printf("Please input an even number: ");

???????? scanf("%d",&a);

???????? for(b=3;b<=a/2;b+=2){

?????????????????? for(c=2;c<=sqrt(b);c++)

??????????????????????????? if(b%c==0)

???????????????????????????????????? break;

?????????????????? if(c>sqrt(b))

??????????????????????????? d=a-b;

?????????????????? else

??????????????????????????? break;

?????????????????? for(c=2;c<=sqrt(d);c++)

??????????????????????????? if(d%c==0)

???????????????????????????????????? break;

?????????????????? if(c>sqrt(d))

??????????????????????????? printf("%d=%d+%d\n",a,b,d);

???????? }

}

/*

Please input an even number: 34

34=3+31

34=5+29

Press any key to continue

*/

==============================================================

【程序85】

題目:判斷一個(gè)素?cái)?shù)能被幾個(gè)9整除

1.程序分析:

2.程序源代碼:

#include<stdio.h>

void main(){

???????? long int m9=9,sum=9;

???????? int zi,n1=1,c9=1;

???????? printf("Please input a prim number: ");

???????? scanf("%d",&zi);

???????? while(n1!=0){

?????????????????? if(!(sum%zi))

??????????????????????????? n1=0;

?????????????????? else{

??????????????????????????? m9=m9*10;

??????????????????????????? sum=sum+m9;

??????????????????????????? c9++;

?????????????????? }

???????? }

???????? printf("%ld,can be divided by %d \"9\"\n",sum,c9);

}

/*

Please input a prim number: 17

-727379969,can be divided by 12 "9"

Press any key to continue

*/

==============================================================

【程序86】

題目:兩個(gè)字符串連接程序

1.程序分析:

2.程序源代碼:

#include<stdio.h>

void main(){

???????? char a[]="acegikm";

???????? char b[]="bdfhjlnpq";

???????? char c[80],*p;

???????? int i=0,j=0,k=0;

???????? while(a[i]!='\0'&&b[j]!='\0'){

?????????????????? if (a[i]<b[j]) {

??????????????????????????? c[k]=a[i];

??????????????????????????? i++;

?????????????????? }

?????????????????? else

??????????????????????????? c[k]=b[j++];

?????????????????? k++;

???????? }

???????? c[k]='\0';

???????? if(a[i]=='\0')

?????????????????? p=b+j;

???????? else

?????????????????? p=a+i;

???????? strcat(c,p);

???????? puts(c);

}

==============================================================

【程序87】

題目:回答結(jié)果(結(jié)構(gòu)體變量傳遞)

1.程序分析:     

2.程序源代碼:

#include<stdio.h>

struct student{

???????? int x;

???????? char c;

} a;

f(struct student b){

???????? b.x=20;

???????? b.c='y';

}

void main(){

???????? a.x=3;

???????? a.c='a';

???????? f(a);

???????? printf("%d,%c\n",a.x,a.c);

}

/*

3,a

Press any key to continue

*/

==============================================================

【程序88】

題目:讀取7個(gè)數(shù)(1—50)的整數(shù)值,每讀取一個(gè)值,程序打印出該值個(gè)數(shù)的*。

1.程序分析:

2.程序源代碼:

#include<stdio.h>

void main(){

???????? int i,a,n=1;

???????? while(n<=7){

?????????????????? do {

??????????????????????????? scanf("%d",&a);

?????????????????? }while(a<1||a>50);

?????????????????? for(i=1;i<=a;i++)

??????????????????????????? printf("*");

?????????????????? printf("\n");

?????????????????? n++;

???????? }

???????? getchar();

}

?

/*

3

***

4

****

5

*****

6

******

7

*******

8

********

9

*********

Press any key to continue

*/

==============================================================

【程序89】

題目:某個(gè)公司采用公用電話傳遞數(shù)據(jù),數(shù)據(jù)是四位的整數(shù),在傳遞過(guò)程中是加密的,加密規(guī)則如下:

   每位數(shù)字都加上5,然后用和除以10的余數(shù)代替該數(shù)字,再將第一位和第四位交換,第二位和第三位交換。

1.程序分析:

2.程序源代碼:

#include<stdio.h>

void main(){

???????? int a,i,aa[4],t;

???????? printf("Please input the data(4): ");

???????? scanf("%d",&a);

???????? aa[0]=a%10;

???????? aa[1]=a%100/10;

???????? aa[2]=a%1000/100;

???????? aa[3]=a/1000;

???????? for(i=0;i<=3;i++){

?????????????????? aa[i]+=5;

?????????????????? aa[i]%=10;

???????? }

???????? for(i=0;i<=3/2;i++){

?????????????????? t=aa[i];

?????????????????? aa[i]=aa[3-i];

?????????????????? aa[3-i]=t;

???????? }

???????? printf("the encryted data is: ");

???????? for(i=3;i>=0;i--)

?????????????????? printf("%d",aa[i]);

???????? printf("\n");

}

/*

Please input the data(4): 5467

the encryted data is: 2190

Press any key to continue

*/

==============================================================

【程序90】

題目:專升本一題,讀結(jié)果。

1.程序分析:

2.程序源代碼:

#include <stdio.h>

#define M 5

void main(){

???????? int a[M]={1,2,3,4,5};

???????? int i=0,j=M-1,t;

???????? while(i<j) {

?????????????????? t=*(a+i);

?????????????????? *(a+i)=*(a+j);

?????????????????? *(a+j)=t;

?????????????????? i++;

?????????????????? j--;

???????? }

???????? for(i=0;i<M;i++){

?????????????????? printf("%d ",*(a+i));

???????? }

???????? printf("\n");

}

/*

5 4 3 2 1

Press any key to continue

*/

==============================================================

【程序91】

題目:時(shí)間函數(shù)舉例1

1.程序分析:

2.程序源代碼:

#include "stdio.h"

#include "time.h"

void main(){

???????? time_t lt;???????????????????? /define a longint time varible

???????? lt=time(NULL);??????????????????????????? //system time and date

???????? printf(ctime(<));?????????????????????????? //english format output

???????? printf(asctime(localtime(<)));??? //tranfer to tm

???????? printf(asctime(gmtime(<)));?????? //tranfer to Greenwich time

}

==============================================================

【程序92】

題目:時(shí)間函數(shù)舉例2

1.程序分析:           

2.程序源代碼:

/*calculate time*/

#include "time.h"

#include "stdio.h"

void main(){

???????? time_t start,end;

???????? int i;

???????? start=time(NULL);

???????? for(i=0;i<3000;i++){

?????????????????? printf("\1\1\1\1\1\1\1\1\1\1\n");

???????? }

???????? end=time(NULL);

???????? printf("\1: The different is %6.3f\n",difftime(end,start));

}

==============================================================

【程序93】

題目:時(shí)間函數(shù)舉例3

1.程序分析:

2.程序源代碼:

/*calculate time*/

#include "time.h"

#include "stdio.h"

main(){

???????? clock_t start,end;

???????? int i;

???????? double var;

???????? start=clock();

???????? for(i=0;i<10000;i++){

?????????????????? printf("\1\1\1\1\1\1\1\1\1\1\n");

???????? }

???????? end=clock();

???????? printf("\1: The different is %6.3f\n",(double)(end-start));

}

==============================================================

【程序94】

題目:時(shí)間函數(shù)舉例4,一個(gè)猜數(shù)游戲,判斷一個(gè)人反應(yīng)快慢。(版主初學(xué)時(shí)編的)

1.程序分析:

2.程序源代碼:

#include "stdio.h"

#include "time.h"

#include "stdlib.h"

void main(){

???????? char c;

???????? clock_t start,end;

???????? time_t a,b;

???????? double var;

???????? int i,guess;

???????? srand(time(NULL));

???????? printf("do you want to play it.('y' or 'n') \n");

???????? loop:

???????? while((c=getchar())=='y'){

?????????????????? i=rand()%100;

?????????????????? printf("\nplease input number you guess:\n");

?????????????????? start=clock();

?????????????????? a=time(NULL);

?????????????????? scanf("%d",&guess);

?????????????????? while(guess!=i){

??????????????????????????? if(guess>i){

???????????????????????????????????? printf("please input a little smaller.\n");

???????????????????????????????????? scanf("%d",&guess);

??????????????????????????? }

??????????????????????????? else{

???????????????????????????????????? printf("please input a little bigger.\n");

???????????????????????????????????? scanf("%d",&guess);

??????????????????????????? }

?????????????????? }

?????????????????? end=clock();

?????????????????? b=time(NULL);

?????????????????? printf("\1: It took you %6.3f seconds\n",var=(double)(end-start)/18.2);

?????????????????? printf("\1: it took you %6.3f seconds\n\n",difftime(b,a));

?????????????????? if(var<15)

??????????????????????????? printf("\1\1 You are very clever! \1\1\n\n");

?????????????????? else if(var<25)

??????????????????????????? printf("\1\1 you are normal! \1\1\n\n");

?????????????????? else

??????????????????????????? printf("\1\1 you are stupid! \1\1\n\n");

?????????????????? printf("\1\1 Congradulations \1\1\n\n");

?????????????????? printf("The number you guess is %d",i);

???????? }

???????? printf("\ndo you want to try it again?(\"yy\".or.\"n\")\n");

???????? if((c=getchar())=='y')

?????????????????? goto loop;

}

==============================================================

【程序95】

題目:家庭財(cái)務(wù)管理小程序

1.程序分析:

2.程序源代碼:

/*money management system*/

#include <stdio.h>

#include <dos.h>

void main(){

???????? FILE *fp;

???????? struct date d;

???????? float sum,chm=0.0;

???????? int len,i,j=0;

???????? int c;

???????? char ch[4]="",ch1[16]="",chtime[12]="",chshop[16],chmoney[8];

???????? pp: clrscr();

???????? sum=0.0;

???????? gotoxy(1,1);printf("|---------------------------------------------------------------------------|");

???????? gotoxy(1,2);printf("| money management system(C1.0) 2000.03 |");

???????? gotoxy(1,3);printf("|---------------------------------------------------------------------------|");

???????? gotoxy(1,4);printf("| -- money records -- | -- today cost list -- |");

???????? gotoxy(1,5);printf("| ------------------------ |-------------------------------------|");

???????? gotoxy(1,6);printf("| date: -------------- | |");

???????? gotoxy(1,7);printf("| | | | |");

???????? gotoxy(1,8);printf("| -------------- | |");

???????? gotoxy(1,9);printf("| thgs: ------------------ | |");

???????? gotoxy(1,10);printf("| | | | |");

???????? gotoxy(1,11);printf("| ------------------ | |");

???????? gotoxy(1,12);printf("| cost: ---------- | |");

???????? gotoxy(1,13);printf("| | | | |");

???????? gotoxy(1,14);printf("| ---------- | |");

???????? gotoxy(1,15);printf("| | |");

???????? gotoxy(1,16);printf("| | |");

???????? gotoxy(1,17);printf("| | |");

???????? gotoxy(1,18);printf("| | |");

???????? gotoxy(1,19);printf("| | |");

???????? gotoxy(1,20);printf("| | |");

???????? gotoxy(1,21);printf("| | |");

???????? gotoxy(1,22);printf("| | |");

???????? gotoxy(1,23);printf("|---------------------------------------------------------------------------|");

???????? i=0;

???????? getdate(&d);

???????? sprintf(chtime,"%4d.%02d.%02d",d.da_year,d.da_mon,d.da_day);

???????? for(;;){

?????????????????? gotoxy(3,24);printf(" Tab __browse cost list Esc __quit");

?????????????????? gotoxy(13,10);printf(" ");

?????????????????? gotoxy(13,13);printf(" ");

?????????????????? gotoxy(13,7);printf("%s",chtime);

?????????????????? j=18;

?????????????????? ch[0]=getchar();

?????????????????? if(ch[0]==27)

??????????????????????????? break;

?????????????????? strcpy(chshop,"");

?????????????????? strcpy(chmoney,"");

?????????????????? if(ch[0]==9){

??????????????????????????? mm:i=0;

??????????????????????????? fp=fopen("home.dat","r+");

??????????????????????????? gotoxy(3,24);printf(" ");

??????????????????????????? gotoxy(6,4);printf(" list records ");

??????????????????????????? gotoxy(1,5);printf("|-------------------------------------|");

??????????????????????????? gotoxy(41,4);printf(" ");

??????????????????????????? gotoxy(41,5);printf(" |");

??????????????????????????? while(fscanf(fp,"%10s%14s%f\n",chtime,chshop,&chm)!=EOF){

???????????????????????????????????? if(i==36){

?????????????????????????????????????????????? getchar();

?????????????????????????????????????????????? i=0;

???????????????????????????????????? }

???????????????????????????????????? if ((i%36)<17){

?????????????????????????????????????????????? gotoxy(4,6+i);

?????????????????????????????????????????????? printf(" ");

?????????????????????????????????????????????? gotoxy(4,6+i);

???????????????????????????????????? }

???????????????????????????????????? else if((i%36)>16){

?????????????????????????????????????????????? gotoxy(41,4+i-17);

?????????????????????????????????????????????? printf(" ");

?????????????????????????????????????????????? gotoxy(42,4+i-17);

???????????????????????????????????? }

???????????????????????????????????? i++;

???????????????????????????????????? sum=sum+chm;

???????????????????????????????????? printf("%10s %-14s %6.1f\n",chtime,chshop,chm);

??????????????????????????? }

??????????????????????????? gotoxy(1,23);printf("|---------------------------------------------------------------------------|");

??????????????????????????? gotoxy(1,24);printf("| |");

??????????????????????????? gotoxy(1,25);printf("|---------------------------------------------------------------------------|");

??????????????????????????? gotoxy(10,24);printf("total is %8.1f$",sum);

??????????????????????????? fclose(fp);

??????????????????????????? gotoxy(49,24);printf("press any key to.....");getch();goto pp;

?????????????????? }

?????????????????? else{

??????????????????????????? while(ch[0]!='\r'){

???????????????????????????????????? if(j<10){

?????????????????????????????????????????????? strncat(chtime,ch,1);

?????????????????????????????????????????????? j++;

???????????????????????????????????? }

???????????????????????????????????? if(ch[0]==8){

?????????????????????????????????????????????? len=strlen(chtime)-1;

?????????????????????????????????????????????? if(j>15){

??????????????????????????????????????????????????????? len=len+1;

??????????????????????????????????????????????????????? j=11;

?????????????????????????????????????????????? }

?????????????????????????????????????????????? strcpy(ch1,"");

?????????????????????????????????????????????? j=j-2;

?????????????????????????????????????????????? strncat(ch1,chtime,len);

?????????????????????????????????????????????? strcpy(chtime,"");

?????????????????????????????????????????????? strncat(chtime,ch1,len-1);

?????????????????????????????????????????????? gotoxy(13,7);printf(" ");

???????????????????????????????????? }

???????????????????????????????????? gotoxy(13,7);printf("%s",chtime);ch[0]=getch();

???????????????????????????????????? if(ch[0]==9)

???????????????????????????????????? goto mm;

???????????????????????????????????? if(ch[0]==27)

???????????????????????????????????? exit(1);

??????????????????????????? }

??????????????????????????? gotoxy(3,24);printf(" ");

??????????????????????????? gotoxy(13,10);

??????????????????????????? j=0;

??????????????????????????? ch[0]=getch();

??????????????????????????? while(ch[0]!='\r'){

???????????????????????????????????? if (j<14){

?????????????????????????????????????????????? strncat(chshop,ch,1);

?????????????????????????????????????????????? j++;

???????????????????????????????????? }

???????????????????????????????????? if(ch[0]==8){

?????????????????????????????????????????????? len=strlen(chshop)-1;

?????????????????????????????????????????????? strcpy(ch1,"");

?????????????????????????????????????????????? j=j-2;

?????????????????????????????????????????????? strncat(ch1,chshop,len);

?????????????????????????????????????????????? strcpy(chshop,"");

?????????????????????????????????????????????? strncat(chshop,ch1,len-1);

?????????????????????????????????????????????? gotoxy(13,10);printf(" ");

???????????????????????????????????? }

???????????????????????????????????? gotoxy(13,10);

???????????????????????????????????? printf("%s",chshop);

???????????????????????????????????? ch[0]=getch();

??????????????????????????? }

??????????????????????????? gotoxy(13,13);

??????????????????????????? j=0;

??????????????????????????? ch[0]=getch();

??????????????????????????? while(ch[0]!='\r'){

???????????????????????????????????? if (j<6){

?????????????????????????????????????????????? strncat(chmoney,ch,1);

?????????????????????????????????????????????? j++;

???????????????????????????????????? }

???????????????????????????????????? if(ch[0]==8){

?????????????????????????????????????????????? len=strlen(chmoney)-1;

?????????????????????????????????????????????? strcpy(ch1,"");

???????? ???????????????????????????????????? j=j-2;

?????????????????????????????????????????????? strncat(ch1,chmoney,len);

?????????????????????????????????????????????? strcpy(chmoney,"");

?????????????????????????????????????????????? strncat(chmoney,ch1,len-1);

?????????????????????????????????????????????? gotoxy(13,13);printf(" ");

???????????????????????????????????? }

???????????????????????????????????? gotoxy(13,13);printf("%s",chmoney);ch[0]=getch();

??????????????????????????? }

??????????????????????????? if((strlen(chshop)==0)||(strlen(chmoney)==0))

???????????????????????????????????? continue;

??????????????????????????? if((fp=fopen("home.dat","a+"))!=NULL);

??????????????????????????? fprintf(fp,"%10s%14s%6s",chtime,chshop,chmoney);

??????????????????????????? fputc('\n',fp);

??????????????????????????? fclose(fp);

??????????????????????????? i++;

??????????????????????????? gotoxy(41,5+i);

??????????????????????????? printf("%10s %-14s %-6s",chtime,chshop,chmoney);

?????????????????? }

???????? }

} ?

==============================================================

【程序96】

題目:計(jì)算字符串中子串出現(xiàn)的次數(shù)

1.程序分析:

2.程序源代碼:

#include "string.h"

#include "stdio.h"

void main(){

???????? char str1[20],str2[20],*p1,*p2;

???????? int sum=0;

???????? printf("please input two strings\n");

???????? scanf("%s%s",str1,str2);

???????? p1=str1;

???????? p2=str2;

???????? while(*p1!='\0'){

?????????????????? if(*p1==*p2){

??????????????????????????? while(*p1==*p2&&*p2!='\0'){

???????????????????????????????????? p1++;

???????????????????????????????????? p2++;

??????????????????????????? }

?????????????????? }

?????????????????? else

??????????????????????????? p1++;

?????????????????? if(*p2=='\0')

??????????????????????????? sum++;

?????????????????? p2=str2;

???????? }

???????? printf("all is : %d\n",sum);

???????? getchar();

}

==============================================================

【程序97】

題目:從鍵盤輸入一些字符,逐個(gè)把它們送到磁盤上去,直到輸入一個(gè)#為止。

1.程序分析:     

2.程序源代碼:

#include "stdio.h"

void main(){

???????? FILE *fp;

???????? char ch,filename[10];

???????? scanf("%s",filename);

???????? if((fp=fopen(filename,"w"))==NULL){

?????????????????? printf("cannot open file\n");

?????????????????? exit(0);

???????? }

???????? ch=getchar();

???????? ch=getchar();

???????? while(ch!='#'){

?????????????????? fputc(ch,fp);putchar(ch);

?????????????????? ch=getchar();

???????? }

???????? fclose(fp);

}

==============================================================

【程序98】

題目:從鍵盤輸入一個(gè)字符串,將小寫字母全部轉(zhuǎn)換成大寫字母,然后輸出到一個(gè)磁盤文件“test”中保存。

   輸入的字符串以!結(jié)束。

1.程序分析:

2.程序源代碼:

#include "stdio.h"

void main(){

???????? FILE *fp;

???????? char str[100],filename[10];

???????? int i=0;

???????? if((fp=fopen("test","w"))==NULL){

?????????????????? printf("cannot open the file\n");

?????????????????? exit(0);

???????? }

???????? printf("please input a string:\n");

???????? gets(str);

???????? while(str[i]!='!'){

?????????????????? if(str[i]>='a'&&str[i]<='z')

??????????????????????????? str[i]=str[i]-32;

?????????????????? fputc(str[i],fp);

?????????????????? i++;

???????? }

???????? fclose(fp);

???????? fp=fopen("test","r");

???????? fgets(str,strlen(str)+1,fp);

???????? printf("%s\n",str);

???????? fclose(fp);

}

==============================================================

【程序99】

題目:有兩個(gè)磁盤文件A和B,各存放一行字母,要求把這兩個(gè)文件中的信息合并(按字母順序排列),

   輸出到一個(gè)新文件C中。

1.程序分析:

2.程序源代碼:

#include "stdio.h"

void main(){

???????? FILE *fp;

???????? int i,j,n,ni;

???????? char c[160],t,ch;

???????? if((fp=fopen("A","r"))==NULL){

?????????????????? printf("file A cannot be opened\n");

?????????????????? exit(0);

???????? }

???????? printf("\n A contents are :\n");

???????? for(i=0;(ch=fgetc(fp))!=EOF;i++){

?????????????????? c[i]=ch;

?????????????????? putchar(c[i]);

???????? }

???????? fclose(fp);

???????? ni=i;

???????? if((fp=fopen("B","r"))==NULL){

?????????????????? printf("file B cannot be opened\n");

?????????????????? exit(0);

???????? }

???????? printf("\n B contents are :\n");

???????? for(i=0;(ch=fgetc(fp))!=EOF;i++){

?????????????????? c[i]=ch;

?????????????????? putchar(c[i]);

???????? }

???????? fclose(fp);

???????? n=i;

???????? for(i=0;i<n;i++)

???????? for(j=i+1;j<n;j++)

???????? if(c[i]>c[j]){

?????????????????? t=c[i];

?????????????????? c[i]=c[j];

?????????????????? c[j]=t;

???????? }

???????? printf("\n C file is:\n");

???????? fp=fopen("C","w");

???????? for(i=0;i<n;i++){

?????????????????? putc(c[i],fp);

?????????????????? putchar(c[i]);

???????? }

???????? fclose(fp);

}

==============================================================

【程序100】

題目:有五個(gè)學(xué)生,每個(gè)學(xué)生有3門課的成績(jī),從鍵盤輸入以上數(shù)據(jù)(包括學(xué)生號(hào),姓名,三門課成績(jī)),計(jì)算出

   平均成績(jī),況原有的數(shù)據(jù)和計(jì)算出的平均分?jǐn)?shù)存放在磁盤文件"stud"中。

1.程序分析:

2.程序源代碼:

#include "stdio.h"

struct student{

???????? char num[6];

???????? char name[8];

???????? int score[3];

???????? float avr;

} stu[5];

main(){

???????? int i,j,sum;

???????? FILE *fp;

???????? /*input*/

???????? for(i=0;i<5;i++){

?????????????????? printf("\n please input No. %d score:\n",i);

?????????????????? printf("stuNo:");

?????????????????? scanf("%s",stu[i].num);

?????????????????? printf("name:");

?????????????????? scanf("%s",stu[i].name);

?????????????????? sum=0;

?????????????????? for(j=0;j<3;j++){

??????????????????????????? printf("score %d.",j+1);

??????????????????????????? scanf("%d",&stu[i].score[j]);

??????????????????????????? sum+=stu[i].score[j];

?????????????????? }

?????????????????? stu[i].avr=sum/3.0;

???????? }

???????? fp=fopen("stud","w");

???????? for(i=0;i<5;i++)

???????? if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)

?????????????????? printf("file write error\n");

???????? fclose(fp);

}

總結(jié)

以上是生活随笔為你收集整理的C语言经典程序100例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。