[SDIBT-OJ]28页

3700 有一个班, 4 个学生,各学 3 门课,通过键盘输入各个同学各门课的成绩,计算总平均分以及输出显示下标为 的学生各门课成绩。

其中,用average函数计算并输出总平均分,用函数search找出并输出下标为i 的学生的各门课成绩。

主函数定义如下:

int main()
 {void average(float *p,int n);
  void search(float (*p)[3],int n);
  float score[4][3];
 int i,j;
 for(i=0;i<4;i++)
 for(j=0;j<3;j++)
    scanf("%f",&score[i][j]);
  average(*score,12);
  search(score,2);
  return 0;

}

提示:(1)主函数已经在后台给出,不需要同学们再写其代码

        2)同学们只需要给出合适的头文件和average函数、search函数的定义

void average(float *p,int n)
{
    double i,sum=0;
    for(i=0; i<12; i++,p++)
        sum=sum+*p;
    printf("%.2lf\n",sum/12.0);
}
void search(float (*p)[3],int n)
{
    int i;
    p=p+n;
    for(i=0; i<3; i++)
        printf("%.2f ",*(*p+i));
}

3701
5 个同学 3 门课,通过键盘输入 5 个同学的信息(学号、姓名、 3 门课成绩( float 型)),输出 3 门课成绩最高者的信息(学号、姓名, 3 门课成绩(保留 1 位小数))和 3 门课各自的平均成绩(保留 1 位小数)。
#include<stdio.h>
typedef struct
{
    int num;
    char name[100];
    float a;
    float b;
    float c;
}my;
int main()
{
    my save[5];
    int i;
    float sum[5];
    for (i = 0; i < 5; i++)
    {
        sum[i] = 0;
        scanf("%d %s %f %f %f", &save[i].num, &save[i].name, &save[i].a, &save[i].b, &save[i].c);
        sum[i] = save[i].a + save[i].b + save[i].c;
    }
    int max = sum[0];
    int savei = 0;
    for (i = 1; i < 5; i++)
        if (sum[i]>max)
        {
            max = sum[i];
            savei = i;
        }
    printf("%d %s %.1f %.1f %.1f\n", save[savei].num, save[savei].name, save[savei].a, save[savei].b, save[savei].c);
    float ava = 0, avb = 0, avc = 0;
    for (i = 0; i < 5; i++)
    {
        ava += save[i].a;
        avb += save[i].b;
        avc += save[i].c;
    }
    printf("%.1f %.1f %.1f", ava / 5, avb / 5, avc / 5);
    return 0;
}

3702
从一个文件中读取信息,统计小写字母y出现的次数,并屏幕输出次数。文件名通过键盘输入。(注:后台已有一组文件供读取)
#include <stdio.h>
#include <stdlib.h>
int main()
{
    FILE *fp;
    char ch,infile[100];
    int i=0;
    scanf("%s",infile);
    fp=fopen(infile,"r");
    while(!feof(fp))
    {
        ch=fgetc(fp);
        if(ch=='y')
            i++;
    }
    fclose(fp);
    printf("%d",i);
    return 0;
}

3703

写一被调函数float ave(int *p,int n),求一维数组的平均值。在主函数中输入一维数组各元素的值,并输出其平均值。其中主函数定义如下:

int main(){
    float ave(int *p,int n);
    int a[10],i;
    for(i=0;i<10;i++)
      scanf("%d",&a[i]);
    printf("%.2f",ave(a,10));
     return 0;
}

要求:(1)主函数已在后台给出,大家不需要再写其代码了。

       (2)只需要给出ave函数的定义,和合适的头文件


#include<stdio.h>
float ave(int *p, int n)
{
    int i;
    float sum=0;
    for(i = 0; i < n; i++,p++)
    {
        sum += *p;
    }
    return sum / n;
}

3709 回文: 正读和逆读相同。

写一被调函数int  huiwen(char *p),判断一个字符串是不是回文,如果是,输出1,否则输出0.

其中主函数定义如下:

int main()

{

    char str[100],*pstr;

    gets(str);

    pstr=str;

   printf("%d", huiwen(pstr));

}

要求:(1)主函数已在后台给出,大家不需要再写其代码了。

       (2)只需要给出huiwen函数的定义,和合适的头文件

int huiwen(char *a)
{
    int s,tem=0,i;
    s=strlen(a);
    for(i=0; i<s/2; i++)
    {
        if(a[i]!=a[s-1-i])
        {
            tem=1;
            break;
        }
    }
    if(tem==0)return 1;
    else return 0;
}

3710

 建立学生结构体,编写函数void input(struct stu *p)输入一个学生的姓名,6门课成绩,编写函数void output(struct stu *p);输出该生姓名、总成绩和平均成绩。

主函数已经给出,提交代码时不必提交主函数。

 int main()

{   struct stu s;

    input(&s);

    output(&s);

}

#include<stdio.h>
struct stu
{
    char name[100];
    float a;
    float b;
    float c;
    float d;
    float e;
    float f;
};
void input(struct stu *p)
{
    scanf("%s %f %f %f %f %f %f", p->name, &p->a, &p->b, &p->c, &p->d, &p->e, &p->f);
}
void output(struct stu *p)
{
    float sum = p->a + p->b + p->c + p->d + p->e + p->f;
    printf("%s %.2f %.2f", p->name, sum, sum / 6);
}

3711

 写一被调函数:将数组a(有10个元素)的数据逆序复制到数组b中,并输出数组b的值。

其中主函数定义如下:

int  main( )

{

    int a[10],b[10],*pa,*pb;

    int i;

    pa=a;

    pb=b;

    for (i=0;i<=9;i++)

    scanf("%d",&a[i]);

     cun(pa,pb);

     for (i=0;i<=9;i++)

      { if(i==9)

      printf("%d",b[i]);

      else printf("%d ",b[i]);

      }

要求:主函数已在后台给出,提交时不需要再写其代码了,只要写头文件和被调函数。


#include<stdio.h>
void cun(int *pa, int *pb)
{
    int i;
    for(i = 0; i <= 9; i++)
        *(pb + 9 - i) = *(pa + i);
}

3715

 后台已有main函数和文本文件1.dic,2.dic,每个文本文件中都有10整数,整数之间以空格为分隔符。要求自定义函数,根据用户选择,读取对应文件(用户输入1,则读取1.dic;用户输入2,则读取2.dic)中的整数,求整数之和并输出

int main()
{
printf("%d", fun());
return 0;
}

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int fun()
{
    int n;
    FILE *fp;
    scanf("%d", &n);
    if(n == 1)
        fp = fopen("1.dic", "r");
    else if(n == 2)
        fp = fopen("2.dic", "r");
    int sum = 0, tem;
    for(n = 0; n < 10; n++)
    {
        fscanf(fp, "%d ", &tem);
        sum += tem;
    }
    return sum;
}

3716

有一个结构体类型struct Student,定义如下

typedef struct Student
{
int id;
char name[20];
struct Student *next;
}STU;
利用该结构体类型定义一个长度为4的结构体数组stu[4]。结构体数组中前三个元素(stu[0],stu[1],stu[2])组成了一个 单向链表(stu[0]->stu[1]->stu[2]),现要求将元素stu[3]插入到stu[index]和 stu[index+1]之间,其中index由用户输入,取值范围为-1~2,请填写完整以下程序,实现此功能。
//此题需要提交全部代码

#include <stdio.h>
typedef struct Student
{
 int id;
 char name[20];
 struct Student *next;
}STU;

int main()
{
 STU stu[4];
 int i = 0,index;
 STU *head = &stu[0];
 STU *p;
 while(i<4)
 {
  scanf("%d,%s", &stu[i].id, stu[i].name);
  if(i < 2)
   stu[i].next = &stu[i+1];
  else
   stu[i].next = NULL;
  i++;
 }
 scanf("%d",&index);
//--------------------------------

1、只能在此补充程序

2、提交答案时,只提交此部分代码

//---------------------------------

 while(p!=NULL)
 { 
  printf("%d,%s.", p->id, p->name);
  p = p->next;
 }
}


//--------------------------------

if(index == -1)
{
    head = &stu[3];
    stu[3].next = &stu[0];
}
else if(index == 0 || index == 1)
{
    stu[index].next = &stu[3];
    stu[3].next = &stu[index + 1];
}
else if(index == 2)
{
    stu[2].next = &stu[3];
    stu[3].next = NULL;
}
p = head;
//--------------------------------


3717

后台已有main函数,用户输入4个字符串(每个字符串长度不超过20),要求自定义函数char* getMaxString(char *p[], int len),比较字符串(用strcmp函数比较),并输出最大的字符串
后台已有代码如下:
#define STRSIZE 20
#define LEN 4
int main()
{
char *p[LEN];
int i=0;
for(;i<LEN;i++)
{
p[i]=(char *)malloc(STRSIZE);
gets(p[i]);
}
puts(getMaxString(p, LEN));
for(i=0;i<LEN;i++)
{
free(p[i]);
}
}

char* getMaxString(char *p[], int len)
{
    char *max=p;
    int i=0;
    for(i=0; i<len; i++)
    {
        if(strcmp(*(p+i),max)>0)max=*(p+i);
    }
    return max;
}

3718

已有main函数,要求自定义函数void fun(int (*p)[3]),求出主对角线元素(行下标等于列下标的元素)之和,并输出
int main()
{
int a[3][3];
int (*p)[3] = a;
int j=0;
while(p<a+3)
{
for(j=0;j<3;j++)
scanf("%d", *p+j);
p++;
}
fun(a);
}

#include <stdlib.h>
#include <stdio.h>
void fun(int (*p)[3])
{
    int i,sum=0;
    for(i=0; i<3; i++)
        sum=sum+*(*(p+i)+i);
    printf("%d",sum);
}

3719

后台已有main函数,要求自定义函数int getAlphaBetCount(char *pstr);,统计字符串中大写字母的个数,并输出

int main()
{
char str[20];
char *pstr = str;
gets(pstr);
printf("%d",getAlphaBetCount(pstr));
return 0;
}

#include<stdio.h>
int getAlphaBetCount(char *pstr)
{
    int k=0;
    for(; *pstr!='\0'; pstr++)
    {
        if(*pstr>='A'&&*pstr<='Z')k++;
    }
    return k;
}

3720
后台已有main函数,要求自定义函数
void printfMax(int *pi, int len);
void printfMin(int *pi, int len);
,分别求出一维数组(长度为10)中最大,最小值,并输出
main函数定义如下:
int main()
{
int arr[10], *pi;
int index = 0;
pi = arr;
while(pi<(arr+sizeof(arr)/sizeof(arr[0])))
{
scanf("%d", pi++);
}
pi = arr;
printfMax(pi,sizeof(arr)/sizeof(arr[0]));
printfMin(pi,sizeof(arr)/sizeof(arr[0]));
}

#include<stdio.h>
void printfMax(int *pi, int len)
{
    int i,max=(*pi);
    for(i=0; i<len; i++)
    {
        if((*(pi+i))>max)max=*(pi+i);
    }
    printf("%d ",max);
}
void printfMin(int *pi, int len)
{
    int i,min=(*pi);
    for(i=0; i<len; i++)
    {
        if((*(pi+i))<min)min=*(pi+i);
    }
    printf("%d",min);
}

3724

主函数输入三个字符串,由被调函数处理后,主函数按先长后短的顺序输出它们(输入的字符串长度均不相同)。

主函数已有,代码如下。这些代码会自动添加到你提交的代码之

请编写被调函数。

int main()

{

    char s[5][20],*pa[5]={s[0],s[1],s[2],s[3],s[4]};

    int i;

    for(i=0;i<=4;i++)

        scanf("%s",s[i]);

    sub(pa);   

    for(i=0;i<=4;i++)

        printf("%s\n",pa[i]);

    return 0;

}


#include<stdio.h>
#include<string.h>
void  sub(char *pa[])
{
    char *tem;
    int i,j;
    for(i=0; i<5; i++)
        for(j=0; j<4-i; j++)
        {
            if(strlen(pa[j])<strlen(pa[j+1]))
            {
                tem=pa[j];
                pa[j]=pa[j+1];
                pa[j+1]=tem;
            }
        }
}

3728

每个学生都有姓名、年龄、3科考试成绩(3个分数都只有一位小数)共5个数据,已知有10个学生的数据,已存到文件score1.dic中,另有10个学生的数据,存到score2.dic中,并且两个文件都是:

(1)数据与数据之间是用两个空格隔开的。 如:姓名与年龄之间,年龄与第一个成绩之间......
(2)年龄是用二进制方式存储的(4字节的整数),其他数据都用文本方式存储的。
(3)姓名的宽度为8字节,不足时右边填的是空格,年龄宽度为4字节,三科成绩宽度都是5,不足时左边填的空格。
(4)若在windows中用记事本打开看,则每个学生数据都占一行。如:
zhao            60.0   60.0   60.0
qian            62.0   62.0   62.0
sun             70.0   70.0   70.0
Li              69.0   69.0   69.0
zhangsan  P      80.0   80.0   69.0
zhou            65.0   65.0   65.0
wu              65.0   66.0   66.0
zheng           77.0   77.0   77.0
wang            77.0   99.0   77.0
feng            63.0   63.0   63.0
-----------------------------------
      
编程序,从键盘输入文件编号1或者2,以决定打开哪个文件,求该文件中成绩最好的学生之数据。(输出时,名字和年龄不限宽度,三科成绩宽度均为5)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct STD
{
    char name[100];
    int age;
    float s1;
    float s2;
    float s3;
    float sum;
} student;

int main()
{
    int w=0,j;
    float max;
    student stu[10];
    int a;
    int i;
    FILE *fp;
    scanf("%d",&a);
    if(a==1)
        fp=fopen("score1.dic","r");
    else if(a==2)fp=fopen("score2.dic","r");
    if(fp==NULL)
    {
        exit(0);
    }
    for(i=0; i<10; i++)
    {
        fgets(stu[i].name,9,fp);
        fgetc(fp);
        fgetc(fp);
        fread(&stu[i].age,sizeof(int),1,fp);
        fgetc(fp);
        fgetc(fp);
        fscanf(fp,"%5f%5f%5f",&stu[i].s1,&stu[i].s2,&stu[i].s3);
        fgetc(fp);fgetc(fp);
        stu[i].sum=stu[i].s1+stu[i].s2+stu[i].s3;
        char *p=stu[i].name;
        for(j=0; j<9; j++,p++)
            if(*p==' ')
            {
                (*p)='\0';
                break;
            }
    }
    max=stu[0].sum;
    for(i=0; i<10; i++)
        if(stu[i].sum>max)
        {
            max=stu[i].sum;
            w=i;
        }
    printf("%s,%d,%5.1f,%5.1f,%5.1f",stu[w].name,stu[w].age,stu[w].s1,stu[w].s2,stu[w].s3);
    fclose(fp);
    return 0;
}

3730

后台提供main函数,格式如下

int main()
{
int a[5],i;
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
}
printf("%d",fun(a,sizeof(a)/sizeof(a[0])));
}
现要求自定义fun函数,求出数组a中的组大值,并返回到main函数中进行输出。
提交代码时需要提交内容:
1.头文件
2.fun函数定义
//截止编者截稿前本题后台数据仍有误!但是,总有机智的办法解决这个bug!
#include <stdio.h>
#include<string.h>
int fun(int *p, int n)
{
    int max = *p;
    int i;
    for(i = 1; i < 5; i++)
        if(max < *(p + i))max = *(p + i);
    return max;
}
int main()
{
    int a[5], i;
    for(i = 0; i<5; i++)
    {
        scanf("%d", &a[i]);
    }
    printf("%d", fun(a, sizeof(a) / sizeof(a[0])));
}
void analysisStr(char *p, int n)
{
    return 0;
}
#define main your_sister


3731

后台已有main函数,格式如下:

int main()
{
   char str[50];
   gets(str);
   analysisStr(str, strlen(str));
   return 0;
}

要求自定义函数,分别统计字符串中英文字母(大小写都算)、数字、空格个数,并输出

//截止编者截稿前本题后台数据仍有误!

#include<stdio.h>
#include<string.h>
analysisStr(char *p, int n)
{
    int a = 0, b = 0, c = 0, i;
    for(i = 0; i < n; i++)
    {
        if(*(p + i) >= 'a'&&*(p + i) <= 'z' || *(p + i) >= 'A'&&*(p + i) <= 'Z')a++;
        else if(*(p + i) >= '0'&&*(p + i) <= '9')b++;
        else if(*(p + i) == ' ')c++;
    }
    printf("alphabet:%d,nubmer:%d,space:%d", a, b, c);
}

3763
字符串逆序存放

#include<stdio.h>
#include<string.h>
int main()
{
    char a[1000];
    gets(a);
    int i, n = strlen(a);
    for(i = n - 1; i >= 0; i--)
        printf("%c", a[i]);
    return 0;
}

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值