C语言10.1
题目描述
输入a和b两个整数,按先大后小的顺序输出a和b。注意请使用指针变量的方式进行比较和输出。
输入
两个用空格隔开的整数a和b。
输出
按先大后小的顺序输出a和b,用空格隔开。
请注意行尾输出换行。
样例输入
5 9
样例输出
9 5
程序
#include<stdio.h>
int main(){
int a, b;
int *p1 = &a, *p2 = &b;
scanf("%d%d", &a, &b);
if(*p1>*p2) printf("%d %d\n", *p1, *p2);
else printf("%d %d\n", *p2, *p1);
return 0;
}
———————————————————————————
C语言10.2
题目描述
输入a、b、c三个整数,按先大后小的顺序输出a、b和c。注意请使用指针变量的方式进行比较和输出。
输入
三个用空格隔开的整数a、b和c。
输出
按先大后小的顺序输出a、b和c,用空格隔开。
请注意行尾输出换行。
样例输入
9 0 10
样例输出
10 9 0
程序
#include<stdio.h>
int main(){
int a, b, c;
int *p1 = &a, *p2 = &b, *p3=&c;
scanf("%d%d%d", &a, &b, &c);
if(*p1>*p2){
if(*p1>*p3){
if(*p2>*p3) printf("%d %d %d\n", *p1, *p2, *p3);
else printf("%d %d %d\n", *p1, *p3, *p2);
}
else printf("%d %d %d\n", *p3, *p1, *p2);
}
else{
if(*p2>*p3){
if(*p1>*p3) printf("%d %d %d\n", *p2, *p1, *p3);
else printf("%d %d %d\n", *p2, *p3, *p1);
}
else printf("%d %d %d\n", *p3, *p1, *p1);
}
return 0;
}
———————————————————————————
C语言10.10
题目描述
给定字符串定义char *a = “I love China!”,读入整数n,输出在进行了a = a + n这个赋值操作以后字符指针a对应的字符串。
输入
一个整数n,保证0<=n<13.
输出
输出进行了题目描述中赋值操作之后a对应的字符串。
请注意行尾输出换行。
样例输入
7
样例输出
China!
程序
#include<stdio.h>
#include<string.h>
int main(){
const char *a = "I love China!"; //常量字符数组
int n;
scanf("%d", &n);
if(n>=0 && n<13){
a = a+n;
printf("%s\n", a);
}
return 0;
}
—————————————————————————
C语言10.15
题目描述
输入3个字符串,按从小到大的顺序输出。要求使用指针的方法进行处理。
输入
3行,每行一个用字符串。保证每个字符串的长度不超过20。
输出
按从小到大的顺序输出这3个字符串,每个字符串一行。
请注意行尾输出换行。
样例输入
China
CLOCK
deal
样例输出
CLOCK
China
deal
程序
#include <stdio.h>
#include <string.h>
void swap(char **a, char **b){ //传入二级指针,即内容的地址
char *temp; //设置中间变量为一指针变量,改变其值和其他指针(内容的地址)
temp = *a; //*a表示内容的**a的地址,也表示a的内容
*a = *b;
*b = temp;
}
int main(){
char a[50], b[50], c[50];
gets(a);
gets(b);
gets(c);
char *p1=a, *p2=b, *p3=c;
if(strcmp(p1,p2)>0) swap(&p1,&p2); //交换地址p1,所以swap中的参数是p1地址
if(strcmp(p1,p3)>0) swap(&p1,&p3);
if(strcmp(p2,p3)>0) swap(&p2,&p3);
printf("%s\n", p1);
printf("%s\n", p2);
printf("%s\n", p3);
return 0;
}
C语言10.16
题目描述
输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。要求用3个函数实现,分别为输入10个数、进行处理、输出10个数。要求使用指针的方法进行处理。
输入
用空格隔开的10个整数。
输出
输出进行题目描述操作之后的10个整数,每个整数之后输出一个空格。
请注意行尾输出换行。
样例输入
1 5 2 4 9 0 3 8 7 6
样例输出
0 5 2 4 6 1 3 8 7 9
程序
#include <stdio.h>
//输入函数
void input_ary(int *ary, int len)
{
for(int i=0; i<len; i++)
{
scanf("%d", ary+i); //输入时没加&符号,直接用ary+i表示值?
}
}
//处理函数
void func(int *ary, int len)
{
int i = 0;
int j = 0;
int min_index = 0;//假设第一个是最小值,min_index是其下标,和其他值比较,获得最小值下标
int max_index = len-1;//假设最后一个是最大值,max_index是其下标,和其他值比较,获得最大值下标
//比较得出最大值和最小值下标
for(i=1; i<len; i++)
{
if(*(ary+i) < *(ary+min_index)) //比较ary[i]内容值
{
min_index = i;
//printf("%d %d\n",min_index,*(ary+min_index));
}
}
for(j=len-2; j>=0; j--)
{
if(*(ary+j) > *(ary+max_index))
{
max_index = j;
//printf("%d %d\n",max_index,*(ary+max_index));
}
}
//交换最大值和最后一个数,最小值和第一个数。
int temp = 0; //定义交换的中间值变量为整型变量
if(min_index != 0)
{
temp = *ary; //存放第一个数的值
*ary = *(ary+min_index);
*(ary + min_index) = temp;
}
if(max_index != len-1)
{
temp = *(ary+len-1); //存放最后一个数的值
*(ary+len-1) = *(ary+max_index);
*(ary+max_index) = temp;
}
}
//输出函数
void print_ary(int *ary, int len){
for(int i=0; i<len-1; i++)
{
printf("%d ", *(ary+i)); //输出时直接用*(ary+i)表示值
}
printf("%d\n", *(ary+len-1)); //输出最后一个值,后加换行符
}
//主函数
int main(){
int ary[10] = {0};
input_ary(ary, 10);
func(ary, 10);
print_ary(ary, 10);
return 0;
}
目前存在的疑问:
指针与指针数组之间的不同(在函数传参和写法上的)。