智慧树知到C语言程序设计基础(山东联盟)-智慧树-知到-题库零氪慕课答案

日期:2021-12-03 02:53:16

绪论

1、计算机能够直接识别的语言是()。
    A、汇编语言
    B、机器语言
    C、高级语言

第一章测试

1、下列表达式,值为0的是()。
    A、3%5
    B、3/5.0
    C、3/5
    D、3<5

2、下列变量定义中合法的是()。
    A、double Stu-score=98;
    B、int f(x)=1;
    C、short int 2_num=79;
    D、double Ave=0.0;

3、若变量a是int类型,并执行了语句:a='A'+1.6;,则正确的叙述是()。
    A、不允许字符型和浮点型相加
    B、a的值还是整型
    C、a的值是浮点型
    D、a的值是字符型

4、若a是基本整型变量,c是单精度实型变量,输入语句()是错误的。
    A、scanf("%d,%f”, &a, &c);
    B、scanf("d=%d, c=%f”, &a, &c);
    C、scanf("%d%f”, &a, &c);
    D、scanf("%d%f”, a, c);

5、下列说法正确的是()
    A、一条变量定义语句不可以同时定义多个变量
    B、在C语言中,所有变量都必须在定义的同时初始化
    C、const常量只能在定义时赋值
    D、C程序中使用变量时,可以先使用,再定义

第二章测试

1、若x和y代表整型数,以下表达式中不能正确表示数学关系|x-y|<10的是( ):
    A、x-y>-10 && x-y<10
    B、(x-y)*(x-y)<100
    C、(x-y)<-10||!(y-x)>10
    D、fabs(x-y)<10

2、以下程序运行后的输出结果是() #include int main() { int a=5,b=4,c=3,d; d=(a>b>c); printf("%d",d); return 0; }
    A、0
    B、5
    C、3
    D、1



3、执行以下程序后的输出结果为( ) #include int main() { int a=1,b=0; switch (a) { case 1: switch (b) { case 0: printf("**0**");break; case 1: printf("**1**");break; }break; case 2: printf("**2**");break; } return 0; }
    A、**0**
    B、有语法错误
    C、**0****2**
    D、**0****1****2**



4、下面程序代码的功能是判断输入的整数能否被5或7整除,如果能够整除,则输出该整数。请将划线处代码填写完整。 #include int main() { int m; printf("Input m: "); scanf("%d", &m); if ( _______________ ) //能够被5或7整除 { printf("%d", m); } return 0; }
    A、m/5==0 && m/7==0
    B、m%5==1 && m%7==1
    C、m/5==0 || m/7==0
    D、m%5==0 || m%7==0



5、计算1-1/2+1/3-1/4+.....+1/99-1/100+...... 直到最后一项的绝对值小于1e-4为止。 代码如下,按要求在划线处填写适当的表达式或语句,使程序完整并符合题目要求。 #include #include int main() { int n = 1; float term = 1, sum = 0; _____(1)_________; while (fabs(term) >= 1e-4) //判末项大小 { term = sign / n; //求出累加项 sum = sum + term; //累加 ______(2)__________; //改变项的符号 n++; //分母加1 } printf("sum = %f", sum); return 0; }
    A、(1): float sign=1 (2): sign = -sign
    B、(1): float sign= -1 (2): sign = -sign
    C、(1): float sign= -1 (2): term = -term
    D、(1): float sign=1 (2): term = -term



6、以下程序运行后的输出结果是( )。 #include int main() { int a,b,c; a=10; b=20; c=(a%b<1)||(a/b>1); printf("%d,%d,%d",a%b,a/b,c); return 0; }
    A、10,0,0
    B、10,1,0
    C、10,1,1
    D、10,0,1



7、 2453054422050368170.jpg 从键盘输入三角形的三边长为a,b,c,按下面公式计算并输出三角形的面积。 程序代码如下,但程序运行后输出结果不正确,请找出有问题的语句。 #include #include int main() { float a, b, c; float s, area; printf("Input a,b,c:"); scanf("%f,%f,%f",&a,&b,&c); // 第1处 if (a+b>c && b+c>a && a+c>b) // 第2处 { s = 1/2 * (a + b + c); // 第3处 area = sqrt(s * (s - a) * (s - b) * (s - c)); // 第4处 printf("area=%.2f", area); } else { printf("It is not a triangle"); } return 0; }
    A、第1处
    B、第2处
    C、第3处
    D、第4处



8、执行下列代码的结果是() #include int main() { int a=1234; printf("%2d",a); return 0; }
    A、程序出错,无结果
    B、34
    C、1234
    D、12



9、以下程序的输出结果是( )。 #include int main() { int a, b; for(a=1, b=1; a<=100; a++) { if(b>=10) break; if (b%3==1) { b+=3; continue; } } printf("%d",a); return 0; }
    A、1
    B、2
    C、3
    D、4



10、#include int main() { int s=0,a=1,n; scanf("%d",&n); do { s+=1; a=a-2; } while(a!=n); printf("%d",s); return 0; } 以上代码,如果从键盘给n输入的值是-5,则程序的输出结果是( )。
    A、1
    B、2
    C、3
    D、4



第三章测试

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



2、对于C语言的函数,下列叙述中正确的是( )。
    A、函数的定义不能嵌套,但函数调用可以嵌套
    B、函数的定义可以嵌套,但函数调用不能嵌套
    C、函数的定义和调用都不能嵌套
    D、函数的定义和调用都可以嵌套



3、下列函数中,能够从键盘上获得一个字符数据的函数是( )。
    A、puts( )
    B、putchar( )
    C、getchar( )
    D、gets( )



4、以下叙述中不正确的是( )。
    A、在不同的函数中可以使用相同名字的变量
    B、函数中的形式参数是局部变量
    C、在一个函数内定义的变量只在本函数范围内有效
    D、在一个函数内的复合语句中定义的变量在本函数范围内有效



5、C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是( )。
    A、void
    B、int
    C、float
    D、double



6、下列程序的输出结果是( )。 #include int MyFuntion(int n); int main() { int entry = 12345; printf("%5d", MyFuntion(entry)); return 0; } int MyFuntion(int Par) { int result; result = 0; do { result = result * 10 + Par % 10; Par /= 10; } while (Par); return result; }
    A、54321
    B、543
    C、5432
    D、12345



7、下列程序的输出结果是( )。 #include int x1 = 30, x2 = 40; sub(int x, int y) { x1 = x; x = y; y = x1; } int main() { int x3 = 10, x4 = 20; sub(x3, x4); sub(x2, x1); printf("%d,%d,%d,%d", x3, x4, x1, x2); return 0; }
    A、10,20,40,40
    B、10,20,30,40
    C、10,20,40,30
    D、20,10,30,40



8、有以下程序 #include int fun(int x) { printf("x=%d",++x); } int main() { fun(12+5); return 0; }
    A、x=12
    B、x=13
    C、x=17
    D、x=18



9、以下程序运行后的输出结果是() int f(int n) { if(n==1) return 1; else return f(n-1)+1; } int main() { int i,j=0; for(i=1;i<3;i++) j+=f(i); printf("%d",j); return 0; }
    A、3
    B、4
    C、5
    D、有语法错



10、以下( )不是正确的函数原型?
    A、int f();
    B、int f(int i);
    C、int f(int);
    D、int f() {}



第四章测试

1、在int a[ ][3] = { {1,4}, {3,2}, {4,5,6}, };中,a[2][1]的值是( )。
    A、5
    B、0
    C、6
    D、2



2、以下数组定义中错误的是( )。
    A、int x[2][3]=;
    B、int x[2][3]={{1,2},{3,4},{5,6)};
    C、int x[][3]={{1,2,3},{4,5,6}};
    D、int x[2][3]={1,2,3,4,5,6};



3、以下能正确定义二维数组的是( )。
    A、int a[][3];
    B、int a[][3]={2*3};
    C、int a[3][]={};
    D、int a[2][3]={{1},{2},{3,4}}



4、有如下程序 #include int main() { int n[5]={0,0,0},i,k=2; for(i=0;i     A、2
    B、1
    C、0
    D、不确定的值



5、对一个含有100个元素的有序数组,用二分法查找某指定元素,最多需要比较( )次?
    A、5
    B、6
    C、7
    D、8



6、以下程序中函数Fun的功能是对b所指数组中的第m至第n个数据取累加和,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int Fun( ______ ,int m,int n) { int i,s=0; for( ______;i    A、第2行: int b 第5行: i=0 第7行: s
    B、第2行: int b[] 第5行: i=m-1 第7行: s
    C、第2行: int b[] 第5行: i=1 第7行: i
    D、第2行: int b[] 第5行: i=n-1 第7行: b[i]



7、以下程序中函数Sort的功能是对a所指数组中的数据进行由大到小的排序,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include void Sort(int a[],int n) { int i,j,t; for(i=0;_________;i++) for(________;j     A、第5行: i     B、第5行: i<=n j第6行: =i 第10行: a[i]=a[j] 第18行: Sort(10,aa)
    C、第5行: i     D、第5行: i



8、以下程序中函数Reverse的功能是对数组a中的前一半元素逆序、后一半元素逆序,再将逆序后的前、后两部分数据位置交换。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 例如:主程序中数组b中的元素为{16,22,13,41,50,62,27,18,9,10},调用函数Reverse后,数组b中元素变为 {10,9,18,27,62,50,41,13,22,16}。 #include void Reverse(int a[],int n) { int i,t; for(i=0;________;i++) { t=a[i]; __________; a[n-i]=t; } } int main() { int b[10]={16,22,13,41,50,62,27,18,9,10}; int i,s=0; __________; for(i=0;i<10;i++) { printf("%4d",b[i]); } return 0; }
    A、第5行: i<=n/2 第8行: a[i]=a[n-i] 第17行: Reverse(b,9)
    B、第5行: i<=n/2 第8行: a[n]=a[i] 第17行: Reverse(9,b)
    C、第5行: i<=n/2 第8行: a[i]=a[n] 第17行: Reverse(b,9)
    D、第5行: i<=n 第8行: a[n-i]=a[i] 第17行: Reverse(b,9)



9、假定double类型变量占用8个字节,且数组定义如下,则数组length在内存中所占字节数是( )。 double length [10];
    A、0
    B、10
    C、80
    D、160



10、以下程序的输出结果是( )。 #include void swap1(int c[]) { int t; t=c[0]; c[0]=c[1]; c[1]=t; } void swap2(int c0,int c1) { int t; t=c0; c0=c1; c1=t; } int main( ) { int a[2]={3,5},b[2]={3,5}; swap1(a); swap2(b[0],b[1]); printf("%d %d %d %d",a[0],a[1],b[0],b[1]); return 0; }
    A、3 5 3 5
    B、5 3 3 5
    C、5 3 5 3
    D、3 5 5 3



第五章测试

1、假设有下面定义语句: float a[10]; float *p=a; 则p++相当于是加上()个字节
    A、sizeof(float*)
    B、sizeof(a)
    C、sizeof(float)
    D、1



2、以下哪个定义中的p不是指针,请选择恰当的选项( ):
    A、char **p;
    B、char (*p)[10];
    C、char *p[6];
    D、给出的三项中,p都是指针



3、以下程序的执行结果是( )。 int main() { int a, b, k = 4, m = 6, * p1 = &k, * p2= &m; a = p1 == &m; b = (-*p1)/(*p2) + 7; printf("%d, %d", a, b); return 0; }
    A、-1, 7
    B、1, 5
    C、0, 7
    D、0, 5



4、下面程序的运行结果是()。 #include int main(void) { int x[5] = { 2, 4, 6, 8, 10 }, *p, **pp; p = x; pp = &p; printf(“%d ”, *(p++)); printf(”%d”, **pp); return 0; }
    A、4 4
    B、2 4
    C、2 2
    D、4 6



5、已有如下代码: char a[5],*p=a; 则下面选项中正确的赋值语句是()
    A、p=“abcd”
    B、a=“abcd”
    C、*p=“abcd”
    D、*a=“abcd”



6、以下程序的运行结果是() #include sub (int x,int y,int *z) { *z=y-x; } int main ( ) { int a,b; sub(10,5,&a); sub(7,a,&b); printf("%d,%d",a,b); return 0; }
    A、5, 2
    B、-5,-2
    C、-5, -12
    D、5, -2



7、如果有定义:int m, n = 5, *p = &m; 与m = n 等价的语句是 () 。
    A、m = *p;
    B、*p = *&n;
    C、m = &n;
    D、m = **p;



8、若有定义:int *p[3]; 则以下叙述中正确的是( )。
    A、定义了一个基类型为int的指针变量p,该变量具有三个指针
    B、定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针
    C、定义了一个名为*p的整型数组,该数组含有三个int类型元素
    D、定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素



9、若已定义int num[10];,则下面表达式中不表示num[1]的地址的是()。
    A、num+1
    B、num++
    C、&num[0]+1
    D、&num[1]



10、对于如下说明,语法和语义都正确的赋值是_____。int c, *s, a[]={1, 3, 5};
    A、c=*s;
    B、s[0]=a[0];
    C、s=&a[1];
    D、c=a;



第六章测试

1、有以下说明和定义语句,下面各输入语句中错误的是() #include int main() { struct student { int age; char sex; char name[8]; }; struct student std; struct student *p=&std; ....... return 0; }
    A、scanf("%s",&std.name);
    B、scanf("%c",&(p->sex));
    C、scanf("%c",&std[0].sex);
    D、scanf("%d",&(*p).age);



2、定义以下结构体数组 struct c { int x; int y; }s[2]={1,3,2,7}; 语句 printf("%d",s[0].x*s[1].x);的输出结果是()
    A、14
    B、6
    C、2
    D、21



3、以下程序执行后的输出结果是 #include struct STU { char name[10]; int num; }; void Fun1(struct STU c) { struct STU b={"LiGuo",2042}; c=b; }; void Fun2(struct STU *c) { struct STU b={"SunDan",2044}; *c=b; }; int main() { struct STU a={"YangHan",2041},b={"WangYi",2043}; Fun1(a); Fun2(&b); printf("%d %d",a.num,b.num); return 0; }
    A、2041 2043
    B、2041 2044
    C、2042 2043
    D、2042 2044



4、若能使程序运行后的输出结果如下: 201501 则空白处填写的表达式或语句应该是 #include struct student { int age; char num[8]; }; int main() { struct student stu[3]={{20,"201501"},{21,"201502"},{19,"201503"}}; struct student *p=stu; ____________________ return 0; }
    A、printf("%s",(*p).num);
    B、printf("%s",stu[1]->num);
    C、printf("%s",(++p)->num);
    D、printf("%d",p.age);



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



第七章测试

1、如果二进制文件a.dat已经存在,现在要求写入全新数据,应以()方式打开。
    A、"w"
    B、"wb"
    C、"w+"
    D、"wb+"



2、若fopen()函数打开文件失败,其返回值是( )。
    A、1
    B、-1
    C、NULL
    D、ERROR



3、若读文件还未读到文件末尾, feof()函数的返回值是( )。
    A、-1
    B、0
    C、1
    D、非0



4、fputc(ch,fp) 把一个字符ch写到fp所指示的磁盘文件中,若写文件失败则函数的返回值为( )。
    A、0
    B、1
    C、EOF
    D、非0



5、阅读以下程序,对程序功能的描述中正确的是() #icnlude int main() { FILE *in, *out; char ch, infile[10], outfile[10]; printf("Enter the infile name:"); scanf("%s", infile); printf("Enter the outfile name:"); scanf("%s", outfile); if ((in = fopen(infile, "r")) == NULL) { printf("cannot open infile."); exit(0); } if ((out = fopen(outfile, "w")) == NULL) { printf("cannot open outfile."); exit(0); } while (!feof(in)) { fputc(fgetc(in), out); } fclose(in); fclose(out); return 0; }
    A、程序完成将一个磁盘文件中的信息复制到另一个磁盘文件中的功能。
    B、程序完成将两个磁盘文件合并并在屏幕上输出的功能。
    C、程序完成将两个磁盘文件合二为一的功能。
    D、程序完成将磁盘文件的信息在屏幕上显示的功能。



第八章测试

1、若x=2,y=3,则x&y的结果是
    A、0
    B、2
    C、3
    D、5



2、设x=061,y=016,则z=x|y的值是
    A、00001111
    B、11111111
    C、00111111
    D、11000000



3、下述程序的输出结果是( )。 #include void main() { char a=3,b=1; char c=a^b<<2; printf("%d",c); }
    A、1
    B、7
    C、3
    D、2



4、以下程序中c的二进制值是( )。 char a=2,b=4,c; c=a^b>>2
    A、00000011
    B、00010100
    C、00011100
    D、00011000



5、若x=3,y=5,则x^y的结果是
    A、2
    B、4
    C、6
    D、8



第九章测试

1、在一个以 h 为头的单向链表中,p 指针指向链尾的条件是()。
    A、p->next=h
    B、p->next=NULL
    C、p->next->next=h
    D、p->.data=-1



2、在单链表指针为p的结点之后插入指针为s的结点,正确的操作是()。
    A、p->next=s;s->next=p->next;
    B、s->next=p->next;p->next=s;
    C、p->next=s;p->next=s->next;
    D、p->next=s->next;p->next=s;



3、在一个单链表head中,若要在指针p所指结点后插入一个q指针所指结点,则执行()。
    A、p->next=q->next; q->next=p;
    B、q->next=p->next; p=q;
    C、p->next=q->next; p->next=q;
    D、q->next=p->next; p->next=q;



4、在一个单链表head中,若要删除指针p所指结点的后继结点,则执行()。
    A、p=p->next;free(p);
    B、p->next=p->next->next; free(p);
    C、q= p->next q->next=p->next; free(q);
    D、q=p->next; p->next=q->next; free(q);



5、若已建立下面的链表结构,指针p、q分别指向图中所示结点,则不能将q所指结点插入到链表末尾的语句是( )。 1.jpg
    A、q->next=NULL; p=p->next; p->next=q;
    B、p=p->next; q->next=p->next; p->next=q;
    C、p=p->next; q->next=p; p->next=q;
    D、p=(*p).next; (*q).next=(*p).next; (*p).next=q;