期末考试PTA

目录

函数-函数题

6-1 简单输出整数 (10 分)

6-2 简单阶乘计算 (10 分)

6-3 找两个数中最大者 (10 分)

6-4 数字金字塔 (15 分)

6-5 符号函数 (10 分)

6-7 使用函数求余弦函数的近似值 (15 分)

6-8 使用函数验证哥德巴赫猜想 (20 分)

6-9 使用函数求最大公约数 (10 分)

6-10 统计某类完全平方数 (20 分)

6-11 统计个位数字 (15 分)

6-12 使用函数计算两点间的距离 (10 分)

6-13 使用函数求特殊a串数列和 (20 分)

6-14 使用函数输出指定范围内的完数 (20 分)

6-15 使用函数输出指定范围内的Fibonacci数 (20 分)

6-16 使用函数输出一个整数的逆序数 (20 分)

6-17 统计各位数字之和是5的数 (20 分)

6-18 使用递归函数计算1到n之和 (10 分)

6-19 递归实现指数函数 (15 分)

6-20 递归求Fabonacci数列 (10 分)

6-21 递归实现顺序输出整数 (15 分)

6-22 递归计算P函数 (15 分)

6-23 阶乘计算 (10 分)

6-25 整数的“平方根” (10 分)

指针与数组函数题

6-1 一维数组的输出 (10 分)

6-2 移除指定元素 (10 分)

6-3 统计大于等于平均分人数 (10 分)

6-4 求出数组中最大数和次最大数 (10 分)

6-5 数组去最值 (10 分)

6-6 谁编程最厉害? (10 分)

6-7 利用指针找最大值 (10 分)

6-8 求最大值最小值 (10 分)

6-9 数组的最小最大值移位 (10 分)

6-10 求方阵和 (10 分)

6-13 高效查重 (10 分)

6-14 摘桃几何 (10 分)

6-15 有序数组唯一化 (10 分)

6-16 强者几何 (10 分)

6-17 约瑟夫环之循环数组 (10 分)

6-18 浇树几何 (10 分)

6-19 红包几何 (10 分)

6-20 赛程安排 (10 分)

6-21 最短同度子序列 (10 分)

6-24 滑动窗口最大值 (10 分)

6-26 矩阵就地旋转 (10 分)

6-27 数组指针与二维数组的关系 (10 分)

6-32 高效查单I (10 分)

字符串函数题

6-1 字符串拷贝 (10 分)

6-2 字符串逆置* (10 分)

6-3 字符串 - 2. 字符串复制(赋值) (10 分)

6-4 strcmp (10 分)

6-6 复制部分字符串 (10 分)

6-7 删除字符串中数字字符 (10 分)

6-8 strlen (10 分)

6-9 输入多个单词,统计以指定字母开头的单词个数 (10 分)

6-10 分类统计字符个数 (15 分)

6-11 移动字母 (10 分)

6-12 删除字符 (20 分)

6-13 字符串赋值函数 (10 分)

6-14 长整数转化成16进制字符串 (15 分)

6-16 取子串 (10 分)

6-17 单词的拆分 (10 分)

6-20 字符串消消乐 (10 分)

自定义类型函数题

6-1 有理数类型 - 2. 有理数标准化 (10 分)

6-2 按等级统计学生成绩 (10 分)

6-3 时间几何 (10 分)

6-4 日期几何 (10 分)

6-5 结构体的最值 (10 分)

6-6 字符串转结构体 (10 分)

6-7 坐标几何 (10 分)

6-8 结构体数组中查找指定编号人员 (10 分)

6-9 单链表结点删除 (10 分)

函数编程题

7-1 求组合数 (15 分)

7-2 素数对猜想 (20 分)

7-3 求n以内最大的k个素数以及它们的和 (20 分)

7-4 判断素数 (10 分)

7-5 数字金字塔 (15 分)

7-6 输出Fibonacci数列的前n项 (20 分)

7-7 圆形体体积计算器 (20 分)

7-8 整数分解为若干项之和 (20 分)

7-9 素因子分解 (20 分)

7-10 出生年 (15 分)

7-11 杯具倒水 (25 分)

7-12 验证“哥德巴赫猜想” (20 分)

指针与数组编程题

7-1 求最大值及其下标 (20 分)

7-2 将数组中的数逆序存放 (20 分)

7-3 交换最小值 (15 分)

7-4 随机与概率 (10 分)

7-5 求最小值及其下标 (15 分)

7-6 出生年 (15 分)

7-8 个位数字统计 (15 分)

7-9 数组元素移动 (5 分)

7-10 猴子选大王 (20 分)

7-11 方阵对角线元素求和及计数 (12 分)

7-12 数组循环左移 (20 分)

7-13 求整数序列中出现次数最多的数 (15 分)

7-14 利用数组计算斐波那契数列 (15 分)

7-15 数列求和-加强版 (20 分)

7-18 求一批整数中出现最多的个位数字 (20 分)

7-19 找出不是两个数组共有的元素 (20 分)

7-20 查找整数 (10 分)

7-21 装箱问题 (20 分)

7-22 组合数的和 (15 分)

7-23 利用指针返回多个函数值 (30 分)

7-24 选择法排序 (20 分)

7-25 点赞 (20 分)

7-26 用指针方法求10个数最大和最小值之差 (20 分)

7-29 最大和最小 (10 分)

7-30 方阵转置 (15 分)

7-31 输出学生成绩 (20 分)

7-32 杨辉三角 (10 分)

7-33 找鞍点 (20 分)

7-34 求矩阵各行元素之和 (15 分)

7-35 海盗分赃 (25 分)

7-36 福到了 (15 分)

7-37 大炮打蚊子 (15 分)

7-38 螺旋方阵 (20 分)

7-39 矩阵A乘以B (15 分)

7-41 整数分解为若干项之和 (20 分)

字符串编程题

7-1 密码强度 (10 分)

7-2 去掉多余空格 (10 分)

7-3 比较两个字符串大小 (10

7-4 删除重复字符 (10 分)

7-6 字符串转换成十进制整数 (10 分)

7-7 查验身份证 (10 分)

7-8 字符串的连接 (10 分)

7-9 IP地址转换 (20 分)

7-11 菜单选择 (10 分)

7-12 对了几题(判断题) (10 分)

7-14 输出全排列 (20 分)

自定义类型编程题

7-1 时间换算 (10 分)

7-2 复数四则运算 (10 分)

7-3 计算平均成绩 (10 分)

7-4 有理数加法 (10 分)

7-5 日期的推算* (10 分)

7-6 通讯录排序 (10 分)


函数-函数题

6-1 简单输出整数 (10 分)

void PrintN ( int N ){
    int i;
    for(i=1;i<=N;i++){
        printf("%d\n",i);
    }

}

6-2 简单阶乘计算 (10 分)

int Factorial( const int N ){
    if(N<0)
        return 0;
    else if(N==0||N==1){
        return 1;
    }else{
        return Factorial(N-1)*N;
    }
}

6-3 找两个数中最大者 (10 分)

int max( int a, int b ){
    return a>b ? a:b;
}

6-4 数字金字塔 (15 分)

void pyramid(int n){
    int i,j,k;
    for(i=1;i<=n;i++){
        for(j=1;j<=n-i;j++){
            printf(" ");
        }
        for(k=1;k<=i;k++){
            printf("%d ",i);
        }
        printf("\n");
    }
}

6-5 符号函数 (10 分)

int sign( int x ){
    if(x>0)
        return 1;
    if(x<0)
        return -1;
    else 
        return 0;
}

目录

7-1 Hello World! (5 分)

6-1 简单输出整数 (10 分)

6-2 简单阶乘计算 (10 分)

6-3 找两个数中最大者 (10 分)

6-4 数字金字塔 (15 分)

6-5 符号函数 (10 分)

6-6 判断奇偶性 (10 分)


int even( int n ){
    if(n%2==0)
        return 1;
    else
        return 0;
}

6-7 使用函数求余弦函数的近似值 (15 分)

double factorial(int x){
    double y=1;
    for(int i=x;i>0;i--){
        y*=i;
    }
    return y;
}
    
double funcos( double e, double x ){
    double cos=0;
    double item=1,i=0,p=1;
    while(item>=e){
        item=pow(x,i)/factorial(i);
        cos+=p*item;
        i=i+2;
        p=-p;
    }
    return cos;
}

6-8 使用函数验证哥德巴赫猜想 (20 分)

int prime( int p ){
    if(p==1)
        return 0;
    for(int i=2;i<=sqrt(p);i++){
        if(p%i==0)
            return 0;
    }
    return 1;
}
void Goldbach( int n ){
    for(int i=2;i<=n/2;i++){
        if(prime(i)&&prime(n-i)){
            printf("%d=%d+%d",n,i,n-i);
            break;
        }
    }
}

6-9 使用函数求最大公约数 (10 分)

int gcd( int x, int y ){
    int a;
    while(y!=0){
        a=x%y;
        x=y;
        y=a;
    }
    return x;
}

6-10 统计某类完全平方数 (20 分)

int IsTheNumber ( const int N ){
    int a=sqrt(N);
    int b[10]={0};
    int c=N;
    if(a*a==c){
        while(c){
            b[c%10]++;
            c/=10;
        }
        for(int i=0;i<10;i++){
            if(b[i]>1)
                return 1;
        }
        return 0;
    }
    return 0;
}

6-11 统计个位数字 (15 分)

int Count_Digit ( const int N, const int D ){
    int x=N;
    int cnt=0;
    int n;
    if(x<0)
        x=-x;
    if(x==0){
        if(x==D)
            return 1;
    }
    while(x){
            n=x%10;
        if(n==D)
            cnt++;
        x/=10;
    }
    
    return cnt;
}

6-12 使用函数计算两点间的距离 (10 分)

double dist( double x1, double y1, double x2, double y2 ){
    double i,j,sum=0;
    i=fabs(x1-x2);
    j=fabs(y1-y2) ;
    sum=sqrt(i*i+j*j) ;
    return sum;
}

6-13 使用函数求特殊a串数列和 (20 分)

int fn( int a, int n ){
    int temp=a;
    for(int i=1;i<n;i++){
        temp=temp*10+a;
    }
    return temp;
}
int SumA( int a, int n ){
    int sum=0;
    for(int i=1;i<=n;i++){
        sum+=fn(a,i);
    }
    return sum;
}

6-14 使用函数输出指定范围内的完数 (20 分)

int factorsum( int number ){
    int sum=0;
    for(int i=1;i<number;i++){
        if(number%i==0){
            sum+=i;
        }
    }
    return sum;
}
void PrintPN( int m, int n ){
    int flag=0;
    for(int i=m;i<=n;i++){
        if(factorsum(i)==i){
            flag=1;
            printf("%d = 1",i);
            for(int j=2;j<i;j++){
                if(i%j==0)
                    printf(" + %d",j);
            }
            printf("\n");
        }
    }
    if(flag==0)
        printf("No perfect number\n");
}

6-15 使用函数输出指定范围内的Fibonacci数 (20 分)

int fib( int n ){
    if(n==1||n==2)
        return 1;
    if(n>2)
        return fib(n-1)+fib(n-2);
}
void PrintFN( int m, int n ){
    int cnt=0;
    for(int i=1;fib(i)<=n;i++){
        if(fib(i)>=m){
            cnt++;
            if(cnt==1)
                printf("%d",fib(i));
            else
                printf(" %d",fib(i));
        }
    }
    if(cnt==0)
        printf("No Fibonacci number");
}

6-16 使用函数输出一个整数的逆序数 (20 分)

int reverse( int number ){
    int x=1;
    if(number<0){
        number=-number;
        x=-x;
    }
    int temp;
    int sum=0;
    while(number){
        temp=number%10;
        sum=sum*10+temp;
        number/=10;
    }
    return sum*x;
}

6-17 统计各位数字之和是5的数 (20 分)

int is( int number ){
    int sum=0;
    while(number){
        sum+=number%10;
        number/=10;
    }
    if(sum==5)
        return 1;
    return 0;
}
void count_sum( int a, int b ){
    int sum=0;
    int cnt=0;
    for(int i=a;i<=b;i++){
        if(is(i)){
            sum+=i;
            cnt++;
        }
    }
    printf("count = %d, sum = %d",cnt,sum);
}

6-18 使用递归函数计算1到n之和 (10 分)

int sum( int n ){
    long int s=0;
    if(n<=0)
        return 0;
    else if(n==1)
        return 1;
    else
        s=n+sum(n-1);
    return s;
}

6-19 递归实现指数函数 (15 分)

double calc_pow( double x, int n ){
    int sum=0;
    if(n==1)
        return x;
    else
        sum=x*calc_pow(x, n-1);
    return sum;
}

6-20 递归求Fabonacci数列 (10 分)

int f( int n ){
    int sum=0;
    if(n==0)
        return 0;
    if(n==1)
        return 1;
    if(n==2)
        return 1;
    else
        sum=f(n-2)+f(n-1);
    return sum;
        
}

6-21 递归实现顺序输出整数 (15 分)

void printdigits( int n ){
    if(n<10)
        printf("%d\n",n);
    else{
        printdigits(n/10);
        printf("%d\n",n%10);
    }
}

6-22 递归计算P函数 (15 分)

double P( int n, double x ){
    double s=0;
    if(n==0)
        return 1;
    if(n==1)
        return x;
    else
        s=((2*n-1)*P(n-1,x)-(n-1)*P(n-2,x))/n;
    return s;
}

6-23 阶乘计算 (10 分)

double fac()
{   
    static double f=1;
    static double i=1;
    static int flag=0;
    if(flag==0)
    {
        flag=1;
        return 1;
    }
    if(flag==1)
    {   
        i=i+1;
        f=f*i;
    }
    return f;
}

6-25 整数的“平方根” (10 分)

int fun (x){
    int a=sqrt(x);
    return a;
}

指针与数组函数题

6-1 一维数组的输出 (10 分)

void outputA(int *d,int n){
    if(n==0)
        printf("[]");
    else if(n==1)
        printf("[%d]",d[0]);
    else{
        printf("[%d",d[0]);
        for(int i=1;i<n;i++){
            printf(",%d",d[i]);
        }
        printf("]");
    }
}

6-2 移除指定元素 (10 分)

//在这里描述函数接口。例如:
int fun (int *A,int N,int val){
    int i,j=0;
    for(i=0;i<N;i++){
        if(A[i]!=val){
            A[j]=A[i];
            j++;
        }
    }
    return j;
}

6-3 统计大于等于平均分人数 (10 分)

int fun ( float *s, int n, float *aver ){
    double sum=0;
    int count=0;
    for(int i=0;i<n;i++)
    {
        sum+=s[i];
        *aver=sum/n;
    }
    for(int i=0;i<n;i++)
    {
        if(s[i]>*aver){
            count++;
        }
    }
    return count;
}

6-4 求出数组中最大数和次最大数 (10 分)

int fun ( int *a, int n ){
    int i,j,k,m;
    for(i=0;i<2;i++){
        m=i;
        for(j=i+1;j<n;j++)
            if(a[j]>a[m])
                m=j;
            k=a[i];
            a[i]=a[m];
            a[m]=k;
    }
}

6-5 数组去最值 (10 分)

int delMaxMin(int A[],int n){
    int index_max=0,index_min=0;
    int cnt=0;
    for(int i=0;i<n;i++){
        if(A[i]>=A[index_max]){
            index_max=i;
            
        }
        if(A[i]<=A[index_min]){
            index_min=i;
            
        }
    }
   // printf("%d %d",index_max,index_min);

    if(index_max<index_min){
        for(int i=index_max+1;i<index_min;i++){
            A[i-1]=A[i];
            cnt++;
        }
        for(int i=index_min+1;i<n;i++){
            A[i-2]=A[i];
            cnt++;
        }
    }
    if(index_max>index_min){
        for(int i=index_min+1;i<index_max;i++){
            A[i-1]=A[i];
            cnt++;
        }
        for(int i=index_max+1;i<n;i++){
            A[i-2]=A[i];
            cnt++;
        }
    }
    return cnt;
}

6-6 谁编程最厉害? (10 分)

int  Max2(int d[],int n){
    int i,j;
    int a[]={-1};
    for(i=0;i<n;i++){
    if(d[i]%2==0)
    {
        a[i]=d[i];
    }
    }
    int max=0;
    for(j=0;j<n;j++){
        if(a[j]>a[max]){
            a[max]=a[j];
            //printf("%d\n",a[max]);
        }
    }
    return a[max];
}

6-7 利用指针找最大值 (10 分)

void findmax( int *px, int *py, int *pmax ){
    *pmax=*py;
	if(*px>*py)
	*pmax=*px;

}

6-8 求最大值最小值 (10 分)

void maxmin(int arr[ ],int *pt1,int *pt2,int n){
    *pt1=*pt2=arr[0];
    for(int i=0;i<n;i++){
        if(arr[i]>*pt1){
            *pt1=arr[i];
        }
        if(arr[i]<*pt2){
            *pt2=arr[i];
        }
    }
}

6-9 数组的最小最大值移位 (10 分)

void Maxmin(int d[],int n){
    int imax=0,imin=0;
    for(int i=0;i<n;i++){
        if(d[i]>d[imax]){
            imax=i;
        }
        if(d[i]<d[imin]){
            imin=i;
        }
    }
    if(imax==n-1&&imin>0){
        swap(d,0,imin);
    }
    else if(imin==0&&imax<n-1){
        swap(d,n-1,imax);
    }
    else if(imin>0&&imax<n-1){
        swap(d,n-1,imax);
        swap(d,0,imin);
    }else if(imin==n-1&&imax==0){
        swap(d,imin,imax);
    }else if(imin==0&&imax==n-1){
        return 0;
    }
}

6-10 求方阵和 (10 分)

/*void createMatrix(int a[][N]){
    int i,j;
    for(i=0;i<N;i++)
	     for(j=0;j<N;j++){
	     scanf("%d",&a[i][j]);
    }
}*/
int sumMatrix(int a[][N]){
    int i,j;
    int add=0;
    int sum=0;
    for(i=0;i<N;i++)
	     for(j=0;j<N;j++){
             sum+=a[i][j];
         }
    for(i=0;i<N;i++){
        for(j=0;j<N;j++){
            if(j==i||i==N-1||j==N-1){
                add+=a[i][j];
            }
        }
    }
    add=sum-add;
    return add;
}

6-13 高效查重 (10 分)

int fun(int n){
    int b[n];
    for(int i = 0;i<n;i++)
    {
        b[i]=0;
    }
    for(int i = 0;i<n;i++)
    {
        b[getDi(i)]++;
    }
    for(int i=0;i<n;i++){
        if(b[i]>1)
            return 1;
    }
    return 0;
}

6-14 摘桃几何 (10 分)

int fun ( int *nums,int N ){
    int a[N];
    int A,B;
    a[0]=nums[0];
    a[1]=(nums[0]>nums[1]?nums[0]:nums[1]);
    for(int i=2;i<N;i++){
        A=a[i-2]+nums[i];
        B=a[i-1];
        a[i]=(A>B?A:B);
    }
    return a[N-1];
}

6-15 有序数组唯一化 (10 分)

int fun (int *D,int N ){
    int i,j,k;
    for(i=0;i<N-1;i++){
        for(j=i+1;j<N;j++){
            if(D[i]==D[j]){
                for(k=j;k<N-1;k++){
                    D[k]=D[k+1];
                }
                N--;
                j--;
            }
        }
    }
    return N;
}

6-16 强者几何 (10 分)

int* fun(int *d,int N){
    int *S=(int *)malloc(N*sizeof(int));
    int a[101]={0};
    for(int i=0;i<N;i++){
          a[d[i]]++;
    }
    for(int i=0;i<N;i++){
        int j=0,k=0;
        for(int p=d[i]+1;p<101;p++){
            j=a[p];
            k+=j;
        }
        S[i]=k;
    }
    return S;
}

6-17 约瑟夫环之循环数组 (10 分)

    if(i==n) i=0;
    	if(d[i]==1){
    		j++;
		if((j%m)==0){
			d[i]=0;

			num[k]=i;
            k++;
		}
	}
		i++;

6-18 浇树几何 (10 分)

int fun(int *w,int N,int W){
    int max=w[0];
    int s=0;
    int j=0,c=1;
    for(int i=0;i<N;i++){
        if(max<=W){
            if(s<=i-j)
                s=i+1-j;
            if(i!=N-1)
                max=max+w[i+1];
        }
        else{
            max-=w[j++];
            max+=w[i+1];
        }
    }
    return s;
}

6-19 红包几何 (10 分)

int fun(int *d,int N,int k){
    int c,sum=0;
    for(int i=0;i<=k;i++){
        c=0;
        for(int j=0;j<k-i;j++){
            c+=d[j];
        }
        for(int j=0;j<i;j++){
            c+=d[N-1-j];
        }
        if(sum<c)
            sum=c;
            
    }
    return sum;
}

6-20 赛程安排 (10 分)

int fun ( int *A,int N ){
    int cnt=0;
    for(int i=0;i<N;i=i+2){
        if(A[i]/2!=A[i+1]/2){
            for(int j=i+2;j<N;j++){
                if(A[j]/2==A[i]/2){
                    int temp=A[j];
                    A[j]=A[i+1];
                    A[i+1]=temp;
                    cnt++;
                    break;
                }
            }
        }
    }
    return cnt;
}

6-21 最短同度子序列 (10 分)

#define MAX_SIZE 50005
int fun (int *nums,int numsSize ){
    int  first[MAX_SIZE]={0};
    int last[MAX_SIZE]={0};
    int dig[MAX_SIZE]={0};
    int maxDig=0;
    int minLen=numsSize;
    for(int i=0;i<numsSize;i++){
        dig[nums[i]]++;
        maxDig=maxDig>dig[nums[i]]?maxDig:dig[nums[i]];
        
        last[nums[i]]=i+1;
        if(!first[nums[i]]){
            first[nums[i]]=i+1;
        }
    }
    for(int i=0;i<numsSize;i++){
        if(dig[nums[i]]==maxDig){
            minLen=minLen<(last[nums[i]]-first[nums[i]])?minLen:(last[nums[i]]-first[nums[i]]);
        }
    }
    return minLen+1;
}

6-24 滑动窗口最大值 (10 分)

int* fun(int *nums, int numsSize, int k, int* returnSize){
    int q[numsSize];
    int left = 0, right = 0;
    for (int i = 0; i < k; ++i) {
        while (left < right && nums[i] >= nums[q[right - 1]]) {
            right--;
        }
        q[right++] = i;
    }
    *returnSize = 0;
    int* ans = malloc(sizeof(int) * (numsSize - k + 1));
    ans[(*returnSize)++] = nums[q[left]];
    for (int i = k; i < numsSize; ++i) {
        while (left < right && nums[i] >= nums[q[right - 1]]) {
            right--;
        }
        q[right++] = i;
        while (q[left] <= i - k) {
            left++;
        }
        ans[(*returnSize)++] = nums[q[left]];
    }
    return ans;
}

6-26 矩阵就地旋转 (10 分)

void fun(int **Mat, int N){
    for(int i=0;i<N;i++){
        for(int j=i;j<N;j++){
            int temp=Mat[j][i];
            Mat[j][i]=Mat[i][j];
            Mat[i][j]=temp;
        }
    }
    for(int i=0;i<N;i++){
        for(int j=0;j<N/2;j++){
            int temp=Mat[i][j];
            Mat[i][j]=Mat[i][N-j-1];
            Mat[i][N-j-1]=temp;
        }
    }
}

6-27 数组指针与二维数组的关系 (10 分)

void reOut(int (*p)[3]){
    for(int i=0;i<2;i++){
        for(int j=0;j<3;j++){
            printf("%3d",p[i][j]);
        }
        printf("\n");
    }
    for(int i=0;i<3;i++){
        for(int j=0;j<2;j++){
            printf("%3d",p[j][i]);
        }
        printf("\n");
    }
}

6-32 高效查单I (10 分)


int Fun(int n){
    int j=0;
    for(int i=0;i<n;i++){
        j^=getDi(i);
    }
    return j;
}

字符串函数题

6-1 字符串拷贝 (10 分)

int length=0;
int i=0;
while(str2[i]!='\0'){
    length++;
    i++;
}
if(length>x){
    for(int i=0;i<x-1;i++){
        str1[i]=str2[i];
    }
    str1[i]='\0';
    return 0;
}else{
    for(int i=0;i<length;i++){
        str1[i]=str2[i];
    }
    str1[i]='\0';
    return 1;
}

6-2 字符串逆置* (10 分)

char* StrReverse(char *str){
    char temp;
    int i;
    int length=strlen(str);
    for(i=0;i<length/2;i++){
        temp=str[i];
        str[i]=str[length-1-i];
        str[length-1-i]=temp;
    }
    return str;
}

6-3 字符串 - 2. 字符串复制(赋值) (10 分)

char* StrCpy(char *dst, const char *src){
    int i;
    for(i=0;src[i]!='\0';i++){
        dst[i]=src[i];
    }
    dst[i]='\0';
    return dst;
}

6-4 strcmp (10 分)

int mycmp( const char* s1, const char* s2 ){
    //assert(s1&&s2);
    while(*s1==*s2){
        if(*s1=='\0')
            return 0;
        s1++;
        s2++;
    }
    return *s1-*s2;
}

6-6 复制部分字符串 (10 分)

void strcopy(char *str1,char *str2,int m){
    int i;
    int j=0;
    for(i=m-1;str1[i]!='\0';i++){
        str2[j]=str1[i];
        j++;
    }
    str2[i]='\0';
}

6-7 删除字符串中数字字符 (10 分)

void delnum(char *s){
    int j=0;
    int i=0;
    while(s[i]!='\0'){
        if(s[i]>'9'||s[i]<'0'){
            s[j++]=s[i];
        }
        i++;
    }
    s[j]='\0';
}

6-8 strlen (10 分)

int mylen( const char *s ){
    int length=0;
    for(int i=0;s[i]!='\0';i++){
        length++;
    }
    return length;
}

6-9 输入多个单词,统计以指定字母开头的单词个数 (10 分)

int getWordNum(char ar1[], char ch) {
    int cnt=0;
    int i;
    if(ar1[0]==ch||ar1[0]==ch+32||ar1[0]==ch-32){
        cnt=1;
    }
    for(i=1;ar1[i]!='\0';i++){
        if((ar1[i]==ch||ar1[i]==ch+32||ar1[i]==ch-32)&&ar1[i-1]==' ')//i-1看不懂??
            cnt++;
    }
    return cnt;

}

6-10 分类统计字符个数 (15 分)

void StringCount( char s[] ){
    int length=0;
    for(int k=0;s[k]!='\0';k++){
        length++;
    }
    int i,letter=0,blank=0,digit=0,other=0;
    for(i=0;i<length;i++){
        if((s[i]>='A'&&s[i]<='Z')||(s[i]>='a'&&s[i]<='z')){
            letter++;
        }
        else if(s[i]>='0'&&s[i]<='9'){
            digit++;
        }
        else if(s[i]==' '||s[i]=='\n'){
            blank++;
        }else{
            other++;
        }
    }
    printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other);
}

6-11 移动字母 (10 分)

void Shift( char s[] ){
    char str[3];
    int i,j;
    for(i=0;i<3;i++){
        str[i]=s[i];
    }
    for(i=3;s[i]!=0;i++){
        s[i-3]=s[i];
    }
    j=i-3;
    for(i=0;i<3;i++){
        s[j++]=str[i];
    }
}

6-12 删除字符 (20

  • 16
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值