① 2010計算機二級c語言上機題庫 要原題的 急急急 在線等
一、改錯題
【分析】:改錯題的錯誤一般可分為兩類,一類是語法錯誤,這類錯誤可通過調試程序改正,較容易;另一類是邏輯錯誤,這類錯誤程序能運行,但結果不正確,這類錯誤相對較難,修改前必須要看懂和理解程序。
#include"stdio.h"
#define n 4 #define m 3 /*語法錯,#define m 3需另起一行*/
int a[n][m],s[m];
p(int j)/*此函數的功能為:找出a數組中第j列的最小元素的值及行號,函數成功運行後,i中即為j列的最小元素的行號,s[j]中即為j列的最小元素的值*/
{int k,i,x;
x=a[0][j];i=0; /*邏輯錯,從函數的功能可知,a[0][j]也應賦值給s[j],所以x=a[0][j]應改為s[j]=x=a[0][j]*/
for(k=1;k<N;K++)< p>
if(a[k][j]<X)< p>
{i=k;s[j]=x=a[k][j];}
return i;
}
main()
{int index[m],i,j,k;
for(i=0;i<N;I++)< p>
for(j=0;j<M;J++)< p>
scanf("%d",a[i][j]);/*語法錯,但編譯時不會報錯,scanf語句的一般形式為scanf(格式控制,地址表列),所以a[i][j]應改為&a[i][j])*/
for(j=0,j<M;J++)< p>
{index[j]=p[j];
printf("a[%d,%d]=%d\n",index[j],j,s[j]);
}
i=s[1];k=0; /*邏輯錯,數組s中存放的是a數組中每一列的最小值,比較時應從數組的第0個元素開始,而下面的for循環是從第1個元素開始的,所以i=s[1]應改為i=s[0]*/
for(j=1;j<>
if(s[j]<I)< p>
{i=s[j];k=j;}
printf("min=a[%d,%d]=%d",index[k],k,i); }
二、編程題
【分析】:本題的主要功能是建立一個3行8列的二維數組,並給其元素賦值,其中第1、2行的值可通過遞推公式xi+1=(25*xi+357)%1024得到,第三行的值取前兩行同列元素的最大公約數,所以編程時可用一個函數來實現求公約數的演算法。
#include
#include
#define n 8
/*函數gcd實現求最大公約數的演算法*/
gcd(int a,int b)
{int c;
while(b!=0)
{c=a%b;a=b;b=c;}
return a;
}
main()
{int i,j,x,a[3][n];
FILE *f;
if((f=fopen("d:\\temp\\1\\myf2.out","w"))= =NULL)
{printf("Create File myf2.out Failed!\n");exit(0);}
x=26;
/*下面二重for循環實現給第1、2行數組元素賦值的功能*/
for(i=0;i<2;i++)
for(j=0;j<N;J++)< p>
{a[i][j]=x;x=(25*x+357)%1024;}
/*下面for循環通過調用gcd函數實現給第3行數組元素賦值的功能*/
for(j=0;j<N;J++)< p>
a[2][j]=gcd(a[0][j],a[1][j]);
/*下面for循環實現按題目所給格式輸出二維數組的功能*/
for(i=0;i<3;i++)
{for(j=0;j<>
fprintf(f,"\n");
}
fclose(f); }
2010年計算機等級考試二級C語言上機習題(2)
一、改錯題
【知識點】整數數位處理、數字字元與相應數字的轉換、程序調式
【解析】程序中的錯誤一般可以分為兩類,一類是語法錯誤,即程序中有拼寫錯誤,書寫不符合C語言的規定等,此類錯誤可通過調試(按F9鍵),根據提示進行改正。另一類是邏輯錯誤,程序調試已通過(報success),但運行結果不正確,此類錯誤的修改必須要理解程序後方能改正。
使用putchar函數必須在程序開頭加上文件包含#include "stdio.h";scanf語句中必須是地址序列,故scanf("num=%d",num);應改為scanf("num=%d",&num);,且調式時注意將「num=」原樣輸入;某數字若轉換為相應數字字元,應加上字元'0'或48(字元'0'的ASCII碼值),故digit[n++]=m%10;應改為digit[n++]=m%10+'0';;最後輸出時,n已在前面多加了一次,故而輸出時應先減1,故for(;n>=0;n--)中第一個表達式應加上n--或--n或n=n-1。
【答案】①在程序開頭加上#include "stdio.h"
②將原第五行的scanf("num=%d",num);改為scanf("num=%d",&num);
③將原第十一行的digit[n++]=m%10;改為digit[n++]=m%10+'0';
④將原第十六行的for(;n>=0;n--)改為for(n--;n>=0;n--)
二、編程題
【知識點】字元串應用、數據文件的使用
【解析】注意,按要求必須調用函數,且使用數據文件完成輸出。使用數據文件有5大步驟:①#include ,②用FILE *定義指針,③用fopen("A:\\myf2.out","w")打開文件並賦值給指針,④用fprintf輸出結果,⑤用fclose關閉文件。
【注意】fopen("A:\\myf2.out","w")中盤符A:後要加雙斜杠表示根目錄,因為C語言用轉義字元'\\'才能表達字元\;另外,文件的命名一定要嚴格按照規定處理,千萬不要隨便命名。
【參考答案】
#include "stdio.h"
int compress(char s[])
{int n,k=0,count=0;
if(s[0]!=NULL) n=k+1;
while(s[n]!=NULL)
{if(s[k]= =s[n]){n++;count++;}
else {s[++k]=s[n];n++;}
}
s[++k]='\0';
return count;
}
main()
{char num[100];
int count=0;
FILE *fp;
fp=fopen("A:\\myf2.out","w");
gets(num);
count=compress(num);
fprintf(fp,"%s",num);
printf("%d",count);
fclose(fp); }
運行結果如下:
@ I wil sucesful & and you to ! #
2010年計算機等級考試二級C語言上機習題(3)
一、改錯題
【知識點】選擇法排序、指針與字元串、程序的調試
【解析】程序中的錯誤一般可以分為兩類,一類是語法錯誤,即程序中有拼寫錯誤,書寫不符合C語言的規定等,此類錯誤可通過調試(按F9鍵),根據提示進行改正。另一類是邏輯錯誤,程序調試已通過(報success),但運行結果不正確,此類錯誤的修改必須要理解程序後方能改正。
本題要求「從鍵盤上接受一個含有空格的字元串」,scanf是做不到的,它遇到第一個空格即認為讀入完畢,故應替換成gets函數;程序中使用了strcpy函數,就必須在程序開頭加上文件包含#include "string.h";根據選擇法升序排序要領,每次找到一個「更小的字元」由r指著,直到指向最小的為止,而不是修改r所指字元的值,故if(*r>*q)*r=*q;應改為if(*r>*q) r=q;;當r與p所指不同時,交換二者所指字元的值,即使得p所指字元為每次的最小,故應將if(r/=p)改為if(r!=p)。
【答案】①在程序開頭加上文件包含#include "string.h"
②將原第五行的scanf("%s",str);改為gets(str);
③將原第八行的*r=*q; 改為r=q;
④將原第九行的if(r/=p)改為if(r!=p)
二、編程題
【知識點】二維數組的應用、數據文件的使用
【解析】 關於「二維數組應用」的題目,一般都要仔細觀察,找出規律後再編程。本題中原數組的任意一個元素a[i][j]旋轉後,位置處於b中第3-j行i列。注意,按要求必須調用函數,且使用數據文件完成輸出。使用數據文件有5大步驟:①#include ,②用FILE *定義指針,③用fopen("A:\\myf2.out","w")打開文件並賦值給指針,④用fprintf輸出結果,⑤用fclose關閉文件。
【注意】fopen("A:\\myf2.out","w")中盤符A:後要加雙斜杠表示根目錄,因為C語言用轉義字元'\\'才能表達字元\;另外,文件的命名一定要嚴格按照規定處理,千萬不要隨便命名。
【參考答案】
#include "stdio.h"
int rotate(int a[4][4],int b[4][4]);
main()
{FILE *fp;
int i,j,x[4][4],y[4][4],s;
fp=fopen("A:\\myf2.out","w");
if(fp= =NULL){printf("Can't create file myf2.out!");
exit(1);}
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&x[i][j]);
s=rotate(x,y);
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
fprintf(fp,"%d ",y[i][j]);
fprintf(fp,"\n");
}
fprintf(fp,"sum=%d\n",s);
fclose(fp);
}
int rotate(int a[4][4],int b[4][4])
{int i,j,s=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
b[3-j][i]=a[i][j];
for(i=0;i<4;i++) s+=b[i][i];
return s; }
2010年計算機等級考試二級C語言上機習題(4)
一、改錯題
含有錯誤的源程序如下:
void match(char *pat,char str) ①
{char *p=pat,*q=str;
int i=0; ②
while((*p!=NULL)&&(*q!=NULL))
if(*p= =*q||*p= ='?')p++,q++;
else if(*p= ='*')
{p++;
while(*q!=*p&&*q!=NULL)q++;
}
else i=0;break; ③
if(*p!=NULL||*q!=NULL)i=0;
return i;
}
}
【知識點】字元串處理、程序的調試
【解析】程序中的錯誤一般可以分為兩類,一類是語法錯誤,即程序中有拼寫錯誤,書寫不符合C語言的規定等,此類錯誤可通過調試(按F9鍵),根據提示進行改正。另一類是邏輯錯誤,程序調試已通過(報Success),但運行結果不正確,此類錯誤的修改必須要理解程序後方能改正。
程序中用到系統預設的符號常量NULL,又未加「文件包含」處理,按F9後即編譯時系統會報錯,故應在最前面加上include 或將以下全部NULL改為0。函數match分明有返回值,故系統也會報錯,應將void改為int;變數i的作用是:當匹配時取值1,否則取值0,根據③處,易於發現i初值應取1,故②處應改為i=1,當發現不匹配時,立即置為0,並跳出循環,此兩句應是一個整體,應構成復合語句。②③均為邏輯錯誤。
【答案】(1)在最前面加上include 或將以下全部NULL改為0
(2)加下劃線的部分改為:
①int match(char *pat, char *str)
②i=1
③{ i=0;break;}
二、編程題
【知識點】窮舉法、數據文件的使用
【解析】將30~50之間的每一個數都進行判斷,就不會有遺漏。注意,按要求必須調用函數,且使用數據文件完成輸出。使用數據文件有5大步驟:①#include ,②用FILE *定義指針,③用fopen("A:\\myf2.out","w")打開文件並賦值給指針,④用fprintf輸出結果,⑤用fclose關閉文件。
【注意】fopen("A:\\myf2.out","w")中盤符A:後要加雙斜杠表示根目錄,因為C語言用轉義字元'\\'才能表達字元\;另外,文件的命名一定要嚴格按照規定處理,千萬不要隨便命名。
【參考答案】
#include
int inv(int x)
{int y;
y=x/10+x%10*10; /*此句可將某兩位正整數的十位與個位數字換位*/
return y;
}
main()
{FILE *out;
int i,j;
if((out=fopen("A:\\myf2.out","w"))= =NULL)
{printf("Open file myf2.out failed!\n");exit(1);}
for(i=30;i<50;i++)
for(j=30;j<50;j++)
if((i/10!=i%10)&&(i*j= =inv(i)*inv(j))) /* i/10!=i%10確保十位與個位數字不同*/
fprintf(out,"%d*%d=%d*%d\n",i,j,inv(i),inv(j));
fclose(out); }
2010年計算機等級考試二級C語言上機習題(5)
一、改錯題
【分析】:對於改錯題的程序中的錯誤一般可分為兩類,一類是語法錯誤,程序中的語句不符合C語言的語法,拼寫錯誤,這類的錯誤可通過調試程序改正。另一類是邏輯錯誤,程序調試已通過,但運行結果不正確,這類錯誤的修改必須要看懂和理解程序。
#include
#define N 50
void sum(int n,int *pa)
/*屬第一類錯誤。若聲明為void類型,則該函數沒有返回值,但程序要求返回前n的和,所以類型聲明不正確,應改為: int 或去掉*/
{ int count, total,temp;
*pa=3;*++pa=2;
total=5; count=2;
while(count++<N)< p>
{ temp=*(pa-1)**pa;
if(temp<10)
{ total+=temp; *(++pa)=temp;
}
else
{*++pa=temp/10;
total+=*pa;
if(count
/*屬第二類錯誤。若乘積為兩位數,已把其十位數字作為數列的後續項,但若數列的個數沒有超過n時,將該乘積個位數字作為數列的後續項。*++pa 與*pa++不同,此處應為: *++pa */
}
}
return total;
}
main()
{ int tol,n,i,num[n];
/*屬第一類錯誤。數組的聲明不正確,數組的下標必須為常量或常量標識符。應改為:num[N] 或 num[50] */
do
{ printf("Input n=?(2<N<50)");< p>
scanf("%d",&n);
}while(n<=2||n>=50);
tol=sum(N,num);
/*屬第二類錯誤。本題要求生成數列的前n(n<50)項,而N是常量。應改為:sum(n,num) */
for(i=0;i<N;I++)< p>
printf((i+1)%5?"%5d":"%5d\n",num[i]);
printf("\n");
printf("%d",tol);
}
2010年計算機等級考試二級C語言上機習題(6)
一、改錯題
含有錯誤的源程序:
#include
#include
#define N 5
struct student
{ char name[10];
int score;
} ―――――――――――①
void sort(struct student stud[],int n)
{ int i,j;
struct student p;
for(i=1;i<>
{ p=stud[i];
for(j=i-1;j>0 && p>stud[j];j--) ―――――――――――③
stud[j+1]=stud[j];
stud[j+1]=p;
}
}
void main()
{ struct student stud[N]={"aaa",60,"bbb",90,"ccc",85,"ddd",65,"yyy",77};
int i;
sort(stud,N);
printf("sorted data:\n");
for(i=0;i< printf(?%s\t%d\n?,stud[i]);>
}
【知識點】結構體、排序
【難點】 插入法排序
【解析】本題是將未排序的數組元素採用插入排序方法進行排序,其思想是:從第2個元素開始,最初與第一個元素進行比較,由大到小排列在適當位置,成為排好序的數組元素一員。再依次將待排序的元素與前面已排好序的元素從後向前進行比較,如果大於該元素,則該元素向後移一位,直到待排序的元素小於已排好序的某一元素,則直接插入到該元素之後。直到待排序的元素全部完成為止。本程序的sort函數中i表示待排序的元素下標,j表示已排好序的元素下標。
【答案】(1)標號①:} 改為 }; (2)標號②:for(i=1;i
(3)標號③:for(j=i-1;j>0 && p>stud[j];j--) 改為 j>=0 && p.score>stud[j].score;j--)
(4) 標號④:printf("%s\t%d\n",stud[i]); 改為printf("%s\t%d\n",stud[i].name,stud[i].score );
二、編程題
【知識點】字元串操作、函數、文件
【解析】仔細閱讀並分析【編程要求】。【編程要求1】已對函數Replace_string指定了函數名、函數類型、形參類型和個數,並詳細說明了其功能。在line指向的字元串中查找str1指向的字元子串的關鍵語句是當「str1[j]= =line[loc]&&str1[j]!='\0'」時繼續循環查找,當 因「str1[j]!='\0'」退出循環時,則找到str1指向的字元子串,此時用str2指向的字元串替換在line中的str1字元子串,返回。【編程要求2】編寫主函數主要功能要求是保存結果到數據文件、調用Replace_string函數、輸入測試數據。這部分是最常規和基本的要求,必須掌握。
【參考答案】
#include
#include
int Replace_string (char line[],char str1[],char str2[])
{ int i=0,j,loc;
char temp[80];
while(i<=strlen(line)-strlen(str2))
{ j=0;loc=i;
while(str1[j]= =line[loc]&&str1[j]!='\0')
{ loc++;j++;}
if(str1[j]= ='\0')
{strcpy(temp,&line[loc]);strcpy(&line[i],str2);
i+=strlen(str2);strcpy(&line[loc],temp);
return 1;
}
else i++;
}
return 0;
}
main()
{ FILE *fp;
char string[100]="My EXAM_number is 0112404321.";
char number[11]="0112404321",num[11];
fp=fopen("myf2.out","w");
fprintf(fp,"%s\n",string);
gets(num);
Replace_string (string,number,num);
fprintf(fp,"%s\n",string);
fprintf(fp,"\n my exam number is: %s\n","0112404321");
fclose(fp); }
2010年計算機等級考試二級C語言上機習題(7)
一、改錯題
含有錯誤的源程序如下:
#include
#include
struct T
{char name [20],num[20];
};
void sort(struct T items[],int low,int high)
{struct T temp;
int k,j;
for(k=low;k<HIGH;K++)< p>
for(j=low;j<>
if(items[j].name>items[j+1].name) ②
{temp=items[j];items[j]=items[j+1];items[j+1]=temp;}
}
void main(void)
{struct T stu[4]={"Wang","6723","Cai","2106","Zhang", ③
"5129","Chang","4512","An","6868"};
int k;
sort(stu,0,4);
printf("The Sorted Array:\n");
for(k=0;k<5;k++)
printf("name:%s,num:%s\n",stu[k]->name,stu[k]->num); ④
}
【知識點】冒泡排序、結構體數組、程序的調試
【解析】程序中的錯誤一般可以分為兩類,一類是語法錯誤,即程序中有拼寫錯誤,書寫不符合C語言的規定等,此類錯誤可通過調試(按F9鍵),根據提示進行改正。另一類是邏輯錯誤,程序調試已通過(報success),但運行結果不正確,此類錯誤的修改必須要理解程序後方能改正。
本題使用起泡法完成排序,①處j<HIGH-K-1等價與J<=HIGH-K-2,J最大取HIGH-K-2時,J+1才取到HIGH-K-1,例如,剛開始當K為0時,最後一個比較的元素下標為HIGH-1,而實際上根據實參(值已為4)傳遞而來的最後一個元素的下標應為HIGH,故①處應改為J<HIGH-K或J<=HIGH-K-1,此為邏輯錯誤。②③④處均屬於語法錯誤:字元串的比較不能使用關系運算符,要藉助STRCMP函數;所賦值有5個,數組維數就必須大於等於5;STU[K]不是指針,不能用指向成員符描述成員。< p>
【答案】加下劃線的部分改為:
①j<HIGH-K或J<=HIGH-K-1< p>
②if(strcmp(items[j].name, items[j+1].name)>0)
③stu[5]
④stu[k].name, stu[k].num
2010年計算機等級考試二級C語言上機習題(7)
二、編程題
【知識點】字元串處理、函數調用、數據文件的使用
【解析】編程題的結果一般都是客觀的,這樣便於老師主觀閱卷評分,雖然考生個人的准考證號是各異的,對評閱老師卻是可以通過所交磁碟標簽直接觀察到,故必須如實輸入,不能直接套用題中例子。注意,按要求必須調用函數,且使用數據文件完成輸出。使用數據文件有5大步驟:①#include ,②用FILE *定義指針,③用fopen("A:\\myf2.out","w")打開文件並賦值給指針,④用fprintf輸出結果,⑤用fclose關閉文件。
【注意】fopen("A:\\myf2.out","w")中盤符A:後要加雙斜杠表示根目錄,因為C語言用轉義字元'\\'才能表達字元\;另外,文件的命名一定要嚴格按照規定處理,千萬不要隨便命名。
【參考答案】
#include
#include
#include
void count(char a[],char w[][10],int n,int b[])
{int i=0,j,k=0;char s[10];
for(i=0;a[i]!=0;i++)
{if(isalpha(a[i]))s[k++]=a[i]; /* isalpha函數用於判斷字元是否為字母*/
/*此句將連續字母組成的一個單詞存放於s中,便於與二維數組中的某一行進行比較*/
else
{s[k]= '\0'; /*加上'\0'才能使s中存放的是字元串,才能使用strcmp函數進行比較*/
for(j=0;j<N;J++)< p>
if(strcmp(s,w[j])= =0){b[j]++;break;}
k=0; /*讓s重新存放另一個單詞*/
}
}
}
main()
{FILE *fp;
char line[80]="this is a book,that is an apple",word[6][10]={"this","that","is","a","an","book"};
/*按要求初始化,用二維字元數組的一行存放一個單詞便於後面比較處理*/
int c[6]={0},m;
count(line,word,6,c);fp=fopen("A:\\myf2.out","w");
if(fp= =NULL){printf("Can't open file");exit(1);}
for(m=0;m<6;m++)fprintf(fp,"%s:%d",word[m],c[m]);
fprintf(fp,"\nmy exam number is:%s","0112400123"); /*注意輸入實際准考證號*/
fclose(fp);
}
② 密碼轉化問題,第一行輸入START,第二行輸入密碼,均為大寫字母,最後一行輸入END,測試數據為n組
這個很簡單的啦
#include<stdio.h>
#include<string.h>
int main()
{
char s[201];
int i;
// freopen("filename","r",stdin);
while(gets(s))
{
if(strcmp(s,"START")==0)
{
gets(s);
for(i=0;s[i];i++)
{
if(s[i]>='A' && s[i]<='Z')
printf("%c",(s[i]-'A'+21)%26+'A');
else printf("%c",s[i]);
}
}
else
{
printf("error");
return 0;
}
gets(s);//用來裝載 END
if(strcmp(s,"END")!=0)
{
printf("error");
return 0;
}
}
return 0;
}
核心演算法:(s[i]-'A'+21)%26+'A',這個實現了字母右移5位
③ 求C語言題目
c語言經典100題:
【程序1】
題目:有1,2,3,4個數字,能組成多少個互不相同且無重復數字的三位數 都是多少
1.程序分析:可填在百位,十位,個位的數字都是1,2,3,4.組成所有的排列後再去
掉不滿足條件的排列.
2.程序源代碼:
main()
{
int i,j,k;
printf("\n");
for(i1;i<5;i++) /*以下為三重循環*/
for(j1;j<5;j++)
for (k1;k<5;k++)
{
if (i!k&&i!j&&j!k) /*確保i,j,k三位互不相同*/
printf("%d,%d,%d\n",i,j,k);
}
}
【程序2】
題目:企業發放的獎金根據利潤提成.利潤(i)低於或等於10萬元時,獎金可提10%;利潤高
於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可可提
成7.5%;20萬到40萬之間時,高於20萬元的部分,可提成5%;40萬到60萬之間時高於
40萬元的部分,可提成3%;60萬到100萬之間時,高於60萬元的部分,可提成1.5%,高於
100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤i,求應發放獎金總數
1.程序分析:請利用數軸來分界,定位.注意定義時需把獎金定義成長整型.
2.程序源代碼:
main()
{
long int i;
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
scanf("%ld",&i);
bonus1100000*0.1;bonus2bonus1+100000*0.75;
bonus4bonus2+200000*0.5;
bonus6bonus4+200000*0.3;
bonus10bonus6+400000*0.15;
if(i<100000)
bonusi*0.1;
else if(i<200000)
bonusbonus1+(i-100000)*0.075;
else if(i<400000)
bonusbonus2+(i-200000)*0.05;
else if(i<600000)
bonusbonus4+(i-400000)*0.03;
else if(i<1000000)
bonusbonus6+(i-600000)*0.015;
else
bonusbonus10+(i-1000000)*0.01;
printf("bonus%d",bonus);
}
【程序3】
題目:一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少
1.程序分析:在10萬以內判斷,先將該數加上100後再開方,再將該數加上268後再開方,如果開方後
的結果滿足如下條件,即是結果.請看具體分析:
2.程序源代碼:
#include "math.h"
main()
{
long int i,x,y,z;
for (i1;i2)/*如果是閏年且月份大於2,總天數應該加一天*/
sum++;
printf("it is the %dth day.",sum);}
【程序4】
題目:輸入某年某月某日,判斷這一天是這一年的第幾天?
1.程序分析:以3月5日為例,應該先把前兩個月的加起來,然後再加上5天即本年的第幾天,特殊
情況,閏年且輸入月份大於3時需考慮多加一天。
2.程序源代碼:
main()
{
int day,month,year,sum,leap;
printf("\nplease input year,month,day\n");
scanf("%d,%d,%d",&year,&month,&day);
switch(month)/*先計算某月以前月份的總天數*/
{
case 1:sum0;break;
case 2:sum31;break;
case 3:sum59;break;
case 4:sum90;break;
case 5:sum120;break;
case 6:sum151;break;
case 7:sum181;break;
case 8:sum212;break;
case 9:sum243;break;
case 10:sum273;break;
case 11:sum304;break;
case 12:sum334;break;
default:printf("data error");break;
}
sumsum+day; /*再加上某天的天數*/
if(year%4000||(year%40&&year%100!0))/*判斷是不是閏年*/
leap1;
else
leap0;
if(leap1&&month>2)/*如果是閏年且月份大於2,總天數應該加一天*/
sum++;
printf("It is the %dth day.",sum);}
【程序5】
題目:輸入三個整數x,y,z,請把這三個數由小到大輸出.
1.程序分析:我們想辦法把最小的數放到x上,先將x與y進行比較,如果x>y則將x與y的值進行交換,
然後再用x與z進行比較,如果x>z則將x與z的值進行交換,這樣能使x最小.
2.程序源代碼:
main()
{
int x,y,z,t;
scanf("%d%d%d",&x,&y,&z);
if (x>y)
{tx;xy;yt;} /*交換x,y的值*/
if(x>z)
{tz;zx;xt;}/*交換x,z的值*/
if(y>z)
{ty;yz;zt;}/*交換z,y的值*/
printf("small to big: %d %d %d\n",x,y,z);
}
【程序6】
題目:用*號輸出字母c的圖案.
1.程序分析:可先用'*'號在紙上寫出字母c,再分行輸出.
2.程序源代碼:
#include "stdio.h"
main()
{
printf("hello c-world!\n");
printf(" ****\n");
printf(" *\n");
printf(" * \n");
printf(" ****\n");
}
【程序7】
題目:輸出特殊圖案,請在c環境中運行,看一看,very beautiful!
1.程序分析:字元共有256個.不同字元,圖形不一樣.
2.程序源代碼:
#include "stdio.h"
main()
{
char a176,b219;
printf("%c%c%c%c%c\n",b,a,a,a,b);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",a,a,b,a,a);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",b,a,a,a,b);}
【程序8】
題目:輸出9*9口訣.
1.程序分析:分行與列考慮,共9行9列,i控制行,j控制列.
2.程序源代碼:
#include "stdio.h"
main()
{
int i,j,result;
printf("\n");
for (i1;i<10;i++)
{ for(j1;j<10;j++)
{
resulti*j;
printf("%d*%d%-3d",i,j,result);/*-3d表示左對齊,佔3位*/
}
printf("\n");/*每一行後換行*/
}
}
【程序9】
題目:要求輸出國際象棋棋盤.
1.程序分析:用i控制行,j來控制列,根據i+j的和的變化來控制輸出黑方格,還是白方格.
2.程序源代碼:
#include "stdio.h"
main()
{
int i,j;
for(i0;i<8;i++)
{
for(j0;j<8;j++)
if((i+j)%20)
printf("%c%c",219,219);
else
printf(" ");
printf("\n");
}
}
【程序10】
題目:列印樓梯,同時在樓梯上方列印兩個笑臉.
1.程序分析:用i控制行,j來控制列,j根據i的變化來控制輸出黑方格的個數.
2.程序源代碼:
#include "stdio.h"
main()
{
int i,j;
printf("\1\1\n");/*輸出兩個笑臉*/
for(i1;i<11;i++)
{
for(j1;j<i;j++)
printf("%c%c",219,219);
printf("\n");
}
}
【程序11】
題目:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月
後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少
1.程序分析: 兔子的規律為數列1,1,2,3,5,8,13,21....
2.程序源代碼:
main()
{
long f1,f2;
int i;
f1f21;
for(i1;i<20;i++)
{ printf("%12ld %12ld",f1,f2);
if(i%20) printf("\n");/*控制輸出,每行四個*/
f1f1+f2; /*前兩個月加起來賦值給第三個月*/
f2f1+f2; /*前兩個月加起來賦值給第三個月*/
}
}
【程序12】
題目:判斷101-200之間有多少個素數,並輸出所有素數.
1.程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,
則表明此數不是素數,反之是素數.
2.程序源代碼:
#include "math.h"
main()
{
int m,i,k,h0,leap1;
printf("\n");
for(m101;m<200;m++)
{ ksqrt(m+1);
for(i2;i<k;i++)
if(m%i0)
{leap0;break;}
if(leap) {printf("%-4d",m);h++;
if(h%100)
printf("\n");
}
leap1;
}
printf("\nthe total is %d",h);
}
【程序13】
題目:列印出所有的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該數
本身.例如:153是一個"水仙花數",因為1531的三次方+5的三次方+3的三次方.
1.程序分析:利用for循環控制100-999個數,每個數分解出個位,十位,百位.
2.程序源代碼:
main()
{
int i,j,k,n;
printf("'water flower'number is:");
for(n100;n<1000;n++)
{
in/100;/*分解出百位*/
jn/10%10;/*分解出十位*/
kn%10;/*分解出個位*/
if(i*100+j*10+ki*i*i+j*j*j+k*k*k)
{
printf("%-5d",n);
}
}
printf("\n");
}
【程序14】
題目:將一個正整數分解質因數.例如:輸入90,列印出902*3*3*5.
程序分析:對n進行分解質因數,應先找到一個最小的質數k,然後按下述步驟完成:
(1)如果這個質數恰等於n,則說明分解質因數的過程已經結束,列印出即可.
(2)如果nk,但n能被k整除,則應列印出k的值,並用n除以k的商,作為新的正整數你n,
重復執行第一步.
(3)如果n不能被k整除,則用k+1作為k的值,重復執行第一步.
2.程序源代碼:
/* zheng int is divided yinshu*/
main()
{
int n,i;
printf("\nplease input a number:\n");
scanf("%d",&n);
printf("%d",n);
for(i2;i90分的同學用a表示,60-89分之間的用b表示,
60分以下的用c表示.
1.程序分析:(a>b) a:b這是條件運算符的基本例子.
2.程序源代碼:
main()
{
int score;
char grade;
printf("please input a score\n");
scanf("%d",&score);
gradescore>90 'a':(score>60 'b':'c');
printf("%d belongs to %c",score,grade);
}
【程序15】
題目:利用條件運算符的嵌套來完成此題:學習成績>90分的同學用A表示,60-89分之間的用B表示,
60分以下的用C表示。
1.程序分析:(a>b)?a:b這是條件運算符的基本例子。
2.程序源代碼:
main()
{
int score;
char grade;
printf("please input a score\n");
scanf("%d",&score);
gradescore>90?'A':(score>60?'B':'C');
printf("%d belongs to %c",score,grade);
}
【程序16】
題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數.
1.程序分析:利用輾除法.
2.程序源代碼:
main()
{
int a,b,num1,num2,temp;
printf("please input two numbers:\n");
scanf("%d,%d",&num1,&num2);
if(num1 { tempnum1;
num1num2;
num2temp;
}
anum1;bnum2;
while(b!0)/*利用輾除法,直到b為0為止*/
{
tempa%b;
ab;
btemp;
}
printf("gongyueshu:%d\n",a);
printf("gongbeishu:%d\n",num1*num2/a);
}
【程序17】
題目:輸入一行字元,分別統計出其中英文字母,空格,數字和其它字元的個數.
1.程序分析:利用while語句,條件為輸入的字元不為'\n'.
2.程序源代碼:
#include "stdio.h"
main()
{char c;
int letters0,space0,digit0,others0;
printf("please input some characters\n");
while((cgetchar())!'\n')
{
if(c>'a'&&c'a'&&c'0'&&c<'9')
digit++;
else
others++;
}
printf("all in all:char%d space%d digit%d others%d\n",letters,
space,digit,others);
}
【程序18】
題目:求sa+aa+aaa+aaaa+aa...a的值,其中a是一個數字.例如2+22+222+2222+22222(此時
共有5個數相加),幾個數相加有鍵盤控制.
1.程序分析:關鍵是計算出每一項的值.
2.程序源代碼:
main()
{
int a,n,count1;
long int sn0,tn0;
printf("please input a and n\n");
scanf("%d,%d",&a,&n);
printf("a%d,n%d\n",a,n);
while(count<n)
{
tntn+a;
snsn+tn;
aa*10;
++count;
}
printf("a+aa+...%ld\n",sn);
}
【程序19】
題目:一個數如果恰好等於它的因子之和,這個數就稱為"完數".例如61+2+3.編程
找出1000以內的所有完數.
1. 程序分析:請參照程序<--上頁程序14.
2.程序源代碼:
main()
{
static int k[10];
int i,j,n,s;
for(j2;j<1000;j++)
{
n-1;
sj;
for(i1;i {
if((j%i)0)
{ n++;
ss-i;
k[n]i;
}
}
if(s0)
{
printf("%d is a wanshu",j);
for(i0;i printf("%d,",k[i]);
printf("%d\n",k[n]);
}
}
}
【程序20】
題目:一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在
第10次落地時,共經過多少米 第10次反彈多高
1.程序分析:見下面注釋
2.程序源代碼:
main()
{
float sn100.0,hnsn/2;
int n;
for(n2;n0)
{x1(x2+1)*2;/*第一天的桃子數是第2天桃子數加1後的2倍*/
x2x1;
day--;
}
printf("the total is %d\n",x1);
}
【程序21】
題目:猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個
第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以後每天早上都吃了前一天剩下
的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。
1.程序分析:採取逆向思維的方法,從後往前推斷。
2.程序源代碼:
main()
{
int day,x1,x2;
day9;
x21;
while(day>0)
{x1(x2+1)*2;/*第一天的桃子數是第2天桃子數加1後的2倍*/
x2x1;
day--;
}
printf("the total is %d\n",x1);
}
【程序22】
題目:兩個乒乓球隊進行比賽,各出三人.甲隊為a,b,c三人,乙隊為x,y,z三人.已抽簽決定
比賽名單.有人向隊員打聽比賽的名單.a說他不和x比,c說他不和x,z比,請編程序找出
三隊賽手的名單.
1.程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,
則表明此數不是素數,反之是素數.
2.程序源代碼:
main()
{
char i,j,k;/*i是a的對手,j是b的對手,k是c的對手*/
for(i'x';i<'z';i++)
for(j'x';j<'z';j++)
{
if(i!j)
for(k'x';k<'z';k++)
{ if(i!k&&j!k)
{ if(i!'x'&&k!'x'&&k!'z')
printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);
}
}
}
}
【程序23】
題目:列印出如下圖案(菱形)
*
***
******
********
******
***
*
1.程序分析:先把圖形分成兩部分來看待,前四行一個規律,後三行一個規律,利用雙重
for循環,第一層控制行,第二層控制列.
2.程序源代碼:
main()
{
int i,j,k;
for(i0;i<3;i++)
{
for(j0;j<2-i;j++)
printf(" ");
for(k0;k<2*i;k++)
printf("*");
printf("\n");
}
for(i0;i<2;i++)
{
for(j0;j<i;j++)
printf(" ");
for(k0;k<4-2*i;k++)
printf("*");
printf("\n");
}
}
【程序24】
題目:有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和.
1.程序分析:請抓住分子與分母的變化規律.
2.程序源代碼:
main()
{
int n,t,number20;
float a2,b1,s0;
for(n1;n<number;n++)
{
ss+a/b;
ta;aa+b;bt;/*這部分是程序的關鍵,請讀者猜猜t的作用*/
}
printf("sum is %9.6f\n",s);
}
【程序25】
題目:求1+2!+3!+...+20!的和
1.程序分析:此程序只是把累加變成了累乘.
2.程序源代碼:
main()
{
float n,s0,t1;
for(n1;n<20;n++)
{
t*n;
s+t;
}
printf("1+2!+3!...+20!%e\n",s);
}
【程序26】
題目:利用遞歸方法求5!.
1.程序分析:遞歸公式:fnfn_1*4!
2.程序源代碼:
#include "stdio.h"
main()
{
int i;
int fact();
for(i0;i<5;i++)
printf("\40:%d!%d\n",i,fact(i));
}
int fact(j)
int j;
{
int sum;
if(j0)
sum1;
else
sumj*fact(j-1);
return sum;
}
【程序27】
題目:利用遞歸函數調用方式,將所輸入的5個字元,以相反順序列印出來.
程序源代碼:
#include "stdio.h"
main()
{
int i5;
void palin(int n);
printf("\40:");
palin(i);
printf("\n");
}
void palin(n)
int n;
{
char next;
if(n<1)
{
nextgetchar();
printf("\n\0:");
putchar(next);
}
else
{
nextgetchar();
palin(n-1);
putchar(next);
}
}
【程序28】
題目:有5個人坐在一起,問第五個人多少歲 他說比第4個人大2歲.問第4個人歲數,他說比第
3個人大2歲.問第三個人,又說比第2人大兩歲.問第2個人,說比第一個人大兩歲.最後
問第一個人,他說是10歲.請問第五個人多大
1.程序分析:利用遞歸的方法,遞歸分為回推和遞推兩個階段.要想知道第五個人歲數,需知道
第四人的歲數,依次類推,推到第一人(10歲),再往回推.
2.程序源代碼:
age(n)
int n;
{
int c;
if(n1) c10;
else cage(n-1)+2;
return(c);
}
main()
{ printf("%d",age(5));
}
【程序29】
題目:給一個不多於5位的正整數,要求:一,求它是幾位數,二,逆序列印出各位數字.
1. 程序分析:學會分解出每一位數,如下解釋:(這里是一種簡單的演算法,師專數002班趙鑫提供)
2.程序源代碼:
main( )
{
long a,b,c,d,e,x;
scanf("%ld",&x);
ax/10000;/*分解出萬位*/
bx%10000/1000;/*分解出千位*/
cx%1000/100;/*分解出百位*/
dx%100/10;/*分解出十位*/
ex%10;/*分解出個位*/
if (a!0) printf("there are 5, %ld %ld %ld %ld %ld\n",e,d,c,b,a);
else if (b!0) printf("there are 4, %ld %ld %ld %ld\n",e,d,c,b);
else if (c!0) printf(" there are 3,%ld %ld %ld\n",e,d,c);
else if (d!0) printf("there are 2, %ld %ld\n",e,d);
else if (e!0) printf(" there are 1,%ld\n",e);
}
【程序30】
題目:一個5位數,判斷它是不是迴文數.即12321是迴文數,個位與萬位相同,十位與千位相同.
1.程序分析:同29例
2.程序源代碼:
main( )
{
long ge,shi,qian,wan,x;
scanf("%ld",&x);
wanx/10000;
qianx%10000/1000;
shix%100/10;
gex%10;
if (gewan&&shiqian)/*個位等於萬位並且十位等於千位*/
printf("this number is a huiwen\n");
else
printf("this number is not a huiwen\n");
}
【程序31】
題目:請輸入星期幾的第一個字母來判斷一下是星期幾,如果第一個字母一樣,則繼續
判斷第二個字母.
1.程序分析:用情況語句比較好,如果第一個字母一樣,則判斷用情況語句或if語句判斷第二個字母.
2.程序源代碼:
#include
void main()
{
char letter;
printf("please input the first letter of someday\n");
while ((lettergetch())!'y')/*當所按字母為y時才結束*/
{ switch (letter)
{case 's':printf("please input second letter\n");
if((lettergetch())'a')
printf("saturday\n");
else if ((lettergetch())'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((lettergetch())'u')
printf("tuesday\n");
else if ((lettergetch())'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!
程序源代碼:
#include
void main(void)
{
int color;
for (color 0; color < 8; color++)
{
textbackground(color);/*設置文本的背景顏色*/
cprintf("this is color %d\r\n", color);
cprintf("press any key to continue\r\n");
getch();/*輸入字元看不見*/
}
}
【程序33】
題目:學習gotoxy()與clrscr()函數
程序源代碼:
#include
void main(void)
{
clrscr();/*清屏函數*/
textbackground(2);
gotoxy(1, 5);/*定位函數*/
cprintf("output at row 5 column 1\n");
textbackground(3);
gotoxy(20, 10);
cprintf("output at row 10 column 20\n");
}
【程序34】
題目:練習函數調用
1. 程序分析:
2.程序源代碼:
#include
void hello_world(void)
{
printf("hello, world!\n");
}
void three_hellos(void)
{
int counter;
for (counter 1; counter < 3; counter++)
hello_world();/*調用此函數*/
}
void main(void)
{
three_hellos();/*調用此函數*/
}
【程序35】
題目:文本顏色設置
程序源代碼:
#include
void main(void)
{
int color;
for (color 1; color a[j]) minj;
tema[i];
a[i]a[min];
a[min]tem;
}
/*output data*/
printf("after sorted \n");
for(i0;iprintf("%5d",a[i]);
}
【程序36】
題目:求100之內的素數
程序源代碼:
#include
#include "math.h"
#define N 101
main()
{
int i,j,line,a[N];
for(i2;ifor(i2;i for(ji+1;j {
if(a[i]!0&&a[j]!0)
if(a[j]%a[i]0)
a[j]0;}
printf("\n");
for(i2,line0;i{
if(a[i]!0)
{printf("%5d",a[i]);
line++;}
if(line10)
{printf("\n");
line0;}
}
}
【程序37】
題目:對10個數進行排序
1.程序分析:可以利用選擇法,即從後9個比較過程中,選擇一個最小的與第一個元素交換,
下次類推,即用第二個元素與後8個進行比較,並進行交換。
2.程序源代碼:
#define N 10
main()
{int i,j,min,tem,a[N];
/*input data*/
printf("please input ten num:\n");
for(i0;i{
printf("a[%d]",i);
scanf("%d",&a[i]);}
printf("\n");
for(i0;iprintf("%5d",a[i]);
printf("\n");
/*sort ten num*/
for(i0;i{mini;
for(ji+1;jif(a[min]>a[j]) minj;
tema[i];
a[i]a[min];
a[min]tem;
}
/*output data*/
printf("After sorted \n");
for(i0;iprintf("%5d",a[i]);
}
【程序38】
題目:求一個3*3矩陣對角線元素之和
1.程序分析:利用雙重for循環控制輸入二維數組,再將a[i][i]累加後輸出.
2.程序源代碼:
main()
{
float a[3][3],sum0;
int i,j;
printf("please input rectangle element:\n");
for(i0;i<3;i++)
for(j0;j<3;j++)
scanf("%f",&a[i][j]);
for(i0;i<3;i++)
sumsum+a[i][i];
printf("ijiaoxian he is %6.2f",sum);
}
【程序39】
題目:有一個已經排好序的數組.現輸入一個數,要求按原來的規律將它插入數組中.
1. 程序分析:首先判斷此數是否大於最後一個數,然後再考慮插入中間的數的情況,插入後
此元素之後的數,依次後移一個位置.
2.程序源代碼:
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(i0;iend)
a[10]number;
else
{for(i0;inumber)
{temp1a[i];
a[i]number;
for(ji+1;j<11;j++)
{temp2a[j];
a[j]temp1;
temp1temp2;
}
break;
}
}
}
for(i0;i<11;i++)
printf("%6d",a[i]);
}
【程序40】
題目:將一個數組逆序輸出.
1.程序分析:用第一個與最後一個交換.
2.程序源代碼:
#define n 5
main()
{ int a[n]{9,6,5,4,1},i,temp;
printf("\n original array:\n");
for(i0;i printf("%4d",a[i]);
for(i0;i {tempa[i];
a[i]a[n-i-1];
a[n-i-1]temp;
}
printf("\n sorted array:\n");
for(i0;i printf("%4d",a[i]);
}
【程序41】
題目:學習static定義靜態變數的用法
程序源代碼:
#include "stdio.h"
varfunc()
{
int var0;
static int static_var0;
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(i0;i<3;i++)
varfunc();
}
【程序42】
題目:學習使用auto定義變數的用法
程序源代碼:
#include "stdio.h"
main()
{int i,num;
num2;
for (i0;i<3;i++)
{ printf("\40: the num equal %d \n",num);
num++;
{
auto int num1;
printf("\40: the internal block num equal %d \n",num);
num++;
}
}
}
【程序43】
題目:學習使用static的另一用法.
程序源代碼:
#include "stdio.h"
main()
{
int i,num;
num2;
for(i0;i<3;i++)
{
printf("\40: the num equal %d \n",num);
num++;
{
static int num1;
printf("\40:the internal block num equal %d\n",num);
num++;
}
}
}
【程序44】
題目:學習使用external的用法.
程序源代碼:
#include "stdio.h"
int a,b,c;
void add()
{ int a;
a3;
ca+b;
}
void main()
{ ab4;
add();
printf("the value of c is equal to %d\n",c);
}
【程序45】
題目:學習使用register定義變數的方法.
程序源代碼:
void main()
{
register int i;
int tmp0;
for(i1;i");
scanf("%d",&num);
printf("\40:the square for this number is %d \n",sq(num));
if(num>50)
againtrue;
else
againfalse;
}
}
【程序46】
題目:宏#define命令練習(1)
程序源代碼:
#include "stdio.h"
#define TRUE 1
#define FALSE 0
#define SQ(x) (x)*(x)
void main()
{
int num;
int again1;
printf("\40: Program will stop if input value less than 50.\n");
while(again)
{
printf("\40:Please input number>");
scanf("%d",&num);
printf("\40:The square for this number is %d \n",SQ(num));
if(num>50)
againTRUE;
else
againFALSE;
}
}
【程序47】
題目:宏#define命令練習(2)
程序源代碼:
#include "stdio.h"
#define exchange(a,b) { \ /*宏定義中允許包含兩道衣裳命令的情形,此時必須在最右邊加上"\"*/
int t;\
ta;\
ab;\
bt;\
}
void main(void)
{
int x10;
int y20;
printf("x%d; y%d\n",x,y);
exchange(x,y);
printf("x%d; y%d\n",x,y);
}
【程序48】
題目:宏#define命令練習(3)
程序源代碼:
#define lag >
#define sma y) x:y
#define minimum(x,y) (x>y) y:x
void main()
{ int a10,b20;
#ifdef max
printf("\40: the larger one is %d\n",maximum(a,b));
#else
printf("\40: the lower one is %d\n",minimum(a,b)
④ java題目
J2EE Java2平台企業版
string是引用數據類型
如何取得年月日,小時分秒
public static void main(String[] args)
{
ActionListener time = new ActionListener() { // 監聽事件,不然實現不了動態改變時間
public void actionPerformed(ActionEvent e) {
//date對象代表當前的系統時間(毫秒)
Date date = new Date();
//format對象是用來以指定的時間格式格式化時間的
SimpleDateFormat from = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss"); //這里的格式可以自己設置
//format()方法是用來格式化時間的方法
String times = from.format(date);
System.out.println(times); }
};
Timer tim = new Timer(1000, time); //這里表示1000毫秒更新一下時間
tim.start(); //啟動
}
我這個答案肯定正確啊
下面幫你解釋你的答案吧
Date //是在java.util.Date;裡面
SimpleDateForma //這個是java.text.SimpleDateFormat;用來輸出問本格式的
DateFormat //應該是在java.util.*;裡面吧..應該是的
你那個錯誤是編譯就沒通過啊
public class Test
那你那個編譯寫的因該是
javac Test.java 編譯的應該是類啊而不是javac time.java 請問你的time什麼意思呢,所以你報的異常是找不到time類啊
呵呵...你是初學java吧該答的我都答完了拉!還特地幫你每句都寫
如何讀寫文件
StringBuffer sb = new StringBuffer();
//File file = new FileWindow().load();
File file;
file = new File("F:/jtest/from.txt");
TextReader tr = new TextReader(file);
sb.append(tr.readAll());
Out.println(sb.toString());
String [] tags = {"\"", " ", "'"};
String str;
str = sb.toString();
for(String reg: tags) {
Out.println(reg);
str = str.replaceAll(reg, "");
}
Out.println(str);
抽象類和介面的區別
聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變數,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
介面(interface)是抽象類的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象的,沒有一個有程序體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程序體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對象上調用介面的方法。由於有抽象類,它允許使用介面名作為引用變數的類型。通常的動態聯編將生效。引用可以轉換到介面類型或從介面類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了介面。
主鍵是確定資料庫中的表的記錄的唯一標識欄位,可以是表中的一個欄位,也可以是表中的多個欄位組成的。一旦確定為主鍵,則該欄位不可為空也不可以重復。比如學生表中的學號就可以定義成該表的欄位
外鍵的定義是相對於主鍵而言的,比如另有一張成績表,表中也出現了學生表中的對應學號欄位,則相對於學生表,學號就是成績表的外鍵
String和StringBuffer的區別
STRING的長度是不可變的,STRINGBUFFER的長度是可變的。如果你對字元串中的內容經常進行操作,特別是內容要修改時,那麼使用StringBuffer,如果最後需要String,那麼使用StringBuffer的toString()方法
try{}catch(){}finally{}結構,try{}內出現異常,try{}內剩下尚未執行的代碼還執行嗎,finally{}內的代碼呢?finally{}後面的代碼呢
執行 finally{}內的代碼最後執行
排序演算法
所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。
分類
在計算機科學所使用的排序演算法通常被分類為:
計算的復雜度(最差、平均、和最好表現),依據串列(list)的大小(n)。一般而言,好的表現是O。(n log n),且壞的行為是Ω(n2)。對於一個排序理想的表現是O(n)。僅使用一個抽象關鍵比較運算的排序演算法總平均上總是至少需要Ω(n log n)。
記憶體使用量(以及其他電腦資源的使用)
穩定度:穩定排序演算法會依照相等的關鍵(換言之就是值)維持紀錄的相對次序。也就是一個排序演算法是穩定的,就是當有兩個有相等關鍵的紀錄R和S,且在原本的串列中R出現在S之前,在排序過的串列中R也將會是在S之前。
一般的方法:插入、交換、選擇、合並等等。交換排序包含冒泡排序(bubble sort)和快速排序(quicksort)。選擇排序包含shaker排序和堆排序(heapsort)。
當相等的元素是無法分辨的,比如像是整數,穩定度並不是一個問題。然而,假設以下的數對將要以他們的第一個數字來排序。
(4, 1) (3, 1) (3, 7) (5, 6)
在這個狀況下,有可能產生兩種不同的結果,一個是依照相等的鍵值維持相對的次序,而另外一個則沒有:
(3, 1) (3, 7) (4, 1) (5, 6) (維持次序)
(3, 7) (3, 1) (4, 1) (5, 6) (次序被改變)
不穩定排序演算法可能會在相等的鍵值中改變紀錄的相對次序,但是穩定排序演算法從來不會如此。不穩定排序演算法可以被特別地時作為穩定。作這件事情的一個方式是人工擴充鍵值的比較,如此在其他方面相同鍵值的兩個物件間之比較,就會被決定使用在原先資料次序中的條目,當作一個同分決賽。然而,要記住這種次序通常牽涉到額外的空間負擔。
排列演算法列表
在這個表格中,n是要被排序的紀錄數量以及k是不同鍵值的數量。
穩定的
冒泡排序(bubble sort) — O(n2)
雞尾酒排序 (Cocktail sort, 雙向的冒泡排序) — O(n2)
插入排序 (insertion sort)— O(n2)
桶排序 (bucket sort)— O(n); 需要 O(k) 額外 記憶體
計數排序 (counting sort) — O(n+k); 需要 O(n+k) 額外 記憶體
歸並排序 (merge sort)— O(n log n); 需要 O(n) 額外記憶體
原地歸並排序 — O(n2)
二叉樹排序 (Binary tree sort) — O(n log n); 需要 O(n) 額外記憶體
鴿巢排序 (Pigeonhole sort) — O(n+k); 需要 O(k) 額外記憶體
基數排序 (radix sort)— O(n·k); 需要 O(n) 額外記憶體
Gnome sort — O(n2)
Library sort — O(n log n) with high probability, 需要 (1+ε)n 額外記憶體
不穩定
選擇排序 (selection sort)— O(n2)
希爾排序 (shell sort)— O(n log n) 如果使用最佳的現在版本
Comb sort — O(n log n)
堆排序 (heapsort)— O(n log n)
Smoothsort — O(n log n)
快速排序 (quicksort)— O(n log n) 期望時間, O(n2) 最壞情況; 對於大的、亂數串列一般相信是最快的已知排序
Introsort — O(n log n)
Patience sorting — O(n log n + k) 最外情況時間, 需要 額外的 O(n + k) 空間, 也需要找到最長的遞增子序列(longest increasing subsequence)
不實用的排序演算法
Bogo排序 — O(n × n!) 期望時間, 無窮的最壞情況。
Stupid sort — O(n3); 遞回版本需要 O(n2) 額外記憶體
Bead sort — O(n) or O(√n), 但需要特別的硬體
Pancake sorting — O(n), 但需要特別的硬體
排序的演算法
排序的演算法有很多,對空間的要求及其時間效率也不盡相同。下面列出了一些常見的排序演算法。這裡面插入排序和冒泡排序又被稱作簡單排序,他們對空間的要求不高,但是時間效率卻不穩定;而後面三種排序相對於簡單排序對空間的要求稍高一點,但時間效率卻能穩定在很高的水平。基數排序是針對關鍵字在一個較小范圍內的排序演算法。
插入排序
冒泡排序
選擇排序
快速排序
堆排序
歸並排序
基數排序
希爾排序
插入排序
插入排序是這樣實現的:
首先新建一個空列表,用於保存已排序的有序數列(我們稱之為"有序列表")。
從原數列中取出一個數,將其插入"有序列表"中,使其仍舊保持有序狀態。
重復2號步驟,直至原數列為空。
插入排序的平均時間復雜度為平方級的,效率不高,但是容易實現。它藉助了"逐步擴大成果"的思想,使有序列表的長度逐漸增加,直至其長度等於原列表的長度。
冒泡排序
冒泡排序是這樣實現的:
首先將所有待排序的數字放入工作列表中。
從列表的第一個數字到倒數第二個數字,逐個檢查:若某一位上的數字大於他的下一位,則將它與它的下一位交換。
重復2號步驟,直至再也不能交換。
冒泡排序的平均時間復雜度與插入排序相同,也是平方級的,但也是非常容易實現的演算法。
選擇排序
選擇排序是這樣實現的:
設數組內存放了n個待排數字,數組下標從1開始,到n結束。
i=1
從數組的第i個元素開始到第n個元素,尋找最小的元素。
將上一步找到的最小元素和第i位元素交換。
如果i=n-1演算法結束,否則回到第3步
選擇排序的平均時間復雜度也是O(n²)的。
快速排序
現在開始,我們要接觸高效排序演算法了。實踐證明,快速排序是所有排序演算法中最高效的一種。它採用了分治的思想:先保證列表的前半部分都小於後半部分,然後分別對前半部分和後半部分排序,這樣整個列表就有序了。這是一種先進的思想,也是它高效的原因。因為在排序演算法中,演算法的高效與否與列表中數字間的比較次數有直接的關系,而"保證列表的前半部分都小於後半部分"就使得前半部分的任何一個數從此以後都不再跟後半部分的數進行比較了,大大減少了數字間不必要的比較。但查找數據得另當別論了。
堆排序
堆排序與前面的演算法都不同,它是這樣的:
首先新建一個空列表,作用與插入排序中的"有序列表"相同。
找到數列中最大的數字,將其加在"有序列表"的末尾,並將其從原數列中刪除。
重復2號步驟,直至原數列為空。
堆排序的平均時間復雜度為nlogn,效率高(因為有堆這種數據結構以及它奇妙的特徵,使得"找到數列中最大的數字"這樣的操作只需要O(1)的時間復雜度,維護需要logn的時間復雜度),但是實現相對復雜(可以說是這里7種演算法中比較難實現的)。
看起來似乎堆排序與插入排序有些相像,但他們其實是本質不同的演算法。至少,他們的時間復雜度差了一個數量級,一個是平方級的,一個是對數級的。
平均時間復雜度
插入排序 O(n2)
冒泡排序 O(n2)
選擇排序 O(n2)
快速排序 O(n log n)
堆排序 O(n log n)
歸並排序 O(n log n)
基數排序 O(n)
希爾排序 O(n1.25)
一、術語session
在我的經驗里,session這個詞被濫用的程度大概僅次於transaction,更加有趣的是transaction與session在某些語境下的含義是相同的。
session,中文經常翻譯為會話,其本來的含義是指有始有終的一系列動作/消息,比如打電話時從拿起電話撥號到掛斷電話這中間的一系列過程可以稱之為一個session。有時候我們可以看到這樣的話「在一個瀏覽器會話期間,...」,這里的會話一詞用的就是其本義,是指從一個瀏覽器窗口打開到關閉這個期間①。最混亂的是「用戶(客戶端)在一次會話期間」這樣一句話,它可能指用戶的一系列動作(一般情況下是同某個具體目的相關的一系列動作,比如從登錄到選購商品到結賬登出這樣一個網上購物的過程,有時候也被稱為一個transaction),然而有時候也可能僅僅是指一次連接,也有可能是指含義①,其中的差別只能靠上下文來推斷②。
然而當session一詞與網路協議相關聯時,它又往往隱含了「面向連接」和/或「保持狀態」這樣兩個含義,「面向連接」指的是在通信雙方在通信之前要先建立一個通信的渠道,比如打電話,直到對方接了電話通信才能開始,與此相對的是寫信,在你把信發出去的時候你並不能確認對方的地址是否正確,通信渠道不一定能建立,但對發信人來說,通信已經開始了。「保持狀態」則是指通信的一方能夠把一系列的消息關聯起來,使得消息之間可以互相依賴,比如一個服務員能夠認出再次光臨的老顧客並且記得上次這個顧客還欠店裡一塊錢。這一類的例子有「一個TCP session」或者「一個POP3 session」③。
而到了web伺服器蓬勃發展的時代,session在web開發語境下的語義又有了新的擴展,它的含義是指一類用來在客戶端與伺服器之間保持狀態的解決方案④。有時候session也用來指這種解決方案的存儲結構,如「把xxx保存在session里」⑤。由於各種用於web開發的語言在一定程度上都提供了對這種解決方案的支持,所以在某種特定語言的語境下,session也被用來指代該語言的解決方案,比如經常把Java里提供的javax.servlet.http.HttpSession簡稱為session⑥。
鑒於這種混亂已不可改變,本文中session一詞的運用也會根據上下文有不同的含義,請大家注意分辨。
在本文中,使用中文「瀏覽器會話期間」來表達含義①,使用「session機制」來表達含義④,使用「session」表達含義⑤,使用具體的「HttpSession」來表達含義⑥
二、HTTP協議與狀態保持
HTTP協議本身是無狀態的,這與HTTP協議本來的目的是相符的,客戶端只需要簡單的向伺服器請求下載某些文件,無論是客戶端還是伺服器都沒有必要紀錄彼此過去的行為,每一次請求之間都是獨立的,好比一個顧客和一個自動售貨機或者一個普通的(非會員制)大賣場之間的關系一樣。
然而聰明(或者貪心?)的人們很快發現如果能夠提供一些按需生成的動態信息會使web變得更加有用,就像給有線電視加上點播功能一樣。這種需求一方面迫使HTML逐步添加了表單、腳本、DOM等客戶端行為,另一方面在伺服器端則出現了CGI規范以響應客戶端的動態請求,作為傳輸載體的HTTP協議也添加了文件上載、cookie這些特性。其中cookie的作用就是為了解決HTTP協議無狀態的缺陷所作出的努力。至於後來出現的session機制則是又一種在客戶端與伺服器之間保持狀態的解決方案。
讓我們用幾個例子來描述一下cookie和session機制之間的區別與聯系。筆者曾經常去的一家咖啡店有喝5杯咖啡免費贈一杯咖啡的優惠,然而一次性消費5杯咖啡的機會微乎其微,這時就需要某種方式來紀錄某位顧客的消費數量。想像一下其實也無外乎下面的幾種方案:
1、該店的店員很厲害,能記住每位顧客的消費數量,只要顧客一走進咖啡店,店員就知道該怎麼對待了。這種做法就是協議本身支持狀態。
2、發給顧客一張卡片,上面記錄著消費的數量,一般還有個有效期限。每次消費時,如果顧客出示這張卡片,則此次消費就會與以前或以後的消費相聯系起來。這種做法就是在客戶端保持狀態。
3、發給顧客一張會員卡,除了卡號之外什麼信息也不紀錄,每次消費時,如果顧客出示該卡片,則店員在店裡的紀錄本上找到這個卡號對應的紀錄添加一些消費信息。這種做法就是在伺服器端保持狀態。
由於HTTP協議是無狀態的,而出於種種考慮也不希望使之成為有狀態的,因此,後面兩種方案就成為現實的選擇。具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案。同時我們也看到,由於採用伺服器端保持狀態的方案在客戶端也需要保存一個標識,所以session機制可能需要藉助於cookie機制來達到保存標識的目的,但實際上它還有其他選擇。
三、理解cookie機制
cookie機制的基本原理就如上面的例子一樣簡單,但是還有幾個問題需要解決:「會員卡」如何分發;「會員卡」的內容;以及客戶如何使用「會員卡」。
正統的cookie分發是通過擴展HTTP協議來實現的,伺服器通過在HTTP的響應頭中加上一行特殊的指示以提示瀏覽器按照指示生成相應的cookie。然而純粹的客戶端腳本如JavaScript或者VBScript也可以生成cookie。
而cookie的使用是由瀏覽器按照一定的原則在後台自動發送給伺服器的。瀏覽器檢查所有存儲的cookie,如果某個cookie所聲明的作用范圍大於等於將要請求的資源所在的位置,則把該cookie附在請求資源的HTTP請求頭上發送給伺服器。意思是麥當勞的會員卡只能在麥當勞的店裡出示,如果某家分店還發行了自己的會員卡,那麼進這家店的時候除了要出示麥當勞的會員卡,還要出示這家店的會員卡。
cookie的內容主要包括:名字,值,過期時間,路徑和域。
其中域可以指定某一個域比如.google.com,相當於總店招牌,比如寶潔公司,也可以指定一個域下的具體某台機器比如www.google.com或者froogle.google.com,可以用飄柔來做比。
路徑就是跟在域名後面的URL路徑,比如/或者/foo等等,可以用某飄柔專櫃做比。
路徑與域合在一起就構成了cookie的作用范圍。
如果不設置過期時間,則表示這個cookie的生命期為瀏覽器會話期間,只要關閉瀏覽器窗口,cookie就消失了。這種生命期為瀏覽器會話期的cookie被稱為會話cookie。會話cookie一般不存儲在硬碟上而是保存在內存里,當然這種行為並不是規范規定的。如果設置了過期時間,瀏覽器就會把cookie保存到硬碟上,關閉後再次打開瀏覽器,這些cookie仍然有效直到超過設定的過期時間。
存儲在硬碟上的cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而對於保存在內存里的cookie,不同的瀏覽器有不同的處理方式。對於IE,在一個打開的窗口上按Ctrl-N(或者從文件菜單)打開的窗口可以與原窗口共享,而使用其他方式新開的IE進程則不能共享已經打開的窗口的內存cookie;對於Mozilla Firefox0.8,所有的進程和標簽頁都可以共享同樣的cookie。一般來說是用javascript的window.open打開的窗口會與原窗口共享內存cookie。瀏覽器對於會話cookie的這種只認cookie不認人的處理方式經常給採用session機制的web應用程序開發者造成很大的困擾。
下面就是一個goolge設置cookie的響應頭的例子
HTTP/1.1 302 Found
Location: http://www.google.com/intl/zh-CN/
Set-Cookie: PREF=ID=0565f77e132de138:NW=1:TM=1098082649:LM=1098082649:S=KaeaCFPo49RiA_d8; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com
Content-Type: text/html
這是使用HTTPLook這個HTTP Sniffer軟體來俘獲的HTTP通訊紀錄的一部分
瀏覽器在再次訪問goolge的資源時自動向外發送cookie
使用Firefox可以很容易的觀察現有的cookie的值
使用HTTPLook配合Firefox可以很容易的理解cookie的工作原理。
IE也可以設置在接受cookie前詢問
這是一個詢問接受cookie的對話框。
四、理解session機制
session機制是一種伺服器端的機制,伺服器使用一種類似於散列表的結構(也可能就是使用散列表)來保存信息。
當程序需要為某個客戶端的請求創建一個session的時候,伺服器首先檢查這個客戶端的請求里是否已包含了一個session標識 - 稱為session id,如果已包含一個session id則說明以前已經為此客戶端創建過session,伺服器就按照session id把這個session檢索出來使用(如果檢索不到,可能會新建一個),如果客戶端請求不包含session id,則為此客戶端創建一個session並且生成一個與此session相關聯的session id,session id的值應該是一個既不會重復,又不容易被找到規律以仿造的字元串,這個session id將被在本次響應中返回給客戶端保存。
保存這個session id的方式可以採用cookie,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發揮給伺服器。一般這個cookie的名字都是類似於SEEESIONID,而。比如weblogic對於web應用程序生成的cookie,JSESSIONID=!-145788764,它的名字就是JSESSIONID。
由於cookie可以被人為的禁止,必須有其他機制以便在cookie被禁止時仍然能夠把session id傳遞回伺服器。經常被使用的一種技術叫做URL重寫,就是把session id直接附加在URL路徑的後面,附加方式也有兩種,一種是作為URL路徑的附加信息,表現形式為http://...../xxx;jsessionid=!-145788764
另一種是作為查詢字元串附加在URL後面,表現形式為http://...../xxx?jsessionid=!-145788764
這兩種方式對於用戶來說是沒有區別的,只是伺服器在解析的時候處理的方式不同,採用第一種方式也有利於把session id的信息和正常程序參數區分開來。
為了在整個交互過程中始終保持狀態,就必須在每個客戶端可能請求的路徑後面都包含這個session id。
另一種技術叫做表單隱藏欄位。就是伺服器會自動修改表單,添加一個隱藏欄位,以便在表單提交時能夠把session id傳遞回伺服器。比如下面的表單
<form name="testform" action="/xxx">
<input type="text">
</form>
在被傳遞給客戶端之前將被改寫成
<form name="testform" action="/xxx">
<input type="hidden" name="jsessionid" value="!-145788764">
<input type="text">
</form>
這種技術現在已較少應用,筆者接觸過的很古老的iPlanet6(SunONE應用伺服器的前身)就使用了這種技術。
實際上這種技術可以簡單的用對action應用URL重寫來代替。
在談論session機制的時候,常常聽到這樣一種誤解「只要關閉瀏覽器,session就消失了」。其實可以想像一下會員卡的例子,除非顧客主動對店家提出銷卡,否則店家絕對不會輕易刪除顧客的資料。對session來說也是一樣的,除非程序通知伺服器刪除一個session,否則伺服器會一直保留,程序一般都是在用戶做log off的時候發個指令去刪除session。然而瀏覽器從來不會主動在關閉之前通知伺服器它將要關閉,因此伺服器根本不會有機會知道瀏覽器已經關閉,之所以會有這種錯覺,是大部分session機制都使用會話cookie來保存session id,而關閉瀏覽器後這個session id就消失了,再次連接伺服器時也就無法找到原來的session。如果伺服器設置的cookie被保存到硬碟上,或者使用某種手段改寫瀏覽器發出的HTTP請求頭,把原來的session id發送給伺服器,則再次打開瀏覽器仍然能夠找到原來的session。
恰恰是由於關閉瀏覽器不會導致session被刪除,迫使伺服器為seesion設置了一個失效時間,當距離客戶端上一次使用session的時間超過這個失效時間時,伺服器就可以認為客戶端已經停止了活動,才會把session刪除以節省存儲空間。
五、理解javax.servlet.http.HttpSession
HttpSession是Java平台對session機制的實現規范,因為它僅僅是個介面,具體到每個web應用伺服器的提供商,除了對規范支持之外,仍然會有一些規范里沒有規定的細微差異。這里我們以BEA的Weblogic Server8.1作為例子來演示。
首先,Weblogic Server提供了一系列的參數來控制它的HttpSession的實現,包括使用cookie的開關選項,使用URL重寫的開關選項,session持久化的設置,session失效時間的設置,以及針對cookie的各種設置,比如設置cookie的名字、路徑、域,cookie的生存時間等。
一般情況下,session都是存儲在內存里,當伺服器進程被停止或者重啟的時候,內存里的session也會被清空,如果設置了session的持久化特性,伺服器就會把session保存到硬碟上,當伺服器進程重新啟動或這些信息將能夠被再次使用,Weblogic Server支持的持久性方式包括文件、資料庫、客戶端cookie保存和復制。
復制嚴格說來不算持久化保存,因為session實際上還是保存在內存里,不過同樣的信息被復制到各個cluster內的伺服器進程中,這樣即使某個伺服器進程停止工作也仍然可以從其他進程中取得session。
cookie生存時間的設置則會影響瀏覽器生成的cookie是否是一個會話cookie。默認是使用會話cookie。有興趣的可以用它來試驗我們在第四節里提到的那個誤解。
cookie的路徑對於web應用程序來說是一個非常重要的選項,Weblogic Server對這個選項的默認處理方式使得它與其他伺服器有明顯的區別。後面我們會專題討論。
關於session的設置參考[5] http://e-docs.bea.com/wls/docs70/webapp/weblogic_xml.html#1036869
~~我要200分~~
⑤ EXCEL2007如何查找第1行是否包含A,如果有就取第2行的值
公式如下,在第一行中查找包含字母A的單元格,並返回其對應的第二行的值。
=HLOOKUP("*A*",1:2,2,)
⑥ C語言中第一第二行是什麼意思還有那個i++是什麼意思,解釋一下
如果這些讀不懂你還是要從基礎看起。第一第二行為宏指令,表示包含文件,i++表示自增,i=i+1,但是是先使用再自增,而在循環升級語句中其實不需要注意這個
⑦ JAVA 演算法 有一點想不通; 謝謝
用string類的split函數,可以將第二行這個字元串根據空格分解成一個個的小字元串
string[]a=s.split("");
然後,取出第三行的字元串,轉化成int整數,比如是num
取出第一行的字元串,轉化為int整數,比如是n
之後要做從0到n-1的循環
循環中,將a[i]轉化為int整數,判斷a[i]是否等於num;
如果等於,終止循環,輸出行號
⑧ java讀取excel:第一列的第一行包含了第二列的多行,第二列的每一行都會包含第三列的多行
可以用阿帕奇的poi
也可以用韓國開發的jxl
⑨ c語言 題目
c語言經典100題: 【程序1】 題目:有1,2,3,4個數字,能組成多少個互不相同且無重復數字的三位數 都是多少 1.程序分析:可填在百位,十位,個位的數字都是1,2,3,4.組成所有的排列後再去 掉不滿足條件的排列. 2.程序源代碼: main() { int i,j,k; printf("\n"); for(i1;i<5;i++) /*以下為三重循環*/ for(j1;j<5;j++) for (k1;k<5;k++) { if (i!k&&i!j&&j!k) /*確保i,j,k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } } 【程序2】 題目:企業發放的獎金根據利潤提成.利潤(i)低於或等於10萬元時,獎金可提10%;利潤高 於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可可提 成7.5%;20萬到40萬之間時,高於20萬元的部分,可提成5%;40萬到60萬之間時高於 40萬元的部分,可提成3%;60萬到100萬之間時,高於60萬元的部分,可提成1.5%,高於 100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤i,求應發放獎金總數 1.程序分析:請利用數軸來分界,定位.注意定義時需把獎金定義成長整型. 2.程序源代碼: main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1100000*0.1;bonus2bonus1+100000*0.75; bonus4bonus2+200000*0.5; bonus6bonus4+200000*0.3; bonus10bonus6+400000*0.15; if(i<100000) bonusi*0.1; else if(i<200000) bonusbonus1+(i-100000)*0.075; else if(i<400000) bonusbonus2+(i-200000)*0.05; else if(i<600000) bonusbonus4+(i-400000)*0.03; else if(i<1000000) bonusbonus6+(i-600000)*0.015; else bonusbonus10+(i-1000000)*0.01; printf("bonus%d",bonus); } 【程序3】 題目:一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少 1.程序分析:在10萬以內判斷,先將該數加上100後再開方,再將該數加上268後再開方,如果開方後 的結果滿足如下條件,即是結果.請看具體分析: 2.程序源代碼: #include "math.h" main() { long int i,x,y,z; for (i1;i2)/*如果是閏年且月份大於2,總天數應該加一天*/ sum++; printf("it is the %dth day.",sum);} 【程序4】 題目:輸入某年某月某日,判斷這一天是這一年的第幾天? 1.程序分析:以3月5日為例,應該先把前兩個月的加起來,然後再加上5天即本年的第幾天,特殊 情況,閏年且輸入月份大於3時需考慮多加一天。 2.程序源代碼: main() { int day,month,year,sum,leap; printf("\nplease input year,month,day\n"); scanf("%d,%d,%d",&year,&month,&day); switch(month)/*先計算某月以前月份的總天數*/ { case 1:sum0;break; case 2:sum31;break; case 3:sum59;break; case 4:sum90;break; case 5:sum120;break; case 6:sum151;break; case 7:sum181;break; case 8:sum212;break; case 9:sum243;break; case 10:sum273;break; case 11:sum304;break; case 12:sum334;break; default:printf("data error");break; } sumsum+day; /*再加上某天的天數*/ if(year%4000||(year%40&&year%100!0))/*判斷是不是閏年*/ leap1; else leap0; if(leap1&&month>2)/*如果是閏年且月份大於2,總天數應該加一天*/ sum++; printf("It is the %dth day.",sum);} 【程序5】 題目:輸入三個整數x,y,z,請把這三個數由小到大輸出. 1.程序分析:我們想辦法把最小的數放到x上,先將x與y進行比較,如果x>y則將x與y的值進行交換, 然後再用x與z進行比較,如果x>z則將x與z的值進行交換,這樣能使x最小. 2.程序源代碼: main() { int x,y,z,t; scanf("%d%d%d",&x,&y,&z); if (x>y) {tx;xy;yt;} /*交換x,y的值*/ if(x>z) {tz;zx;xt;}/*交換x,z的值*/ if(y>z) {ty;yz;zt;}/*交換z,y的值*/ printf("small to big: %d %d %d\n",x,y,z); } 【程序6】 題目:用*號輸出字母c的圖案. 1.程序分析:可先用'*'號在紙上寫出字母c,再分行輸出. 2.程序源代碼: #include "stdio.h" main() { printf("hello c-world!\n"); printf(" ****\n"); printf(" *\n"); printf(" * \n"); printf(" ****\n"); } 【程序7】 題目:輸出特殊圖案,請在c環境中運行,看一看,very beautiful! 1.程序分析:字元共有256個.不同字元,圖形不一樣. 2.程序源代碼: #include "stdio.h" main() { char a176,b219; printf("%c%c%c%c%c\n",b,a,a,a,b); printf("%c%c%c%c%c\n",a,b,a,b,a); printf("%c%c%c%c%c\n",a,a,b,a,a); printf("%c%c%c%c%c\n",a,b,a,b,a); printf("%c%c%c%c%c\n",b,a,a,a,b);} 【程序8】 題目:輸出9*9口訣. 1.程序分析:分行與列考慮,共9行9列,i控制行,j控制列. 2.程序源代碼: #include "stdio.h" main() { int i,j,result; printf("\n"); for (i1;i<10;i++) { for(j1;j<10;j++) { resulti*j; printf("%d*%d%-3d",i,j,result);/*-3d表示左對齊,佔3位*/ } printf("\n");/*每一行後換行*/ } } 【程序9】 題目:要求輸出國際象棋棋盤. 1.程序分析:用i控制行,j來控制列,根據i+j的和的變化來控制輸出黑方格,還是白方格. 2.程序源代碼: #include "stdio.h" main() { int i,j; for(i0;i<8;i++) { for(j0;j<8;j++) if((i+j)%20) printf("%c%c",219,219); else printf(" "); printf("\n"); } } 【程序10】 題目:列印樓梯,同時在樓梯上方列印兩個笑臉. 1.程序分析:用i控制行,j來控制列,j根據i的變化來控制輸出黑方格的個數. 2.程序源代碼: #include "stdio.h" main() { int i,j; printf("\1\1\n");/*輸出兩個笑臉*/ for(i1;i<11;i++) { for(j1;j<i;j++) printf("%c%c",219,219); printf("\n"); } } 【程序11】 題目:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月 後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少 1.程序分析: 兔子的規律為數列1,1,2,3,5,8,13,21.... 2.程序源代碼: main() { long f1,f2; int i; f1f21; for(i1;i<20;i++) { printf("%12ld %12ld",f1,f2); if(i%20) printf("\n");/*控制輸出,每行四個*/ f1f1+f2; /*前兩個月加起來賦值給第三個月*/ f2f1+f2; /*前兩個月加起來賦值給第三個月*/ } } 【程序12】 題目:判斷101-200之間有多少個素數,並輸出所有素數. 1.程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除, 則表明此數不是素數,反之是素數. 2.程序源代碼: #include "math.h" main() { int m,i,k,h0,leap1; printf("\n"); for(m101;m<200;m++) { ksqrt(m+1); for(i2;i<k;i++) if(m%i0) {leap0;break;} if(leap) {printf("%-4d",m);h++; if(h%100) printf("\n"); } leap1; } printf("\nthe total is %d",h); } 【程序13】 題目:列印出所有的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該數 本身.例如:153是一個"水仙花數",因為1531的三次方+5的三次方+3的三次方. 1.程序分析:利用for循環控制100-999個數,每個數分解出個位,十位,百位. 2.程序源代碼: main() { int i,j,k,n; printf("'water flower'number is:"); for(n100;n<1000;n++) { in/100;/*分解出百位*/ jn/10%10;/*分解出十位*/ kn%10;/*分解出個位*/ if(i*100+j*10+ki*i*i+j*j*j+k*k*k) { printf("%-5d",n); } } printf("\n"); } 【程序14】 題目:將一個正整數分解質因數.例如:輸入90,列印出902*3*3*5. 程序分析:對n進行分解質因數,應先找到一個最小的質數k,然後按下述步驟完成: (1)如果這個質數恰等於n,則說明分解質因數的過程已經結束,列印出即可. (2)如果nk,但n能被k整除,則應列印出k的值,並用n除以k的商,作為新的正整數你n, 重復執行第一步. (3)如果n不能被k整除,則用k+1作為k的值,重復執行第一步. 2.程序源代碼: /* zheng int is divided yinshu*/ main() { int n,i; printf("\nplease input a number:\n"); scanf("%d",&n); printf("%d",n); for(i2;i90分的同學用a表示,60-89分之間的用b表示, 60分以下的用c表示. 1.程序分析:(a>b) a:b這是條件運算符的基本例子. 2.程序源代碼: main() { int score; char grade; printf("please input a score\n"); scanf("%d",&score); gradescore>90 'a':(score>60 'b':'c'); printf("%d belongs to %c",score,grade); } 【程序15】 題目:利用條件運算符的嵌套來完成此題:學習成績>90分的同學用A表示,60-89分之間的用B表示, 60分以下的用C表示。 1.程序分析:(a>b)?a:b這是條件運算符的基本例子。 2.程序源代碼: main() { int score; char grade; printf("please input a score\n"); scanf("%d",&score); gradescore>90?'A':(score>60?'B':'C'); printf("%d belongs to %c",score,grade); } 【程序16】 題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數. 1.程序分析:利用輾除法. 2.程序源代碼: main() { int a,b,num1,num2,temp; printf("please input two numbers:\n"); scanf("%d,%d",&num1,&num2); if(num1 { tempnum1; num1num2; num2temp; } anum1;bnum2; while(b!0)/*利用輾除法,直到b為0為止*/ { tempa%b; ab; btemp; } printf("gongyueshu:%d\n",a); printf("gongbeishu:%d\n",num1*num2/a); } 【程序17】 題目:輸入一行字元,分別統計出其中英文字母,空格,數字和其它字元的個數. 1.程序分析:利用while語句,條件為輸入的字元不為'\n'. 2.程序源代碼: #include "stdio.h" main() {char c; int letters0,space0,digit0,others0; printf("please input some characters\n"); while((cgetchar())!'\n') { if(c>'a'&&c'a'&&c'0'&&c<'9') digit++; else others++; } printf("all in all:char%d space%d digit%d others%d\n",letters, space,digit,others); } 【程序18】 題目:求sa+aa+aaa+aaaa+aa...a的值,其中a是一個數字.例如2+22+222+2222+22222(此時 共有5個數相加),幾個數相加有鍵盤控制. 1.程序分析:關鍵是計算出每一項的值. 2.程序源代碼: main() { int a,n,count1; long int sn0,tn0; printf("please input a and n\n"); scanf("%d,%d",&a,&n); printf("a%d,n%d\n",a,n); while(count<n) { tntn+a; snsn+tn; aa*10; ++count; } printf("a+aa+...%ld\n",sn); } 【程序19】 題目:一個數如果恰好等於它的因子之和,這個數就稱為"完數".例如61+2+3.編程 找出1000以內的所有完數. 1. 程序分析:請參照程序<--上頁程序14. 2.程序源代碼: main() { static int k[10]; int i,j,n,s; for(j2;j<1000;j++) { n-1; sj; for(i1;i { if((j%i)0) { n++; ss-i; k[n]i; } } if(s0) { printf("%d is a wanshu",j); for(i0;i printf("%d,",k[i]); printf("%d\n",k[n]); } } } 【程序20】 題目:一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在 第10次落地時,共經過多少米 第10次反彈多高 1.程序分析:見下面注釋 2.程序源代碼: main() { float sn100.0,hnsn/2; int n; for(n2;n0) {x1(x2+1)*2;/*第一天的桃子數是第2天桃子數加1後的2倍*/ x2x1; day--; } printf("the total is %d\n",x1); } 【程序21】 題目:猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個 第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以後每天早上都吃了前一天剩下 的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。 1.程序分析:採取逆向思維的方法,從後往前推斷。 2.程序源代碼: main() { int day,x1,x2; day9; x21; while(day>0) {x1(x2+1)*2;/*第一天的桃子數是第2天桃子數加1後的2倍*/ x2x1; day--; } printf("the total is %d\n",x1); } 【程序22】 題目:兩個乒乓球隊進行比賽,各出三人.甲隊為a,b,c三人,乙隊為x,y,z三人.已抽簽決定 比賽名單.有人向隊員打聽比賽的名單.a說他不和x比,c說他不和x,z比,請編程序找出 三隊賽手的名單. 1.程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除, 則表明此數不是素數,反之是素數. 2.程序源代碼: main() { char i,j,k;/*i是a的對手,j是b的對手,k是c的對手*/ for(i'x';i<'z';i++) for(j'x';j<'z';j++) { if(i!j) for(k'x';k<'z';k++) { if(i!k&&j!k) { if(i!'x'&&k!'x'&&k!'z') printf("order is a--%c\tb--%c\tc--%c\n",i,j,k); } } } } 【程序23】 題目:列印出如下圖案(菱形) * *** ****** ******** ****** *** * 1.程序分析:先把圖形分成兩部分來看待,前四行一個規律,後三行一個規律,利用雙重 for循環,第一層控制行,第二層控制列. 2.程序源代碼: main() { int i,j,k; for(i0;i<3;i++) { for(j0;j<2-i;j++) printf(" "); for(k0;k<2*i;k++) printf("*"); printf("\n"); } for(i0;i<2;i++) { for(j0;j<i;j++) printf(" "); for(k0;k<4-2*i;k++) printf("*"); printf("\n"); } } 【程序24】 題目:有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和. 1.程序分析:請抓住分子與分母的變化規律. 2.程序源代碼: main() { int n,t,number20; float a2,b1,s0; for(n1;n<number;n++) { ss+a/b; ta;aa+b;bt;/*這部分是程序的關鍵,請讀者猜猜t的作用*/ } printf("sum is %9.6f\n",s); } 【程序25】 題目:求1+2!+3!+...+20!的和 1.程序分析:此程序只是把累加變成了累乘. 2.程序源代碼: main() { float n,s0,t1; for(n1;n<20;n++) { t*n; s+t; } printf("1+2!+3!...+20!%e\n",s); } 【程序26】 題目:利用遞歸方法求5!. 1.程序分析:遞歸公式:fnfn_1*4! 2.程序源代碼: #include "stdio.h" main() { int i; int fact(); for(i0;i<5;i++) printf("\40:%d!%d\n",i,fact(i)); } int fact(j) int j; { int sum; if(j0) sum1; else sumj*fact(j-1); return sum; } 【程序27】 題目:利用遞歸函數調用方式,將所輸入的5個字元,以相反順序列印出來. 程序源代碼: #include "stdio.h" main() { int i5; void palin(int n); printf("\40:"); palin(i); printf("\n"); } void palin(n) int n; { char next; if(n<1) { nextgetchar(); printf("\n\0:"); putchar(next); } else { nextgetchar(); palin(n-1); putchar(next); } } 【程序28】 題目:有5個人坐在一起,問第五個人多少歲 他說比第4個人大2歲.問第4個人歲數,他說比第 3個人大2歲.問第三個人,又說比第2人大兩歲.問第2個人,說比第一個人大兩歲.最後 問第一個人,他說是10歲.請問第五個人多大 1.程序分析:利用遞歸的方法,遞歸分為回推和遞推兩個階段.要想知道第五個人歲數,需知道 第四人的歲數,依次類推,推到第一人(10歲),再往回推. 2.程序源代碼: age(n) int n; { int c; if(n1) c10; else cage(n-1)+2; return(c); } main() { printf("%d",age(5)); } 【程序29】 題目:給一個不多於5位的正整數,要求:一,求它是幾位數,二,逆序列印出各位數字. 1. 程序分析:學會分解出每一位數,如下解釋:(這里是一種簡單的演算法,師專數002班趙鑫提供) 2.程序源代碼: main( ) { long a,b,c,d,e,x; scanf("%ld",&x); ax/10000;/*分解出萬位*/ bx%10000/1000;/*分解出千位*/ cx%1000/100;/*分解出百位*/ dx%100/10;/*分解出十位*/ ex%10;/*分解出個位*/ if (a!0) printf("there are 5, %ld %ld %ld %ld %ld\n",e,d,c,b,a); else if (b!0) printf("there are 4, %ld %ld %ld %ld\n",e,d,c,b); else if (c!0) printf(" there are 3,%ld %ld %ld\n",e,d,c); else if (d!0) printf("there are 2, %ld %ld\n",e,d); else if (e!0) printf(" there are 1,%ld\n",e); } 【程序30】 題目:一個5位數,判斷它是不是迴文數.即12321是迴文數,個位與萬位相同,十位與千位相同. 1.程序分析:同29例 2.程序源代碼: main( ) { long ge,shi,qian,wan,x; scanf("%ld",&x); wanx/10000; qianx%10000/1000; shix%100/10; gex%10; if (gewan&&shiqian)/*個位等於萬位並且十位等於千位*/ printf("this number is a huiwen\n"); else printf("this number is not a huiwen\n"); } 【程序31】 題目:請輸入星期幾的第一個字母來判斷一下是星期幾,如果第一個字母一樣,則繼續 判斷第二個字母. 1.程序分析:用情況語句比較好,如果第一個字母一樣,則判斷用情況語句或if語句判斷第二個字母. 2.程序源代碼: #include void main() { char letter; printf("please input the first letter of someday\n"); while ((lettergetch())!'y')/*當所按字母為y時才結束*/ { switch (letter) {case 's':printf("please input second letter\n"); if((lettergetch())'a') printf("saturday\n"); else if ((lettergetch())'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((lettergetch())'u') printf("tuesday\n"); else if ((lettergetch())'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! 程序源代碼: #include void main(void) { int color; for (color 0; color < 8; color++) { textbackground(color);/*設置文本的背景顏色*/ cprintf("this is color %d\r\n", color); cprintf("press any key to continue\r\n"); getch();/*輸入字元看不見*/ } } 【程序33】 題目:學習gotoxy()與clrscr()函數 程序源代碼: #include void main(void) { clrscr();/*清屏函數*/ textbackground(2); gotoxy(1, 5);/*定位函數*/ cprintf("output at row 5 column 1\n"); textbackground(3); gotoxy(20, 10); cprintf("output at row 10 column 20\n"); } 【程序34】 題目:練習函數調用 1. 程序分析: 2.程序源代碼: #include void hello_world(void) { printf("hello, world!\n"); } void three_hellos(void) { int counter; for (counter 1; counter < 3; counter++) hello_world();/*調用此函數*/ } void main(void) { three_hellos();/*調用此函數*/ } 【程序35】 題目:文本顏色設置 程序源代碼: #include void main(void) { int color; for (color 1; color a[j]) minj; tema[i]; a[i]a[min]; a[min]tem; } /*output data*/ printf("after sorted \n"); for(i0;iprintf("%5d",a[i]); } 【程序36】 題目:求100之內的素數 程序源代碼: #include #include "math.h" #define N 101 main() { int i,j,line,a[N]; for(i2;ifor(i2;i for(ji+1;j { if(a[i]!0&&a[j]!0) if(a[j]%a[i]0) a[j]0;} printf("\n"); for(i2,line0;i{ if(a[i]!0) {printf("%5d",a[i]); line++;} if(line10) {printf("\n"); line0;} } } 【程序37】 題目:對10個數進行排序 1.程序分析:可以利用選擇法,即從後9個比較過程中,選擇一個最小的與第一個元素交換, 下次類推,即用第二個元素與後8個進行比較,並進行交換。 2.程序源代碼: #define N 10 main() {int i,j,min,tem,a[N]; /*input data*/ printf("please input ten num:\n"); for(i0;i{ printf("a[%d]",i); scanf("%d",&a[i]);} printf("\n"); for(i0;iprintf("%5d",a[i]); printf("\n"); /*sort ten num*/ for(i0;i{mini; for(ji+1;jif(a[min]>a[j]) minj; tema[i]; a[i]a[min]; a[min]tem; } /*output data*/ printf("After sorted \n"); for(i0;iprintf("%5d",a[i]); } 【程序38】 題目:求一個3*3矩陣對角線元素之和 1.程序分析:利用雙重for循環控制輸入二維數組,再將a[i][i]累加後輸出. 2.程序源代碼: main() { float a[3][3],sum0; int i,j; printf("please input rectangle element:\n"); for(i0;i<3;i++) for(j0;j<3;j++) scanf("%f",&a[i][j]); for(i0;i<3;i++) sumsum+a[i][i]; printf("ijiaoxian he is %6.2f",sum); } 【程序39】 題目:有一個已經排好序的數組.現輸入一個數,要求按原來的規律將它插入數組中. 1. 程序分析:首先判斷此數是否大於最後一個數,然後再考慮插入中間的數的情況,插入後 此元素之後的數,依次後移一個位置. 2.程序源代碼: 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(i0;iend) a[10]number; else {for(i0;inumber) {temp1a[i]; a[i]number; for(ji+1;j<11;j++) {temp2a[j]; a[j]temp1; temp1temp2; } break; } } } for(i0;i<11;i++) printf("%6d",a[i]); } 【程序40】 題目:將一個數組逆序輸出. 1.程序分析:用第一個與最後一個交換. 2.程序源代碼: #define n 5 main() { int a[n]{9,6,5,4,1},i,temp; printf("\n original array:\n"); for(i0;i printf("%4d",a[i]); for(i0;i {tempa[i]; a[i]a[n-i-1]; a[n-i-1]temp; } printf("\n sorted array:\n"); for(i0;i printf("%4d",a[i]); } 【程序41】 題目:學習static定義靜態變數的用法 程序源代碼: #include "stdio.h" varfunc() { int var0; static int static_var0; 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(i0;i<3;i++) varfunc(); } 【程序42】 題目:學習使用auto定義變數的用法 程序源代碼: #include "stdio.h" main() {int i,num; num2; for (i0;i<3;i++) { printf("\40: the num equal %d \n",num); num++; { auto int num1; printf("\40: the internal block num equal %d \n",num); num++; } } } 【程序43】 題目:學習使用static的另一用法. 程序源代碼: #include "stdio.h" main() { int i,num; num2; for(i0;i<3;i++) { printf("\40: the num equal %d \n",num); num++; { static int num1; printf("\40:the internal block num equal %d\n",num); num++; } } } 【程序44】 題目:學習使用external的用法. 程序源代碼: #include "stdio.h" int a,b,c; void add() { int a; a3; ca+b; } void main() { ab4; add(); printf("the value of c is equal to %d\n",c); } 【程序45】 題目:學習使用register定義變數的方法. 程序源代碼: void main() { register int i; int tmp0; for(i1;i"); scanf("%d",&num); printf("\40:the square for this number is %d \n",sq(num)); if(num>50) againtrue; else againfalse; } } 【程序46】 題目:宏#define命令練習(1) 程序源代碼: #include "stdio.h" #define TRUE 1 #define FALSE 0 #define SQ(x) (x)*(x) void main() { int num; int again1; printf("\40: Program will stop if input value less than 50.\n"); while(again) { printf("\40:Please input number>"); scanf("%d",&num); printf("\40:The square for this number is %d \n",SQ(num)); if(num>50) againTRUE; else againFALSE; } } 【程序47】 題目:宏#define命令練習(2) 程序源代碼: #include "stdio.h" #define exchange(a,b) { \ /*宏定義中允許包含兩道衣裳命令的情形,此時必須在最右邊加上"\"*/ int t;\ ta;\ ab;\ bt;\ } void main(void) { int x10; int y20; printf("x%d; y%d\n",x,y); exchange(x,y); printf("x%d; y%d\n",x,y); } 【程序48】 題目:宏#define命令練習(3) 程序源代碼: #define lag > #define sma y) x:y #define minimum(x,y) (x>y) y:x void main() { int a10,b20; #ifdef max printf("\40: the larger one is %d\n",maximum(a,b)); #else printf("\40: the lower one is %d\n",minimum(a,b)