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';//所有字符都复制完毕后,在末尾插入字符串结束字符。
}