C語言經典例題(26-50)
寫在前面
你好,我是禪墨!
本文來自老珍藏!
前天發了一篇,反響挺不錯的!今天繼續!
正文開始
26.利用遞歸方法求5!
#include <stdio.h>
int main()
{
int i;
int fact(int);
for(i=0;i<6;i++){
printf("%d!=%d\n",i,fact(i));
}
}
int fact(int j)
{
int sum;
if(j==0){
sum=1;
} else {
sum=j*fact(j-1);
}
return sum;
}
#輸出
0!=1
1!=1
2!=2
3!=6
4!=24
5!=120
27.利用遞歸函數調用方式,將所輸入的5個字符,以相反順序打印出來。
#include <stdio.h>
int main()
{
int i=5;
void palin(int n);
printf("請輸入5個字符\40:\40");
palin(i);
printf("\n");
}
void palin(n)
int n;
{
char next;
if(n<=1) {
next=getchar();
printf("相反順序輸出結果\40:\40");
putchar(next);
} else {
next=getchar();
palin(n-1);
putchar(next);
}
}
#輸出
請輸入5個字符 : abcde
相反順序輸出結果 : edcba
28.有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第一個人大兩歲。最後問第一個人,他說是10歲。請問第五個人多大?
#include <stdio.h>
int age(n)
int n;
{
int c;
if(n==1) c=10;
else c=age(n-1)+2;
return(c);
}
int main()
{
printf("%d\n",age(5));
}
#輸出結果爲:
18
29.給一個不多於5位的正整數,要求:一、求它是幾位數,二、逆序打印出各位數字。
#include <stdio.h>
int main( )
{
long a,b,c,d,e,x;
printf("請輸入 5 位數字:");
scanf("%ld",&x);
a=x/10000; /*分解出萬位*/
b=x%10000/1000; /*分解出千位*/
c=x%1000/100; /*分解出百位*/
d=x%100/10; /*分解出十位*/
e=x%10; /*分解出個位*/
if (a!=0){
printf("爲 5 位數,逆序爲: %ld %ld %ld %ld %ld\n",e,d,c,b,a);
} else if(b!=0) {
printf("爲 4 位數,逆序爲: %ld %ld %ld %ld\n",e,d,c,b);
} else if(c!=0) {
printf("爲 3 位數,逆序爲:%ld %ld %ld\n",e,d,c);
} else if(d!=0) {
printf("爲 2 位數,逆序爲: %ld %ld\n",e,d);
} else if(e!=0) {
printf("爲 1 位數,逆序爲:%ld\n",e);
}
}
#輸出結果爲:
請輸入 5 位數字:12345
爲 5 位數,逆序爲: 5 4 3 2 1
30.(迴文數)一個5位數,判斷它是不是迴文數。即12321是迴文數,個位與萬位相同,十位與千位相同。
#include <stdio.h>
int main( )
{
long ge,shi,qian,wan,x;
printf("請輸入 5 位數字:");
scanf("%ld",&x);
wan=x/10000; /*分解出萬位*/
qian=x%10000/1000; /*分解出千位*/
shi=x%100/10; /*分解出十位*/
ge=x%10; /*分解出個位*/
if (ge==wan&&shi==qian) { /*個位等於萬位並且十位等於千位*/
printf("這是迴文數\n");
} else {
printf("這不是迴文數\n");
}
}
#輸出結果爲:
請輸入 5 位數字:12321
這是迴文數
31.請輸入星期幾的第一個字母來判斷一下是星期幾,如果第一個字母一樣,則繼續判斷第二個字母。
#include<stdio.h>
int main()
{
char i,j;
printf("請輸入第一個字母:\n");
scanf("%c",&i);
getchar();//scanf("%c",&j);的問題,第二次是讀入的一個換行符,而不是輸入的字符,因此需要加一個getchar() 吃掉換行符
switch(i)
{
case 'm':
printf("monday\n");
break;
case 'w':
printf("wednesday\n");
break;
case 'f':
printf("friday\n");
break;
case 't':
printf("請輸入下一個字母\n");
scanf("%c",&j);
if (j=='u') {printf("tuesday\n");break;}
if (j=='h') {printf("thursday\n");break;}
case 's':
printf("請輸入下一個字母\n");
scanf("%c",&j);
if (j=='a') {printf("saturday\n");break;}
if (j=='u') {printf("sunday\n"); break;}
default :
printf("error\n"); break;
}
return 0;
}
#輸出結果爲:
請輸入第一個字母:
s
請輸入下一個字母
a
saturday
32.刪除一個字符串中的指定字母,如:字符串 “aca”,刪除其中的 a 字母。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
// 刪除字符串中指定字母函數
char* deleteCharacters(char * str, char * charSet)
{
int hash [256];
if(NULL == charSet)
return str;
for(int i = 0; i < 256; i++)
hash[i] = 0;
for(int i = 0; i < strlen(charSet); i++)
hash[charSet[i]] = 1;
int currentIndex = 0;
for(int i = 0; i < strlen(str); i++)
{
if(!hash[str[i]])
str[currentIndex++] = str[i];
}
str[currentIndex] = '\0';
return str;
}
int main()
{
char s[2] = "a"; // 要刪除的字母
char s2[5] = "aca"; // 目標字符串
printf("%s\n", deleteCharacters(s2, s));
return 0;
}
#輸出結果爲:
c
33.判斷一個數字是否爲質數
#include<stdio.h>
#include<math.h>
#define MAX 1000
int prime[MAX];
int isPrimeNaive(int n)
{
if(n <= 1)
return 0;
for(int i = 2; i < n; i++)
if(n % i == 0)
return 0;
return 1;
}
int isPrime(int n)
{
if(n<= 1)
return 0;
if(n == 2)
return 1;
if(n%2 == 0)
return 0;
int limit = (int)sqrt((double)n);
for(int i = 3; i <= limit; i=i+2)
{
if(n % i == 0)
return 0;
}
return 1;
}
void sieve()
{
prime[0] = 0;
prime[1] = 0;
for(int i = 2; i < MAX; i++)
prime[i] = 1;
int limit = (int)sqrt((double)MAX);
for(int i = 2; i <= limit; i++)
{
if(prime[i])
for(int j = i*i; j <= MAX; j+=i)
prime[j] = 0;
}
}
int isPrimeSieve(int n)
{
if(prime[n])
return 1;
else
return 0;
}
int main()
{
sieve();
printf("N=%d %d\n", 1, isPrime(1));
printf("N=%d %d\n", 2, isPrime(2));
printf("N=%d %d\n", 3, isPrime(3));
printf("N=%d %d\n", 4, isPrime(4));
printf("N=%d %d\n", 7, isPrime(7));
printf("N=%d %d\n", 9, isPrime(9));
printf("N=%d %d\n", 13, isPrime(13));
printf("N=%d %d\n", 17, isPrime(17));
printf("N=%d %d\n", 100, isPrime(100));
printf("N=%d %d\n", 23, isPrime(23));
printf("N=%d %d\n", 1, isPrime(1));
return 0;
}
#以上實例輸出結果爲(末尾數字 1 表示是質數,0 表示不是質數):
N=1 0
N=2 1
N=3 1
N=4 0
N=7 1
N=9 0
N=13 1
N=17 1
N=100 0
N=23 1
N=1 0
34.練習函數調用。
#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();/*調用此函數*/
}
int main(void)
{
three_hellos();/*調用此函數*/
}
#輸出結果爲:
Hello, world!
Hello, world!
Hello, world!
35.字符串反轉,如將字符串 “www.runoob.com” 反轉爲 “moc.boonur.www”。
#include <stdio.h>
void reverse(char* s)
{
// 獲取字符串長度
int len = 0;
char* p = s;
while (*p != 0)
{
len++;
p++;
}
// 交換 ...
int i = 0;
char c;
while (i <= len / 2 - 1)
{
c = *(s + i);
*(s + i) = *(s + len - 1 - i);
*(s + len - 1 - i) = c;
i++;
}
}
int main()
{
char s[] = "www.runoob.com";
printf("'%s' =>\n", s);
reverse(s); // 反轉字符串
printf("'%s'\n", s);
return 0;
}
#以上實例輸出結果爲:
'www.runoob.com' =>
'moc.boonur.www'
36.求100之內的素數。
#include<stdio.h>
#include<math.h>
int main()
{
int i,j,k,n=0;
for(i=2;i<=100;i++)
{
k=(int)sqrt(i);
for(j=2;j<=k;j++)
if(i%j==0) break;
if(j>k)
{
printf("%d ",i);
n++;
if(n%5==0)
printf("\n");
}
}
return 0;
}
#以上實例輸出結果爲:
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
37.對10個數進行排序。
#include<stdio.h>
#define N 10
int main()
{
int i,j,a[N],temp;
printf("請輸入 10 個數字:\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N-1;i++)
{
int min=i;
for(j=i+1;j<N;j++)
if(a[min]>a[j]) min=j;
if(min!=i)
{
temp=a[min];
a[min]=a[i];
a[i]=temp;
}
}
printf("排序結果是:\n");
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
#以上實例輸出結果爲:
請輸入 10 個數字:
23 2 27 98 234 1 4 90 88 34
排序結果是:
1 2 4 23 27 34 88 90 98 234
38.求一個3*3矩陣對角線元素之和
#include<stdio.h>
#define N 3
int main()
{
int i,j,a[N][N],sum=0;
printf("請輸入矩陣(3*3):\n");
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);
for(i=0;i<N;i++)
sum+=a[i][i];
printf("對角線之和爲:%d\n",sum);
return 0;
}
#以上實例輸出結果爲:
請輸入矩陣(3*3):
1 2 3
4 5 6
7 8 9
對角線之和爲:15
39.有一個已經排好序的數組。現輸入一個數,要求按原來的規律將它插入數組中
#include<stdio.h>
int main()
{
int a[11]={1,4,6,9,13,16,19,28,40,100};
int temp1,temp2,number,end,i,j;
printf("原始數組是:\n");
for(i=0;i<10;i++)
printf("%4d",a[i]);
printf("\n插入一個新的數字: ");
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("%4d",a[i]);
printf("\n");
return 0;
}
#以上實例輸出結果爲:
原始數組是:
1 4 6 9 13 16 19 28 40 100
插入一個新的數字: 10
1 4 6 9 10 13 16 19 28 40 100
40.將一個數組逆序輸出。
#include<stdio.h>
#define N 10
int main()
{
int a[N]={0,1,2,3,4,5,6,7,8,9};
int i,t;
printf("原始數組是:\n");
for(i=0;i<N;i++)
printf("%d ",a[i]);
for(i=0;i<N/2;i++)
{
t=a[i];
a[i]=a[N-1-i];
a[N-1-i]=t;
}
printf("\n排序後的數組:\n");
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
#以上實例輸出結果爲:
原始數組是:
0 1 2 3 4 5 6 7 8 9
排序後的數組:
9 8 7 6 5 4 3 2 1 0
41.學習static定義靜態變量的用法。
#include<stdio.h>
int main()
{
void fun();
for(int i=0;i<3;i++)
fun();
return 0;
}
void fun()
{
int i=0;
static int static_i=0;
printf("i=%d\n",i);
printf("static_i=%d\n",static_i);
i++;
static_i++;
}
#以上實例輸出結果爲:
i=0
static_i=0
i=0
static_i=1
i=0
static_i=2
42.學習使用auto定義變量的用法。
#include <stdio.h>
int main()
{
int i,num;
num=2;
for(i=0;i<3;i++)
{
printf("num 變量爲 %d \n",num);
num++;
{
auto int num=1;
printf("內置模塊 num 變量爲 %d \n",num);
num++;
}
}
return 0;
}
#以上實例輸出結果爲:
num 變量爲 2
內置模塊 num 變量爲 1
num 變量爲 3
內置模塊 num 變量爲 1
num 變量爲 4
內置模塊 num 變量爲 1
43.學習使用static的另一用法。
#include <stdio.h>
int main()
{
int i,num;
num=2;
for(i=0;i<3;i++)
{
printf("num 變量爲 %d \n",num);
num++;
{
static int num=1;
printf("內置模塊 num 變量爲 %d\n",num);
num++;
}
}
return 0;
}
#以上實例輸出結果爲:
num 變量爲 2
內置模塊 num 變量爲 1
num 變量爲 3
內置模塊 num 變量爲 2
num 變量爲 4
內置模塊 num 變量爲 3
44.學習使用external的用法。
#include <stdio.h>
int a,b,c;
void add()
{
int a;
a=3;
c=a+b;
}
int main()
{
a=b=4;
add();
printf("c 的值爲 %d\n",c);
return 0;
}
#以上實例輸出結果爲:
c 的值爲 7
45.學習使用register定義變量的方法。
#include <stdio.h>
int main()
{
register int i;
int tmp=0;
for(i=1;i<=100;i++)
tmp+=i;
printf("總和爲 %d\n",tmp);
return 0;
}
#以上實例輸出結果爲:
總和爲 5050
46.宏#define命令練習。
#include<stdio.h>
#define TRUE 1
#define FALSE 0
#define SQ(x) (x)*(x)
int main()
{
int num;
int again=1;
printf("如果值小於 50 程序將終止。\n");
while(again)
{
printf("\n請輸入數字:");
scanf("%d",&num);
printf("該數字的平方爲 %d \n",SQ(num));
if(num>=50)
again=TRUE;
else
again=FALSE;
}
return 0;
}
以上實例輸出結果爲:
如果值小於 50 程序將終止。
請輸入數字:100
該數字的平方爲 10000
請輸入數字:5
該數字的平方爲 25
47.宏#define命令練習2。
#include<stdio.h>
#define exchange(a,b) { int t;t=a;a=b;b=t;}//注意放在一行裏
int 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);
return 0;
}
#以上實例輸出結果爲:
x=10; y=20
x=20; y=10
48.宏#define命令練習3。
#define LAG >
#define SMA <
#define EQ ==
#include <stdio.h>
int main()
{
int i,j;
printf("請輸入兩個數字:\n");
scanf("%d %d",&i,&j);
if(i LAG j)
printf("%d 大於 %d \n",i,j);
else if(i EQ j)
printf("%d 等於 %d \n",i,j);
else if(i SMA j)
printf("%d 小於 %d \n",i,j);
else
printf("沒有值。\n");
return 0;
}
#以上實例輸出結果爲:
請輸入兩個數字:
1 2
1 小於 2
49.#if #ifdef和#ifndef的綜合應用。
#include<stdio.h>
#define MAX
#define MAXIMUM(x,y)(x>y)?x:y
#define MINIMUM(x,y) (x>y)?y:x
int main()
{
int a=10,b=20;
#ifdef MAX
printf("更大的數字是 %d\n",MAXIMUM(a,b));
#else
printf("更小的數字是 %d\n",MINIMUM(a,b));
#endif
#ifndef MIN
printf("更小的數字是 %d\n",MINIMUM(a,b));
#else
printf("更大的數字是 %d\n",MAXIMUM(a,b));
#endif
#undef MAX
#ifdef MAX
printf("更大的數字是 %d\n",MAXIMUM(a,b));
#else
printf("更小的數字是 %d\n",MINIMUM(a,b));
#endif
#define MIN
#ifndef MIN
printf("更小的數字是 %d\n",MINIMUM(a,b));
#else
printf("更大的數字是 %d\n",MAXIMUM(a,b));
#endif
return 0;
}
#以上實例輸出結果爲:
更大的數字是 20
更小的數字是 10
更小的數字是 10
更大的數字是 20
50.#include 的應用練習
#include "test.h"
#include <stdio.h>
int main()
{
int i=10;
int j=20;
if(i LAG j)
printf("%d 大於 %d \n",i,j);
else if(i EQ j)
printf("%d 等於 %d \n",i,j);
else if(i SMA j)
printf("%d 小於 %d \n",i,j);
else
printf("沒有值。\n");
return 0;
}
#以上實例輸出結果爲:
10 小於 20
寫在後面
好了,今天就先分享到這裏了。
喜歡的關注,點個贊!
微信公衆號:興趣路人甲