0.0875

五煦查题

快速找到你需要的那道考题与答案

超星C语言案例训练课后答案(学习通2023完整答案)

68 min read

超星C语言案例训练课后答案(学习通2023完整答案)

第一周:函数(一)

1.1 函数定义随堂测验

1、超星C语言是语言案由( )构成。
A、例训练课主程序和子程序
B、后答主函数和子函数
C、案学一个主函数和若干功能函数
D、习通主函数和子程序

2、完整以下对C语言函数的答案有关描述中,正确的超星是( )。
A、语言案调用函数时,例训练课只能把实参的后答值传送给形参,形参的案学值不能传送给实参
B、C函数既可以嵌套定义又可以递归调用
C、习通函数必须有返回值,完整否则不能使用函数
D、C程序中有调用关系的所有函数必须放在同一个源程序文件中

3、以下说法中正确的是( )。
A、C语言程序总是从第一个的函数开始执行
B、在C语言程序中,要调用的函数必须在main()函数中定义
C、C语言程序总是从main()函数开始执行
D、C语言程序中的main()函数必须放在程序的开始部分

1.1 函数定义随堂测验

1、C语言程序中,如果变量做函数参数,则当函数调用时( )。
A、实参和形参各占一个独立的存储单元
B、实参和形参共用一个存储单元
C、可以由用户指定是否共用存储单元
D、计算机系统自动确定是否共用存储单元

2、一个函数返回值的类型是由( )决定的。
A、return语句中表达式的类型
B、在调用函数时临时指定
C、定义函数时指定的函数类型
D、调用该函数的主调函数的类型

3、在C语言的函数中,下列正确的说法是( )。
A、必须有形参
B、形参必须是变量名
C、可以有也可以没有形参
D、数组名不能作形参

1.4 函数间参数传递随堂测验

1、若函数的形参为一维数组,则下列说法中正确的是( )。
A、调用函数时的对应实参必为数组名
B、形参数组可以不指定大小
C、形参数组的元素个数必须等于实参数组的元素个数
D、形参数组的元素个数必须多于实参数组的元素个数

2、若调用一个函数,且此函数中没有return语句,则正确的说法是( )。
A、该函数没有返回值
B、该函数返回若干个系统默认值
C、该函数能返回一个用户所希望的函数值
D、该函数返回一个不确定的值

3、在函数的说明和定义时若没有指出函数的类型,则( )。
A、系统自动地认为函数的类型为整型
B、系统自动地认为函数的类型为字符型
C、系统自动地认为函数的类型为实型
D、编译时会出错

4、下面叙述中正确的是( )。
A、对于用户自己定义的函数,在使用前必须加以说明
B、说明函数时只需要说明返回类型
C、函数必须返回一个值
D、空函数不完成任何操作,所以在程序设计中没有用处

5、C语言允许函数返回值类型缺省定义,此时该函数隐含的返回值类型是( )。
A、float型
B、int 型
C、long 型
D、double型

第一周编程作业

1、求最大公约数和最小公倍数

2、排序并插入

第二周:函数(二)

2.1 函数递归调用随堂测验

1、在下列结论中,有一个是错误的,它是 ( )
A、C语言允许函数的递归调用
B、有些递归程序是不能用非递归算法实现的
C、C语言不允许在函数定义中再定义函数
D、递归函数就是函数中可以定义其他函数

2、如果有个递归函数是求 2*4*6*……*(2n) 的积,则递归的公式和条件可以表达为( )
A、f(n)=2*n*f(n-1) 边界条件 当 n==1 f(n)=2
B、f(n)=2*f(2*n-1) 边界条件 当 n==0 f(n)=1
C、f(n)=2*nf(2*n-1) 边界条件 当 n==1 f(n)=1
D、f(n)=2*f(2*n-1) 边界条件 当 n==0 f(n)=2

2.1 函数递归调用随堂测验

1、一段楼梯有N阶,可以一次上1阶,也可以一次上2阶,用递归函数调用实现,计算多少种走法。则递归公式和边界条件是( )
A、f[n]=f[n-1]+f[n-2] 边界条件 当n=1 f[1]=0, 当n =2 f[2]=1
B、f[n]=f[n-1]+f[n-2] 边界条件 当n=1 f[1]=1, 当n =2 f[2]=2
C、f[n]=f[n-1] 边界条件 当n=1 f[1]=1
D、f[n]= f[n-2] 边界条件 当n=2 f[2]=1

2、一只小猴子,摘了一堆水果,第一天吃了水果的一半,又多吃了一个;第二天吃了剩下水果的一半,又多吃了一个;依次类推….到第十天,发现只剩下了10个水果,请问这只猴子到底摘了多少个水果? 写成递归函数。
A、
B、
C、
D、

第二周编程作业

1、最大公约数

2、奇数求和

第三周:函数(三)

3.1 变量存储属性随堂测验

1、在一个C源程序文件中,若要定义一个只允许在该源文件中所有函数使用的变量,则该变量需要使用的存储类别是( )
A、extern
B、register
C、auto
D、static

2、如果一个变量在整个程序运行期间都存在,但是仅在说明它的函数内是可见的,这个变量的存储类型应该被说明为( )
A、静态变量
B、动态变量
C、外部变量
D、内部变量

3.1 变量存储属性随堂测验

1、以下程序的输出结果是: int f(int a) { auto int b=0; static int c=3; b++;c++; return a+b+c; } main( ) { int c,a=1; for(c=1;c<3;c++) printf(“%3d ”,f(a));}
A、5 5
B、5 6
C、6 6
D、6 7

2、以下程序的输出结果是: void fun(int *s) { static int j=0; do s[j]+=s[j+1]; while(++j<2); } main( ) { int k,a[10]={ 1,2,3,4,5}; for (k=1; k<3; k++) fun(a); for (k=0; k<5; k++) printf(“%d”,a[k] ); }
A、34756
B、23445
C、35745
D、12345

3.2 编译预处理随堂测验

1、以下程序的输出结果是: #define ADD(x) x+x main( ) { int m=1,n=2,k=3,sum; sum=ADD(m+n)*k; printf(“sum=%d\n”,sum); }
A、sum=9
B、sum=10
C、sum=12
D、sum=18

2、以下程序的输出结果是: #define N 1 #define M N+2 #define NUM 2*M+1 main( ) { int i; for (i=1; i<=NUM; i++) printf(“%3d ”, i ); }
A、1 2 3 4 5
B、1 2 3 4 5 6 7
C、1 2 3 4 5 6
D、程序出错

3、已知宏定义 #define N 3 #define Y(n) ((N+1)*n) 执行语句z=2*(N+Y(5+1));后,z的值是( )。
A、42
B、48
C、52
D、出错

第三周编程作业

1、巧算自然数

2、卖鸭子

3、输出各位数字之和

第四周:指针(一)

4.1 指针的定义、初始化和引用随堂测验

1、若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是 。
A、p1=&m; p2=&p1;
B、p1=&m; *p2=*p1
C、p1=&m; p2=p1;
D、p1=&m; *p1=*p2;

2、以下叙述中正确的是 。
A、指针定义后,可以指向同类型的任何变量。
B、指针定义后,可以指向任何类型变量。
C、指针定义后,可以用整型数据为指针初始化。
D、指针定义后,只能指向一个变量。

3、变量的指针,其含义是指该变量的 。
A、值
B、地址
C、名
D、一个标志

4.2 指针与数组随堂测验

1、如果有定义int a[30], *p=a; 则数组a中下标为i的元素的地址为 。
A、p+i*2
B、p+(i-1)*2
C、p+(i-1)
D、p+i

2、若有如下定义,则________是对数组元素的正确的引用。 int a[10] , *p=a;
A、*&a[10]
B、*&a[0]
C、*(p-11)
D、*(a+11)

3、若有定义:int x[10]={ 0,1,2,3,4,5,6,7,8,9},*p1;则数值不为3的表达式是 。
A、x[3]
B、p1=x+3,*p1++
C、p1=x+2,*(p1++)
D、p1=x+2,*++p1

4.2 指针与数组随堂测验

1、下面函数的功能是 。 strlen1(char *s ) { char *p=s; while(*p!=‘\0’) p++; return p-s; }
A、字符串反向
B、字符串比较
C、字符串连接
D、字符串求长度

2、已知int a[ ]={ 1,3,5,7},y,*p=a;为了使变量y的值为3,下列语句正确的是 。
A、y=++*p++;
B、y=++(*p++);
C、y=(++*p)++;
D、y=(*++p)++;

3、下面函数的功能是 。 void ( char *s1, char *s2) { while(*s2++=*s1++); }
A、字符串反向
B、字符串比较
C、字符串连接
D、字符串复制

第四周编程作业

1、对称字符串

2、排序

3、查找数

第五周:指针(二)

5.1 指针与字符串随堂测验

1、运行以下程序时输入HELLO WORLD<CR>( <CR>代表Enter 键),则输出的结果是( ) #include "stdio.h" char fun ( char *c ) { if ( *c < = 'Z' & & *c > = 'A') *c - ='A'-'a'; return *c; } int main( ) { char s[81] , *p=s; gets(s); while(*p) { *p=fun(p); putchar(*p); p++; } putchar ( “ \n “ ); return 0; }
A、heLLO wORld
B、hello world
C、HELLO WORLD
D、Hello World

2、以下程序输出的结果是( ) #include " stdio.h" #include "string.h" void fun ( char *w, int m ) { char s, *p1 , *p2 ; p1=w; p2=w+m-1; while(p1<p2) { s=*p1++; *p1=*p2-- ; *p2=s; } } main( ) { char a[ ]="1234567"; fun ( a , strlen(a) ); puts(a); }
A、7654321
B、1711717
C、1711771
D、7177171

3、库函数strcpy用以复制字符串。若有以下定义和语句: char str1[ ]="GREETING",str2[8],*str3,*str4="GREETING"; 则对库函数strcpy的不正确调用是 ( )
A、strcpy(str2,"HELLO2");
B、strcpy(str3,"HELLO3");
C、strcpy(str4,"HELLO4");
D、都不正确

5.2 多维数组指针随堂测验

1、下面程序的运行结果是( ) int main( ) { int aa[3][3]={ { 2},{ 4},{ 6}},i,*p=&aa[0][0]; for(i=0;i<2;i++) { if(i==0) aa[i][i+1]=*p+1; else ++p; printf("%d",*p); } printf("\n"); return 0; }
A、23
B、26
C、33
D、36

2、若有定义语句int (*p)[M]; 其中的标识符是( )
A、M个指向整型变量的指针
B、指向M个整型变量的函数指针
C、一个指向具有M个整型元素的一维数组指针
D、具有M个指针元素的一维指针数组,每个元素都只能指向整型量

3、下面程序的运行结果是( ) int main( ) { int a[3][4]={ 1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4]=a,i,j,k=0; for(i=0;i<3;i++) for(j=0;j<2;j++) k+=*(*(p+i)+j); printf("%d\n",k); return 0; }
A、60
B、68
C、99
D、108

第五周编程作业

1、输出指定学生成绩

2、成绩排序

第六周:指针(三)

6.1指针与函数随堂测验

1、以下程序的输出结果是(): #include<stdio.h> int funa(int a, int b) { return a+b;} int funb(int a, int b) { return a-b;} int sub (int(*t)(int ,int ), int x, int y) { return (*t)(x,y);} int main( ) { int x,(*p)(int,int); p=&funa; x=sub(p,9,3); x+=sub(&funb,8,3); printf("%d\n",x); }
A、12
B、15
C、17
D、19

2、若有以下说明和定义,则对fun函数的正确调用语句是( ) int main( ) { int (*a)(int*),*b( ),w[10],c; : : return 0; } int fun(int *c) { ...}
A、a=fun; a(w);
B、a=fun; (*a)(&c);
C、b=fun; *b(w);
D、fun(b);

3、以下程序的输出结果是( ):void fun (int n,int *s) { int f1,f2; if (n==1||n==2) *s=1; else { fun(n-1,&f1); fun(n-2,&f2); *s=f1+f2; } } int main( ) { int x; fun(6,&x); pirntf("%d\n",x); return 0; }
A、4
B、6
C、8
D、12

6.2指针与指针随堂测验

1、下面程序运行结果( ): int main( ) { char ch[2][5 ] = { "6937","8254"} , *p[2]; int i , j , s = 0 ; for ( i=0 ; i <2 ; i++ ) p[i]=ch[i]; for ( i=0 ; i<2 ; i++ ) for( j=0 ; p[i][j]>'\0' &&p[i][j]<='9';j+=2) s=10*s+p[i][j]-'0'; printf("%d\n",s); return 0; }
A、6385
B、69825
C、63825
D、693825

2、以下程序的输出结果是( ): int main( ) { char *p[ ]={ "PROGRAM","BASIC","C","JAVA"}; int i; for (i=3;i>=0;i--,i--) printf("%c",*p[i]); printf("\n"); return 0; }
A、JVCBSPO
B、JAVA
C、JB
D、JAVABASIC

3、以下程序运行结果是( ): int main( ) { char *alpha[6]= { "ABCD","EFGH","IJKL","MNOP","QRST","UVWX"}; char **p; int i; p=alpha; for( i=0; i<6; i=i+2 ) printf("%s",*(p+i)); printf("\n"); return 0; }
A、ACEGIKMNQSUW
B、AIQ
C、ABCDIJKLQRST
D、AEIMQU

第六周编程作业

1、统计字符串出现次数

2、成绩统计

第七周:链表(一)

7.1 结构的概念随堂测验

1、以下定义错误的是( )。
A、struct c { int x; int y; }s;
B、struct { int x; int y; }s;
C、struct c s { int x; int y; };
D、struct c { int x; int y; }; Struct c s;

2、当定义一个结构体变量时,系统为它分配的内存空间是( )。
A、结构中一个成员所需的内存容量
B、结构中第一个成员所需的内存容量
C、结构中占内存最大的成员所需的内存容量
D、结构中各成员所需内存容量之和

7.2 结构数组随堂测验

7.3 结构指针随堂测验

1、有以下程序段 struct st { int x; int *y;}*pt; int a[] = { 1,2}; int b[] = { 3,4}; struct st c[2]={ 10,a,20,b}; pt=c; 以下选项中表达式为11的是( )。
A、*pt->y
B、pt->x
C、++pt->x
D、(pt++)->x

2、运行下列程序段,输出结果是()。 struct country { int num; char name[10]; }x[5] = { 1,”China”,2,”USA”,3,”France”,4,”England”,5,”Spanish”}; struct country *p; p= x+2; printf(“%d,%c”,p->num,(*p).name[2]);
A、3,a
B、4,g
C、2,U
D、5,S

7.4 结构与函数随堂测验

1、以下哪种方式进行结构体数据的传递是错误的( )?
A、通过结构体变量成员的引用
B、通过结构体变量的引用
C、通过结构体类型的引用
D、通过结构体变量的指针

7.5 联合随堂测验

1、以下说法错误的是( )。
A、联合与结构的引用方法是一样的
B、联合与结构的定义除了关键字以外都是一样的
C、联合与结构的初始化方法是一样的
D、联合与结构的内存占用与成员内存占用间的关系是不一样的

第七周编程作业

1、字母加密对照表

2、学生成绩

学习通C语言案例训练

随着计算机技术的不断发展,C语言作为一种高效、功能强大的计算机编程语言,在软件开发、系统维护和科学计算等领域得到了广泛的应用。要想学好C语言,除了理论知识的学习外,还需要大量的实践经验。在学习通C语言案例训练中,我们可以通过实例的方式来训练自己的编程能力。

案例训练的意义

案例训练是一种非常有效的学习方法。通过实际的案例演练,我们可以更加深入地了解C语言的语法、数据类型、流程控制等方面的知识,并且可以熟悉编程的思维方式,提高自己的编程能力。在学习通C语言案例训练中,我们可以选择不同难度的案例进行练习,从而逐渐提高自己的编程水平。

案例训练的流程

学习通C语言案例训练的流程如下:

  1. 选择合适的案例。在学习通课程中,我们可以选择不同难度的案例进行练习,例如“水仙花数”的简单案例、数组的应用案例、文件操作的案例等。
  2. 认真阅读题目要求。在开始编写程序之前,我们需要认真阅读题目要求,了解需要实现的功能和相关的限制条件。
  3. 设计程序流程。在了解了题目要求之后,我们需要根据自己的理解,设计出程序的流程和算法,考虑如何实现程序的功能。
  4. 编写代码。在设计好程序流程之后,我们需要开始编写代码,并且注意代码的规范和格式。
  5. 测试程序。在编写完成代码之后,我们需要进行程序测试,检查程序是否实现了要求的功能,并且能够正确地处理各种可能的输入。
  6. 调试程序。如果程序存在问题,我们需要对程序进行调试,并且重新测试,直到程序能够正常运行。

案例训练的技巧

学习通C语言案例训练需要掌握一些基本的技巧,包括:

  • 掌握C语言的基础知识。在进行案例训练之前,我们需要掌握C语言的基础知识,包括数据类型、变量、运算符、流程控制等方面的知识。
  • 注重代码规范。编写代码时,我们要注意代码的规范和格式,遵循一定的命名规则和缩进方式,并且适当添加注释。
  • 善于利用调试工具。在进行程序调试时,我们可以利用调试工具来帮助我们找到代码中存在的问题,并且进行有效的调试。
  • 多做练习。只有不断地进行实践练习,我们才能够更好地掌握C语言的编程技巧和思维方式,并且逐渐提高自己的编程能力。

案例练习的实例

以下是一个简单的案例练习实例:

题目:编写一个程序,输入一个整数,输出这个整数的阶乘。

流程设计:

#include <stdio.h>int main(){     int n, i;    long long fac = 1;    printf(\请输入一个整数:\    scanf(\d\ &n);    for(i = 1; i <= n; i++)    {         fac *= i;    }    printf(\d的阶乘为:%lld\\ n, fac);    return 0;}

在这个案例中,我们首先定义了整数n、循环变量i和阶乘fac三个变量,并且初始化fac为1。然后,通过scanf函数从标准输入流中读取一个整数n,并且使用for循环计算n的阶乘,最后使用printf函数输出计算结果。在编写程序时,我们需要注意代码的规范和格式,并且使用有意义的变量名和注释,方便其他人对代码进行理解和修改。

总结

学习通C语言案例训练是提高自己编程能力的有效途径。在进行案例训练时,我们需要认真阅读题目要求,设计好程序流程,并且注意代码的规范和格式。同时,掌握一些基本的编程技巧和思维方式,并且多做练习,才能够逐渐提高自己的编程水平。