题目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;
}