1.编写一个函数实现该功能:从键盘输入一个字串符,再输入两个正整数m和n,输出字符串中从m开始,连续n个字符。例如,输入abcdefg,2,3,输出 bcd.
#include <stdio.h>
/*编写一个函数实现该功能:从键盘输入一个字串符,再输入两个正整数m和n,输出字符串中从m开始,连续n个字符。例如,输入abcdefg,2,3,输出 bcd.*/
void Fun(char *p,int a,int b);
int main()
{
char buf[32]={0};
int m=0,n=0;
printf("请输入字符串:\n");
scanf("%s",buf);
getchar();//吸收字符串输入结束后的回车
printf("请输入m和n的值:\n");
scanf("%d%d",&m,&n);
Fun(buf,m,n);
printf("\n");
return 0;
}
void Fun(char *p,int a,int b)
{
int i=0;
for(i=1;i<=b;i++)
{
printf("%c",*(p+(a-1)+(i-1)));
}
return;
}
运行结果:
请输入字符串:
abcdefg
请输入m和n的值:
2 3
bcd
2.已知银行定期存款利率为 r=2.25%,输入存款本金x,存款年数n,输出本利之和r=x(1+r)(1+r).....(1+r),共n个(1+r).
#include <stdio.h>
/* 已知银行定期存款利率为 r=2.25%,输入存款本金x,存款年数n,输出本利之和r=x(1+r)(1+r).....(1+r),共n个(1+r).*/
float Rates(int a,int b);
int main()
{
int x=0,n=0;
printf("请输入本金x,存款年数n:\n");
scanf("%d%d",&x,&n);
float r=Rates(x,n);
printf("输出本利之和:%f\n",r);
return 0;
}
float Rates(int a,int b)
{
float r=0.0225;
float sum=0;
int n=0;
for(n=1;n<=b;n++)
{
a*=(float)(1+r);
}
return a;
}
运行结果:
请输入本金x,存款年数n:
10000 10
输出本利之和:12487.000000
3.一个皮球从100米高度自由落下,每次落地后反弹回原高度的一半再落下,再反弹.求当它第 n 次落地式时,共经过了多少米
#include <stdio.h>
/*一个皮球从100米高度自由落下,每次落地后反弹回原高度的一半再落下,再反弹.求当它第 n 次落地式时,共经过了多少米*/
float Fun(int n);
int main()
{
int n=0;
printf("请输入落地次数n:\n");
scanf("%d",&n);
float m=Fun(n);
printf("共经过了%f米\n",m);
return 0;
}
float Fun(int n)
{
float m=100;//高度
float sum =0;
if(n==1)
{
sum+=m;
}
else if(n>=2)
{
sum+=m;
for(int i=2;i<=n;i++)
{
//第1次 100,第2次 100+100,第3次 200+50,第4次 250+25
m/=2;
sum+=(2*m);
}
}
return sum;
}
运行结果:
请输入落地次数n:
4
共经过了275.000000米
4.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。
#include <stdio.h>
/*写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。*/
int Fun1(int a,int b);
int Fun2(int a,int b);
int main()
{
int num1=0,num2=0;
printf("输入两个整数:\n");
scanf("%d%d",&num1,&num2);
int gys=Fun1(num1,num2);
printf("最大公约数:%d\n",gys);
int gbs=Fun2(num1,num2);
printf("最小公倍数:%d\n",gbs);
return 0;
}
//最大公约数,找出两数中的最小值,然后直接相模,当能够同时被两数整除时则为最大公约数
int Fun1(int a,int b)
{
int m=(a<b)?a:b;
while(m>0)
{
if((a%m==0)&&(b%m==0))
{
break;
}
m--;
}
return m;
}
//最小公倍数,可以用(a*b)/最大公约数求
int Fun2(int a,int b)
{
int n=(a*b)/Fun1(a,b);//调用一下子函数Fun1
return n;
}
最小公倍数也可以写成:
int Fun2(int a,int b)
{
int m=(a>b)?a:b;
while(m<(a*b))
{
if((m%a==0)&&(m%b==0))
{
break;
}
m++;
}
return m;
}
运行结果:
输入两个整数:
12 15
最大公约数:3
最小公倍数:60
5.编写一个名为sumnarrays( )的函数,它接受两个数组作为参数,将两个数组中的所有值相加,并返回得到的结果
#include <stdio.h>
/*编写一个名为sumnarrays( )的函数,它接受两个数组作为参数,将两个数组中的所有值相加,并返回得到的结果*/
int Sumnarrays(int n,int *a,int *b);
int main()
{
int num1[100]={0},num2[100]={0};
int i=0,n=0;
printf("请输入数组存储的个数:\n");
scanf("%d",&n);
printf("输入数组1:\n");
for(i=0;i<n;i++)
{
scanf("%d",&num1[i]);
}
printf("输入数组2:\n");
for(i=0;i<n;i++)
{
scanf("%d",&num2[i]);
}
int sum=Sumnarrays(n,num1,num2);
printf("数组中的所有值相加:%d\n",sum);
return 0;
}
int Sumnarrays(int n,int *a,int *b)
{
int i=0,sum=0;
for(i=0;i<n;i++)
{
sum+=*(a+i);
sum+=*(b+i);
}
return sum;
}
运行结果:
请输入数组存储的个数:
6
输入数组1:
1 2 3 4 5 6
输入数组2:
1 2 3 4 5 6
数组中的所有值相加:42
6.写一个功能函数,求字符串的长度( 用指针来实现)类比 strlen 库函数
#include <stdio.h>
/*写一个功能函数,求字符串的长度( 用指针来实现)类比 strlen 库函数*/
int My_Strlen(const char *a);
int main()
{
char buf[32]={0};
printf("请输入字符串:\n");
scanf("%s",buf);
int n=My_Strlen(buf);
printf("字符串的长度:%d\n",n);
return 0;
}
int My_Strlen(const char *a)
{
int n=0;
for(;*(a+n)!=0;n++);
return n;
}
运行结果:
请输入字符串:
abcdef
字符串的长度:6
7.写一个功能函数,字符串的连接。
"hello" "world"把两个字符串连接成一个字符串,
并且返回连接好的字符串的首地址。
仿写: char *strcat(char *dest, const char *src)
#include <stdio.h>
/*写一个功能函数,字符串的连接。
"hello" "world"把两个字符串连接成一个字符串,
并且返回连接好的字符串的首地址。
仿写: char *strcat(char *dest, const char *src)*/
char *My_Strcat(char *a,const char *b);
int main()
{
char buf1[64]={0};
char buf2[32]={0};
printf("请输入字符串1:\n");
scanf("%s",buf1);
getchar();
printf("请输入字符串2:\n");
scanf("%s",buf2);
getchar();
char *w=My_Strcat(buf1,buf2);
printf("字符串1:%s\n",w);
return 0;
}
char *My_Strcat(char *a,const char *b)
{
char *p=a;
while(*a)
{
a++;
}
while(*b)
{
*a=*b;
a++;
b++;
}
*a='\0';
return p;
}
运行结果:
请输入字符串1:
abc
请输入字符串2:
efg
字符串1:abcefg
8.编写一个函数,使得输入的一个字符串逆序存放
#include<stdio.h>
#include <string.h>
/*编写一个函数,使得输入的一个字符串逆序存放*/
void Fun(char *p);
int main()
{
char buf[32]={0};
printf("请输入字符串:\n");
scanf("%s",buf);
getchar();
Fun(buf);
printf("逆序:%s\n",buf);
return 0;
}
void Fun(char *p)
{
char t=0;
int n=strlen(p);
for(int i=0;i<=n/2;i++)
{
t=*(p+i);
*(p+i)=*(p+n-1-i);
*(p+n-1-i)=t;
}
return;
}
运行结果:
请输入字符串:
abcdef
逆序:fecdba