继上次程序设计题后续。
第11题:在此程序中,函数fun的功能是:将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s所指串中剩余的字符形成的新串放在所指的数组中。例如,若s所指字符串中的内容为"ABCDEFG12345",其中字符C的A SCII码值为奇数,在数组中的下标为偶数,因此必须删除;而字符1的ASCII码值为奇数,在数组中的下标为奇数,因此不应当删除,其他依此类推。最后所指的数组中的内容应是"BDF12345"。
#include<stdio.h>
void fun(char *s,char t[])
{
int i;
for(i=0;*(s+i)!='\0';i++)
{
if(*(s+i)%2!=1||i%2!=0)
{
*(t++)=*(s+i);
}
}
*(t++)=0;
}
void main()
{
char s[100],t[100];
gets(s);
printf("\n\n");
fun(s,t);
puts(t);
}
第12题:在此程序中,编写一个函数fun, 它的功能是:将ss所指字符串中所有下标为奇数位置的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入"abc4Efg", 则应输出"aBc4EFg".
#include<stdio.h>
void fun(char *ss)
{
int i;
for(i=0;*(ss+i)!='\0';i++)
{
if(*(ss+i)<='z'&&*(ss+i)>='a'&&i%2==1)
*(ss+i)-=32;
}
}
void main()
{
char tt[81];
gets(tt);
printf("\n\n");
fun(tt);
puts(tt);
}
第13题:在此程序中,编写函数fun,其功能是:将a、b两个两位正整数合并成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的千位和十位上,b中的十位和个位数依次放在变量c的个位和百位上。例如,当a=45,b=12,调用该函数c=4251。
#include<stdio.h>
void fun(int a,int b,long *c)
{
*c=(a%10)*1000+(a/10%10)*10+(b%10)*100+(b/10%10);
}
void main()
{
int a,b;
long c;
scanf("%d %d",&a,&b);
fun(a,b,&c);
printf("%ld",c);
}
第14题:在此程序中,m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平
均分的分数放在below所指的数组中。例如,当score数组中的数据为10、20、 30、 40、 50、 60、 70、80、 90时,函数返回的人数应该是4, below中的数据应为10、20、 30、 40。
#include<stdio.h>
int fun(int score[],int m,int below[])
{
int i,n=0;
float x;
for(i=0,x=0;i<m;i++)
{
x=score[i]/m+x;
}
for(i=0;i<m;i++)
{
if(score[i]<x)
{
n++;
*(below++)=score[i];
}
}
return n;
}
void main()
{
int i,n,below[9];
int score[9]={10,20,30,40,50,60,70,80,90};
n=fun(score,9,below);
printf("低于平均成绩人数为%d\n",n);
for(i=0;i<n;i++)
printf("%d ",below[i]);
}
第15题:在此程序中,编写函数void fun (int x, int pp[], int *n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。例如,若x中的值为30,则有4个数符合要求,它们是1、3、5. 15。
#include<stdio.h>
void fun(int x,int pp[],int *n)
{
int i;
for(i=1,*n=0;i<x;i++)
if(x%i==0&&i%2!=0)
pp[(*n)++]=i;
}
void main()
{
int x,aa[1000],n,i;
scanf("%d",&x);
fun(x,aa,&n);
for(i=0;i<n;i++)
printf("%d ",aa[i]);
}
第16题:在此程序中,编写一个函数void fun(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入所指的数组。例如,若输入17,5,则应输出19、23、29、31、37。
#include<stdio.h>
void fun(int m,int k,int xx[])
{
int i;
while(k)
{
m++;
for(i=2;i<m;i++)
{
if(!(m%i))
break;
}
if(i>=m)
{
*(xx++)=i;
k--;
}
}
}
void main()
{
int m,n,zz[100];
scanf("%d %d",&m,&n);
fun(m,n,zz);
for(m=0;m<n;m++)
printf("%d ",zz[m]);
}
第17题: 在此程序中,编写一个函数int fun(int s, int t, int k),用来求出数组的最大元素在数组中的下标并存放在k所指向的存储单元中。例如,输入如下整数:876 675 896101 301 401 980 431 451 777则输出结果为6,980。
#include<stdio.h>
int fun(int *s,int t,int *k)
{
for(*k=t;t>=0;t--)
{
if(s[*k]<s[t])
*k=t;
}
return s[*k];
}
void main()
{
int a[10]={876,675,896,101,301,401,980,431,451,777},k;
fun(a,10,&k);
printf("%d,%d",k,a[k]);
}
第18题:在此程序中,编写函数fun,期能是:根据以下公式求P的值,结果由函数值带回。m与n为两个正整数且要求m>n。
公式:p=m!/n!(m-n)!
例如: m=12, n= 8时,运行结果为495.000000。
#include<stdio.h>
float fun(int m,int n)
{
float p,p1=1.0,p2=1.0,p3=1.0;
int i;
for(i=1;i<=m;i++)
p1=i*p1;
for(i=1;i<=n;i++)
p2=i*p2;
for(i=1;i<=m-n;i++)
p3=i*p3;
return p1/p2/p3;
}
void main()
{
printf("p=%f\n",fun(12,8));
}
第19题:在此程序中,编写函数fun,它的功能是:求小于形参n同时能被3与7整除的所有自然数之和的平方根,并作为函数值返回。
例如,若n为1000时,程序输出应为: s = 153.909064。
#include<stdio.h>
#include<math.h>
double fun(int n)
{
int i;
double x=0;
for(i=0;i<1000;i++)
if(i%3==0&&i%7==0)
x+=i;
return sqrt(x);
}
void main()
{
printf("s=%f",fun(1000));
}
第20题:在此程序中,编写函数fun,功能是:计算并输出下列多项式的值。
S=1/(1*2)+1/(2*3)+1/(3*4)+......+1/(n*(n+1))
例如,当n= 10时,函数值为0.909091。
#include<stdio.h>
double fun(int n)
{
int i;
double s=0;
for(i=1;i<=n;i++)
s=s+1.0/i/(i+1);
//或者用数学方式s=1-1.0/(n+1);
return s;
}
void main()
{
printf("s=%f",fun(10));
}
通过这么多次进行的模拟测验和所做的题目来看,很多题的思路是一样的,所以需要以后找出不同的,具有代表性的题目。
现在看起来都有一定难度了。
之前碰到二维数组和指针把我难哭了,看了一天才总结出来。
勤能补拙。我喜欢
撸代码就得撸多了才懂