大连理工(MOOC)【8-13周】(在线编程 答案)

题目:按顺序。(从上至下)
第八:
#include<stdio.h>
int main()
{
    char a[10],b[10];
    int i,j;
    i=0,j=0;
    gets(a);
    gets(b);
    while(a[i]!=0)
        i++;
    while((a[i++]=b[j++])!=0);//字符串也可以像数字一样一个一个赋值。
    puts(a);
        
    return 0;
}

#include<stdio.h>
int main()
{
    int a[3][3],i,j,sum,m;
    sum=0;
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
        scanf("%d",&a[i][j]);
    for(j=0;j<3;j++)
    {
        sum+=a[0][j];
        sum+=a[2][j];
    }  
    m=a[1][0]+a[1][2];
        sum+=m;
    printf("%d",sum);
    return 0;
}                                        //注意二位数组的下标规律。尤其是对角线,i+j=n


#include<stdio.h>
int main()
{
    int a[5][5],i,j,sum,m;
    m=4;
    sum=0;
    for(i=0;i<5;i++)
        for(j=0;j<5;j++)
            scanf("%d",&a[i][j]);
            for(i=0;i<5;i++)
            {
                j=i;
            sum+=a[i][j];
            sum+=a[i][m];  // 关于二位数组副对角线计算
                m--;
            }
            printf("sum=%d",sum);
            return 0;
}

#include<stdio.h>
int main()
{
   char a[8],i;
   gets(a);
    for(i=0;i<8;i++)
    {
        if(a[i]>='a'&&a[i]<='z')   // 判断  范围  记住  写成‘a' 不是 a
            a[i]=a[i]-32;    //大写字母变为小写  +32   反过来 -32
        else if(a[i]>='A'&&a[i]<='Z');
        else ;
    }
    puts(a);
    return 0;
}


第九周:

#include<stdio.h>
#include<math.h>
 double M(int money,int year,double rate) // 实参和形参的名字是可以一样的
 {
        double sum;
     sum=money*pow((1+rate),year);  //用pow函数时,pow((....)).
     return sum;
 }
 int main()
 {
     int money,year;
     double rate,sum;
     scanf("%d%d%lf",&money,&year,&rate);
     sum=M(money,year,rate);
     printf("sum=%.2f",sum);
     return 0;
 }

#include<stdio.h>
int main()
 {
  int m,c;
        int M( int m);
  scanf("%d",&m);
  c=M(m);
  printf("%d",c);
  return 0;
 }

 int M(int m)
{
 int y,q,j,a[20];
 int i=0; q=m;
 while(q!=0)
 {
   y=m%2;
  q=m/2;     //十进制改变为二进制, 这两步和数据的剥离时一样的。
  m=q;
  a[i]=y;
  i++;
 }
       m=0;
 for(j=i-1;j>=0;j--)
  m=m*10+a[j];  //  转换(二进制)
  return m;
}


#include<stdio.h>
int M(int a[],int n)    //小心这里的一个问题,行是可以不写,但是不可以省略[]   
{
    int i;
    float ave;
    int sum=0;
    int count=0;
    for(i=0;i<n;i++)
        sum+=a[i];
    ave=sum/n;
    for(i=0;i<n;i++)
        if(a[i]>ave)
            count++;
        return count;
}
int main()
{
 int a[10],n,c,i;
n=10;
  for(i=0;i<n;i++)
      scanf("%d",&a[i]);
  c=M(a,n);
  printf("%d",c);
  return 0;
}

第十周:
#include<stdio.h>
double a(double x, int n)
    {
        double m;
        if(n==0)
            return 1;       //注意这里与求阶乘不同。
        else 
        m=x*a(x,n-1);
        return m;
    }
int main()
{
    double m,x;
    int n;
    scanf("%lf%d",&x,&n);
    m=a(x,n);
    printf("%f",m);
    return 0;
}

#include<stdio.h>
int max,min;     // 注意!这里是定义了一个全局变量!
void m(int a[],int n)
{
    int i;
    i=0;
    max=a[i];
    min=a[i];
    for(i=1;i<10;i++)
    {
        if(a[i]>max) max=a[i];//   这里求最大最小用的是  擂台法
        if(a[i]<min) min=a[i];
    }
    
}
    int main()
    {
        int a[10],i;
        for(i=0;i<10;i++)
            scanf("%d",&a[i]);
       m(a,10);
        printf("max=%d,min=%d",max,min);
        return 0;
    }

#include<stdio.h>
#define N 30            
int m(char a[])
{
    int x,i,m;
    i=0;
    m=0;
    scanf("%d",&x);         //用到了 千分位,分隔的办法,定义 字符数组,
              while(x!=0)                 //将数字 变为 字符的办法: ‘0’+数字
    {
       a[m]='0'+x%10;
       i++;
       m++;
       x=x/10;
       if(i%3==0&&x!=0)
       {
           a[m]=',';
           m++;
           i=0;
       }
    }
    a[m]='\0';
    return m;
}
int main()
{
    char a[N];   //注意,定义数组的时候,不可以空,所以在这里 define N
    int n,i;
    n=m(a);           //这里n是计算 该数组有几位
    for(i=n-1;i>=0;i--)
        putchar(a[i]);
    return 0;
}


#include<stdio.h>
int main()
{
    char a[20],*p=a; // 这一段,还可以这样写:   char a[20],*p;
               int i;                                                                        p=a;
    i=0;
    gets(a);
    while(*p!='\0'){
    p++;
    i++;
    }
    printf("Length of the string is %d",i);
    return 0;
}


#include<stdio.h>
int main()
{
    int a[10],*p=a,*q=&a[9];  //定义两个指针变量
    int temp;
        for(;p<a+10;p++)    //注意   a+10    +(数字),该数字是指 该数组的构成长度
            scanf("%d",p);
        p=a;  //  指针复位
        for(;p<=a+4;p++,q--)
        {
            temp=*p;   //注意这一段,在调用函数的形参的时候,也是要这样才可以改变实参的数值!
             *p=*q;
             *q=temp;
        }
        p=a;   //再次复位
        for(;p<a+10;p++)
            printf("%2d",*p);  //-  表示左对齐,前面的数字表示几位。 没有 - 表示右对齐
        return 0;
}

#include<stdio.h>
int main()
{
    int array[10],*p,i,max,min;
    p=array;  //注意,首先指针在运算的过程中,要有指向,否则在一下的运作中 无意义
    for(;p<array+10;p++)     //这里运用到了,指针的输入法
        scanf("%d",p);
    p=array;  // 注意复位
    max=*p;
    min=*p;   //擂台法
    while(p<array+10)  //判断指针的指向是否越界
    {
        if(*p>max)  max=*p;
        if(*p<min)  min=*p;
        p++;
    }
    printf("max=%d,min=%d",max,min);
        return 0;
}


第十一周:
#include<stdio.h>
sort(int *p ,int n);
int main()
{
    int a[3],i;
    for(i=0;i<3;i++)
        scanf("%d",&a[i]);
    sort(a,3);
    for(i=0;i<3;i++)
        printf("%3d",a[i]);
     return 0;
 }
    sort(int *p ,int n)  //因为是一维数组,所以,只用定义*p,二维的话,无论字符还是数字,(*p)[80]。
    {
        int i,j,k,t;
        for(i=0;i<n-1;i++)
        {
            k=i;       //选择排序法
        for(j=i+1;j<n;j++)
          if(*(p+j)>*(p+k))
              k=j;
          if(k!=i)
          {
              t=*(p+i);
              *(p+i)=*(p+k);
              *(p+k)=t;
          }
        }      
    }


#include<stdio.h>
int main()
{
    float a[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}},*p[3];
    int i,j;
    p[0]=a[0];     //行指针的初始化!
    p[1]=a[1];
    p[2]=a[2];
    scanf("%d",&i);
    switch(i)
    {
    case 0:for(j=0;j<4;j++)      //开关法
               printf("%8.2f",*(*(p+i)+j));break;    //在指针表达里面,a[i][j]  为 *(*(p+i)+j)
    case 1:for(j=0;j<4;j++)
               printf("%8.2f",*(*(p+i)+j));break;
    case 2:for(j=0;j<4;j++)
               printf("%8.2f",*(*(p+i)+j));break;
    default: ;break;    //注意,每个语句写完都要添加一个break 语句,并且在最后添加 default 语句。
    }
return 0;
}

第十三周 :

#include<stdio.h>
struct data
{
    long numb;
    char name[20];
    float score[3];
    float average;
     int rank;
}p[5];
    void inputscore(struct data *p) ;    //注意,在调用函数的方面,结构函数,要写上:struct data ,不可以漏掉
     void ave(struct data *p,float average[20]);
    void outputscore(struct data *p);
int main()
{
      float average[20];   
      struct data p[5];  //这里相当于 结构函数的声明!
      inputscore(p);
      ave(p,average);
      outputscore(p);
      return 0;
}
 void inputscore(struct data *p) 
    {
        int i,j;
       for(i=0;i<5;i++)
       {       
      scanf("%ld",&(*(p+i)).numb);   //指针(p+i)的结构表示:(*(p+i)).numb  要把*号  括住!
       scanf("%s",(*(p+i)).name);//  输入二维字符串的时候,只需要     for(i=0;i<5;i++)!
       for(j=0;j<3;j++)
        scanf("%f",&(*(p+i)).score[j]);
      }
}
  void ave(struct data *p,float average[20])
{
    float sum=0;
    int i,j;
    float temp;
    for(i=0;i<5;i++)
     {
      for(j=0;j<3;j++)
       sum+=(*(p+i)).score[j];
       (*(p+i)).average=sum/3.0;
       average[i]=sum/3;
       sum=0;
       }
     for(i=0;i<5;i++)
       { 
       for(j=i+1;j<5;j++)      //交换排序法
        if(average[j]>average[i])
  {
    temp=average[i] ;
       average[i]=average[j];
       average[j]=temp;
  }
  }
     for(i=0;i<5;i++)
     {
        for(j=0;j<5;j++)   //遍历
      {
      if((*(p+i)).average==average[j])
              (*(p+i)).rank=j+1;
     }
      }              
}
        void outputscore(struct data *p)
{
       int i,j; 
       printf("Number:  Name:        score:       Average:  rank:\n");
       for(i=0;i<5;i++){
  printf("%-9ld%-10s",(*(p+i)).numb,(*(p+i)).name);
  for(j=0;j<2;j++)
        printf("%-5.1f",(*(p+i)).score[j]);
        printf("%-8.1f",(*(p+i)).score[j]);    //注意,在原题目中,三个成绩的有效数字位数不同。
  printf("%-10.1f%-d\n",(*(p+i)).average,(*(p+i)).rank);
  } 
  }
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值