31----35

31.#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable:4996)
int main(){
    void *input(int *p,int n);
    int array[10];
    int n = sizeof(array)/4;
    printf("n的值是%d\n", n);
    input(array,n);
    printf("数组从大到小排序后:\n");
    for (int i = 0; i < n; i++){
        printf("%d ",*(array+i));
    }
    printf("将最大数和最后一个数交换,将最小数和第一个数交换后:\n");
    int temp;
    temp = *array;
    *array = *(array + n - 1);
    *(array + n - 1) = temp;
    for (int i = 0; i < n; i++){
        printf("%d ", *(array + i));
    }
    system("pause");
    return 0;
}
void *input(int *p,int n){
    int* sort(int *p,int n);
    int *newP = p;
    int *newarray;
    printf("请输入10个整数:\n");
    for (int i = 0; i < n;i++)
        scanf("%d",p++);
    printf("函数输入完成。\n");
    newarray = sort(newP,n);
}
int *sort(int *p,int n){
    int *tempP = p;
    for (int i = 0; i < n-1; i++){
        for (int j = 0; j < n - i - 1; j++, p++){
            int temp = 0;
            if ((*p)<*(p + 1)){
                temp = *p;
                *p = *(p + 1);
                *(p + 1) = temp;
            }
        }
        p = tempP;
    }
    return p;
}

32.#include<stdio.h>
#include<stdlib.h>
#pragma warning(disable:4996)
int main(){
    void move(int *p,int n, int m);
    int n;    int array[100]; int m;
    printf("请输入你要输入的数字个数:\n");
    scanf("%d", &n);
    printf("请输入需要移动的位数:\n");
    scanf("%d", &m);
    move(array, n, m);
    for (int i = 0; i < n; i++){
        printf("%d ",*(array+i));
    }
    system("pause");
    return 0;
}
void move(int *p,int n,int m){
    int *a = p;
    printf("请输入数字:\n");
    for (int i = 0; i < n; i++){
        scanf("%d", p++);
    }
    p = a;//指针移回开头位置
    //先将数组整体往后移动m个位置,即前面各数向后移m个数
    for (int j = n-1; j >=0; j--){
        *(p + j + m) = *(p + j);
    }
    p = a;//指针移回开头位置
    //将最后m个数变成最前面m个数
    for (int k = n; k < n+m;k++){
        *(p++)=*(a+k);
    
    }
}

33.不会做

34.char str[] = "hello world";
char *p = str;//指针变量中存放着字符串数组中的首地址
for (i = 0; i < len; i++) {
        printf("%c", *(p++));
}

 

#include <stdio.h>

int main()
{
    int length(char* p);
    int len;
    char str[20];
    puts("input string:\t");
    scanf("%s",str);//这里str是字符串指针,不是漏加了 &
    len = length(str);
    printf("The length of string is %d.\n",len);
    return 0;    
}

int length(char* p)//字符串指针
{
    int n;
    n = 0;
    while (*p != '\0')
    {
        n++;
        p++;
    }
    return n;
}

input string:
HelloWorld
The length of string is 10
 

35.#include<stdio.h>
#include<string.h>
#include<stdlib.h>//使用动态内存分配函数malloc 和 realloc要用。
 
int main()
{
    void copy_s(char *P1, char *p2, int m);//声明被调用函数
    char *p1, *p2, ch; //p1为原字符串,p2为复制后的字符串
    int i = 0, m;  //i来记录该字符串有多少个数,m用来记录从第几个字符开始复制
    p1 = (char *)malloc(2 * sizeof(char)); //先初始化p1字符串的大小,不用太大,
                                                //后面可以随着 字符增加而增加
    printf("请输入该字符串:");
    ch = getchar();   // 获取输入的第一个字符给ch;
    while (ch != 10)  //如果不是回车,就继续把字符写入到p1指针对应的空间中,因为回车的ASC码为10
    {
        *(p1 + i) = ch;      //把值存储到相应的内存单元中。
        p1 = realloc(p1, 3 + i); //根据字符串大小,扩展存储区域。
        ch = getchar();  
        i++;    //没循环依次,下标加1,相应的也是计数器加1
    }
    *(p1 + i)='\0';  //待所有字符读取完毕后,写入字符串结束字符。
    printf("需要从第几个字符开始复制:");  //输入复制字符串的起始位数。
    scanf("%d", &m);
    p2 = (char *)malloc((i+2) * sizeof(char)); //根据输入的数算出需要的空间大小,并让p2指向它。
    copy_s(p1, p2, m);//调用 复制函数。
    puts(p1); //输出字符串p1,作为比较
    putchar('\n');
    puts(p2);//输出字符串p2
    putchar('\n');
 
 
    return 0;
}
 
 
void copy_s(char *p1, char *p2, int m)
{
    int i=0;//从p2指针指向的第一个为止开始写入
    while (*(p1 + m - 1 )!= '\0')//如果p1字符串没有结束,就继续复制。
    {
        *(p2 + i) = *(p1 + m - 1);//把指针p1对应字符逐个赋给指针p2对应的字符串。
        i++;  //
        m++;
    }
    *(p2 + i) = '\0';//所有字符都复制完毕后,在末尾插入字符串结束字符。
}

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值