黄老师 发表于 2017-1-9 09:24:58

重庆大学网院C语言程序设计 第123次 (答案 )

第1次作业
一、单项选择题(本大题共60分,共 20 小题,每小题 3 分)附件就是答案,需要的可以下载
1. #inlucde <mycode.h>是一条(   )。
A. 文件包含预处理命令
B. 宏定义预处理语句
C. 条件编译预处理命令
D. C语句
2. 在由多个函数组成的C程序中,函数排列顺序上主函数( )。
A. 必须在第一个位置

B. 必须在最后一个位置
C. 可以在任意位置
D. 可以在第一个位置
3. C语言中要求被操作数必须是整型或字符型数据的运算符是(   )。
A. !
B. &&
C. ||
D. &
4. 下面所列选项中,合法的用户标识符是()。

A. if

B. switch

C. finename

D. int

5. 在C程序中,实型常数10-5的指数书写形式是()。
A. 10^-5

B. 10E-5

C. 1E-5

D. E-5

6. 下面关于单链表的描述中,不正确的是()。
A. 单链表可以动态增长
B. 单链表中插入数据时,不需要移动插入点之后的结点
C. 单链表中删除数据时,不需要移动删除结点之后的结点
D. 单链表和数组一样,必须事先确定结点的个数
7. 设有C语句:doublex,*p1=&x,**p2=&p1;,那么与变量x等价的是()。
A. p2
B. *p2
C. **p2
D. &p2
8. 若C程序的主函数头部为:int main(),则函数体中最后一条语句应该是()。

A. /* return 0; */

B. //return 0;

C. #include <stdio.h>

D. return 0;

9. 设有C语句序列:int arr,*p1;p1=arr;,那么能够输入数组3号元素值的是()。
A. scanf("%d",p1+3);
B. scanf("%d",arr);
C. scanf("%d",p1*3);
D. scanf("%d",&p1);
10. 下面关于条件编译预处理#if系列命令的叙述中,正确的是()。
A. 使用#if系列预处理命令,可以在程序执行时对流程进行控制
B. 在使用#if系列预处理命令时,#if必须和#endif配合使用
C. 使用#if系列预处理命令,可以在编译时对处理代码进行选择
D. 使用#if系列预处理命令,只能在编译时进行二者择一的选择
11. 下面选项中,那一个不是标准设备文件()。
A. stdin
B. stderr
C. stdout;
D. stddisk
12. 下面程序段运行后,变量b、c的值依次是()。
double a=-10.935,b,c;
b=floor(a);
c=ceil(a);
A. -11.000000,-10.000000
B. -10.000000,-11.000000
C. -11.000000,-11.000000
D. -10.000000,-10.000000
13. 下面关于单链表的描述中,错误的是()。
A. 单链表的插入操作中,需要建立一个新数据结点
B. 单链表的访问方式是顺序访问方式,即要从第一个结点开始依次访问其他结点
C. 建立单链表时,有正向生成构造和反向生成构造两种方法
D. 单链表删除操作中,仅需要将被删结点从链表上取下来既可
14. 下面关于递归函数调用的论述中,最准确的是()。
A. 函数的递归调用和嵌套调用完全相同
B. 函数递归调用时会放弃那些应该执行而未执行的操作
C. 函数的递归调用就是函数直接或间接自己调用自己
D. 递归函数执行时,总是使用函数中定义的同一组变量

15. 下面C程序运行时,输入的数据是"Thisis a test string. ",则输出结果()。
#include <stdio.h>
void main()
{
char s1,s2;
scanf("%s",s1);
gets(s2);
printf("%s,%s\n",s1,s2);
}
A. This is a test string. , This is a test string.
B. is a test string.
C. This is a test string.
D. This, is a test string.
16. 设有字符数组初始化语句:char s[]="This \n That\n",s数组长度是()。
A. 10
B. 12
C. 13
D. 14
17. 下面关于文件模式"w"和"a"的描述中,错误的是()。
A. "w"和"a"两种模式都是写模式,即将程序中产生的数据写入到指定文件中
B. "w"是写模式,当指定的文件不存在时会创建一个新文件
C. "a"是写模式,当指定的文件不存在时会创建一个新文件
D. 无论指定的文件存在与否,"w"和"a"两种模式的意义都是一样的
18. 一个C程序的执行是从()。

A. 本程序的main函数开始,在main函数结束
B. 本程序文件的第一个函数开始,到本程序文件的最后一个函数结束
C. 本程序的main函数开始,到本程序文件的最后一个函数结束
D. 本程序文件的第一个函数开始,到本程序main函数结束
19. 下面程序执行后输出的结果是()。
#include<stdio.h>
void main()
{
int a={{1},{2,3,4},{9}};
int i,j,*p=&a;
*p+=a*a;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
printf("%3d",a);
printf("\n");
}
A. 12003 13900
B. 1002300 139
C. 1002 133900
D. 10023 13900
20. 下面关于选择排序算法的叙述中,错误的是()。
A. n个数据参加排序,排序过程最多进行n-1趟
B. 每趟排序过程中,参与比较的数据一定是相邻数据
C. 每一趟排序过程中,最多产生一次数据交换
D. 每趟排序过程,实际上就是一个寻找最大值/最小值的过程

二、判断题(本大题共40分,共 20 小题,每小题 2 分)
1. C函数既可以嵌套定义,也可以嵌套调用
2. 在书写C语言表达式时,如参与乘法运算的两个数据对象都是变量,则可以省略乘号不写。
3. C程序中,编译预处理命令#ifdef和#endif必须配合使用。
4. C标准库中提供了一系列关于字符分类的标准函数,这些函数使用时需要用文件包含预处理命令将ctype.h头文件包含的源程序中来。

5. 结构体类型指针变量,能够存放同类型结构体变量在内存中的起始地址。
6. C语言中,可以使用字符串变量和字符数组两种方式来表达字符串数据,在程序设计中可以根据需要选择字符串数据的表示方式。
7. C程序中,可以使用#include预处理语句定义宏。
8. 下面语句序列中存在着语法错误。
int a=2;
double b=5;
++a;
b--;

9. 虽然在当前工作目录中已有文件:abc.cpp,但使用文件包含预处理:#include <abc.cpp>或#include"abc.cpp"还是会得到不同的结果。
10. C语言中,结构体变量输入时,可以在输入函数中使用系统提供的结构体类型控制符进行输入数据的控制。
11. 本质上,关系运算符“==”和赋值运算符“=”的功能是相同的。
12. C程序中,使用#ifdef、#else和C控制语句if、else都可以形成双分支的概念,所以它们在程序中的作用是相同的。

13. C程序中,通过数据输入语句为程序中的变量提供值。

14. C语言中,二维数组的起始地址有4种表示形式,它们都是一级地址形式。
15. 设有C定义语句:char*s="abcdefg",在程序中可以通过s= 'A';语句修改字符串s的内容。
16. C语言中,typedef关键字不但能够为数据类型取别名,还可以用来构造复杂的数据类型。
17. 函数每次递归调用时,都会将应该执行而未执行的操作保存到堆栈中,递归结束时放弃这些未执行操作,结束程序运行。
18. C语言中,break语句只能在循环体中使用。


19. C语言中,不支持C99标准环境中定义数组不能使用变量作为数组长度,但在支持C99标准的环境中是允许的。
20. 文本文件也称为ASCII文件,其特点是存储效率较低,但便于程序中对数据的逐字节(字符)处理。


第2次作业
一、单项选择题(本大题共60分,共 20 小题,每小题 3 分)
1. 能正确获得字符串数据的操作是(   )。
A. char s[]="abcd";
B. char s; s="good";
C. char s='abcd';
D. char s; s[ ]="good";
2. 对于下面代码段的执行结果,叙述正确的是()。
int a=5,b=10;
int *x,*y;
x=&a,y=&b;
*x=*x+*y;
*y=*x-*y;
*x=*x-*y;
A. a=5,b=10,x指向a,y指向b
B. a=10,b=5,x指向b,y指向a
C. a=10,b=5,x指向a,y指向b
D. a=5,b=10,x指向b,y指向a
3. 下面程序执行后的输出结果是()。
#include <stdio.h>
#include <string.h>
void main()
{
char s="abcdefg",s2="ABCD";
strcat(s+3,s2+2);
puts(s+1);
}
A. bcCD
B. bcABCD
C. bcdefgCD
D. abcdefgCD
4. 下面程序执行后的输入是()。
#include <stdio.h>
#include <string.h>
#define M1 "Hello"
#define M2 ",world!"
#define Msg1 0
#define Msg2 0
void main()
{
char s="HHHH";
#ifdef Msg1
strcat(s,M2);
#elif Msg2
strcpy(s,M1);
#else
strcpy(s,strcat(strcpy(s,M1),M2));
#endif
puts(s);
}
A. HHHH
B. Hello,world!
C. HHHHHello

D. HHHH,world!
5. 下面程序的运行结果是()。
#include <stdio.h>
#include <string.h>
void main()
{ char s="SSSWLIA",c;
int i;
for(i=2;c=s;i++)
{
switch(c)
{
case 'I':
i++;
break;
case 'L':
continue;
default:
putchar(c);
continue;
}
putchar('*');
}
printf("\n");
}
A. SW
B. SSW*
C. SW*A
D. SW*
6. 设有C语句inta[]={1,2,3,4,5,6,7,8,9,10},*p=a;,则下面对a数组元素不能够正确引用的是(    )。
A. a
B. *(&a)
C. p
D. *(*a(a+3))
7. C程序中,带参主函数的函数首部形式为(    )。
A. void main(argc,argv)
B. void main(char argc, int *argv[])
C. void main(int a, char *b[])
D. void main(int argc; char *argv[])
8. 设有函数定义如下所示,正确的函数声明语句是()。
double ave(int sum,int n)
{
double v;
v=(double)sum/n;
return v;
}
A. double ave(int sum;int n);
B. float ave(int sum,int n);
C. double ave(sum,n);
D. double ave(int x,int y);
9. 下面程序段中要实现的功能是()。
int n;
for(n=1000;n>=1;n--)
if(n%3==0&&n%5==0)
break;
A. 找出中能够被3整除的最大数
B. 找出中能够被5整除的最大数
C. 找出中能够被3和5同时整除的最大数
D. 找出中能够被3和5同时整除的最小数
10. 下面程序的运行结果是()。
#include <stdio.h>
#define N 3
int fun(int v[],int n,int *v1);
void main()
{ int a={1,2,3,4,5,6,7,8,9};
int n1,n2;
n1=fun(*a,N,&n2);
printf("n1=%d,n2=%d\n",n1,n2);
}
int fun(int v[],int n,int *v1)
{ int i,j,nv;
nv=*v1=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{ if(i==j)
nv+=v;
if(i+j==n-1)
*v1+=v;
}
return nv;
}
A. n1=14,n2=16

B. n1=16,n2=14
C. n1=15,n2=15
D. n1=14,n2=14
11. 下面程序执行后的输出结果是()。
#include <stdio.h>
void ptr1(int n);
void main()
{
ptr1(-2014);
printf("\n");
}
void ptr1(int n)
{
if(n<0)
{
putchar('-');
n=-n;
}
if(n/10)
ptr1(n/10);
printf("%d",n%10);
}
A. 2014
B. -4102
C. 2014
D. -2014
12. 若有说明int *ptr1, *ptr2, m=5,n;,下面正确的语句组是(   )。
A. ptr1=&m; ptr2=&ptr1;
B. ptr1=&m; ptr2=&n; *ptr2=*ptr1;
C. ptr1=&m; *ptr2=n;
D. ptr1=&m; *ptr2=*ptr1;
13. 设有C语句序列:int a=3;a+=a-=a*a;,执行该语句序列后,变量a的值是( )。
A. 7
B. 8
C. 6
D. -12
14. 下面程序执行后的输出结果是()。
#include <stdio.h>
void swap(int *x,int y);
void main()
{
int a=5,b=10;
printf("%d,%d",a,b);
swap(&a,b);
printf(",%d,%d\n",a,b);
}
void swap(int *x,int y)
{
*x=*x+y;
y=*x-y;
*x=*x-y;
}
A. 5,10,10,5
B. 10,10,10,10
C. 5,10,10,10
D. 5,10,5,10
15. 对于下面程序段,可以得到的结论是()。
int x=-123,y=0;
for(;x;x+=2)
y+=x;
A. 存在语法错误
B. 没有语法错误,能够正确执行并退出循环
C. 没有语法错误,a值为0是退出循环
D. 没有语法错误,但会陷入死循环
16. 下面程序段执行时,语句c+=1;执行的次数是( )。
int i,j,c=0;
for(i=5;i;i--)
{ j=4;
while(j--)
c+=1;
}
A. 5次
B. 9次
C. 20次
D. 24次
17. 下面程序执行后的输出结果是()。
#include <stdio.h>
void main()
{
int n=12345;
while(n)
{ printf("%d\n",n);
n/=10;
}
}
A. 12345
1234
B. 12345
123
C. 12345
1234
123
D. 12345
1234
123
12
1
18. 下面程序实现的功能是()。
#include <stdio.h>
void main()
{
int n,count=0;
while(1)
{
scanf("%d",&n);
if(n==0)
break;
if(n%2)
continue;
count++;
}
printf("count=%d\n",count);
}
A. 从键盘上输入一序列整数,判断它们是否偶数
B. 从键盘上输入一序列整数,判断它们是否奇数
C. 反复从键盘上输入整数,统计其中的偶数个数,输入0值结束程序运行
D. 反复从键盘上输入整数,统计其中的奇数个数,输入0值结束程序运行
19. 对于如下所示的C程序,正确的结论是()。
#include <stdio.h>
void ptr1();
void main()
{
printf("%d\n",x);
ptr1();
}
int x=100;
void ptr1(int n)
{
int x=200;
printf("%d\n",x);
}
A. 输出100和200
B. 输出100
C. 输出200
D. 有语法错误,不能执行
20. 对于下面程序段,可以得到的结论是()。
int a=-123,b=0;
while(a)
{
b+=a;
a+=2;
}
A. 存在语法错误
B. 没有语法错误,能够正确执行并退出循环
C. 没有语法错误,a值为0是退出循环
D. 没有语法错误,但会陷入死循环
二、判断题(本大题共40分,共 20 小题,每小题 2 分)
1. 下面代码段可以列举出所有能够被3整除且含有数码5的2位整数。
int n;
for(n=10;n<100;n++)
if(n%3==0&&(n%10==5||n/10==5))
printf("%3d",n);
2. 数学中的方程或者函数,在程序设计语言中就是一个数据,应该定义一个变量来表示。
3. 在实现循环嵌套时,为了提供执行效率,内层循环的控制变量最好和外层控制变量同名。
4. 在双分支结构中,若条件成立时要执行的操作不能用一条C语句完成时,就必须使用复合语句来进行描述。
5. 对于while循环结构,其循环体肯定会执行一次。
6. 下面代码段可以列举出所有的2位偶数。
int a,b,n;
for(a=1;a<=9;a++)
for(b=0;b<=8;b+=2)
{
n=a*10+b;
printf("%3d",n);
}

7. 在C语言中,else关键字不能单独出现,在其前面必须由对应的if配合使用。

8. 对于do-while循环结构,其循环体肯定会执行一次。
9. 对于while循环结构来说,循环体无论有多少条C语句,都可以不使用复合语句。
10. 通过使用指针变量做函数的形式参数,不但可以实现在被调函数中修改主调函数实参的目的,同时还可以从一个函数的调用过程中获取多个数据。

11. 只要使用了指针变量做函数的形式参数,无论在函数中如何使用这些指针形参,都可以通过它们修改对应实际参数的值。
12. 省略for循环控制中的表达式1和表达式3,则其控制过程与while循环结构一致。
13. do-while循环结构与while循环结构执行过程相同,都是先判断条件,当条件成立时执行循环体。

14. 在计算机程序设计中,无论问题多么复杂,只要归结为迭代算法解决的问题,那么程序的总体结构上就必然是循环结构。
15. 假定已经知道了整型变量x存放的起始位置是:1234567,那么程序中可以使用指针变量定义语句:int *y=1234567;是的y指向x。
16. 分支结构中,当控制条件满足时只能执行一个基本操作,或者是为某个变量赋值的操作;或者是输出某个数据对象的操作。
17. 空语句不但可以用在循环结构中表示循环体部分,也常用于分支结构中,表示条件成立时执行的语句。
18. 在C语言中,与其它分支结构图一样,switch控制结构中的条件也可以是任意的表达式。
19. C语言中,复合语句只能书写在函数体内部,而且在复合语句中还可以定义变量。
20. C语句序列:int a=-5; a/=a+=a*a;执行后,变量a的值是1。


第3次作业
一、填空题(本大题共20分,共 10 小题,每小题 2 分)
1. 下面程序的功能是:求两个实数之和的平方根,请选择合适选项填空完成程序。
#include <stdio.h>
#include <>
int main()
{   
    double a,b;
   scanf("%lf,%lf",&a,&b);
    printf("%lf\n",sqrt(a+b));
    return 0;
}
A string.h
B stdlib.h
C math.h
D mathematics.h

2. 下面程序的功能是:从键盘上输入3个结构体变量到数组a中,然后将数组a的内容写入文件mydata.txt中。请选择合适选项填空完成程序。
#include <stdio.h>
struct test
{
double x;
int y;
};
int main()
{
FILE *f;
struct test a={0};
int i;
for(i=0;i<3;i++)
scanf("    ①    ",&a.x,&a.y);
f=fopen("mydata.txt","wb");
if(f==NULL)
{
printf("Can't create file.\n");
return -1;
}
fwrite(    ②    );
fclose(f);
return 0;
}
Aa,sizeof(double+int),3,f
Ba,sizeof(struct test),3,f
C%lf,%d
D%d,%lf
3. 下面程序的功能是:通过带参数的宏定义将数组a的所有元素颠倒位置存放。请选择合适选项填空完成程序。
#include <stdio.h>
#define swap(x,y)      ①   
int main()
{   
    int a,i;
    for(i=0;i<10;i++)
      a=i+1;
    for(i=0;i<10/2;i++)
       swap(a,a);
    for(i=0;i<10;i++)
       printf("%3d",a);
    printf("\n");
    return 0;
}
Aint t;t=x,x=y,y=t;
Bt=x,x=y,y=t
C{int t;t=x,x=y,y=t;}
D{t=x,x=y,y=t;}

4. 下面程序的功能是:求实型变量b的小数部分,请选择合适选项填空完成程序。
#include <stdio.h>
int main()
{   
    double b;
    scanf("%lf",&b);
    printf("%lf\n",);
    return 0;
}
A b%(int)b
B (int)b/b
C (int)b-b
D b-(int)b

5. 若希望下面程序执行后输出的结果是0,请选择合适选项填空完成程序。
#include <stdio.h>
int main()
{   
    int a,b;
    a=b=10;
    printf("%d\n",①       );
    return 0;
}
Aa&b
Ba^b
Ca|b
Da<<b

6. 下面程序的功能是:求从键盘输入的3个整数之和。请选择合适选项填空完成程序。
#include <stdio.h>
int add(   ①    );
int main()
{
int a,b,c,sum;
printf("?a,b,c: ");
scanf("%d,%d,%d",&a,&b,&c);
sum=add(   ②       );
printf("sum=%d\n",sum);
return 0;
}
int add(int a,int b)
{
return a+b;
}
A add(a,b),c
B a,b,c
C int a;int b
D int,int
7. 下面程序运行时,若输入数据为:123456789,则输出结果为:a=123,b=89,请选择合适选项填空完成程序。
#include <stdio.h>
int main()
{   
    int a,b;
    scanf("",&a,&b);
    printf("a=%d,b=%d\n",a,b);
    return 0;
}
A %3d%2d
B %3d%*d%2d
C %3d%*4d%2d
D %3d%4d%2d

8. 下面程序的功能是:将从键盘输入的整数的每一位用中文显示。请选择合适选项填空完成程序。
#include <stdio.h>
enumuppos{zero,one,two,three,four,five,six,seven,eight,nine};
int main()
{
    int n,nt,n1;
    char *up[]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
    enum uppos pos=zero;
    printf("?n(末尾不为0): ");
    scanf("%d",&n);
    n1=n;
    nt=0;
    while(n1)
    {
      nt=nt*10+n1%10;
      n1/=10;
    }
    printf("%d对应的中文是:",n);
    while(nt)
    {
       printf("%s",up[    ①       ]);
      nt/=10;
    }
    printf("\n");
    return 0;
}
Apos+nt%10
Bnt%10
Cpos+nt)
Dpos+nt/10
9. 下面程序的功能是:将从键盘上输入的一个字符串数据写入到指定的文件中,然后将其读出进行校验,正确输出OK,错误输出ERROR。请选择合适选项填空完成程序。
#include <stdio.h>
#include <string.h>
int main()
{
    FILE*fpt;      
    char str,str1="",fn;
    printf("Input the filename:");
    gets(fn);      
    if((fpt=①    )==NULL)
    {
       printf("Can't open file %s\n",fn);
      return -1;
    }
    gets(str);
   fwrite(str,sizeof(char),strlen(str),fpt);
    fseek(②   );
   fread(str1,sizeof(char),strlen(str),fpt);
    if(strcmp(str,str1)==0)
       printf("OK\n");
    else
       printf("ERROR\n");
    puts(str1);
    fclose(fpt);
    return 0;
}
Afopen(fn,"w+")
Bfpt,-1*strlen(str),SEEK_CUR
Cfpt,-1*strlen(str),SEEK_END
Dfopen(fn,"r+"))

10. 下面程序的功能是:取出变量a从右端开始的4~7位,存放到变量d中并输出。请选择合适选项填空完成程序。
#include <stdio.h>
int main()
{   
    unsigned short a,b,c,d;
    a=0x29;
    b=a>>4;
    c=    ①       ;
    d=b&c;
    printf("%x\n%x\n",a,d);
    return 0;
}
A(~0<<4)
B~(0<<4)
C~(~0>>4)
D~(~0<<4)


二、程序阅读题(本大题共40分,共 4 小题,每小题 10 分)
1. #include <stdio.h>
#define F(x) x*x
int main()
{   
    double n;
    n=F(3.5+5)/F(3);
    printf("n=%.2lf\n",n);
    return 0;
}

2. #include <stdio.h>
int main( )
{   
    int func(int ,int );
    int x=2,y=5,z=8,r;
    r=func(func(x,y),z);
    printf("%d\n",r);
    return 0;
}
int func(int a,int b)
{   
    int z;
    z=a+b;
    returnz;
}

3. (写出下面程序执行的结果)
#include <stdio.h>
int main()
{
int i,j,k;char ch='1';
   for(i=0;i<=3;i++)
   { for(j=0;j<=3-i;j++)
   printf(" ");
for(k=0;k<=2*i;k++)
printf("%c",ch);
printf("\n");
ch=ch+1;
}
for(i=0;i<=2;i++)
{ for(j=0;j<=i+(3-2);j++)
printf(" ");
for(k=0;k<=4-2*i;k++)
printf("%c",ch);
printf("\n");
    ch=ch-1;
}
return 0;
}
4. (写出下面程序执行的结果)
#include <stdio.h>
int main()
{
int i,j,m=3;
for(i=0;i<m;i+=2)
    for(j=m-1;j>=0;j--)
       printf("%1d%c", i+j,j ? 'H' :'$' );
printf("\n");
return 0;
}

三、程序设计题(本大题共40分,共 4 小题,每小题 10 分)
1. 编程序实现功能:将一个10行5列数组a每一行中最大值取出存放到一个一维数组b中,输出数组a和数组b的值,要求所有数组操作通过两种以上的指针方式表示。
2. 编程序实现功能:通过条件编译方式确定程序运行时实现字符串拷贝还是字符串连接。
3. 函数r_getbits的原型为:intr_getbits(unsigned x,unsignedpos,unsigned n);,其功能是返回变量x从pos位置开始从右向左计数的n位值。请编制函数r_getbits并用相应的主函数进行测试。
4. 编程序实现功能:利用一维数组,判定从键盘输入的任意正整数是否“回文数”,所谓“回文数”是指正读反读都相同的数,如:123454321。

答案:附件就是答案,需要的可以下载
页: [1]
查看完整版本: 重庆大学网院C语言程序设计 第123次 (答案 )