1. 程式人生 > >C語言 -- c語言練習題——基礎1

C語言 -- c語言練習題——基礎1

《c語言練習題——基礎1》
http://blog.csdn.net/ivan804638781/article/details/52387884
《c語言練習題——基礎2》
http://blog.csdn.net/ivan804638781/article/details/52388233
《c語言練習題——基礎3》
http://blog.csdn.net/ivan804638781/article/details/52388242
《c語言練習題——基礎4》
http://blog.csdn.net/ivan804638781/article/details/52388249
《c語言練習題——整數演算法訓練》
http://blog.csdn.net/ivan804638781/article/details/52388254
《c語言練習題——遞迴和棧程式設計訓練》
http://blog.csdn.net/ivan804638781/article/details/52388259
《c語言練習題——字串訓練》
http://blog.csdn.net/ivan804638781/article/details/52388267
《c語言練習題——指標和連結串列訓練》
http://blog.csdn.net/ivan804638781/article/details/52388279

《c語言練習題——基礎1》

1.a和b的最大公約數

   gcd(a  ,b)= gcd(b,  a%b)

   例:gcd(36,24) =gcd(24, 12 ) =gcd(12, 0 )

2.100~200間的所有素數,每行列印5個素數

3.將整數轉換為10進位制、2進位制、16進位制的數字串

4.整數陣列的氣泡排序(從小到大)

5.計算字串中的單詞數。

   單詞:由空格分開的連續字母數字串。

/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. 
File name:
Author:Ivan    Version:0.1    Date: 
Description:求a和b的最大公約數
             gcd(a  ,b)= gcd(b,  a%b)
             例:gcd(36,24) =gcd(24, 12 ) =gcd(12, 0 )(9)
Funcion List: 
*****************************************************/

#include <stdio.h>

int gcd(int a, int b)
//跳過,一般從主函式看起
{
	int x, y, i;
	if (a > b)
//先找到兩個數中較大的那個,作為除數
	{
		y = b;
		x = a;
	}
	else
	{
		y = a;
		x = b;
	}
	while (1)
	{
		if (x % y == 0)
//若餘數不為0,則y還不是最大公約數
		{
			break;
		}
		i = x % y;
//餘數賦值給y
		x = y;
//兩個數中較小的值y賦值給x
		y = i;
//迴圈,直到餘數為0,則y就是最大公約數
	}
	return y;
}


int main()
{
	int a, b;
	int i;

	scanf("%d%d", &a, &b);

	i = gcd(a,b);
//得到最大公約數

	printf("最大公約數 = %d\n", i);

    return 0;
}
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. 
File name:
Author:Ivan    Version:0.1    Date: 
Description:求100~200間的所有素數,每行列印5個素數(11)
Funcion List: 
*****************************************************/

#include <stdio.h>

int main()
{
	int i, j, k = 0;
	int s1[100];

	for (i = 100; i <= 200; i++)
	{
		for (j = 2; j <= i; j++)
//兩個for迴圈,第一個迴圈是100-200每一個數,第二個迴圈是判斷該數是否是素數
		{
			if (i == j)
			{
				s1[k++] = i;
//若是就放入陣列
			}
			if (i % j == 0)
			{
				break;
//若不是就退出,換下一個數
			}
		}
	}
	i = 0, j = 1;
	while (k != 0)
	{
		printf("%d ",s1[i]);
//輸出素數
		if (j % 5 == 0)
		{
			printf("\n");
//每五個一行
		}
		i++;
		j++;
		k--;
//k:總共有k個素數
	}
	printf("\n");

    return 0;
}
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. 
File name:
Author:Ivan    Version:0.1    Date: 
Description:將整數轉換為10進位制、2進位制、16進位制的數字串(12)
Funcion List: 
*****************************************************/

#include <stdio.h>

void two(int n);
void ten(int n);
void sixteen(int n);

int main()
{
	int n;

	scanf("%d", &n);

	two(n);
	ten(n);
	sixteen(n);
	
    return 0;
}

void two(int n)
{
	int i = 0;
	int s1[100];

	while(n != 0)
	{
		s1[i] = n % 2;
		n = n / 2;
		i++;
	}

	for(i = i - 1; i >= 0; i--)
	{
		printf("%d", s1[i]);
		if(i % 4 == 0)
		{
			printf(" ");
		}
	}
	printf("\n");
}

void ten(int n)
{
	int i = 0;
	int s1[100];

	while(n != 0)
	{
		s1[i] = n % 10;
		n = n / 10;
		i++;
	}

	for(i = i -1; i >= 0; i--)
	{
		printf("%d",s1[i]);
	}
	printf("\n");
}

void sixteen(int n)
{
	int i = 0, j;
	char s1[100];

	while(n != 0)
	{	
			switch(n % 16)
//十六進位制的餘數,在>=10時,變為A-F可以用switch,其餘相似
			{
				case 0:s1[i] = '0';break;
				case 1:s1[i] = '1';break;
				case 2:s1[i] = '2';break;
				case 3:s1[i] = '3';break;
				case 4:s1[i] = '4';break;
				case 5:s1[i] = '5';break;
				case 6:s1[i] = '6';break;
				case 7:s1[i] = '7';break;
				case 8:s1[i] = '8';break;
				case 9:s1[i] = '9';break;
				case 10:s1[i] = 'A';break;
				case 11:s1[i] = 'B';break;
				case 12:s1[i] = 'C';break;
				case 13:s1[i] = 'D';break;
				case 14:s1[i] = 'E';break;
				case 15:s1[i] = 'F';break;
			}
		n = n / 16;
		i++;
	}
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. 
File name:
Author:Ivan    Version:0.1    Date: 
Description:整數陣列的氣泡排序(從小到大)(13)
Funcion List: 
*****************************************************/

#include <stdio.h>
#define N 5

int main()
{
	int i, j, t;
	int a[10];

	for (i = 0; i < N; i++)
	{
		scanf("%d", &a[i]);
	}

	for (i = 0; i < N - 1 ; i++)
	{
		for (j = 0; j < N - 1 - i; j++)
//氣泡排序,兩個迴圈,每一次都把最大的數移到最上面,重複移N-1次,完成N個數排序
		{
			if (a[j + 1] < a[j])
			{
				t = a[j + 1];
			 	a[j + 1] = a[j];
				a[j] = t;
			}
		}
	}

	for (i = 0; i < 5; i++)
	{
		printf("%d\n", a[i]);
	}

    return 0;
}
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. 
File name:
Author:Ivan    Version:0.1    Date: 
Description:計算字串中的單詞數。
   		  單詞:由空格分開的連續字母數字串。
Funcion List: 
*****************************************************/

#include <stdio.h>

int count_string(char *string)
{
	int sum = 0;
	char *p = NULL;
	p = string;

	while(*p != '\n')
	{
		
		if((*p >= '0' && *p <= '9') || (*p >= 'a' && *p <= 'z'))
		{
			sum++;
			while((*p >= '0' && *p <= '9') || (*p >= 'a' && *p <= 'z'))
			{
				p++;
			}
		}
		p++;
	}

	return sum;
}

int main()
{
	char string[1024] = "0010 hello world hello c 10086 ! \n";
	int sum = 0;

	sum = count_string(string);

	printf("count = %d\n",sum);

    return 0;
}