2025.12.29实验题目分析总结

1.1题目

1.2代码

复制代码
#include<stdio.h>
#include<string.h>
void fc(char *s,int len,float a[4]){
    a[0]=a[1]=a[2]=a[3]=0;
char *p=s;
while(*p!='\0'){
    if(*p>='0'&&*p<='9')a[2]++;
     else if(*p>='a'&&*p<='z')a[0]++;
     else if(*p>='A'&&*p<='Z')a[1]++;
     else a[3]++;
     p++;
}
a[0]=a[0]/len*100;
a[1]=a[1]/len*100;
a[2]=a[2]/len*100;
a[3]=a[3]/len*100;
}
int main()
{
    char str[100];
   fgets(str,sizeof(str),stdin);
    str[strcspn(str,"\n")]='\0';
    int len=strlen(str);
    float a[4]={0};
    fc(str,len,a);
    for(int i=0;i<4;i++){
        printf("%.3f%% ",a[i]);
    }
    return 0;
}

1.3解题思路

根据题目,统计四种字符的数量,算出他们占总字符数量的百分比,这题用void,无返回值的函数类型来写,因为我们只是对数组的值做出改变,相当于通过地址直接改变变量值。

1.在主函数里先输入字符串,我们需要计算四种字符的数量,所以定义一个长度为4的数组,然后调用我们定义的函数计算出四类字符所占的百分比。

2.在主函数前定义一个计算四类字符所占百分比的函数,在这个函数里先遍历字符串,计算出四类字符的数量,利用指针实现(题目要求),然后看题,题目说要在这个函数里计算出百分比,那么就直接计算就好。

3.调用完以后长度为4的数组就有了值,然后将这四个值输出,注意百分号的输出格式。

综上所有代码完成之后,检查程序是否能够运行。

1.4总结

本题结合指针+字符串解题,需先明确题目要求,注意输入输出的格式。

2.1题目

2.2代码

复制代码
#include <stdio.h>

void find(int *a,int n,int *max,int *min){
*max=a[0];
*min=a[0];
for(int i=1;i<n;i++){
    if(a[i]>*max)*max=a[i];
    if(a[i]<*min)*min=a[i];
}
}
int main()
{
     int a[10];
     for(int i=0;i<10;i++){
        scanf("%d",&a[i]);
     }
     int max,min;
     find(a,10,&max,&min);
    printf("%d %d",max,min);
     return 0;
}

2.3解题思路

本题利用指针遍历数组找出最大值和最小值。

1.在主函数里先确定数组里的值,因为是利用函数找出最大值和最小值,可是函数返回值是不能返回两个值的,所以我们利用指针变量,先定义普通的最大最小值的变量,然后通过地址对变量的值做出改变。

2.根据分析,定义函数无需返回值,所以是无参函数,在这个函数里找出数组的最大值和最小值,先假定都是数组的第一个数,然后不断的和数组其他数比较,确定最大值和最小值的值。

3.在主函数里输出最大值和最小值。

综上所有代码完成之后,检查程序是否能够运行。

2.4总结

本题注重函数的返回值,不一定需要返回值,在函数里可以通过地址对变量进行改变。

3.1题目

3.2代码

复制代码
#include <stdio.h>

int main()
{
    int a;
    scanf("%d",&a);
    int temp=a,sum=0;
    while(temp>0){
        int b=temp%10;
        temp=temp/10;
        sum+=b;
    }
    if(sum==1)printf("January");
    else if(sum==2)printf("February");
    else if(sum==3)printf("March");
    else if(sum==4)printf("April");
    else if(sum==5)printf("May");
     else if(sum==6)printf("June");
    else if(sum==7)printf("July");
    else if(sum==8)printf("August");
    else if(sum==9)printf("September");
    else if(sum==10)printf("October");
     else if(sum==11)printf("November");
      else if(sum==12)printf("December");
       else printf("***");
       return 0;
}

3.3解题思路

根据题目要求我们要先计算出,三位数各个位置上的数之和,然后根据和来输出对应的英文名称。

1.先输入三位数,然后计算个位置上的值,将这些值加起来。

2.计算个位置上的数值,这个是一种计算方法,可以在本子上算一下,找找规律。

3.根据和,输出对应月份的英文字母。

综上所有代码完成之后,检查程序是否能够运行。

3.4总结

这个题是考计算出各位数字之和,这个有不同的方法。

4.1题目

4.2代码

复制代码
#include <stdio.h>

void fun(int *a,int n){
    int temp[n];
    int count=0;
    int *start=a-(n-1);
    for(int i=0;i<n;i++){
        if(start[i]<0){
            temp[count]=start[i];
            count++;
        }
    }
   for(int i=0;i<n;i++){
    if(start[i]>0){
        temp[count]=start[i];
        count++;
    }
   }
   for(int i=0;i<n;i++){
    start[i]=temp[i];
   }
}
int main()
{
    int a[10];
    for(int i=0;i<10;i++){
        scanf("%d",&a[i]);
    }
    fun(&a[9],10);
    for(int i=0;i<10;i++){
        printf("%d ",a[i]);
    }
    return 0;
}

4.3解题思路

这个题是让我们在原有数组的基础上,对数组位置上的值,根据正负排列。

1.在主函数里先确定数组的值,看清楚题目要求,是将最后一个元素的地址传给函数。

2.在定义的函数里,定义一个新的数组,这个数组先存储好值,在给原数组,这个新数组里,先放负数,遍历整个数组,再同样遍历整个数组,放正数。不过主函数传过来的是最后一个元素的地址,我们可以从第一个元素开始遍历,也可以从最后一个元素开始,代码里的*start是一个指针变量,它其实是在通过数组a里面元素的地址来看的,虽然我们用的是start,但是这相当于间接调用了原数组,是通过地址改变位置上的值。

3.在主函数里输出排好序的数组元素值。

综上所有代码完成之后,检查程序是否能够运行。

4.4总结

本题考察指针的运用,要多熟练掌握指针不同的定义和调用。

5.1题目

5.2代码

复制代码
#include <stdio.h>

void sort(int *a,int n){
for(int i=0;i<n-1;i++){
    for(int j=0;j<n-i-1;j++){
        if(a[j]>a[j+1]){
            int temp=a[j];
            a[j]=a[j+1];
            a[j+1]=temp;
        }
    }
}
}
int *merge(int *a,int m,int *b,int n){
    static int c[13];
   for(int i=0;i<m;i++){
    c[i]=a[i];
   }
   for(int i=0;i<n;i++){
    c[m+i]=b[i];
   }
   for(int i=0;i<m+n-1;i++){
    for(int j=0;j<m+n-i-1;j++){
        if(c[j]>c[j+1]){
            int temp=c[j];
            c[j]=c[j+1];
            c[j+1]=temp;
        }
    }
   }
   return c;
}
int main()
{
   int a[5],b[8];
   for(int i=0;i<5;i++){
    scanf("%d",&a[i]);
   }
   sort(a,5);
   for(int i=0;i<8;i++){
    scanf("%d",&b[i]);
   }
   sort(b,8);
   int *c=merge(a,5,b,8);
   for(int i=0;i<13;i++){
    printf("%d ",c[i]);
   }
    return 0;
}

5.3解题思路

根据题目要求是先将两个数组都排序完后,然后合并排序。需要定义两个函数。

1.在主函数里先确定两个数组的值,先分别调用sort函数排序。

2.先定义sort函数,这个函数很好写,是简单的利用冒泡排序的方法进行升序排序。

3.定义merge函数,不过这个函数需要返回的是一个新的数组,在主函数里需要先定义好,这个函数也是在排序,我是先将两个数组的值合并再利用冒泡排序的方法进行排序,还有其他的方法。

4.在主函数里相应的位置调用这个函数,将新数组里的值输出。

综上所有代码完成之后,检查程序是否能够运行。

5.4总结

本题考察函数的定义以及调用,注意数组的灵活运用。

相关推荐
点云SLAM2 小时前
Truncated Least Squares(TLS 截断最小二乘)算法原理
算法·slam·位姿估计·数值优化·点云配准·非凸全局优化·截断最小二乘法
sin_hielo2 小时前
leetcode 840
数据结构·算法·leetcode
feifeigo1232 小时前
基于MATLAB的木材图像去噪算法实现
算法·计算机视觉·matlab
股朋公式网3 小时前
斩仙飞刀、 通达信飞刀 源码
python·算法
不吃橘子的橘猫3 小时前
NVIDIA DLI 《Build a Deep Research Agent》学习笔记
开发语言·数据库·笔记·python·学习·算法·ai
Xの哲學3 小时前
Linux CFS 调度器深度解析
linux·服务器·算法·架构·边缘计算
bedynamic3 小时前
蚁群算法原理及实现
算法·智能算法
Coovally AI模型快速验证3 小时前
当小龙虾算法遇上YOLO:如何提升太阳能电池缺陷检测精度?
人工智能·深度学习·算法·yolo·目标检测·无人机
吴声子夜歌3 小时前
数据结构——通用树(N叉树)
数据结构