沈阳师范大学C++ pta第三章 指针引用

2023-11-06

沈阳师范大学C++ pta第三章 指针引用


判断题

1.字符串常量实质上是一个指向该字符串首字符的指针常量。 — — — T
2.定义一个指针数组并初始化赋值若干个字符串常量,则指针数组并不存放这些字符串,而仅仅指向各个字符串。 — — — T
3.指向整数指针的指针与指向整数数组的指针可以看成是等价的类型。 — — — F
4.定义指针函数变量后,将一个函数名赋值该指针变量,要求函数的参数个数、类型一致。 — — — T
5.对于定义int a[10],*p=a; 语句p=a+1;和a=a+1;都是合法的。— — — F
6.执行语句int *p; 后,指针变量p只能指向int类型的变量。— — — T
7.int (*p)[4]它表示p是一个指针数组,它包含4个指针变量元素。— — — F
8.若有定义char* p=“computer”;则表示p的值是字符串" computer "。— — — F
9.如果函数的返回类型是指针,则可以返回函数内部任意变量的地址。— — — F
10.语句 int *p[5]; 定义了一个指针数组p,用于指向一个有5个元素的数组。 — — — F
11.指向结构体变量的指针可以作函数参数,实现传址调用。。 — — — T
12.调用printf函数,%s的格式输出字符串时,字符数组名、字符指针和字符串常量都可以作为输出参数。 — — — T
13.语句int *p, q, r; 定义了3个指针变量。— — — F
14.两个任意类型的指针可以使用关系运算符比较大小。— — — F
15.可以用一个指针变量指向一个函数,然后通过该指针变量调用此函数。— — — T
16.char *s=“C Language”;表示s是一个指向字符串的指针变量,把字符串的首地址赋予s。— — — T
17.int i; int &ri=i;对于这条语句,ri和i这两个变量代表的是同一个存储空间。— — —T
18.指针数组的每个元素都是一个指针变量。— — — T
19.不同类型的指针变量是可以直接相互赋值的。— — — F
20.只要将多个指针作为函数的参数,函数就一定会返回多个值。— — — F
21.调用strcmp函数比较字符串大小时,通常较长的字符串会较大。— — —F
22.字符串常量在内存中的存放位置由系统自动安排。— — — T

单选题

设void f1(int * m,long & n);int a;long b;则以下调用合法的是()。

A.f1(&a,&b);
B.f1(a,b);
C.f1(&a,b);
D.f1(a,&b);

下列语句定义 x 为指向 int 类型变量 a 的指针,正确的是()。

A.int a, *x = a;
B.int a, x = a;
C.int *x = &a, a;
D.int a, *x = &a;

下列程序片段哪一个是正确的。

A.int m=8; int &r1=m; const int r2=r1;
B.int m=5; const int &r=m; r=16;
C.int m=8; const int &r1=m; int &r2=r1 ;
D.int m=4; int &r=m*6;

对于int *pa[5];的描述,以下哪个选项是正确的

A.pa是一个具有五个元素的指针数组,每个元素都是一个int类型的指针
B.pa是一个指向某个数组中第五个元素的指针,该元素是int类型的变量
C.pa是一个指向数组的指针,所指向的数组是五个int类型的指针
D.pa[5]表示某个数的第五个元素的值

若p1、p2都是整型指针,p1已经指向变量x,要使p2也指向x, ____是正确的。

A.p2=&p1
B.p2=**p1
C.p2=*p1
D.p2=p1

下列关于引用的说法,错误的是____。

A.引用初始化后,可以通过更变来引用其他变量
B.数组不能定义引用
C.引用在定义时必须初始化
D.引用在初始化时不能绑定常量值

下列哪一个说法是不正确的?

A.const T 类型的常变量和const T & 类型的常引用,也可以用来初始化T & 类型的引用
B.T & 类型的引用或T类型的变量,可以用来初始化const T &类型的引用
C.定义引用时,前面加const关键字,即为"常引用"
D.不能通过常引用去修改其引用的内容

以下不正确的赋值或赋初值的方式是( )。

A.char str[]=“string”;
B.char str[10];str="string";
C.char str[7]={‘s’, ‘t’, ‘r’, ‘i’, ‘n’, ‘g’, ’\0’};
D.char str[7]={‘s’, ‘t’, ‘r’, ‘i’, ‘n’, ‘g’};

下面程序段:

int main() {
int intone;
int &rsomeref = intone;
intone = 5;
cout<<intone<<" “<<rsomeref;
rsomeref = 7;
cout<<intone<<” "<<rsomeref;
return 0; }

输出结果为( )。
A.55 77
B.5 5 7 7
C.5 57 7
D.5577

以下哪个定义中的p不是指针,请选择恰当的选项:

A.char (*p)[10];
B.char **p;
C.char *p[6];
D.给出的三项中,p都是指针

下面程序段 int a=1,b=2; int &r=a; r=b; r=7; cout<<a<<endl; 的输出结果是?

A.1
B.无法确定
C.2
D.7

设变量定义为 int a[2]={1,3}, p=&a[0]+1;,则p的值是( )。

A.&a[0]+1
B.3
C.2
D.4

下面程序片段,哪一个是正确的?

A.int n=8; int &p=n; const int q=p ;
B.int m=5; const int &r=m; r=6;
C.int n=4; int &r=n*3;
D.int n=8; const int &p=n; int &q=p ;

若定义pf为指向float类型变量f的指针,下列语句中__是正确的。

A.float f, *pf = &f;
B.float f, *pf =0.0;
C.float *pf = &f, f;
D.float f, *pf = f;

若变量已正确定义并且指针p已经指向某个变量x,则(*p)++相当于____。

A.x++
B.p++
C.*(p++)
D.&x++

已知:float b = 34.5; ,则下列表示引用的方法中,正确的是( )。

A.float &z;
B.float &y = 34.5;
C.int &t = &b;
D.float &x = b;

关于指针和引用,下面哪个说法是错误的()。

A.通过访问符*来访问指针所指存储空间中的值。
B.指针和引用对它们所指的或所引用的变量的操作方式不一样。
C.和指针类似,引用被初始化后,还可以引用别的变量。
D.引用较高级地封装了指针的特性,它不直接操作内存地址,而是通过访问变量别名来间接操作变量的。

对于如下说明,语法和语义都正确的赋值是_____。

int c, *s, a[]={1, 3, 5};
A.c=a;
B.c=*s;
C.s[0]=a[0];
D.s=&a[1];

已知:int a(5),&ra=a;下列描述中,错误的是( )。

A.ra是变量a的引用,即为变量的别名
B.ra的值为5
C.ra的地址值为&a
D.改变ra的值为10,变量a值仍为5

根据声明int a[10], *p=a; ,下列表达式错误的是( )。

A.*p++
B.a[9]
C.a++
D.p[5]

在基类型相同的两个指针变量之间,不能进行的运算是( )。

A.+
B.<
C.–
D.=

下列对变量的引用中错误的是____。

A.float a; float &p = a;
B.int a; int &p; p=a;
C.char a; char &p = a;
D.int a; int &p = a;

若已定义: int a[9], *p=a;并在以后的语句中未改变 p 的值,不能表示 a[1] 地址的表达式是( )。

A.a++
B.p+1
C.a+1
D.++p

对于定义 char str[] = “abc\000def\n”(注:其中0为数字零),求字符串str的长度len和数组str的大小size,len和size分别是:

A.3 ,4
B.3 ,11
C.12 ,13
D.3 ,9

( )是给变量取一个别名,引入了变量的同义词。

A.引用
B.结构
C.指针
D.枚举

根据声明int (*p)[10], p是一个( )。

A.数组
B.数组的元素
C.函数
D.指针

下列哪一个说法是不正确的?

A.引用可以引用变量,也可以引用常量和表达式
B.定义引用时一定要将其初始化成引用某个变量
C.初始化后,它就一直引用该变量不会再别引用别的变量了
D.某个变量的引用等价于这个变量,相当于该变量的一个别名


填空题

write the output of the code below.
#include <iostream>
using namespace std;
int& f(int &i )
{
    i += 10;
    return i ;
}
int main()
{
    int k = 0;
    int& m = f(k);
    cout << k << "#";
    f(m)++;
    cout << k << endl;
    return 0;
}

10#21


编程题

R7-1 实数排序

本题要求编写程序,输入n个实数,使用指针引用的方式将它们按从大到小的顺序排列。

输入格式:

输入第一行给出一个正整数n(2≤n≤10),输入第二行给出n个实数,其间以空格分隔。

输出格式:

输出从大到小排好序的n个数(保留2位小数),每个数之间空一格,行末没有空格。

输入样例:

在这里给出一组输入。例如:

5
3.2 5.4 6.12 2.51 4.23

输出样例:

在这里给出相应的输出。例如:

6.12 5.40 4.23 3.20 2.51

#include <iostream>
#include <string>
#include <cmath>
using namespace std;
void put(float *a,int n)
{
    int i,j;
    float t;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(*(a+i)>*(a+j))
            {
               t=*(a+i);
               *(a+i)=*(a+j);
               *(a+j)=t;
            }
        }
    }
}
void out(float *a,int n)
{
    int i=1;
    printf("%.2f",*(a+i-1));
    for(;i<n;i++)
    {
        printf(" %.2f",*(a+i));
    }
}

int main(int argc, char const *argv[])
{
  int n,i;
  cin>>n;
  float a[n];
  for(i=0;i<n;i++)
      cin>>a[i];
  put(a,n);
  out(a,n);
}

R7-2 组织星期信息

输入一个正整数repeat (0<repeat<10),做repeat次下列运算:

定义一个指针数组将下面的星期信息组织起来,输入一个字符串,在表中查找,若存在,输出该字符串在表中的序号,否则输出-1。

Sunday Monday Tuesday Wednesday Thursday Friday Saturday

输入输出示例:括号内为说明,无需输入输出

输入样例 (repeat=3):

3
Tuesday
Wednesday
year

输出样例:

3
4
-1

#include <iostream>
#include <string.h>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main() {
  char week[7][15] = { "Sunday", "Monday",
                "Tuesday","Wednesday",
                "Thursday", "Friday",
                "Saturday"
    };                                //开个二维数组制表        
    int i, n, j;
    char s[15];
    scanf("%d ", &n);        //注意点:此处%d后有个空格后者是\n,吃掉回车,防止影响gets
    for (i = 0; i < n; i++) {
        cin>>s;
        for (j = 0; j < 7; j++)
            if (!strcmp(s, week[j])) {            //如果返回值为0,则说明两个串相等
                printf("%d\n", j + 1);             //因为数组下标从0开始,所以要加1
                break;
            }
        if (j == 7)                        //如果j == 7,则说明没找到相等的,输出-1
            printf("-1\n");
} 
}

R7-3 冒泡

鸿鸿哥最近学习了指针,感觉这个知识点有点难以理解,于是想要通过编程实践来掌握它。鸿鸿哥以前学习数组(第7章)的时候已经掌握了冒泡排序的一般写法,现在他想用指针来实现排序的功能函数。但是他遇到了困难,你能帮帮他吗?

指针实现冒泡排序函数,函数名统一用void bubbleSort(int *p,int c)。
具体方法自己实现。

输入格式:

输入第一行给出一个正整数n(2≤n≤10),输入第二行给出n个实数,其间以空格分隔。

输出格式:

输出从大到小排好序的n个数(保留2位小数),每个数之间空一格,行末没有空格。

输入样例:

在这里给出一组输入。例如:

5
503 87 512 61 908

输出样例:

在这里给出相应的输出。例如:

61 87 503 512 908

#include <iostream>
#include <string>
#include <cmath>
using namespace std;
//void put(int *a,int n)
void bubbleSort(int *p,int c)
{
    int i,j;
    float t;
    for(i=0;i<c;i++)
    {
        for(j=0;j<c;j++)
        {
            if(*(p+i)<*(p+j))
            {
               t=*(p+i);
               *(p+i)=*(p+j);
               *(p+j)=t;
            }
        }
    }
}
int main()
{
  int c,i;
  cin>>c;
  int p[c];
  for(i=0;i<c;i++)
      cin>>p[i];
  bubbleSort(p,c);
  //out(p,c);
 //  cout <<*p;
    for(int h=0;h<c;h++)
    {
        cout<<*(p+h)<<" ";
    }
}

R7-4 在数组中查找指定元素

输入一个正整数repeat (0<repeat<10),做repeat次下列运算:

输入一个正整数 n (1<n<=10),然后输入n个整数存入数组a中,再输入一个整数x,在数组a中查找x,如果找到则输出相应元素的最小下标,否则输出"Not found"。

要求定义并调用函数search(list, n, x),它的功能是在数组list中查找元素x,若找到则返回相应元素的最小下标,否则返回-1,函数形参 list 的类型是整型指针,形参n和x的类型是int,函数的类型是int。

输出格式语句:printf(“index = %d\n”, );

输入输出示例:括号内为说明,无需输入输出

输入样例:

2 (repeat=2)
3 (n=3)
1 2 -6
2 (x=2)
5 (n=5)
1 2 2 5 4
0 (x=0)

输出样例:

index = 1
Not found


#include <iostream>
#include <string.h>
using namespace std;
#define MAXN 10
int search( int list[], int n, int x );
int main()
{
int i, index, n, x,f;
int a[MAXN];
cin>>f; 
for(int j=0;j<f;j++)
{
cin>>n;
for( i = 0; i < n; i++ )
cin>>a[i];
cin>>x;
index=search(a,n,x);
if(index!=-1)
printf("index = %d\n",index);
else
printf("Not found\n");  
}
    return 0;
}
int search( int list[], int n, int x ){
int i;
for(i=0;i<n;i++)
{
if(x==list[i])
      return i;
    else
        continue;
}
return -1;
}

R7-5 使用函数删除字符串中的字符

输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:

输入一个字符串 str,再输入一个字符 c,将字符串 str 中出现的所有字符 c 删除。

要求定义并调用函数delchar(str,c), 它的功能是将字符串 str 中出现的所有 c 字符删除,函数形参str的类型是字符指针,形参c的类型是char,函数类型是void。

输入输出示例:括号内为说明,无需输入输出

输入样例:

3 (repeat=3)
happy new year (字符串"happy new year")
a (待删除的字符’a’)
bee (字符串"bee")
e (待删除的字符’e’)
111211 (字符串"111211")
1 (待删除的字符’1’)

输出样例:

result: hppy new yer (字符串"happy new year"中的字符’a’都被删除)
result: b (字符串"bee"中的字符’e’都被删除)
result: 2 (字符串"111211"中的字符’1’都被删除)

#include <iostream>
#include <string.h>
using namespace std;

int main()
{
    int repeat;
    char s[100],ch;
    cin>>repeat;
    while(repeat--)
    {
        cin>>s>>ch;
        cout<<"result: ";
        for(int i=0;i<strlen(s);i++)
            if (s[i]!=ch) cout<<s[i];
        cout<<endl;
    }
return 0;
}

R7-6 使用函数实现字符串复制

输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:

输入一个字符串 t 和一个正整数 m,将字符串 t 中从第 m 个字符开始的全部字符复制到字符串 s 中,再输出字符串 s。

要求定义并调用函数 strmcpy(s,t,m), 它的功能是将字符串 t 中从第 m 个字符开始的全部字符复制到字符串 s 中,函数形参s和t的类型是字符指针,形参m的类型是int,函数类型是void。

输入输出示例:括号内为说明,无需输入输出

输入样例:

3 (repeat=3)
happy new year
7
happy
1
new
4

输出样例:

new year (从"happy new year"第7个字符开始组成的新字符串为"new year")
happy (从"happy"第1个字符开始组成的新字符串为"happy")
error input ("new"的长度小于4)

#include <iostream>
#include <string>
using namespace std;
#define X getchar();
int main(void)
{
 string str;
 int m, n;
 cin >> n; X
 for (int i = 0; i < n; ++i)
 {
  getline(cin, str);
  cin >> m; X
  if (str.length() < m-1)
   cout << "error input" << endl;
  else
   cout << str.substr(m-1) << endl;
 }
 return 0;
}

R7-7 找最大的字符串

输入5个字符串,输出其中最大的字符串。
输出格式: printf(“Max is: %s\n”, );
输入输出示例:括号内为说明,无需输入输出

输入样例:

peach
pear
melon
orange
berry

输出样例:

Max is: pear


#include<iostream>
#include<string.h>
using namespace std;
int main()
{
    int i;
    char a[80], max[80];
    cin>>a;
    strcpy(max,a);
    for(i=1; i<5; i++)
    {
  cin>>a;
  if( strcmp(max,a)<0 )
      strcpy(max,a);
    }
    cout<<"Max is: "<<max<<endl;
    return 0;
}

R7-8 查找奥运五环色的位置

奥运五环的5种颜色的英文单词按一定顺序排列{“red”, “blue”, “yellow”, “green”, “black” },定义指针数组并初始化,输入任意一个颜色的英文单词,从已有颜色中查找并输出该颜色的位置值,若没有找到,则输出"Not Found"。

输入格式:

输入一个代表颜色的单词。

输出格式:

输出单词对应的位置值,如果未找到,输出Not Found。

输入样例:

yellow

输出样例:

3

#include<iostream>
#include<string.h>
using namespace std;
int main()
{
    char *p[] ={"red", "blue", "yellow", "green", "black"};
    int i;
    char tmp[100];
    cin>>tmp;
    for(i=0;i<5;i++)
    {
        if(strcmp(tmp,p[i])==0)
        { cout<<i+1; break; }
        else if(i==4)
            cout<<"Not Found";
    }
    return 0;
}

R7-9 字符串的连接

本题要求编写程序,使用指针方式实现两个字符串的连接(不能使用strcat函数),并将连接后的字符串输出。

输入格式:

输入一行以回车结束的非空字符串(不超过40个字符),再输入一行以回车结束的非空字符串(不超过40个字符)。

输出格式:

一行输出俩字符串连接后新的字符串。

输入样例:

Beijing_
China

输出样例:

Beijing_China

#include<iostream>
using namespace std;
void * mystrcat(char *a, char *b)
{
    int i = 0;
    int k = 0;
    while (a[i] != '\0')
    {
        i++;
    }
    while (b[k] != 0)
    {
        a[i] = b[k];
        i++;
        k++;
    }
    a[i] = '\0';
    return a;
}
int main()
{
    char a[80];
    char b[80];
    cin.getline(a, 80);
    cin.getline(b, 80);
    mystrcat(a, b);
    cout << a ;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

沈阳师范大学C++ pta第三章 指针引用 的相关文章

随机推荐

  • JS时间戳和时间之间转换

    一 时间转换时间戳 var date new Date 时间对象 var str date getTime 转换成时间戳 二 时间戳转换为时间 1 转换成形如 2018 年 1 月 4 日 14 00 00 格式 function getD
  • esp32环境安装教程---arduino IDE

    前言 1 最近突然对esp32感兴趣了 源于逛油管的时候 总是看到很多大佬使用esp32cam进行网络图传 做摄像头 个人比较感兴趣 在环境安装过程遇到了很多坑 所以在此跟大家分享一下 2 注意 如果没有魔法的人 本文不用看 因为对你没帮助
  • 使用Javascript(js)技术实现动态时钟效果—北大青鸟

    效果图 代码
  • linux命令大全 find

    参考 linux命令大全 程序员工具箱 1 命令名 find 在某个目录下搜索文件 2 使用样例 在 path 目录下递归找到名字后缀为 access log 的文件 find path name access log 在 path 目录下
  • pandas删除索引具体位置的数据

    import pandas as pd import numpy as np 想删除索引是3 和4的数据 df pd DataFrame 0 我 1 你 2 她 3 我们 5 你们 columns list AB df t df loc d
  • 浪潮 服务器数据安全管理系统,浪潮SSC运维安全管控系统

    浪潮SSC运维安全管控系统提供精细管控 运维无忧的数据中心安全解决方案 统一账号 数据中心内所有各种服务器 数据库 网络设备 中间件 业务系统的账号作为从账号 浪潮SSC的账号作为主账号 进入数据中心的每个运维人员对应一个主账号 主账号用来
  • 卷积:kernel size/padding/stride

    卷积的原理 卷积尺寸变化 输出尺寸 输入尺寸 filter尺寸 2 padding stride 1 宽和高都是这么计算的 输入图片大小为200 200 依次经过一层卷积 kernel size 5 5 padding 1 stride 2
  • 带你解决java内存爆炸和CPU100%的问题

    文章目录 java 内存爆炸 CPU100 问题分析 定位与解决 背景 堆内存溢出 问题思路整理 堆外内存分析 问题思路整理 CPU 100 问题排查 引发原因 java 内存爆炸 CPU100 问题分析 定位与解决 背景 今天给java开
  • Unity半透明物体+投射阴影+接受阴影

    前置 水流动效果 透明 物体实现半透明有透明度测试和透明度混合两种方式 不同方式接受和投射阴影的方式有所差别 透明度测试阴影效果图 正方体的阴影一部分打在了水平面上 一部分在白色平面上 由于透明度测试使得水平面的右半部分为完全透明 所以白色
  • CNVD证书获得及要求

    CNVD证书获得及要求 前言 CNVD证书 简介 要求 挖掘思路 定位目标 搜索案例 漏洞类型 证书展示 文件上传 逻辑漏洞 弱口令 ps 前言 4月份利用闲时时间对学校资产进行了一波渗透测试 发现蛮多的漏洞 这其中就发现了这次证书的漏洞厂
  • 2020-09-10 nginx 流转发 ftp 服务器报错: GnuTLS 错误 -110

    ginx 流转发 ftp 服务器报错 GnuTLS 错误 110 报错信息 filezilla ftp tls 连接 ftp 服务器没问题 访问 nginx 服务 转发到ftp 服务器会报错 如下 错误 GnuTLS 错误 110 位于 g
  • 异常值处理

    异常值处理是数据预处理中的一个重要步骤 随着大数据时代的到来 异常值处理也越来越重要 本文主要总结了一些常用的判断异常值的方法 1 3 准则 要求数据服从正态分布 认为大于 3 或小于 3 的实验数据值作为异常值 其中 为数据均值 为数据标
  • vscode 导入python库_vscode 导入的三方库没有代码提示的问题

    发现在vscode里面 关于tensorflow的内容都不提示 需要一个字母一个字母的敲 在tensorflow包下的 init py文件中定义了一个contrib变量表示tensorflow contrib包下的内容 但是tensorfl
  • QQ空间扫码登录协议 Java

    运行环境 服务器 Centos7 6 Docker Mysql 后端 IDEA2019 3 3 JDK1 8 Maven lombok okhttp SpringBoot fastjson log4j 前端 D2Admin Axios El
  • 为你精选86个本科软件工程专业的计算机毕业设计项目推荐

    对于即将步入毕业设计阶段的计算机专业学生们 找到合适的题目和完成项目的压力也许正在困扰着你 今天 我们会给大四的学生分享一些毕业设计项目 希望可以给正在苦恼的你提供一些帮助 一 成品列表 以下所有springboot框架项目的源码博主已经打
  • 36_windows环境debug Nginx 源码-使用 VSCode 和WSL

    文章目录 配置 WSL 编译 Nginx VSCode 安装插件 launch json 配置 WSL sudo apt get y install gcc cmake sudo apt get y install pcre sudo ap
  • Pandas知识点-逻辑运算

    Pandas知识点 逻辑运算 逻辑运算在代码中基本是必不可少的 Pandas的逻辑运算与Python基础语法中的逻辑运算存在一些差异 所以本文介绍Pandas中的逻辑运算符和逻辑运算 本文使用的数据来源于网易财经 具体下载方法可以参考 ht
  • RuntimeError: CUDA error: initialization error when calling `cusparseCreate(handle)

    原代码 tf swingbase arm torch matmul torch inverse tf base upper torch inverse tf uppernew base 改成 tf swingbase arm torch m
  • vscode中终端字体设置

    整理了一些vscode中终端字体及各种样式的设定 废话不多说 看下面 把下面的粘贴到 setting json 中 根据个人需要可以更改样式 瞎搞的 大部分应该准确 自己调试出来的 workbench colorCustomizations
  • 沈阳师范大学C++ pta第三章 指针引用

    沈阳师范大学C pta第三章 指针引用 判断题 1 字符串常量实质上是一个指向该字符串首字符的指针常量 T 2 定义一个指针数组并初始化赋值若干个字符串常量 则指针数组并不存放这些字符串 而仅仅指向各个字符串 T 3 指向整数指针的指针与指