A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

C语言数组,数组与指针,字符串与指针,函数与指针练习题目,初学的小伙伴可以拿去练习,附带代码,有错误的地方请指教,本人也是新手初学第10天;{:2_32:}


/*
1.定义一个长度为5的int数组.分别用while与for遍历打印每一个值.(且每种都用两种方式:1.用数组名.2.用指针).
2. 定义一个函数可以把任意一个整型数组的最小值取出来
3. 定义一个函数可以把任意一个整型数组的平均值取出来
4.定义一个字符串数组,并打印里面的每一个字符串.
5.已知一个int数组 int arr[4]={2,4,3,6};问:*(arr+1)与*(&arr+1)的值一样吗?
6.分别用数组的指针与数组元素的指针去遍历打印5题中数组里面的每一个值.
7.把int arr[4]={65,66,67,68};转换成一个字符数组char arrChar[4];
8.定义一个函数,把任意一个大写字母转换成小写字母.注:大写与小写相差32.如'a'=97 'A'=65;
9.在控制台上输入整数,创建一个长度为3的int数组,用数组的每一个元素的指针组成一个int指针数组,并通过这个int指针数组求int数组的最小值.
10.已知int a=4; int *p=&a; int **ps=&p; int ***pss=&ps; 用指针pss把a的值改成100;
11.定义一个函数的指针,并使用.
12.定义一个指针型函数.
*/





1.定义一个长度为5的int数组.分别用while与for遍历打印每一个值.(且每种都用两种方式:1.用数组名.2.用指针).

// 1.定义一个长度为5的int数组.分别用while与for遍历打印每一个值.
// (且每种都用两种方式:1.用数组名.2.用指针).
#include <stdio.h>
int main(){
    //定义一个int数组,长度为5
    int arr[5]={2,6,1,8,10};
   
    //定义int型指针指向arr
    int *p=arr;
   
    //定义一个数组指针,指向数组st
   
    int (*parr)[5]=&arr;
   
    //定义一个整数用于while循环
    int num=0;
   
    //使用for循环遍历,各种形式
   
    //1.利用数组下标
    printf("\n\n第一次.使用for循环,利用数组下标进行遍历:\n");
    for (int i=0; i<5; i++) {
        printf("%d  ",arr[i]);
    }
    printf("\n\n");
   
    //2.利用指针加减对数组进行遍历
    printf("第二次.使用for循环,利用元素指针进行遍历:\n");
    for (int i=0; i<5; i++) {
        printf("%d  ",*(p+i));//其他方式 printf("%d  ",p[i]);
    }
    printf("\n\n");
   
    //3.利用数组指针进行遍历
    printf("第三次.使用for循环,利用数组指针进行遍历:\n");
    for (int i=0; i<5; i++) {
        printf("%d  ",(*parr)[i]);//其他方式printf("%d  ",*((int *)(&arr)+i));
    }
    printf("\n\n");
    //使用while循环进行遍历
   
    //4.利用普通数组下标进行元素遍历
    printf("第四次.使用while循环,利用数组下标进行遍历:\n");
    while (num<sizeof(arr)/sizeof(int)) {
        printf("%d  ",arr[num]);
        num++;
    }
    printf("\n\n");
   
    //5.利用元素指针进行元素遍历
    num=0;
    printf("第五次.使用while循环,利用指针进行遍历:\n");
    while (num<sizeof(arr)/sizeof(int)) {
        printf("%d  ",*(p+num));
        num++;
    }
    printf("\n\n");
   
    //5.利用数组指针进行元素遍历
    num=0;
    printf("第六次.使用while循环,利用数组指针进行遍历:\n");
    while (num<sizeof(arr)/sizeof(int)) {
        printf("%d  ",(*parr)[num]);
        num++;
    }
    printf("\n\n");
}
         

2.定义一个函数可以把任意一个整型数组的最小值取出来
//题目:
//2. 定义一个函数可以把任意一个整型数组的最小值取出来
#include <stdio.h>
int miniMum(int arr[6]);
void miniMum1(int *p1,int arr[6]);
int main(){
    //定义一个int型数组
    int arr[6]={6,2,8,10,13,66};
    printf("数组arr中元素为:\n");
    for (int i=0; i<6; i++) {
        printf("%d  ",arr[i]);
    }
   
    //定义一个数来接收最小值;
    int num;
    num=miniMum(arr);
    //打印最小值
    printf("\n普通方式--数组中最小数为:%d\n",num);
   
    //定义一个指针来接收最小值
    int *p=arr;
    miniMum1(p,arr);
   
    printf("指针方式--数组中最小数为:%d\n",*p);
   
    return 0;
}
//定义一个函数用来输出数组最小值,
int miniMum(int arr[6]){
   
    int num=arr[0];
    for (int i=0; i<6; i++) {
        num=num<arr[i]?num:arr[i];
    }
    return num;
}
//使用指针来找数组中最小值,无需返回值
void miniMum1(int *p1,int arr[6]){
   
     *p1=arr[0];
    for (int i=0; i<6; i++) {
        if(*p1>arr[i]) *p1=arr[i];
    }
   
}

3.定义一个函数可以把任意一个整型数组的平均值取出来
//3. 定义一个函数可以把任意一个整型数组的平均值取出来
#include <stdio.h>
double pingJun(int arr[6]);
void pingJun1(double *p1,int arr[6]);
int main(){
   
    //定义一个int型数组
    int arr[6]={6,2,8,10,13,66};
    printf("数组arr中元素为:\n");
    for (int i=0; i<6; i++) {
        printf("%d  ",arr[i]);
    }
   
    //定义一个数来接收平均值;
    double num=0;;
    num=pingJun(arr);
    //打印平均值
    printf("\n普通方式--数组平均值为:%.3f\n",num);
   
    //定义一个指针来接收平均值
    double num1=0;
    double *p=&num1;
    pingJun1(p,arr);
   
    printf("指针方式--数组中平均值为:%.3f\n",*p);
   
    return 0;
}
//1.定义一个函数用来输出数组平均值,
double pingJun(int arr[6]){
   
    double num=0;
    for (int i=0; i<6; i++) {
        num+=arr[i];
    }
    return num/6;
   
}
//2.使用指针来找数组中平均值,无需返回值
void pingJun1(double *p1,int arr[6]){
   
    for (int i=0; i<6; i++) {
        *p1+=arr[i];
    }
    *p1=*p1/6;
   
}

4.定义一个字符串数组,并打印里面的每一个字符串.
//题目:
//4.定义一个字符串数组,并打印里面的每一个字符串.
#include <stdio.h>
int main(){
    //定义一个字符串数组;
    char ch[3][20]={"liuchuan","hello,word~","heima,leihao"};
   
    //定义一个指针字符串数组
   
    char *ch1[5]={"liuchuan","hello,word~","heima,leihao"};
   
    //第一种方法,数组下标方法遍历字符串数组:
    printf("使用数组下标打印每个字符方法进行字符串打印:\n");
    for (int i=0; i<3; i++) {
        for (int j=0; j<20; j++) {
            printf("%c",ch[i][j]);
        }
        printf("\n");
    }
   
    //第二种方法,数组下标方法遍历字符串数组:for循环一次,%s打印
    printf("使用数组下标方法进行字符串打印二:使用%s打印\n");
        for (int j=0; j<3; j++) {
            printf("%s\n",ch[j]);
        }
   
   
    return 0;
}

5.已知一个int数组 int arr[4]={2,4,3,6};问:*(arr+1)与*(&arr+1)的值一样吗?

/*
*(arr+1)与*(&arr+1)的值不一样
*(arr+1),arr表示数组元素首地址,+1 加int个字节,地址加4个字节,指向数组第二个元素地址,值为4
*(&arr+1),&arr取的时整个数组的地址,&arr值和arr是一样的, &arr+1 是加16个字节,地址移动16个字节
*/

         


9 个回复

倒序浏览
6.分别用数组的指针与数组元素的指针去遍历打印5题中数组里面的每一个值.
#include <stdio.h>
int main (){
    int arr[4]={2,4,3,6};
   
    //定义一个数组指针
    int (*p)[4]=&arr;
    //定义一个数组元素指针
    int *p1=arr;
   
    for (int i=0; i<4; i++) {
        printf("%d ",(*p)[i]);//用数组指针遍历;
        printf("%d\n",*(p1+i));//用数组元素指针遍历;
    }
}

7.把int arr[4]={65,66,67,68};转换成一个字符数组char arrChar[4];
//题目
//7.把int arr[4]={65,66,67,68};转换成一个字符数组char arrChar[4];
#include <stdio.h>
int main(){
    //定义一个整形数组
    int arr[4]={65,66,67,68};
    //定义一个字符数组
    char arrChar[4];
    //第一种,使用数组下标进行转换,使用for循环
    for (int i=0; i<4; i++) {
        arrChar[i]=arr[i];
    }
   
    //1.字符数组进行打印输出
    for (int i=0; i<4; i++) {
        printf("%c ",arrChar[i]);
    }
    printf("\n");
    //2.使用%s,进行输出
    printf("使用%%s进行输出%s\n",arrChar);
   
    //第二种.使用数组元素指针进行转换
    int *p=arr;
    char *ch=arrChar;
   
    for (int i=0; i<4; i++) {
        *(ch+i)=*(p+i);
    }
    printf("\n使用数组元素指针进行输出:%s\n",ch);
   
    //使用数组指针进行转
   
    char (*ch1)[4]=&arrChar;
    int (*p1)[4]=&arr;
    for (int i=0; i<4; i++) {
        (*ch1)[i]=(*p1)[i];
    }
   printf("\n使用数组指针进行输出:%s\n",arrChar);
    return 0;
}

8.定义一个函数,把任意一个大写字母转换成小写字母.注:大写与小写相差32.如'a'=97 'A'=65;
//8.定义一个函数,把任意一个大写字母转换成小写字母.注:大写与小写相差32.如'a'=97 'A'=65;
#include <stdio.h>
//函数声明
void AAaa(char *p);
void aaAA(char *p);
int main(){
    //定义一个字符,用来接收用户输入的字符
    char ch=0;
    //定义一个指针,指向字符
    char *p=&ch;
    //提示用户输入
    printf("请输入一个英文字符,大小写都可以: ");
    //接收用户输入
    scanf("%c",&ch);
   
    //自动判断用户输入的是大些还是小写,如果输入大写则自动转小写,输入小写自动转大些,使用if语句
    if (ch<=96&&ch>=65) {
        AAaa(p);
        printf("\n转为小写为---->%c\n",*p);
    }else{
        aaAA(p);
        printf("\n转为大写为---->%c\n",*p);
    }
    printf("\n\n");
}
//大写转小写函数
void AAaa(char *p){
    *p+=32;
}
//小写转大写函数
void aaAA(char *p){
   
    *p-=32;
}

9.在控制台上输入整数,创建一个长度为3的int数组,用数组的每一个元素的指针组成一个int指针数组,并通过这个int指针数组求int数组的最小值.
//9.在控制台上输入整数,创建一个长度为3的int数组,用数组的每一个元素的指针组成一个int指针数组,并通过这个int指针数组求int数组的最小值.
#include <stdio.h>
int main(){
    //定义一个长度为3的int数组;
    int arr[3]={0};
    //定义一个数组元素指针,指向数组的首元素地址
    int *p=arr;
   
    //提示用户输入
    printf("请输入3个整数:\n");
    //接收用户输入,用数组元素指针接收用户输入数据
    for (int i=0; i<3; i++) {
         scanf("%d",p+i);
    }
   
    //定义一个指针数组,数组元素值arr元素指针
    int *parr[3]={p,(p+1),(p+2)};
   
    //通过指针数组*parr 求arr数组的最小值;
    //使用for循环求最小值,数据元素都和数组第一个数进行比较,不定义第三个变量;
    for (int i=1; i<3; i++) {
        if (*parr[0]>*parr[i]) {
            *parr[0]=*parr[i];
        }
    }
   
    //进行输入数组中最小数
    printf("您输入的最小值为:%d\n\n",*parr[0]);
    return 0;
   
}

10.已知int a=4; int *p=&a; int **ps=&p; int ***pss=&ps; 用指针pss把a的值改成100;
// 10.已知int a=4; int *p=&a; int **ps=&p; int ***pss=&ps; 用指针pss把a的值改成100;
#include <stdio.h>
int main(){
    //定义一个整形变量和多个多级指针,都指向a的地址
    int a=4;
    int *p=&a;
    int **ps=&p;
    int ***pss=&ps;
    printf("修改前a的值为:%d\n",a);
   
    //***pss,**ps,*p最终指向的地址都是a

    ***pss=100;
    printf("修改后a的值为:%d\n",a);
   
}

11.定义一个函数的指针,并使用.
// 11.定义一个函数的指针,并使用.
#include <stdio.h>
//函数声明
int add(int a,int b);
int llc(int (*p)(int a,int b));
int main(){
    //定义3个整形变量
    int num1=25;
    int num2=11;
    int num3=0;
    //定义一个函数指针
    int (*p)(int i,int y)=&add;
    //调用指针函数p
    num3=p(num1,num2);
    //打印num3的值:
    printf("num3=%d\n",num3);
   
    num3=llc(p);
   
    printf("num3=%d\n",num3);
   
}
//定义一个普通函数,参数a,b,返回a+b的值
int add(int a,int b){
    return a+b;
   
}
//定义一个函数,参数为一个函数指针
int llc(int (*p)(int a,int b)){
    //定义2个整型,用于接收用于输入的数字
    int a=0;
    int b=0;
    printf("请输入2个数字,用','号隔开: ");
    scanf("%d,%d",&a,&b);
   
    return p(a,b);
}




12.定义一个指针型函数.
#include <stdio.h>
//指针函数声明
int *add(int *p);
int main(){
    //指针函数.如:定义一个长度为5的整形数组,不使用主函数赋值,调用指针型函数进行赋值;
   
    //先定义一个长度为5的数组,默认值是0
    int arr[5]={0};
    //定义一个指针,指向数组首元素
    int *p=arr;
    p=add(arr);
   
    //将数组arr内的元素进行遍历
   
    printf("数组arr内的元素为:\n");
    for (int i=0; i<5; i++) {
        printf("%d\t",arr[i]);
    }
   
    printf("\n");
    return 0;
   
}
//定义指针函数型函数,add给数组arr赋值 参数也是一个指针*p,最后将p的地址返回
int *add(int *p){
    for (int i=0;i<5;i++) {
        scanf("%d",p+i);
    }
    return p;
}




回复 使用道具 举报
66666666,好流弊的样子
回复 使用道具 举报
支持一下!
回复 使用道具 举报
支持一下!
回复 使用道具 举报
能回复一下指针和数组的具体区别吗?谢谢
回复 使用道具 举报
支持一下!
回复 使用道具 举报
顶起兄弟
回复 使用道具 举报
6666666666666
回复 使用道具 举报
支持一下!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马