`
ccjsjymg
  • 浏览: 61961 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

7道c练习题

阅读更多
花了我将近两个小时的时间。。。。。。。。。
/*
author:zhanglu
date:09/04/26
*/
#include <stdio.h>

/*
判断用户输入的数是否为质数?
*/
bool isPrimeNumber(int number)
{
	bool flag = true;
	for(int i = 2;i < number;++i)
	{
		if(number % i == 0)
		{
			flag = false;
			break;
		}
	}
	return flag;
}
void testPrimeNumber()
{
	int number,nClear;
	printf("请输入一个数字:\n");
	scanf("%d", &number);
	while(number < 0)
	{
		printf("请重新输入一个数字:\n");
		while((nClear = getchar()) != '\n' && nClear != EOF);
		scanf("%d", &number);
	}
	if(isPrimeNumber(number))
	{
		printf("%d是质数!\n", number);
	}else
	{
		printf("%d不是质数!\n", number);
	}
	
}
/*
求1000以内的素数之和
*/
void primeSum()
{
	int nSumPrime = 0,i = 2;
	do
	{
		if(isPrimeNumber(i))
		{
			nSumPrime += i;
		}
		++i;
	}while(i <= 1000);
	printf("1000以内素数之和为:%d\n", nSumPrime);
}
/*
列出用户输入的某个数的全部因子
*/
void splitNumber()
{
	int a,nClear;
	printf("请输入一个数字:\n");
	scanf("%d", &a);
	while(a < 0)
	{
		printf("请重新输入数字:\n");
		while((nClear = getchar()) != '\n' && nClear != EOF);
		scanf("%d", &a);
	}
	int i = 2;
	while(a > 1)
	{
		while(a % i == 0)
		{
			a /= i;
			printf("%d\n", i);
		}
		++i;
	}
}
/*
列出用户输入的某个数的分解和,分解为几个连续数的和
*/
void listSplitNumer()
{
	int number,nClear,nSum = 0;
	printf("请输入一个数字:\n");
	scanf("%d", &number);
	while(number < 0)
	{
		printf("请重新输入一个数字:\n");
		while((nClear = getchar()) != '\n' && nClear != EOF);
		scanf("%d", &number);
	}
	if(number % 2 == 0)
	{
		int halfNumber = number/2;
		printf("===================================\n");
		for(int i = halfNumber;i > 0;--i)
		{
			nSum = i;
			for(int j = i - 1;j > 0;--j)
			{
				nSum += j;
				if(nSum == number)
				{
					printf("%d = ", number);
					for(int k = j;k <= i;++k)
					{
						if(k == i)
						{
							printf("%d\n", k);
						}else
						{
							printf("%d+ ", k);
						}
					}
					nSum = 0;
					break;
				}else
				{
					if(nSum > number)
					{
						nSum = 0;
						break;
					}else
					{
						if(j == 1)
						{
							nSum = 0;
						}
					}
				}
			}
		}
	}else
	{
		printf("===================================\n");
		int halfNumber = number/2;
		printf("%d = %d + %d\n", number, halfNumber, halfNumber+1);
		for(int i = halfNumber;i > 0;--i)
		{
			nSum = i;
			for(int j = i - 1;j > 0;--j)
			{
				nSum += j;
				if(nSum == number)
				{
					printf("%d = ", number);
					for(int k = j;k <= i;++k)
					{
						if(k == i)
						{
							printf("%d\n", k);
						}else
						{
							printf("%d+ ", k);
						}
					}
					nSum = 0;
					break;
				}else
				{
					if(nSum > number)
					{
						nSum = 0;
						break;
					}else
					{
						if(j == 1)
						{
							nSum = 0;
						}
					}
				}
			}
		}
	}
}
/*
列出10000内的完全数
*/
void perfectNumber()
{
	int number = 10000;
	printf("%d = ", number);
	while(number != 1)
	{
		while(number % 2 == 0)
		{
			number /=2;
			if(number != 1)
			{
				printf("%d+ ", number);
			}else
			{
				printf("%d\n", number);
			}
			
			while(number != 1 && number % 2 != 0)
			{
				number /=2;
				number += 1;
				printf("%d+ ", number);
			}
		}
	}
}
/*
列出1000以内素数中的各位数字和为2的素数
*/
void screeningPrime()
{
	int primeDigit = 0;
	for(int i = 2;i <= 1000;++i)
	{
		if(isPrimeNumber(i))
		{
			primeDigit = i;
			int baiw = primeDigit / 100;
			int shiw = primeDigit / 10;
			int gew = primeDigit % 10;
			int num;
			if(baiw != 0)
			{
				shiw = (primeDigit % 100)/10;
				gew = (primeDigit % 100) % 10;
				num = baiw + shiw + gew;
				while(num != 2)
				{
					baiw = num / 100;
					shiw = num / 10;
					gew = num % 10;
					if(baiw != 0)
					{
						shiw = (primeDigit % 100)/10;
						gew = (primeDigit % 100) % 10;
						num = baiw + shiw + gew;
						if(num == 2)
						{
							printf("%d\n", primeDigit);
						}else
						{
							if(num / 10 == 0)
							{
								break;
							}
						}
						
					}else if(shiw != 0)
					{
						gew = num % 10;
						num = shiw + gew;
						if(num == 2)
						{
							printf("%d\n", primeDigit);
						}else
						{
							if(num / 10 == 0)
							{
								break;
							}
						}

					}else
					{
						num = gew;
						if(num == 2)
						{
							printf("%d\n", primeDigit);
						}else
						{
							break;
						}
					}
				}

			}else if(shiw != 0)
			{
				gew = num % 10;
				num = shiw + gew;
				if(num == 2)
				{
					printf("%d\n", primeDigit);
				}
			}else
			{
				num = gew;
				if(num == 2)
				{
					printf("%d\n", primeDigit);
				}
			}
		}
	}
}
/*
7只老鼠围成一个圈,从第一只开始吃,隔一只吃一只,求最后被吃的老鼠是第几只老鼠?
1  2   3   4    5
*/
void eatMice(int nMiceCout)
{
	int nMice[100] = {0};
	for(int j = 0;j < nMiceCout;j++)
	{
		nMice[j] = j+1;
	}
	int flag = 1;
	int i = 0, eatCount = 0, nMiceNumber;
	while(eatCount != nMiceCout)
	{
		if(i <= nMiceCout - 1)
		{
			if(flag == 1)
			{
				if(nMice[i] != 0)
				{
					nMice[i] = 0;
					++eatCount;
					if(eatCount == nMiceCout)
					{
						nMiceNumber = i+1;
					}
					++i;
					printf("flag = %d    i = %d\n", flag, i);
					flag = 0;
				}else
				{
					++i;
				}
			}else
			{
				if(nMice[i] != 0)
				{
					++flag;
				}
				++i;
			}
		}else
		{
			i = 0;
		}
	}
	printf("最后被吃的老鼠是第%d只老鼠\n", nMiceNumber);
}

int main(void)
{
	//testPrimeNumber();
	//primeSum();
	//perfectNumber();
	//screeningPrime();
	eatMice(10);

	return 0;
}
分享到:
评论
3 楼 chirking 2009-06-29  
<pre name="code" class="c"># /*
# 7只老鼠围成一个圈,从第一只开始吃,隔一只吃一只,求最后被吃的老鼠是第几只老鼠?
# 1  2   3   4    5
# 约瑟夫环问题
# */ 

int main()
{
    int i, r=0, n=7, m=2;
    for(i=2; i&lt;=n; i++)
        r = (r+m)%i;
    printf("%d", r+1);
}</pre>
 
2 楼 sotlcs 2009-05-19  
一个小小的建议:
1.你说是C代码,那么C中是没有bool类型的。
2.判断一个数是不是素数,可以这样写,效率会高一些:(有写的不对的,多多包涵。)
#include <stdio.h>
#include <math.h>
int IsPrime(int x)
{ 	
	if (x == 1)return 0;
	else if (x == 2)return 1;
	else if (x % 2 == 0) return 0;
	else 
	{ 
		int i,bound = sqrt((double)x) + 1;
		for( i = 3; i < bound; i += 2)
		{
			if (x % i == 0)
				return 0;
		}
		return 1;
	}
}

int main()
{
	int n;
	printf("Please input a positive integer:");
	while (scanf( "%d",&n) && n) {
		if (n < 0) printf("Please input a positive integer:");
		else 
		{
			if(IsPrime(n))
				printf("Yes\n");
			else 
				printf("No\n");	
			printf("Please input a positive integer:");
		}
	}
	return 0;
}


3.如果你想计算[0,n]中所有素数的和,那可以一边寻找,一遍构造素数数组,这个数组对后面整数的素数判断有好处,这样检查起来速度会更快。当然你可以先构造好数组,再计算,但是个人觉得,两者差不多。
#include <stdio.h>
#include <math.h>
int Ps[100];
int index = 2;
int IsPrime(int x)
{ 	
	if (x == 1)return 0;
	else if (x == 2)return 1;
	else if (x % 2 == 0) return 0;
	else 
	{ 
		int i,bound = sqrt((double)x) + 1;
		for( i = 1; Ps[i] < bound; i ++)
		{
			if (x % Ps[i] == 0)
				return 0;
		}
		Ps[index++] = x;
		return 1;
	}
}

int SumPrime(int n)
{
	int i, sum = 0;
	for(i = 2; i <= n; i++)
		if(IsPrime(i))
			sum += i;
	return sum;
}

int main()
{
	int n;
    Ps[0] = 2;Ps[1] = 3;
	printf("Please input a positive integer:");
	while (scanf( "%d",&n) && n) {
		if (n < 0) printf("Please input a positive integer:");
		else 
		{
			printf("The Sum of primers between 0 and %d is: %d\n",n,SumPrime(n));			
			printf("Please input a positive integer:");
		}
	}
	return 0;
}
1 楼 erlengleng 2009-05-18  
学习了,我2个小时也弄不出来,我得2天,顺便问问C开发,一般用什么IDE?

相关推荐

    C语言100道练习题

    标题 "C语言100道练习题" 涉及的是C语言的学习和实践,这是一门基础且重要的编程语言,对于计算机科学和技术领域的人来说至关重要。这个资源包含了100个专门为初学者设计的编程练习,目的是帮助他们巩固C语言的基础...

    C语言练习题.zip

    这份"C语言练习题.zip"文件显然包含了一些旨在帮助学习者掌握C语言编程技能的练习题目。下面,我们将深入探讨C语言的一些核心概念和知识点,以及这些练习题可能涉及的领域。 1. **基本数据类型**:C语言有几种基本...

    C语言200道练习题及答案

    C语言200道练习题及答案,学习C语言的好帮手,希望对您有帮助

    c语言练习题 c语言练习题

    本资料包“C语言练习题”旨在帮助学习者深入理解和掌握C语言的基本概念及编程技巧。 C语言的核心知识点包括以下几个方面: 1. **基本语法**:C语言的语句结构、变量声明、数据类型(如整型、浮点型、字符型等)、...

    C语言练习题数组总共12页C语言练习题数组总共12页

    c语言数组,C语言练习题数组C语言练习题数组总共12页C语言练习题数组总共12页C语言练习题数组总共12页

    结构体的使用c语言练习题

    结构体在处理复杂数据时非常有用,比如在本题中,我们需要创建一个表示时间的结构体来存储年、月、日、小时、分钟和秒。 首先,我们定义一个结构体类型,命名为`Time`,如下所示: ```c typedef struct { int ...

    C语言练习题19.pdf

    C语言练习题19.pdf 本资源是C语言练习题的第19份资源,旨在帮助程序员和开发者提高C语言编程能力。下面是该资源中的一些重要知识点: 1. 变量和数据类型:C语言中有多种数据类型,如整数、浮点数、字符、数组、...

    C语言练习题含答案.rar

    本资料集"**C语言练习题含答案.rar**"针对大一学生设计,旨在帮助初学者深入理解和掌握C语言的核心概念,同时通过丰富的实践题目提升编程技能。资料中涵盖了链表、幻方矩阵、蛇形矩阵以及学生成绩管理系统的实现,还...

    C语言练习题C语言练习题

    本压缩包“C语言练习题C语言练习题”显然包含了若干C语言的学习练习题目,旨在帮助学习者巩固和提升C语言编程技能。 在C语言的学习过程中,练习题是至关重要的部分。通过做题,可以加深对语法的理解,提高逻辑思维...

    C语言练习题 C语言入门

    以下是一些关于C语言练习题和入门的知识点: 1. **基本语法**: C语言的基础包括变量声明、数据类型(如int、char、float等)、运算符(如算术运算符、关系运算符、逻辑运算符等)以及流程控制语句(如if-else、...

    C语言练习题(带详解答案).doc

    C语言练习题答案详解 本资源提供了涵盖各种题型的C语言练习题,包括填空、选择、程序填空、写程序等题型,题目很多,并包含题目和答案,对学习C语言有很大帮助。 C语言基本概念 C语言程序的基本单位是函数(A),...

    C语言函数选择练习题

    C语言函数是编程中至关重要的...以上是针对C语言函数选择练习题的详细解析,涵盖了局部变量、全局变量、形参、函数返回类型、数组作为参数以及变量作用域等多个关键知识点。理解这些概念对于编写和调试C程序至关重要。

    C语言基础练习题

    以下是一些关于C语言基础练习题的知识点: 1. **变量与数据类型**: - C语言中的基本数据类型包括整型(int)、浮点型(float、double)、字符型(char)和布尔型(通过#define或枚举定义)。练习中会涉及到不同...

    C语言练习题(谭浩强第四版)..附有答案.doc

    "C语言练习题(谭浩强第四版)..附有答案.doc" 本文档是一个C语言练习题集,涵盖了C语言的基础知识、数据类型、运算符、控制语句、函数等方面。下面是对标题、描述、标签和部分内容的详细解释: 标题: "C语言练习题...

    谭浩强C语言word版+练习题

    谭浩强C语言word版和练习题 C语言是在 70 年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。同时由B.W.Kernighan和D.M.Ritchit合著了著名的“THE C PROGRAMMING LANGUAGE”一书。...

    C语言练习题编程题 .pdf

    文档内容涉及了多个实际编程练习,如温度转换、坐标转换、数学运算、字符处理等,这些都是初学者练习编程逻辑和掌握C语言基础的良好素材。 ### 注意事项 - 在实际编程中,需要注意输入数据的格式化,如`%f`用于`...

    C语言课程设计练习题及答案

    这份资料包含的两个文档——"C语言练习题册.doc"和"C语言练习题册参考答案.doc",为学习者提供了自我检测和学习反思的宝贵资源。 首先,C语言基础知识点包括变量与数据类型,运算符与表达式,流程控制语句(如if-...

    大学C语言章节相习题练习

    大学C语言章节相习题练习语言章节相习题练习大学C语言章节相习题练习大学C语言章节相习题练习大学C语言章节相习题练习大学C语言章节相习题练习大学C语言章节相习题练习语言章节相习题练习大学C语言章节相习题练习...

    C语言练习题示例(100个)

    "C语言练习题示例(100个)"这个资源为学习者提供了丰富的实践机会,通过解决100个精心设计的C语言练习题,可以深入理解和熟练运用C语言的核心概念和技术。 首先,C语言的基础知识包括变量、数据类型、运算符、流程...

    ITAT-c语言练习题

    通过"ITAT-c语言练习题"中的习题,学习者可以逐步巩固这些概念,并提高解决实际问题的能力。在解题过程中,应注重理解题目要求,编写清晰、高效且符合规范的代码,同时培养良好的编程习惯。这些练习题将对学习者的...

Global site tag (gtag.js) - Google Analytics