24.12.16学习总结

题目1
输入一个字符串,内有数字和非数字字符,如:a123x456 17960?302tab5876将其中连续的数字作为一个整数,依次存放到数组a中。例如,123放在a[0]中,456放在a[1]中等等,统计共有多少个整数 ,并输出这些数。要求:
①在主函数中输入字符串,输出结果。调用子程序处理字符串。
②子函数的返回值为0表示未找到,否则返回整数的个数并输出这些整数。
代码(1):

#include<stdio.h>
#include<math.h>
int cat(char a[],int b[],int t)
{
	int n=0,m=0,j=0,x=0;
	for(int i=0;i<=t;i++)
	{
		if(a[i]>='0'&&a[i]<='9'){
			if(!x){
				m=i;
				x=1;
			}
		}
		else {
			if(x){
				for(int k=m,z=i-m-1;k<i;k++,z--)
				{
					n+=(int)pow(10,z)*(a[k]-'0');
				}
				b[j++]=n;
				n=0;
				x=0;
			}
		}
	}
	return j;
}
int main()
{
	char a[10000];
	int b[10000],i;
	for(i=0;;i++)
	{
		scanf("%c",&a[i]);
		if(a[i]=='\n')break;
	}
	int n=cat(a,b,i);
	printf("一共有%d个数,分别是:",n);
	if(n){
		for(int j=0;j<n;j++)
		{
			printf("%d ",b[j]);
		}
	}
	return 0;
}

代码(2)(较优):

#include<stdio.h>
int cat(char a[],int b[],int t)
{
	int n=0,m=0,j=0;
	for(int i=0;i<=t;i++)
	{
		if(a[i]>='0'&&a[i]<='9'){
			if(!m){
				b[j]=i;
				n++;
				m=1;
			}
		}
		else {
			if(m){
				b[++j]=i;
				j++;
				m=0;
			}
		}
	}
	return n;
}
int main()
{
	char a[10000];
	int b[10000],i;
    for(i=0;;i++)
	{
		scanf("%c",&a[i]);
		if(a[i]=='\n')break;
	}
	int n=cat(a,b,i);
	printf("一共有%d个数,分别是:",n);
	if(n){
		for(int i=0,j=0;i<n;i++,j+=2)
		{
			for(int k=b[j];k<b[j+1];k++)
			{
				printf("%c",a[k]);
			}
			printf(" ");
		}
	}
	return 0;
}

题目2
编写一个主函数以及四个函数max(a, n)、min(a, n)、aver(a, n)和prime(m)。要求是:
1)函数max(a, n)、min(a, n)和aver(a, n)分别求出含有n个元素的数组a中的最大值、最小值和平均值,并返回结果到主调函数。
2)在主函数中输入10个[3,9999]之间的素数存放到数组中,要求通过调用函数prime对输入的数进行正确性限制,如果不符合要求,则返回0,否则返回1,保证输入10个[3,9999]之间的素数——(输入的符合要求的素数未到十个时要求重新输入);然后分别调用max、min和aver函数,并输出返回的最大值、最小值和平均值。
代码:

int prime(int a)
{
	int b=1,i=2;
	while(i*i<=a)
	{
		if(a%i==0){
			b=0;
			break;
		}
		i++;
	}
	return b;
}
int max(int a[],int n)
{
	int t=a[0];
	for(int i=1;i<n;i++)
	{
		if(a[i]>t)t=a[i];
	}
	return t;
}
int min(int a[],int n)
{
	int t=a[0];
	for(int i=1;i<n;i++)
	{
		if(a[i]<t)t=a[i];
	}
	return t;
}
double aver(int a[],int n)
{
	double t=0;
	for(int i=0;i<n;i++)
	{
		t+=(a[i]/(double)n);
	}
	return t;
}
#include<stdio.h>
int main()
{
	int a[10]={0};
	for(int i=0;i<10;i++)
	{
		printf("请输入第%d个:",i+1);
		scanf("%d",&a[i]);
		if(prime(a[i])&&a[i]<9999&&a[i]>=3)continue;
		i--;
		printf("请重新输入!\n");
	}	
    printf("max=%d\nmin=%d\naver=%.2lf\n",max(a,10),min(a,10),aver(a,10));
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值