874复习第六天
作者:互联网
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