c/c++练习–15

c/c++练习–15


  • 习题来源:C语言经典编程282例

141.用指针函数输出学生成绩

#include <stdio.h>

int main(void){
    float   num[][4]={{60,75,82,91},{75,81,91,90},{65,51,78,73}};
    float   (*p)[4]=num;
    int     i;

    printf("请输入学生的学号:\n");
    scanf("%d",&i);
    for(int j=0;j<4;j++)
        printf("%5.1f\t",*(*(p+i)+j));

    return(0);
}                                                   

142.寻找相同元素的指针

实现比较两个有序数组中的元素,输出两个数组中第一个相同的元素值

#include <stdio.h>

int*    find_num(int *num1, int *num2, int a, int b){
    int *pa=num1,*pb=num2;

    while(pa<num1+a && pb<num2+b){
        if(*pa<*pb) pa++;
        else if(*pa >*pb)  pb++;
        else return(pa);
    }

    return(NULL);
}

int main(void){
    int num1[5], num2[5];

    for(int i=0;i<5;i++)
        scanf("%d",num1+i);
    for(int i=0;i<5;i++)
        scanf("%d",num2+i);    
     printf("%d",*find_num(num1,num2,5,5));

    return(0);
}                                                       

143.查找成绩不及格的学生

有4个学生的四科考试成绩,找出至少有一个科不及格的学生,并将成绩列表输出。

#include <stdio.h>

float*  find_num(float (*num)[4]){
    float   *pt = NULL;

    pt = *num;
    for(int i=0;i<4;i++)
        if(*(pt+i)<60)
            return(pt);
    return(NULL);
}

int main(void){
    float   num[][4]={{60,75,82,91},{75,81,91,90},{65,51,78,73}};
    float   *p;
    int     i;

    for(int i=0;i<3;i++)
        if(p = find_num(num+i) )
            for(int j=0;j<4;j++)
                printf("%5.1f\t",*(p+j));

    return(0);
}                                                   

144.使用指针实现冒泡排序

#include <stdio.h>

void    bul(int *num, int size){
    int *p=num, *q;
    int tmp;
    for(;p<num+size;p++)  {
        for (q=p+1;q<num+size;q++){
            if( *p>*q ){
                tmp = *p;
                *p=*q;
                *q=tmp;
            }
        }
    }
}

int main(void){
    int num[5]={5,3,2,1,4};

    bul(num,5);
    for(int i=0;i<5;i++)
        printf("%d\t",*(num+i));

    return(0);
}                                                   

145. 用指向函数的指针比较大小

#include <stdio.h>  
#include <string.h>

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

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

int main(void){
    int a,b; 
    int (*p)(int a,int b);

    printf("please input two number\n");
    scanf("%d %d",&a,&b);
    p = &max_n;         
    printf("%d",p(a,b));
    p = &min_n; 
    printf("%d",p(a,b));
    return(0);
}                                                   

146.输入月份号比过年输英文月份名

#include <stdio.h> 

int main(void){
    char        *mon[]={"January","February","March","April",
                    "May","June","July","August","September",
                    "October","November","December"};
    int i;
    printf("请输入月份");
    scanf("%d",&i);
    puts(*(mon+i-1));   

    return(0);
}                                                       

147.使用指针插入元素

#include <stdio.h> 

void    ins(int *num,int id,int size,int x){
    int *p=num+size,*q=num+size-1;
    while(p>num+id)
        *p-- = *q--;

    *(p+id-1)=x;
}

int main(void){
    int num[100];

    for(int i=0;i<5;i++)
        scanf("%d",num+i);
    ins(num,2,5,8)  ;
    for(int i=0;i<6;i++)
        printf("%d\t",*(num+i));
    return(0);
}                                               

148.使用指针交换两个数组中的最大值

#include <stdio.h> 

void    ins(int *num1,int *num2,int a,int b){
    int *p=num1;
    int *max_a=num1,*max_b=num2;    
    int tmp;

    while(p<num1+a){
        max_a = *max_a>*p?max_a:p;  
        p++;
    }
    p=num2;
    while(p<num2+a){
        max_b = *max_b>*p?max_b:p;  
        p++;
    }   
    if(*max_b != *max_a){
        tmp = *max_a;
        *max_a = *max_b;
        *max_b = tmp;
    }
}

int main(void){
    int num1[10],num2[10];

    for(int i=0;i<5;i++)
        scanf("%d",num1+i);
    for(int i=0;i<5;i++)
        scanf("%d",num2+i);
    ins(num1,num2,5,5);
    for(int i=0;i<5;i++)
        printf("%d\t",*(num1+i));
    for(int i=0;i<5;i++)
        printf("%d\t",*(num2+i));
    return(0);
}

149.输出二维数组有关值

#include <stdio.h>  

int main(void){
    int num[2][3]={1,2,3,4,5,6};

    for(int i=0;i<2;i++)
        for(int j=0;j<3;j++)
            printf("%d\t",num[i][j]);
    return(0);
}                                                   

150.将若干字符串按照字符顺序输出

#include <stdio.h>  
#include <string.h>

void    sort(char **s,int size){
    char        *tmp;
    for(int i=0;i<size;i++){
        for(int j=i+1;j<size;j++){
            if(strcmp(s[i],s[j])>=0){
                tmp = s[i];
                s[i] = s[j];
                s[j] = tmp;
            }
        }
    }
}

int main(void){
    char        *str[]={"I love you","Anny is good girl","Do you want?"};

    sort(str,3);
    for(int i=0;i<3;i++)
        puts(*(str+i));
    return(0);
}                                                       
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值