软考初级程序员下午题(15)

试题一

阅读下列说明和流程图,将应填入______处的语句填写完整。
[说明]
有数组A(4,4),把1到16个整数分别按顺序放入A(1,1),…,A(1,4),A(2,1),…,A(2,4),A(3,1),…,A(3,4),A(4,1),…,A(4,4)中,下面的流程图用来获取数据并求出两条对角线元素之积。
[流程图]
在这里插入图片描述

试题二

阅读以下函数说明和C语言函数,将应填入______处的字句填写完整。
[说明]
实现矩阵(3行3列)的转置(即行列互换)。

例如,输入下面的矩阵:
100 200 300
400 500 600
700 800 900

程序输出:
100 400 700
200 500 800
300 600 900

    [函数]
    int fun(int array[3][3])
    {
    int i,j,t;
    for(i=0;______;i++)
    for(j=0;______;j++)
    {
    t=array[i][j];
    ______;
    ______;
    }
    }
    }
    main()
    {
   int i,j;
    int array[3][3]={{100,200,300},{400,500,600},{700,800,900}};
    clrscr();
    for(i=0;i<3;i++)
    {
    for(j=0;j<3;j++)
    printf("%7d",array[i][j]);
    printf("\n");
    }
    fun(______);
    printf("Converted array:\n");
    for(i=0;i<3;i++)
    {
    for(j=0;j<3;j++)
    printf("%7d",array[i][j]);
    printf("\n");
    }
    }

试题三

阅读以下说明、C函数和问题,将解答写完整。
[说明1]
函数test f1(int m,int n)对整数m、n进行某种运算后返回一个整数值。

 [C函数1]
    int test_f1(int m,int n)
    { int k;
    k=m>n?m:n;
    for(;(k%m!=0)||(k%n!=0);k++);
    return k;
    }

1、(1)请写出发生函数调用test_f1(9,6)时,函数的返回值;
(2)请说明函数test_f1的功能。
[说明2]
设在某C系统中为每个字符分配1字节,为每个指针分配4字节,sizeof(x)计算为x分配的字节数。
函数test_f2()用于测试并输出该C系统为某些数据分配的字节数。

  [C函数2]
    voidtest_f2()
    { char str[]="NewWorld";    char*p=str;    char i='\0';
    void*ptr=malloc(50);
    printf("%d\t",sizeof(str));   printf("%d\n",sizeof(p));
    printf("%d\t",sizeof(i));      printf("%d\n",sizeoqptr)),
    }

2、请写出函数test_f2()的运行结果。
[说明3]
函数test_f3(char s[])的功能是:将给定字符串s中的所有空格字符删除后形成的串保存在字符数组tstr中(串s的内容不变),并返回结果串的首地址。

 [C函数3]
    char*test_f3(const char s[])
    { char tstr[50]={'\0'};  unsigned int i,k=0;
    for(i=0;i<strlen(s);i++)
    if(s[i]!='')tstr[k++]=s[i];
    return tstr;
    }

3、函数test_f3()对返回值的处理有缺陷,请指出该缺陷并说明修改方法。

试题一答案

(1)1,4,1
(2)1,4,1
(3)1
(4)s×A[i,i]
(5)s×A[5-i,i]

[解析] 本题考查用程序流程图描述数组及求对角线的和。
题目要求把1到16个整数分别按顺序放入A(1,1),…,A(1,4),A(2,1),…,A(2,4),A(3,1),…,A(3,4),A(4,1),…,A(4,4)中,那么数组中的元素刚好构成一个方阵,用流程图求出这个方阵的对角线之积。下面来具体分析流程图。
第1空与第2空应该结合起来完成,它们都是一个循环判断语句的条件,从图中可以看出,如果这两个条件都成立,则读出当前数组中的元素值,根据题目要求,数组中的元素个数是每行4个每列4个,那么循环的上界应该是4,而下标是从1开始的,因此这两个空答案为“1,4,1”。
第3空是一个赋值语句,给变量s赋一个初值,从图中后面的语句不难看出s中存放的是求积的结果,那么在求积以前,s的值应该为1,因此此空答案为“1”。
第4空也是一个赋值语句,是在循环条件判断语句下,我们已经知道变量s中存放的是每次求积的结果,那么此空很明显是用来求积的,用当前取到的对角线元素乘以变量s中存放的值,因此此空答案为“s×A[i,i]”。
第5空和上一空非常相似,但它是用来求另外一条对角线的积的,它也是在一个循环下来实现的,这条对角线的元素位置与上面那条具有对称的特点,因此此空答案为“s×A[5-i,i]”。

试题二答案

(1)i<3
(2)j<i
(3)array[i][j]=array[j][i]
(4)array[j][i]=t
(5)array

[解析] 本题考查用C语言实现矩阵的转置。
题目要求程序实现矩阵(3行3列)的转置,其关键是将当前行列对应的元素与其对应的列行元素互换。题目中给出了具体的矩阵元素和结构,下面来具体分析程序。
第1空很明显是循环语句的判断条件,是上界条件,这个二重循环的作用是进行数组中元素的互换,而从题目中给出的已知条件可以判断出,这个数组是一个三维的数组,而在程序中下标是从0开始的,那么其上界应该是不大于3,因此这个空的答案是“i<3”。
第2空也是循环的判断上界,在上面我们已经分析出了这个二重循环的作用是进行数组中元素的互换,而元素互换的过程是将当前行列对应的元素与其对应的列行元素互换,元素的下标都要在能互换的下标范围内,那么第二重循环的上界应该是第一重循环变量的当前值,因此此空答案为“j<i”。
第3空在这个二重循环体中,从程序中不难发现,用一个临时变量t来存放要置换的值,接下来就是此空,那么应该是将其中一个值放到其转置后的位置,再结合上面的分析,可以得出此空答案为“array[i][j]=array[j][i]”。
第4空是紧接着上一空而来的,在上面的程序中已经将当前位置中的值保存到了临时变量t中,且把其对应的转置位置的元素值放到了这个位置,那么接下来应该是将临时变量中的值放到转置位置,因此此空答案为“array[j][i]=t”。
第5空很明显是函数的参数,这个函数就是功能函数fun(),用来实现矩阵的转置,根据程序中函数的定义,它只有一个参数,这个参数是要被处理的数组。在主函数中,需要被处理的数组是array,这里我们需要注意在数组作为函数的形参时,一般是通过传递其地址来实现参数传递的,因此此空答案为“array”。

试题三答案

1、(1)18
(2)求两个整数的最小公倍数

[解析] 本题考查C语言基本运算和控制结构的应用。
对于传入函数test_f1中的参数m和n,运算“k=m>n?m:n”使得k取m和n中的较大者。此后,“for(;(k%m!=0)||(k%n!=0);k++);”使得k最后的取值正好能同时被m和n整除,因此,本函数的功能是求m和n的最小公倍数。9和6的最小公倍数是18。

2、9 4
1 4

[解析] 本题考查C程序中的数据定义和存储应用。
对于定义char str[]=“NewWorld”,数组str由字符串“NewWorld”初始化后,其大小为9(包括串为结束标志字符’\0’),因此sizeof(str)的值为9。
对于定义“charp=str”,ptr指向“NewWorld”的第一个字符“N”(即数组str的起始地址对应存储单元处存放的字符),ptr是指针变量,因此sizeof§的值为4。
对于定义“char i=‘\0’”,i是字符变量,其初始值为ASCII码值为0的字符,因此sizeof(i)的值为1。
对于定义“void
ptr=malloc(50)”,ptr是指向50个字节存储区域的指针,因此sizeof(ptr)的值为4。

3、缺陷:返回了局部数据(或变量,或数组)的指针(或地址)

修改方法:用malloc(或realloc)函数申请局部变量(或数组)

[解析] 本题考查C语言数据存储类型的基础知识及常见应用错误和处理知识。
一般将内存划分为代码区、静态数据区、栈区和堆区,其中,栈区和堆区也称动态数据区。C程序中的数据(大多以变量和数组表示)可存储在计算机系统内存区域的不同部分。全局变量(全局数组、外部变量等)和静态局部变量的存储单元在静态数据区分配,它们的生存期(即变量与其存储单元之间的绑定关系)较长,在程序运行期间始终存在。而局部变量(自动变量、局部数组等)的存储单元在栈区分配,它们的生存期较短,随着函数被调用而分配空间,函数调用结束后释放分配给它们的存储空间,这是由系统控制的。而堆区的存储空间由程序员根据需要用malloc函数申请,不用时用free函数释放,归还给系统。
在函数test_f3中,数组tstr的空间在栈区分配,函数调用结束后该存储空间将由系统自动回收,随着程序的执行再进行分配,所以用“return tstr”返回该数组的首地址将可能使得需要用这个存储区中数据的地方出错。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值