c语言练习题——基础1

时间:2023-02-22 22:39:15

《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;
}