1158: 又是排序(指针专题)
题目描述
将输入的四个整数按由大到小的顺序输出。
已定义如下swap函数,可实现形参pa和pb所指内存单元的内容交换。请务必使用本函数实现两个变量内容的互换。
void swap( int *pa, int *pb)
{
int t;
t=*pa; *pa=*pb; *pb=t;
}
输入
输入4个整数,用空格隔开。
输出
输出排序后的4个整数,由空格隔开。输出占一行。
样例输入 Copy
4 3 5 2
样例输出 Copy
5 4 3 2
代码实现:
#include<stdio.h>
void print(int *p){
for(int i=0;i<4;i++){
printf("%d ",p[i]);
}
}
int main(){
int a[4],*p=a;
for(int i=0;i<4;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<3;i++){
for(int j=i+1;j<4;j++){
if(a[i]<a[j]){
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
print(p);
return 0;
}
1159: 最大的两个数(指针专题)
题目描述
求n个整数中的最大的两个元素。要求定义一个函数LargestTow(),求数组a的最大的两个元素,分别存入形参指针pfirst和psecond所指存储单元,函数原型如下:
void LargestTow(int a[],int n,int *pfirst,int *psecond)
{
/*数组a有n个元素,将数组中的最大值存入形参指针pfirst所指内存单元,将数组中第二大的值存入形参指针psecond所指内存单元。 */
}
输入
输入有两行,输入第一行是一个整数n,1<n<=1000;第二行是n个整数,由空格隔开。
输出
输出两个整数,表示数组中最大的两个值。输出占一行。
样例输入 Copy
5 6 3 4 9 8
样例输出 Copy
9 8
代码实现:
#include<stdio.h>
void print(int *p){
for(int i=0;i<2;i++){
printf("%d ",p[i]);
}
}
int main(){
int n,*p,num[1000];
p=num;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&num[i]);
}
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++){
if(num[i]<num[j]){
int temp=num[i];
num[i]=num[j];
num[j]=temp;
}
}
}
print(p);
return 0;
}
1160: 矩阵的最大值(指针专题)
题目描述
找出一个2×3的整数矩阵中的最大值及其行下标和列下标,要求调用函数FindMax(int p[][3], int m, int n, int *pRow, int *pCol)实现,行下标和列下标在形参中以指针的形式返回。
void FindMax(int p[][3], int m, int n, int *pRow, int *pCol){
//在m*n矩阵p中查找最大值,将其行下标存入pRow所指内存单元,将其列下标存入pCol所指内存单元
}
输入
输入2行3列整数,共6个。
输出
输出3个整数,矩阵中的最大值及其行下标和列下标,数据之间用空格隔开。测试数据保证最大值唯一。
样例输入 Copy
100 3 6 0 87 65
样例输出 Copy
100 0 0
代码实现:
#include<stdio.h>
void FindMax(int p[][3],int m,int *pRow,int *pCol){
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
if(p[i][j]>m){
m=p[i][j];
*pRow=i;
*pCol=j;
}
}
}
printf("%d %d %d",m,*pRow,*pCol);
}
int main(){
int a[2][3],row,col,(*p)[3]=a,*pRow=&row,*pCol=&col,max;
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
scanf("%d",&a[i][j]);
}
}
max=a[0][0];
row=0;
col=0;
FindMax(p,max,pRow,pCol);
return 0;
}
1161: 字符串长度(指针专题)
题目描述
编写一函数len,求一个字符串的长度,注意该长度不计空格。要求用字符指针实现。在主函数中输入字符串,调用该len函数后输出其长度。
int len(char *sp)
{
//实现sp所指串的长度,不计空格。
}
输入
输入一个字符串,以回车结束,长度不超过100。
输出
输出一个整数,单独占一行。
样例输入 Copy
What day is today?
样例输出 Copy
15
代码实现:
#include<stdio.h>
void len(char *p){
int i=0,sum=0;
while(p[i]!='\0'){
if(p[i]!=' '){
sum++;
}
i++;
}
printf("%d",sum);
}
int main(){
char c[101];
char *p=c;
gets(c);
len(p);
return 0;
}
1162: 循环移动(指针专题)
题目描述
有n个整数,使前面各数顺序向后移动k个位置,移出的数再从开头移入。输出移动后的数组元素。
题目没有告诉你n的范围,希望你读入n之后用malloc()函数动态申请内存空间,不要提前定义数组的大小。不要偷懒哦。
另外要求定义并使用函数ringShift()
void ringShift(int *a, int n, int k)
{
//循环移动后的数值仍然存入数组a中
}
输入
输入分3行,第一行是一个整数n,第二行是n个整数,用空格隔开。第三行是一个整数k。
输出
输出n个整数,由空格隔开。输出占一行。
样例输入 Copy
6 1 2 3 4 5 6 2
样例输出 Copy
5 6 1 2 3 4
代码实现:
#include<stdio.h>
#include<stdlib.h>
void ringShift(int *a,int n,int k){
int *b=(int *)malloc(sizeof(int)*n);
for(int i=0;i<n;i++){
b[(i+k)%n]=a[i];
}
for(int i=0;i<n;i++){
printf("%d ",b[i]);
}
}
int main(){
int n;
scanf("%d",&n);
int *p=(int *)malloc(sizeof(int)*n);
for(int i=0;i<n;i++){
scanf("%d",&p[i]);
}
int k;
scanf("%d",&k);
ringShift(p,n,k);
return 0;
}
博客围绕C语言指针专题展开,包含多个题目。如将4个整数排序、求n个整数中最大的两个元素、找出2×3矩阵最大值及其下标、求字符串长度(不计空格)、整数数组循环移动等,还给出了各题的输入输出要求及代码实现思路。
551

被折叠的 条评论
为什么被折叠?



