ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

874复习第六天

2021-08-07 16:00:10  阅读:200  来源: 互联网

标签:return 复习 int 874 第六天 str printf include s1


1、设计一个函数,用来判断一个整数是否为素数

#include<stdio.h>
#include<math.h>
int IsPrimeNumber(int number);

int main()
{
	int a;
	printf("Input a integer number:");
	scanf("%d",&a);
	if(IsPrimeNumber(a))
		printf("%d is prime number.\n",a);
	else
		printf("%d is not prime number.\n",a);
	return 0; 
} 

int IsPrimeNumber(int number)
{
	int i;
	if(number<=1)
		return 0;
	for(i=2;i<sqrt(number);i++)
		if(number %i==0)
			return 0;
	return 1;
}

在这里插入图片描述

2、设计函数MaxCommonFactor(),计算两个正整数的最大公约数

#include<stdio.h>

int MaxCommonFactor(int a,int b);

int main()
{
	int a,b,c;
	printf("Input tow integer number:");
	scanf("%d%d",&a,&b);
	c=MaxCommonFactor(a,b);
	if(c!=-1)
		printf("The biggest common factor of %d and %d is %d\n",a,b,c);
	else
		printf("The biggest common factor of %d and %d isn't' %d\n",a,b,c);
}

int MaxCommonFactor(int a,int b)
{
	if(a<=0||b<=0)
		return(-1);
	while(a!=b)
	{
		if(a>b)
			a=a-b;
		else
			if(b>a)
			b=b-a;
	}
	return(a);
}

在这里插入图片描述

3、定义函数GetData()用于接收键盘输入的一组整型数据,并放入一数组中;另外再定义一个函数Sort()用于对输入的这一组数据按照降序排列。主函数先后调用GetData和Sort函数,输出最后的排序结果。

#include<stdio.h>
#define N 10
void GetData(int a[],int n);
void Sort(int a[],int n);
int main()
{
	int i,a[N];
	GetData(a,N);
	Sort(a,N);
	printf("After sort:");
	for(i=0;i<N;i++)
		printf("%d",a[i]);
	printf("\n");
	return 0;
} 
void GetData(int a[],int n)
{
	int i;
	printf("Input number:");
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
}

void Sort(int a[],int n)
{
	int i,j,k,t;
	for(i=0;i<n-1;i++)
	{
		k=i;
		for(j=i+1;j<n;j++)
			if(a[j]>a[k])
				k=j;
		if(k!=i)
		{
			t=a[i];
			a[i]=a[k];
			a[k]=t;
		}
	}
}

在这里插入图片描述

4、请编制函数JsSort(),其函数的功能是:对字符串变量的下标为奇数的字符按其ASCII值从大到小的顺序进行排序,排序后的结果仍存入字符串数组中。

#include<stdio.h>
#include<string.h>
void JsSort(char str[]);
int  main()
{
	char str[80];
	printf("Input a string: ");
	gets(str);
	JsSort(str);
	printf("After Sort: %s\n",str);
	return 0; 
}
void JsSort(char str[])
{
	int i,j,k,len;
	char ch;
	len=strlen(str);
	for(i=1;i<len-1;i+=2)
	{
		k=i;
		for(j=j+2;j<len;j+=2)
			if(str[j]>str[k])
				k=j;
		if(k!=i)
		{
			ch=str[i];
			str[i]=str[k];
			str[k]=ch;
		}
	}
} 


在这里插入图片描述

5、设有n个人围成一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止。现要求按出圈次序,每10人为一组,给出这n个人的顺序表。编制函数Josegh()实现此功能。

【设计思想】
设n=30,s=1;m=10;
(1)将1到n个人的序号存入一维数组p中
(2)若第i个人报数后出圈,则将p[i]置于数组的倒数第i个位置上,而原来第i+1个至倒数第i个元素依次向前移动一个位置。
(3)重复步骤(2),直至圈中只剩下p[1]为止。
再函数Josegh中第一个for循环是先对数组p赋初值。在第二个for循环中用i来控制没出圈的总人数,s1=(s1+m-1)%i的作用是找出报数后出圈的下标,其中对i求余的作用是使报数按圈进行(即报到尾后又从头报。由于求余的作用当报数正好到最后一个时s1为0,故而要进行if(s1==0)的判断,内嵌的for循环是将出圈以后的人依次往前移。

#include<stdio.h>
#include<string.h>
#define N 30
void Josegh (int p[],int n,int s,int m);
int  main()
{
	int i,p[N];
	Josegh(p,N,1,10);
	for(i=N-1;i>=0;i--)
	{
		printf("%4d",p[i]);
		if(i%10==0)
			printf("\n");
	}
	return 0;
}
void Josegh(int p[],int n,int s,int m)
{
	int i,j,s1,w;
	s1=s;
	for(i=1;i<=n;i++)
		p[i-1]=i;
	for(i=n;i>=2;i--)
	{
		s1=(s1+m-1)%i;
		if(s1==0)
			s1=i;
		w=p[s1-1];
		for(j=s1;j<i;j++)
			p[j-1]=p[j];
		p[i-1]=w;
	}
}

在这里插入图片描述

6、编写一函数StrLoc,其功能是求得一字符串str1在另一字符串str2中的首次出现的位置,如果str1不在str2中,则返回-1.

#include<stdio.h>
#include<string.h>
int StrLoc(char str1[],char str2[]);
int main()
{
	int loc;
	char str1[]={"do"};
	char str2[]={"how do you do?"};
	
	loc=StrLoc(str1,str2);
	if(loc==-1)
		printf("The string \"%s\" not in the string \"%s\".\n",str1,str2);
	else
		printf("Location of the string \"%s\" in the string \"%s\" is %d.\n",str1,str2,loc);
	return 0;	 
}
int StrLoc(char str1[],char str2[])
{
	unsigned int i,len1,len2;
	len1=strlen(str1);
	len2=strlen(str2);
	if(len1>len2)
		return(-1);
	for(i=0;i<=strlen(str2)-strlen(str1);i++)
		if(strncmp(str1,str2+i,len1)==0)
			return (i);
	return(-1);
}

在这里插入图片描述

7、在这里插入图片描述

#include<stdio.h>
long count(int n,int k);
int main()
{
	int n,k;
	n=10;
	k=2;
	printf("Result =%ld\n",count(n,k));
	return 0;
} 
long count(int n,int k)
{
	int i,j,sum,item;
	sum=0;
	for(i=1;i<=n;i++)
	{
		item=1;
		for(j=1;j<=k;j++)
			item *=i;
		sum+=item;
	}
	return (sum);
}

在这里插入图片描述

8、编写一递归函数求斐波那契数列的前40项。

#include<stdio.h>
long F(int n);
int main()
{
	int i;
	for(i=1;i<=40;i++)
	{
		printf("F(%2d)=%-9ld",i,F(i));
		if(i%4==0)
			printf("\n");
	}
} 
long F(int n)
{
	if(n<=2);
		return (1);
	return (F(n-1)+F(n-2));
}

在这里插入图片描述

9、在这里插入图片描述

#include<stdio.h>
long fun(int m,int n);
int main()
{
	int m,n;
	long c;
	printf("Input m and n(m>=n):");
	scanf("%d%d",&m,&n);
	c=fun(m,n);
	printf("c=%ld\n",c);
}
long fun(int m,int n)
{
	if(m==n||n==0)
	return(1L);
	else
		return(m*fun(m-1,n)/(m-n));
}

在这里插入图片描述

10、编写一递归函数将一个整数n转换成字符串,例如输入484,应输出字符串"484",n的位数不确定,可以是任意位数的整数

【设计思想】
设置一字符型数组str,用于存放转换后的字符串,因为在递归函数中要反复使用它,所以将其设置成全局数组变量。要实现整数n转换成字符串的递归转换,首先将n的个位数n%10转换成字符,插入到str字符串的最前面,然后将除个位后的高位部分n/10按照相同的方式来转换,直到要转换的数为0结束

#include<stdio.h>
#include<string.h>
void IntToStr(int n);
char str[80]={0};

int main()
{
	int num;
	printf("Input an Integer number:");
	scanf("%d",&num);
	IntToStr(num);
	printf("The string is:%s\n",str);
	return 0;
}
void IntToStr(int n)
{
	int i;
	if(n==0)
		return;
	for(i=strlen(str)-1;i>=0;i--)
		str[i+1]=str[i];
	str[0]=n%10+0x30;
	IntToStr(n/10);
}

在这里插入图片描述

标签:return,复习,int,874,第六天,str,printf,include,s1
来源: https://blog.csdn.net/weixin_44522477/article/details/119486142

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有