c语言

1.学生的记录由学号和成绩组成,N名学生的数据已在主函数
放入结构体数组s中,编写fun函数,把分数最高的放在b
所指的数组中,注意:分数最高的学生不知一个,函数返回分数
最高的学生人数。
int fun(STREC *a,STREC *b)
{
int i,count,max;
max=a[0].s;
count=0;
for(i=0;i<N;i++)
if(max<a[i].s)
max=a[i].s;
for(i=0;i<N;i++)
if(a[i].s==max)
b[count++]=a[i];
return count;
}
2.出成绩最低的学生记录,通过形参返回主函数。
fun(  STU  a[], STU  *s  )
{
int  i;
STU  *m;
m=a;
for(i=1;i<N;i++)
if  (a[i].s<m[0].s)
m=&a[i];
s[0].s=m[0].s;
strcpy(s[0].num,m[0].num);
}
3.求出该生的平均分放在记录的ave成员中。请自己定义正确的形参.
void fun(STREC *p)
{double ave1=0.0;
int i;
for(i=0;i<N;i++)
ave1+=p->s[i]/N;
p->ave=ave1;
}
4.函数返回指定学号的,指定的学号在主函数中输入,若没有
到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。
STREC fun(STREC *a,char *b)
{STREC p;
int i,flag=0;
p=a[0];
for(i=0;i<N;i++)
if(strcmp(a[i].num,b)==0)
{p=a[i];
flag=1;
}
if(flag==0)
{p.num[0]='\0';
p.s=-1;
}
return p;
}
5.按分数的高低排列学生的记录,高分在前。
方法一:选择排序
void fun(STREC a[])
{int i,j,p,t,k;
char h;
for (i=0;i<N;i++)
{ p=i;
for (j=i+1;j<N;j++)
if (a[p].s<a[j].s) p=j;
if (p!=i)
{t=a[p].s;a[p].s=a[i].s;a[i].s=t;
for (k=0;k<10;k++)
{h=a[p].num[k];
a[p].num[k]=a[i].num[k];
a[i].num[k]=h;
}
}
}
}
方法二:冒泡排序
void fun(STREC a[])
{STREC temp;
int i,j;
for(i=0;i<N-1;i++)
{for(j=i+1;j<N;j++)
if(a[i].s<a[j].s)
{temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
6.把高于等于平均分的放在h所指的数组中,高于等于平均分的学生人数通过形参
传回,平均分通过函数值返回!
double fun(STREC *a,STREC *b,int *n)
{ int i,j;
double aver=0;
*n=0;
for (i=0;i<N;i++)
aver=aver+a[i].s;
aver=aver/N;
for (i=0;i<N;i++)
if (a[i].s>=aver)
{b[*n].s=a[i].s;
for (j=0;j<10;j++)
b[*n].num[j]=a[i].num[j];
*n=*n+1;
}
return (aver);
}
7.把指定分数范围内的放在h所指的数组中,分数范围内的学生人数由函数值返回。
int fun(STREC *a,STREC *b,int l,int h)
{int i,count;
count=0;
for(i=0;i<N;i++)
if(a[i].s>=1&&a[i].s<=h)
b[count++]=a[i];
return count;
}
8.删除一个字符串中制定下标的字符。其中,a指向原字符串,删除指定字符后的字符串存放在b
所指的数组中,n中存放指定的下标。
void fun(char a[],char b[],int n)
{int i,j;
j=0;
for(i=0;a[i]!='\0';i++)
if(i!=n)
b[j++]=a[i];
b[j]='\0';
}
9.求
出ss所指字符串中指定字符的个数,并返回此值。
int fun(char *ss,char c)
{int count;
count=0;
while(*ss)
{if(*ss==c)
count++;
ss++;
}
return count;
}
10.统计一行字符串中单词的个数作为函数值返回,一行字符串在主函数中输入,规定所有单词由
小写字母组成,单词之间有若干个空格隔开,一行的开始没有空格。
int  fun( char  *s)
{int i=1,j=0;
while(*s){
if((i==1) && (*s!=32))
{j++;i=0;}
if(*s==32) 
i=1;
s++;
}
return j;
}
11.删去一维数组中所有相同的数,使之只剩一个,数组中的数已按由小到大的顺序排列,函数返回删除后数组中
数据的个数。
int fun(int a[],int n)
{int i,j,k;
for(i=0;i<n-1;i++)
{for(j=i+1;j<n;j++)
if(a[i]==a[j])
{for(k=j;k<n;k++)
a[k]=a[k+1];
n--;
j--;
}
}
return n;
}
12.将M行N列的二维数组中的字符数据按列的顺序依次放到一个字符串中。
void fun(char (*s)[N],char *b)
{int i,j,k;
k=0;
for(i=0;i<N;i++)
for(j=0;j<M;j++)
b[k++]=s[j][i];
b[k]='\0';
}
13.移动字符串中的内容,移动的规则如下:把第1到第m个字符平移到字符串的最后,把第m+1到最后的字符移到字符串的前面。
void fun(char *w,int m)
{int i,j ;
char b[80];
i=0,j=0;
while(w[i]!='\0')
{b[i]=w[i];i++;
}
for(i=m;w[i];i++)
w[j++]=b[i];
for(i=0;i<m;i++)
w[j++]=b[i];
w[j]='\0';
}
14.将放在字符串数组中的M个字符串,按顺序合并组成一个新的字符串.
void fun(char a[M][N],char *b)
{int i,j,k;
k=0;
for(i=0;i<M;i++)
for(j=0;a[i][j];j++)
b[k++]=a[i][j];
b[k]='\0';
}
15.编写函数,用来删除字符串中的所有空格
void fun(char *str)
{int i,j,len;
len=0;
while(*str)
{len++;
str++;
}
for(i=0;i<len;i++)
{if(str[i]==' ')
{for(j=i;j<len;j++)
str[j]=str[j+1];
len--;
i--;
}
}
}
16.程序定义了N*N的二维数组,并在主函数中自动赋值,请编写函数fun,函数的功能是,使数组右上三角元素中的值乘以m
void fun (int a[][N],int m)
{int i,j;
for(i=0;i<N;i++)
for(j=i;j<N;j++)
a[i][j]*=m;
}
17.是字符串最前面连续的*号不得多于n个;若多于n个,则删除多于的*号;若少于或等于n个,则什么也不做,字符串中间和尾部的*
号不删除。
void fun(char *a,int n)
{ char b[81];
int i=0,j=0,s=0,k;
while (a[i]=='*') {s++;i++;}
if (s>n)
{  for (k=0;k<n;k++)
{b[j]='*';j++;}
while (a[i])
{b[j]=a[i];j++;i++;}
b[j]='\0'; i=0;j=0;
while (b[j])
{ a[i]=b[j];i++;j++;}
a[i]='\0';
}
}
18.计算n门课程的平均分,计算结果作为函数值返回
float  fun ( float  *a ,  int  n )
{
int i;
float average;
double sum=0;
for(i=0;i<n;i++)
sum+=a[i];
average=(float)sum/n;
return average;
}
19.将两个两位数的正整数a,b合
并形成一个整数放在c中,合并的方式是:将a数的十位和
个位数一次放在c数的百位和千位上,b数的十位和个位数依次放在c数的各位和十位上。
void fun(int a, int b, long *c)
{
int a_up,a_low,b_up,b_low;
a_up=a/10;
a_low=a%10;
b_up=b/10;
b_low=b%10;
*c=a_low*1000+a_up*100+b_low*10+b_up;
}
20.N名学生的成绩已在主函数中放入一个带头结点的链表结构中,h指向链表的头结点,编写
fun函数,功能是:求出平均分,由函数值返回。
double fun(STREC *h)
{ STREC *p;
double aver=0;
p=h->next;
while (p!=0)
{aver=aver+p->s;
p=p->next;
}
aver=aver/N;
return aver;
}
21.删除bb中所有的值为y的元素,bb数组元素的值和y的值由主函数通过键盘读入
void  fun ( int  bb[ ], int  *n, int  y  )
{
int i, pos = *n;
for(; pos > 0; pos--)
if ( bb[pos] == y )
{
for(i = pos;i < *n;i ++)
bb[i] =bb[i + 1];
(*n) --;
}
}
22.求出数组tt里每列中最小元素,并依次放入pp数组中。tt数组中的数据有主函数从键盘读入
void  fun ( int tt[M][N], int pp[N] )
{
int i, j, min;
for(i = 0; i < N; i++)
{
min = tt[0][i];
for(j = 0; j < M; j++)
if (min > tt[j][i])
min = tt[j][i];
pp[i] = min;
}
}
23.编写函数,w是一个大于10的无符号整数,若w是n位的整数,函数求出w的后n-1位的数作为函数值返回。
unsigned  fun ( unsigned  w )
{
int i, j, sqr = 1;
unsigned result;
char * str,ch[5];
str=ch;
for (i = 1; (i < 6) && (w >= 1); i++)
{
str[i - 1] = '0' + w % 10;
w /= 10;
}
str[i - 1] = 0;
result = str[0] - '0';
for (j = 1; j < i - 2; j++ )
{
sqr *= 10;
result += (str[j] - '0') * sqr;
}
return result;
}
mst24.用筛选法求出100之内的素数,并通过整型指针返回主函数。
void fun ( int *pt )
{
int i,j,flag;
*pt=2;*pt++;
for(i=3;i<100;i++)
{
flag = 1;
for(j=2;j<i;j++)
if(i % j == 0)
flag = 0;
if( flag )
{
*pt = i;*pt++;
}
}
*pt=0;
}
25.把字符串s中所有的字母改写成该字母的下一个字母,字母'z'改写成字母
'a',字母'Z'改写成'A'。大写字母仍为大写,小写仍为小写,其他的字符不变
fun ( char  *s )
{
int i, length;
length = strlen( s );
for (i = 0;i < length; i++)
{
if(!((s[i]>='a' && s[i]<='z') || (s[i]>='A' && s[i]<='Z') ) )
continue;
switch ( s[i] ) {
case 'z':
s[i] = 'a'; break;
case 'Z':
s[i] = 'A'; break;
default:
s[i] = s[i] + 1; break;
}
}
}
26.求出数组dd中前k个数的小数部分的和,并返回此值
double Acc( int k, double dd[] )
{
int i;
int int_data;
郯庐断裂带double flt_data, result = 0;
for (i = 0;i < k; i ++)
{
int_data = (int)dd[i];
f
lt_data = (double)(dd[i] - int_data);
result += flt_data;
}
return result;
}
27.在字符串str中删除变量c中的字符,有几个删几个,并返回所删字符的个数。
int MyDelete( char* str, char c )
{
int i, j=0, k=0;
for( i = 0; str[i]; i++ )
if( str[i] != c )
{  str[ j ]= str[i]; j++;  }
else
k++;
str[j]= 0;
return(  k );
}
28.请编制函数void Mtrx(int n),输出一个如下的n阶方阵。变量n从文件c9670503.in中读取。
void Mtrx( int n )
{
int  a[M]={0},d=0, i, j, k;
FILE *fp ;
fp=fopen("dat52.dat","w");
for( i = 1 ; i <= n; i++  ) {
for( j=0; j<n; j++ )
{d += 1;  a[j]=d; }
if (i % 2)
for( k=0; k < n ; k++ )
{ printf( " %3d", a[k] ); fprintf(fp, " %3d", a[k]) ; }
else
for( k=n-1;k>=0;k-- )
{ printf( " %3d",  a[k] ); fprintf(fp, " %3d", a[k]) ;}
printf("\n");
fprintf(fp, "\n");
}
fclose(fp) ;
}
29.求出数组pp中n个数的整数部分的和,并返回此值。
double Pdt( int n, double pp[] )
{
int i, int_data;
double result = 0;
for (i = 0;i < n; i ++)
{
int_data = (int)pp[i];
result += int_data;
}
return result;
}
31.将字符串tt中的大写字母都改为对应的小写字母,其他字符不变并返回修改后的字符串。
char* EXUL( char tt[] )
{
char * p = tt;
for(;*tt;tt++)
if ((*tt >= 'A') && (*tt <= 'Z') )
*tt -= 'A' - 'a';
return p;
}
32.返回小蚕需要多少天才能爬到树顶。
int day( int k, int m, int n )
{
int days, height = 0;
for(days = 1;; days ++)
{
height += m;
if ( height >= k ) return days;
height -= n;
}
33.将数组xx的前k个元素移到数组的尾部,变为后k个元素,但是数组的
这两段中元素的顺序不得改变。
void Move( int n, int xx[], int k )
{
int i,  j,  t;
for( i = 0; i < k; i++ )
{
t = xx[0];
for( j = 1; j < n; j++ )
xx[j -1] = xx[j];
xx[n - 1] = t;
}
}
34.将字符串tt中的每个单词的首字符改为对应的大写字母,首字符后的字母改为小写
其他字符不变并返回修改后的字符串。
char* EXUL( char tt[] )
{
int isfirst = 1;
int i, length;
length = strlen( tt );
for(i = 0; i < length; i++)
{
if (tt[i] >= 'a' && tt[i] <= 'z')
{tt[i] = isfirst?(tt[i] + 'A' - 'a'):tt[i];isfirst=0;}
else if (tt[i] >= 'A' && tt[i] <= 'Z')
{tt[i] = isfirst?tt[i]:(tt[i] - 'A' + 'a');isfirst=0;}
else
isfirst = 1;
}
return tt;
}
35.将一个数字字符串转换为一个整数
long  fun ( char *p)
{
long n=0;
int flag=0;
while(*p!='\0') {
if(*p=='-')
flag=1;
else if (*p=='+')
flag=0;
else
n=n*10+(*p-'0');
p++;
}
if (flag==1) n=-n;
return n;
}
36.求出1到m之内能被7或11整除的所有整数放在数组a中,通过n
返回这些数的个数
void  fun ( int  m, int *a , int *n )
{
int i,count=0;
for(i=1;i<=m;i++){
if(i%7==0 || i%11==0) {
a[count++]=i;
}
*n=count;
}
37.出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回,数组元素中的值已在主函数中赋予
void fun(int  a[],  int  n , int  *max, int  *d )
{
int i,base,subscript;
base=a[0];
subscript=0; 
for(i=1;i<n;i++) {
if(a[i]>base) {
subscript=i;
base=a[i];
}
}
*max=base;
*d=subscript;
}
38.计算并输出给定数组中没相邻两个元素之平均值的平方根之和。
double fun(double  x[9])
{int i ;
double avg=0.0,sum=0.0;
for (i=0;i<8;i++)
{avg=(x[i]+x[i+1])/2;
sum+=sqrt(avg);
}
return sum;
}
39.计算并输出n以内能被5或9整除的所有自然数的倒数之和
double fun(int  n)
{int i;
double sum=0.0;
if(n>0&&n<=100)
{for (i=1;i<=n;i++)
if(i%5==0||i%9==0)
sum+=1.0/i;
}
速度生活return sum;
}
40.计算并输出下列多项式的值s=1+1/1!+1/2!+1/3!+....+1/n!
double  fun(int  n)
{double m=1.0;
int i;
double p=1.0;
for(i=1;i<=n;i++)
{p=p*i;
m=m+1.0/p;
}
return (m);
紧张症}
41.计算并输出3到n之间所有素数的平方根之和
double fun(int  n)
{
int i,j=0;
double s=0;
for (i=3;i<=n;i++)
{ for (j=2;j<i;j++)
if (i%j==0) break;
if (j==i)  s=s+sqrt(i);
}
return s;
}
42.计算并输出s=1+(1+2^0.5)+(1+2^0.5+3^0.5)+......+(1+2^0.5+3^0.5+....+n^0.5)
double fun(int  n)
{int i;
double  fac=1.0;
double sum=1.0;
if (n>1&&n<=100)
for(i=2;i<=n;i++)
{fac+=sqrt(i);
sum+=fac;
}
return sum;
}
43.把字符串的内容逆置
void fun ( char  *s )
{
int i ,length;
char tmp;
length = strlen( s );
for (i = 0;i < length / 2; i++)
{
tmp = s[i];
s[i] = s[length - i - 1];
s[length - i - 1] = tmp;
}
}
44.实现矩阵的转置
void fun(int array[3][3])
{ int i,j;int b[3][3];
for (i=0;i<3;i++)
for (j=0;j<3;j++)
b[j][i]=array[i][j];
for (i=0;i<3;i++)
三一混凝土输送泵for (j=0;j<3;j++)
array[i][j]=b[i][j];
}
45.分别求出数组中所有奇数和偶数之和,形参n给出数组中数据的个数,利用指针odd返回奇数之和,用even返回偶数之和。
fun (  int  *a, int  n, int  *odd, int  *even )
{
原云南省委书记高严int i;
*odd = * even = 0;
for ( i = 0; i < n;i ++ )
if (a[i] % 2 == 1)
*odd += a[i];
else
*even += a[i];
}
46.把20个随即数存入一个数组,然后输出该数组中的最小值
int vector[VSIZE];
int fun(int list[],int size)
{  int x,i;
x=0;
for (i=1;i<size;i++)
if (list[x]>list[i]) x=i;
return x;
}
47.对变量h中的值保留2位小数,并对第三位进行四舍五入
float fun ( float  h )
{  long num;
h=h+(float)0.005;
h=h*100;
num=(long)h;
h=(float)num;
h=h/10

本文发布于:2024-09-22 18:31:33,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/361266.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   数组   字符串   返回   学生   字符   数据
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议