1、 輸出9*9口訣
輸出9*9口訣共9行9列,i控制行,j控制列。
1
2
3
4
5
6
7
8
9
10
11
12
|
#include "stdio.h" main() { int i,j,result; for (i=1;i<10;i++) { for (j=1;j<10;j++) { result=i*j; printf ( "%d*%d=%-3d" ,i,j,result); /*-3d表示左對齊,占3位*/ } printf ( "\n" ); /*每一行后換行*/ } } |
2、古典問題
有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?
兔子的規律為數列1,1,2,3,5,8,13,21....
1
2
3
4
5
6
7
8
9
10
11
12
|
main() { long f1,f2; int i; f1=f2=1; for (i=1;i<=20;i++) { printf ( "%12ld%12ld" ,f1,f2); if (i%2==0) printf ( "\n" ); /*控制輸出,每行四個*/ f1=f1+f2; /*前兩個月加起來賦值給第三個月*/ f2=f1+f2; /*前兩個月加起來賦值給第三個月*/ } } |
3、判斷101-200之間有多少個素數,并輸出所有素數及素數的個數
程序分析:判斷素數的方法:用一個數分別去除
2
到sqrt
(這個數),如果能被整除,
則表明此數不是素數,反之是素數。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#include "math.h" main() { intm,i,k,h=0,leap=1; printf ( "\n" ); for (m=101;m<=200;m++) {k= sqrt (m+1); for (i=2;i<=k;i++) if (m%i==0) {leap=0; break ;} if (leap) /*內循環結束后,leap依然為1,則m是素數*/ { printf ( "%-4d" ,m);h++; if (h%10==0) printf ( "\n" ); } leap=1; } printf ( "\nThetotal is %d" ,h); } |
4、一個數如果恰好等于它的因子之和,這個數就稱為“完數”
例如:
6=1+2+3.
編程
找出1000以內的所有完數。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
main() { static int k[10]; inti,j,n,s; for (j=2;j<1000;j++) { n=-1; s=j; for (i=1;i<j;i++) { if ((j%i)==0) { n++; s=s-i; k[n]=i; } } if (s==0) { printf ( "%d is a wanshu: " ,j); for (i=0;i<n;i++) printf ( "%d," ,k[i]); printf ( "%d\n" ,k[n]); } } } |
5、將一個4×4的數組進行逆時針旋轉90度后輸出
下面程序的功能是將一個4×4的數組進行逆時針旋轉90度后輸出,要求原始數組的數據隨機輸入,新數組以4行4列的方式輸出,
請在空白處完善程序。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
main() { int a[4][4],b[4][4],i,j; /*a存放原始數組數據,b存放旋轉后數組數據*/ printf ( "input 16 numbers: " ); /*輸入一組數據存放到數組a中,然后旋轉存放到b數組中*/ for (i=0;i<4;i++) for (j=0;j<4;j++) { scanf ( "%d" ,&a[i][j]); b[3-j][i]=a[i][j]; } printf ( "arrayb:\n" ); for (i=0;i<4;i++) { for (j=0;j<4;j++) printf ( "%6d" ,b[i][j]); printf ( "\n" ); } } |
6、編程打印直角楊輝三角形
1
2
3
4
5
6
7
8
9
10
11
12
|
main() { int i,j,a[6][6]; for (i=0;i<=5;i++) {a[i][i]=1;a[i][0]=1;} for (i=2;i<=5;i++) for (j=1;j<=i-1;j++) a[i][j]=a[i-1][j]+a[i-1][j-1]; for (i=0;i<=5;i++) { for (j=0;j<=i;j++) printf ( "%4d" ,a[i][j]); printf ( "\n" );} } |
7、通過鍵盤輸入3名學生4門課程的成績
分別求每個學生的平均成績和每門課程的平均成績。
要求所有成績均放入一個4行5列的數組中,輸入時同一人數據間用空格,不同人用回車
其中最后一列和最后一行分別放每個學生的平均成績、每門課程的平均成績及班級總平均分。*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#include <stdio.h> #include <stdlib.h> main() { float a[4][5],sum1,sum2; inti,j; for (i=0;i<3;i++) for (j=0;j<4;j++) scanf ( "%f" ,&a[i][j]); for (i=0;i<3;i++) {sum1=0; for (j=0;j<4;j++) sum1+=a[i][j]; a[i][4]=sum1/4; } for (j=0;j<5;j++) { sum2=0; for (i=0;i<3;i++) sum2+=a[i][j]; a[3][j]=sum2/3; } for (i=0;i<4;i++) { for (j=0;j<5;j++) printf ( "%6.2f" ,a[i][j]); printf ( "\n" ); } } |
8、完善程序,實現將輸入的字符串反序輸出
如輸入
windows
輸出swodniw
。
1
2
3
4
5
6
7
8
9
10
11
|
#include <string.h> main() { char c[200],c1; int i,j,k; printf ( "Enter a string: " ); scanf ( "%s" ,c); k= strlen (c); for (i=0,j=k-1;i<k/2;i++,j--) { c1=c[i];c[i]=c[j];c[j]=c1; } printf ( "%s\n" ,c); } |
指針法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
void invert( char *s) { int i,j,k; char t; k= strlen (s); for (i=0,j=k-1;i<k/2;i++,j--) { t=*(s+i); *(s+i)=*(s+j); *(s+j)=t; } } main() { FILE *fp; char str[200],*p,i,j; if ((fp= fopen ( "p9_2.out" , "w" ))==NULL) { printf ( "cannot open thefile\n" ); exit (0); } printf ( "input str:\n" ); gets (str); printf (“\n%s”,str); fprintf (fp,“%s”,str); invert(str); printf (“\n%s”,str); fprintf (fp,“\n%s”,str); fclose (fp); } |
9、從字符數組s中刪除存放在c中的字符
下面程序的功能是從字符數組s中刪除存放在c中的字符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#include <stdio.h> main() { char s[80],c; int j,k; printf ( "\nEnter a string: " ); gets (s); printf ( "\nEnter a character: " ); c= getchar ( ); for (j=k=0;s[j]!= '\0' ;j++) if (s[j]!=c) s[k++]=s[j]; s[k]= '\0' ; printf ( "\n%s" ,s); } |
10、編寫一個voidsort(int *x,int n)實現將x數組中的n個數據從大到小
排序。n及數組元素在主函數中輸入。將結果顯示在屏幕上并輸出到文件
p9_1.out
中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#include<stdio.h> void sort( int *x, int n) { int i,j,k,t; for (i=0;i<n-1;i++) { k=i; for (j=i+1;j<n;j++) if (x[j]>x[k]) k=j; if (k!=i) { t=x[i]; x[i]=x[k]; x[k]=t; } } } void main() { FILE *fp; int *p,i,a[10]; fp= fopen ( "p9_1.out" , "w" ); p=a; printf ( "Input 10 numbers:" ); for (i=0;i<10;i++) scanf ( "%d" ,p++); p=a; sort(p,10); for (;p<a+10;p++) { printf ( "%d " ,*p); fprintf (fp, "%d " ,*p); } system ( "pause" ); fclose (fp); } |
11、輸入的一個數插入數組中
已知數組a中的元素已按由小到大順序排列,以下程序的功能是將輸入的一個數插入數組a中,插入后,數組a中的元素仍然由小到大順序排列
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
main() { inta[10]={0,12,17,20,25,28,30}; /*a[0]為工作單元,從a[1]開始存放數據*/ int x , i, j=6; /*j為元素個數*/ printf ( "Enter a number: " ); scanf ( "%d" ,&x); a[0]=x; i=j; /*從最后一個單元開始*/ while (a[i]>x) { a[i+1]=a[i]; i--; } /*將比x大的數往后移動一個位置*/ a[++i]=x; j++; /*插入x后元素總個數增加*/ for (i=1;i<=j;i++) printf ( "%8d" ,a[i]); printf ( "\n" ); } |
12、編寫函數實現替換
編寫函數replace(char *s,char c1,char c2)實現將s所指向的字符串中所有字符c1用c2替換,字符串、字符c1和c2均在主函數中輸入,將原始字符串和替換后的字符串顯示在屏幕上,并輸出到文件p10_2.out中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#include<stdio.h> replace( char *s, char c1, char c2) { while (*s!= '\0' ) { if (*s==c1) *s=c2; s++; } } main() { FILE *fp; char str[100],a,b; if ((fp= fopen ( "p10_2.out" , "w" ))==NULL) { printf ( "cannot open thefile\n" ); exit (0); } printf ( "Enter a string:\n" ); gets (str); printf ( "Enter a&&b:\n" ); scanf ( "%c,%c" ,&a,&b); printf ( "%s\n" ,str); fprintf (fp, "%s\n" ,str); replace(str,a,b); printf ( "Thenew string is----%s\n" ,str); fprintf (fp, "Thenew string is----%s\n" ,str); fclose (fp); } |
13、再一個字串中找另一個字串
在一個字串s1中查找一子串s2,若存在則返回子串在主串中的起始位置
,不存在則返回-1。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
main() {chars1[6]= "thisis" ; char s2[5]= "is" ; printf ( "%d\n" ,search(s1,s2)); system ( "pause" ); } int search(chars1[], char s2[]) {inti=0,j,len= strlen (s2); while (s1[i]){ for (j=0;j<len;j++) if (s1[i+j]!=s2[j]) break ; if (j>=len) return i; else i++; } return -1; } |
14、用指針變量輸出結構體數組元素。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
struct student { int num; char *name; char sex; int age; }stu[5]={{1001, "lihua" , 'F' ,18},{1002, "liuxing" , 'M' ,19},{1003, "huangke" , 'F' ,19},{1004, "fengshou" , 'F' ,19},{1005, "Wangming" , 'M' ,18}}; main() { int i; struct student *ps; printf ( "Num \tName\t\t\tSex\tAge\t\n" ); /*用指針變量輸出結構體數組元素。*/ for (ps=stu;ps<stu+5;ps++) printf ( "%d\t%-10s\t\t%c\t%d\t\n" ,ps->num,ps->name,ps->sex,ps->age); /*用數組下標法輸出結構體數組元素學號和年齡。*/ for (i=0;i<5;i++) printf ( "%d\t%d\t\n" ,stu[i].num,stu[i].age); } |
15、建立一個有三個結點的簡單鏈表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#define NULL 0 struct student { int num; char *name; int age ; struct student*next; }; void main() { struct studenta,b,c,*head,*p; a.num=1001;a.name= "lihua" ; a.age=18; /* 對結點成員進行賦值 */ b.num=1002;b.name= "liuxing" ; b.age=19; c.num=1003;c.name= "huangke" ; c.age=18; head=&a; /* 建立鏈表,a為頭結點 */ a.next=&b; b.next=&c; c.next=NULL; p=head; /* 輸出鏈表 */ do { printf ( "%5d,%s,%3d\n" ,p->num,p->name,p->age); p=p->next; } while (p!=NULL); } |
16、輸入一個字符串,判斷其是否為回文
輸入一個字符串,判斷其是否為回文。回文字符串是指從左到右讀和從右到左讀完全相同的字符串。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#include<stdio.h> #include<string.h> #include<string.h> main() { char s[100]; int i,j,n; printf ( "輸入字符串:\n" ); gets (s); n= strlen (s); for (i=0,j=n-1;i<j;i++,j--) if (s[i]!=s[j]) break ; if (i>=j) printf ( "是回文串\n" ); else printf ( "不是回文串\n" ); } |
17、冒泡排序
冒泡排序,從小到大,排序后結果輸出到屏幕及文件
myf2.out
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#include<stdio.h> void fun(inta[], int n) { int i,j,t; for (i=0;i<=n-1;i++) for (j=0;j<i;j++) if (a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;} } main() {inta[10]={12,45,7,8,96,4,10,48,2,46},n=10,i; FILE *f; if ((f= fopen ( "myf2.out" , "w" ))==NULL) printf ( "open file myf2.outfailed!\n" ); fun(a,10); for (i=0;i<10;i++) { printf ( "%4d" ,a[i]); fprintf (f, "%4d" ,a[i]); } fclose (f); } |
18、編寫函數countpi,利用公式
計算π的近似值,當某一項的值小于10-5時,認為達到精度要求,請完善函數。將結果顯示在屏幕上并輸出到文件p7_3.out中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include<stdio.h> doublecountpi( double eps) /*eps為允許誤差*/ { int m=1; double temp=1.0,s=0; while (temp>=eps) { s+=temp; temp=temp*m/(2*m+1); m++; } return (2*s); } main() { FILE *fp; double eps=1e-5,pi; if ((fp= fopen ( "p7_3.out" , "w" ))==NULL) { printf ( "cannot open thefile\n" ); exit (0); } pi= countpi(eps); printf ( "pi=%lf\n" ,pi); fprintf (fp, "pi=%lf\n" ,pi); fclose (fp); } |
到此這篇關于C語言18個必背經典程序的文章就介紹到這了,更多相關C語言經典程序內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://zhuanlan.zhihu.com/p/44276814