SDUWH - 《高级程序设计语言(C)》 - - 练习五-山大威海c语言

答案见下方截图,其他pta题目见我的专栏,有sduwh的全套C语言pta题目

考试公告

Chapter 5 Pointers and Arrays

1-1

分数 2

作者 Sun Jun

单位 武汉理工大学

An array can store many different types of values.

T

F

答案正确:2 分


1-3

分数 2

作者 Sun Jun

单位 武汉理工大学

If there are fewer initializers than the number of elements in the array, C automatically initializes the remaining elements to the last value of the list of initializers.

T

F

答案正确:2 分


1-4

分数 2

作者 Sun Jun

单位 武汉理工大学

It’s an error if an initializer list contains more initializers than there are elements in the
array.

T

F

答案正确:2 分


1-6

分数 2

作者 sun jun

单位 武汉理工大学

If there is declaration int a[] = {2,4,6,8,10}, *p= a; a 's value is the first address of the array, then *(p++)'s value is 4.

T

F

答案正确:2 分


1-7

分数 2

作者 sun jun

单位 武汉理工大学

Statement int * p,q,r; declares three pointer variable

T

F

答案正确:2 分


1-8

分数 2

作者 sun jun

单位 武汉理工大学

To declare int a[10] , * p=a, both statements p = a+1 and a = a+1 are valid.

T

F

答案正确:2 分


1-9

分数 2

作者 sun jun

单位 武汉理工大学

When initialize to all element in a 2-dimention array, row number cannot be ommited, but column number could.
,

T

F

答案正确:2 分


1-12

分数 2

作者 sun jun

单位 武汉理工大学

If the value of function strcmp(a,b) is less than 0, it means that the parameters of function might be wrong.

T

F

答案正确:2 分


1-13

分数 2

作者 sun jun

单位 武汉理工大学

For initializing a 2-dimension array, if the initializers are complete, the initialization statement could be as following:

int a[][]={{1,2,3,4},{5,6,7,8}};

T

F

答案正确:2 分


1-14

分数 2

作者 sun jun

单位 武汉理工大学

For a correctly defined 2-dimensional array, *(a[i]+j) is same as a[i][j] .

T

F

答案正确:2 分

 

 

 

 

分数 2

作者 sun jun

单位 武汉理工大学

Which statement can initialize a one-dimensional array?

A.

int a[10]=(0,0,0,0,0);

B.

int a[2]={0,1,2};

C.

int a[]={0};

D.

int a[]={ };

答案正确:2 分


2-2

分数 2

作者 往年试卷

单位 浙江大学

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

A.

p++

B.

x++

C.

*(p++)

D.

&x++

答案正确:2 分

创建提问


2-3

分数 2

作者 往年试卷

单位 浙江大学

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

A.

p2=p1

B.

p2=**p1

C.

p2=&p1

D.

p2=*p1

答案正确:2 分

创建提问


2-4

分数 2

作者 往年试卷

单位 浙江大学

下列程序段的输出是____。

int c[]={1, 3, 5};
int *k=c+1;
printf("%d", *++k);

A.

3

B.

4

C.

5

D.

6

答案正确:2 分

创建提问


2-5

分数 2

作者 往年试卷

单位 浙江大学

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

int c, *s, a[]={1, 3, 5};

A.

c=*s;

B.

s[0]=a[0];

C.

s=&a[1];

D.

c=a;

答案正确:2 分

创建提问


2-6

分数 2

作者 往年试卷

单位 浙江大学

If variables are defined and assigned correctly, the expression ______ is wrong.

A.

a&b

B.

a^b

C.

&&x

D.

a, b

答案正确:2 分

创建提问


2-7

分数 2

作者 往年试卷

单位 浙江大学

According to the declaration: int a[10], *p=a; the expression __ is wrong.

A.

a[9]

B.

p[5]

C.

*p++

D.

a++

答案正确:2 分

创建提问


2-8

分数 2

作者 往年试卷

单位 浙江大学

Among the following assignments or initializations, __ is wrong.

A.

char str[10]; str="string";

B.

char str[]="string";

C.

char *p="string";

D.

char *p; p="string";

答案正确:2 分

创建提问


2-9

分数 2

作者 往年试卷

单位 浙江大学

According to the declaration: int p[5], *a[5]; the expression ______ is correct.

A.

p=a

B.

p[0] = a

C.

*(a+1)=p

D.

a[0]=2

答案正确:2 分

创建提问


2-10

分数 2

作者 往年试卷

单位 浙江大学

Among the following assignments or initializations, __ is wrong.

A.

char s[ ]="hello";

B.

char s[10]; s="hello";

C.

char *p="hello";

D.

char *p; p="hello";

答案正确:2 分

创建提问


2-11

分数 2

作者 往年试卷

单位 浙江大学

According to the declaration: int (*p)[10];, p is a(n) __.

A.

pointer

B.

array

C.

function

D.

element of array

答案正确:2 分

创建提问


2-12

分数 2

作者 王秀

单位 福州大学

p1p2都是整型指针,p1已经指向变量x,要使p2也指向x, ( )是正确的。

A.

p2 = p1;

B.

p2 = **p1;

C.

p2 = &p1;

D.

p2 = *p1;

答案正确:2 分

创建提问


2-14

分数 2

作者 王秀

单位 福州大学

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

A.

a[9]

B.

p[5]

C.

a++

D.

*p++

答案正确:2 分

创建提问


2-16

分数 2

作者 往年试卷

单位 浙江大学

With regard to the array definition int a[4]; ,which expression among the following is wrong?

A.

*a

B.

a[0]

C.

a

D.

a++

答案正确:2 分

创建提问


2-17

分数 2

作者 往年试卷

单位 浙江大学

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

A.

float f, *pf = f;

B.

float f, *pf = &f;

C.

float *pf = &f, f;

D.

float f, *pf =0.0;

答案正确:2 分

创建提问


2-19

分数 2

作者 往年试卷

单位 浙江大学

Which one is completely correct among the following program fragments?

A.

int *p; scanf("%d", &p);

B.

int *p; scanf("%d", p);

C.

int k, *p=&k; scanf("%d", p);

D.

int k, *p; *p= &k; scanf("%d", p);

答案正确:2 分

创建提问


2-20

分数 2

作者 往年试卷

单位 浙江大学

Among the following statements, __ is equivalent to the declaration: int *p[4];.

A.

int p[4];

B.

int **p;

C.

int *(p[4]);

D.

int (*p)[4];

答案正确:2 分

创建提问


2-21

分数 2

作者 往年试卷

单位 浙江大学

In the following declarations, the correct assignment expression is __.

int *p[3], a[3];

A.

p = a

B.

p = &a[0]

C.

*p = a

D.

p[0] = *a

答案正确:2 分

创建提问


2-22

分数 2

作者 往年试卷

单位 浙江大学

For definitions: char s[2][3]={"ab", "cd"}, *p=(char *)s; the expression __ is correct and its value is equivalent to the element s[1][1].

A.

*(s+3)

B.

*s+2

C.

p[1][1]

D.

*++p+2

答案错误:0 分

创建提问


2-23

分数 2

作者 周强

单位 青岛大学

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

A.

char **p;

B.

char (*p)[10];

C.

char *p[6];

D.

给出的三项中,p都是指针

答案正确:2 分

 

6-1 5.2-2 swap-correct

分数 5

全屏浏览题目

切换布局

作者 sduwh_yh

单位 山东大学(威海)

interchange *px and *py .

函数接口定义:

 

void swap(int *px, int *py);

裁判测试程序样例:

#include<stdio.h>

void swap(int *px, int *py);

int main()
{
    int a;
    int b;

    scanf("%d%d", &a, &b);

    printf("a = %d, b = %d\n", a, b);

    swap(&a, &b);

    printf("a = %d, b = %d\n", a, b);

    return 0;
}


/* 请在这里填写答案 */
void swap(int *px, int *py){
    int temp;
    temp= *px;
    *px= *py;
    *py=temp;
}

6-2 5.2-3 getint

分数 10

全屏浏览题目

切换布局

作者 sduwh_yh

单位 山东大学(威海)

getint: get next integer from input into *pn.

函数接口定义:

 

int getint(int *pn);

裁判测试程序样例:

#include<stdio.h>
#include <ctype.h>

#define SIZE 100

int getch(void); // defined already
void ungetch(int); // deined already
int getint(int *pn);

int main()
{
    int n, array[SIZE];

    for (n = 0; n < SIZE && getint(&array[n]) != EOF && array[n] != 0; n++)
        printf("%d\n", array[n]);

    return 0;
}

/* 请在这里填写答案 */

输入样例:

10
11
0

输出样例:

10
11
int getint(int *pn){
    int c,sign;
    while(isspace(c=getch()))
        ;
    if(!isdigit(c) && c!=EOF && c!='+' && c!='-'){
        ungetch(c);
        return -1;
    }
    sign = (c=='-')? -1 : 1;
    if(c=='+'||'-')
        c=getch();
    for(*pn=0;isdigit(c);c=getch())
        *pn=10* *pn+(c-'0');
    *pn=*pn * sign;
    if(c!=EOF)
        ungetch(c);
    return c;
}

/*int getint(int *pn)
{
       int c,sign;
       ;
       if(!isdigit(c)&&c!=EOF&&c!='+'&&c!='-'){
              ungetch(c);
              return -1;
       }
       sign= (c=='-') ? -1:1;
       if(c=='+'||c=='-'){
              c=getch();
              if(!isdigit(c)){
                    ungetch(c);
                    return -1;
              }
       }
       for(*pn=0;isdigit(c);c=getch()){
              *pn=10*(*pn)+(c-'0');
       }
       *pn *= sign;
       if(c!=EOF)
              ungetch(c);
       return 0;
}
*/

6-3 5.3 strlen-pointer

分数 5

全屏浏览题目

切换布局

作者 sduwh_yh

单位 山东大学(威海)

strlen: return length of a string.

函数接口定义:

 

unsigned strlen_my(char *s);

裁判测试程序样例:

#include <stdio.h>

unsigned strlen_my(char *s);

int main()
{
    char array[100] = "hello, world";
    char *ptr = array;

    printf("%d\n", strlen_my("hello, world")); /* string constant */
    printf("%d\n", strlen_my(array));          /* char array[100]; */
    printf("%d\n", strlen_my(ptr));            /* char *ptr; */

    while(~scanf("%s", array)) {
        printf("%d\n", strlen_my(array));
    }

    return 0;
}


/* 请在这里填写答案 */
 

unsigned strlen_my(char *s){
    int n;
    for(n=0;*s!='\0';s++)
        n++;
    return n;
}

6-4 5.5- 1-4 strcpy v1 array subscript

分数 5

全屏浏览题目

切换布局

作者 sduwh_yh

单位 山东大学(威海)

strcpy: copy t to s.

array subscript version.

函数接口定义:

 

void strcpy(char *const s, char *const t);

裁判测试程序样例:

#include<stdio.h>

void strcpy(char *const s, char *const t);
char *alloc(int n);

int main()
{
    char *from = alloc(1000);
    char *to = alloc(1000);

    while(~scanf("%s", from)) {
        strcpy(to, from);
        printf("%s\n", to);
    }

    return 0;
}
/* 请在这里填写答案 */

输入样例:

abc

输出样例:

abc
void strcpy(char *const s, char *const t){
    int i=0;
    for(i=0;*(t+i)!='\0';i++)
        *(s+i)=*(t+i);
    *(s+i)='\0';   //这玩意,必须手动在后面加上'\0';否则的话下一行就会出错
    //注意,这个程序是循环读取的,因此上一次的会影响下一次的。
}

6-5 5.5-2 strcpy v2 pointer

分数 5

全屏浏览题目

切换布局

作者 sduwh_yh

单位 山东大学(威海)

strcpy: copy t to s;

pointer version;

函数接口定义:

 

void strcpy( char *restrict dest, const char *restrict src );

裁判测试程序样例:

#include<stdio.h>

void strcpy( char *restrict dest, const char *restrict src );
char *alloc(int n);

int main()
{
    char *from = alloc(1000);
    char *to = alloc(1000);

    while(~scanf("%s", from)) {
        strcpy(to, from);
        printf("%s\n", to);
    }

    return 0;
}

/* 请在这里填写答案 */

输入样例:

abc

输出样例:

abc
void strcpy( char *restrict dest, const char *restrict src ){
    while(*src!='\0'){
        *dest=*src;
        dest++;
        src++;
    }
    *dest='\0';
}

6-6 5.5-5 strcmp

分数 5

全屏浏览题目

切换布局

作者 sduwh_yh

单位 山东大学(威海)

Compares the C string str1 to the C string str2.

<0 : the first character that does not match has a lower value in ptr1 than in ptr2.

0 : the contents of both strings are equal.

>0 : the first character that does not match has a greater value in ptr1 than in ptr2.

函数接口定义:

 

int strcmp ( const char * str1, const char * str2 );

裁判测试程序样例:

#include<stdio.h>

int strcmp ( const char * str1, const char * str2 );

int main()
{
    char s[100], t[100];

    while(scanf("%s%s", s, t) != EOF) {
        printf("%d\n", strcmp(s, t));
    }

    return 0;
}

/* 请在这里填写答案 */

输入样例:

abca
abca
abcd
abce

输出样例:

0
-1
int strcmp ( const char * str1, const char * str2 ){

/*    for(;*str1!='\0';str1++,str2++ ){
   if(*str1!=*str2)
   return *str1-*str2;
}    
    if(*str2!='\0')
        return *str1-*str2;
    return 0;*/
    for(;*str1==*str2;str1++,str2++)
        if(*str1=='\0')
            return 0;
    return *str1-*str2; 
}

6-7 5.6 TextSort

分数 15

全屏浏览题目

切换布局

作者 sduwh_yh

单位 山东大学(威海)

qsort: sort v[left]...v[right] into increasing order

函数接口定义:

 

void qsort(char *lineptr[], int left, int right);

qsort: sort v[left]...v[right] into increasing order

裁判测试程序样例:

#include <stdio.h>
#include <string.h>

#define MAXLINES 5000 /* max #lines to be sorted */
#define MAXLEN 1000 /* max length of any input line */

char *lineptr[MAXLINES]; /* pointers to text lines */

int readlines(char *lineptr[], int maxlines); //defined
void writelines(char *lineptr[], int nlines); //defined
void qsort(char *lineptr[], int left, int right);

/* sort input lines */
int main()
{
    int nlines; /* number of input lines read */
    
    if ((nlines = readlines(lineptr, MAXLINES)) >= 0) {
        qsort(lineptr, 0, nlines-1);
        writelines(lineptr, nlines);
        return 0;
    } else {
        printf("error: input too big to sort\n");
        return 1;
    }
}

/* 请在这里填写答案 */

输入样例:

aaaaaaa
aaaaaa
aaaaa
aaaa
aaa
aa
b

输出样例:

aa
aaa
aaaa
aaaaa
aaaaaa
aaaaaaa
b
void swap(char *v[],int i,int j)
{
    char *tmp;
    tmp=v[i];
    v[i]=v[j];
    v[j]=tmp;
    
}
void qsort(char *v[], int left, int right)
{
    if(left>=right)
        return;
    swap(v,left,(left+right)/2);
    int last=left;
    for(int i=left+1;i<=right;++i)
        if(strcmp(v[i],v[left])<0)
            swap(v,++last,i);
    swap(v,left,last);
    qsort(v,left,last-1);
    qsort(v,last+1,right);
}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
高级程序设计语言(a)课程是山东大学2015-2016学年1学期的一门重要课程,旨在帮助学生掌握高级程序设计语言的基本原理和应用技巧。在这门课程中,我们不仅学习了高级程序设计语言的基本概念和语法规则,还深入了解了面向对象的程序设计思想和方法。通过学习,我们不仅可以掌握高级程序设计语言的编程技巧,还可以培养解决问题和创新思维的能力。 在课程学习过程中,我们通过理论学习和实际操作相结合的方式,深入理解了高级程序设计语言的核心知识。通过课堂讲解和实践练习,我们逐渐掌握了面向对象的程序设计方法,并且学会了如何利用高级程序设计语言进行程序开发和调试。同时,我们对常用的数据结构和算法也有了更深入的了解和掌握。 在课程的学习过程中,老师们不仅传授了知识,还引导我们进行实际的编程练习,培养了我们的动手能力和解决问题的能力。通过大量的编程实践,我们逐渐掌握了高级程序设计语言的应用技巧,能够独立完成一些小型的程序开发项目。 总的来说,这门高级程序设计语言(a)课程不仅帮助我们掌握了高级程序设计语言的基本知识和技能,还培养了我们的动手能力和解决问题的能力。通过这门课程的学习,我们在程序设计方面得到了很大的提升,为以后的学习和工作打下了坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋时的雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值