2026年计算机二级C语言上机考试题库及答案_第1页
2026年计算机二级C语言上机考试题库及答案_第2页
2026年计算机二级C语言上机考试题库及答案_第3页
2026年计算机二级C语言上机考试题库及答案_第4页
2026年计算机二级C语言上机考试题库及答案_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2026年计算机二级C语言上机考试题库及答案

**2026年计算机二级C语言上机考试题库及答案**

**第一部分:选择题**

一、选择题(每题2分,共40分)

1.以下哪个选项不是C语言的数据类型?

A.int

B.float

C.char

D.boolean

答案:D

解析:C语言中没有boolean数据类型,正确的是bool。

2.以下哪个运算符的优先级最高?

A.+

B.*

C.==

D.=

答案:B

解析:乘法运算符*的优先级高于加法运算符+,等于运算符==和赋值运算符=。

3.以下哪个选项是正确的C语言注释?

A.//Thisisacomment

B./*Thisisacomment*/

C.BothAandB

D.NeitherAnorB

答案:C

解析:C语言中,单行注释使用//,多行注释使用/**/,因此A和B都是正确的注释方式。

4.以下哪个选项是正确的变量声明?

A.int1variable;

B.varage;

C.floatage;

D.intage;

答案:D

解析:C语言中变量名不能以数字开头,因此A选项错误;C语言中没有var关键字,因此B选项错误;C选项和D选项都是正确的变量声明,但D选项更符合C语言的规范。

5.以下哪个选项是正确的字符串定义?

A."HelloWorld"

B.'HelloWorld'

C."Hello\nWorld"

D.'Hello\nWorld'

答案:A

解析:C语言中字符串用双引号""包围,因此A选项是正确的;B选项使用单引号''包围的是字符常量;C选项和D选项中的\n表示换行符,但C选项的字符串内容更符合题目要求。

6.以下哪个选项是正确的条件语句?

A.if(age>18)printf("Adult");

B.ifage>18thenprintf("Adult");

C.if(age>18)thenprintf("Adult");

D.if(age>18){printf("Adult");}

答案:A

解析:C语言中条件语句的语法是if(条件)语句体,因此A选项是正确的;B选项缺少括号;C选项使用了then关键字,而C语言中条件语句不需要then;D选项虽然语法正确,但多余的花括号是多余的。

7.以下哪个选项是正确的循环语句?

A.for(i=0;i<10;i++)printf("%d\n",i);

B.fori=0to9printf("%d\n",i);

C.for(i=0;i<10;i--)printf("%d\n",i);

D.while(i<10)i++printf("%d\n",i);

答案:A

解析:C语言中for循环的语法是for(初始化;条件;更新)语句体,因此A选项是正确的;B选项缺少括号;C选项的更新部分是i--,会减少i的值;D选项的while循环语法错误,缺少语句体。

8.以下哪个选项是正确的数组定义?

A.intarr[5];

B.intarr(5);

C.floatarr[5]={1,2,3,4,5};

D.intarr[]={1,2,3,4,5};

答案:C

解析:C语言中数组定义的语法是类型数组名[大小],因此A选项是正确的;B选项的语法错误;C选项定义了一个包含5个元素的浮点型数组,并初始化了所有元素;D选项的大小可以省略,但C选项更明确。

9.以下哪个选项是正确的函数定义?

A.voidprint(inta,intb){printf("%d\n",a+b);}

B.intprint(a,b){returna+b;}

C.print(inta,intb){returna+b;}

D.voidprint(a,b){printf("%d\n",a+b);}

答案:A

解析:C语言中函数定义的语法是返回类型函数名(参数列表){函数体},因此A选项是正确的;B选项和C选项缺少返回类型;D选项缺少参数类型。

10.以下哪个选项是正确的指针定义?

A.int*ptr;

B.*intptr;

C.intptr*;

D.intptr;

答案:A

解析:C语言中指针定义的语法是类型*指针名,因此A选项是正确的;B选项和C选项的语法错误;D选项定义的是一个整型变量,而不是指针。

11.以下哪个选项是正确的结构体定义?

A.structstudent{intid;charname[20];};

B.struct{intid;charname[20];}student;

C.structstudent{intid;charname[20];}student;

D.structstudentintid;charname[20];

答案:A

解析:C语言中结构体定义的语法是struct结构体名{成员列表},因此A选项是正确的;B选项缺少结构体名;C选项在定义结构体时直接定义了变量;D选项的语法错误。

12.以下哪个选项是正确的结构体变量定义和初始化?

A.structstudent{intid;charname[20];}student={1,"Alice"};

B.structstudent{intid;charname[20];}student={1,"Alice"};

C.structstudent{intid;charname[20];}student={1,"Alice"};

D.structstudent{intid;charname[20];}student={1,"Alice"};

答案:A

解析:C语言中结构体变量的定义和初始化的语法是struct结构体名变量名={成员值列表},因此A选项是正确的;B、C、D选项的语法错误。

13.以下哪个选项是正确的位运算符?

A.&&

B.||

C.&

D.|

答案:C

解析:C语言中的位运算符包括&(按位与)、|(按位或)、^(按位异或)、~(按位取反)、<<(左移)、>>(右移),因此C选项是正确的;A和B是逻辑运算符。

14.以下哪个选项是正确的文件操作函数?

A.fopen

B.fclose

C.fwrite

D.Alloftheabove

答案:D

解析:C语言中常用的文件操作函数包括fopen(打开文件)、fclose(关闭文件)、fwrite(写入文件)、fread(读取文件)等,因此A、B、C选项都是正确的。

15.以下哪个选项是正确的动态内存分配函数?

A.malloc

B.free

C.realloc

D.Alloftheabove

答案:D

解析:C语言中常用的动态内存分配函数包括malloc(分配内存)、free(释放内存)、realloc(重新分配内存)等,因此A、B、C选项都是正确的。

16.以下哪个选项是正确的预处理器指令?

A.#include

B.#define

C.#ifdef

D.Alloftheabove

答案:D

解析:C语言中的预处理器指令包括#include(包含头文件)、#define(定义宏)、#ifdef(条件编译)、#ifndef(条件编译)、#if(条件编译)、#else(条件编译)、#elif(条件编译)、#endif(条件编译)等,因此A、B、C选项都是正确的。

17.以下哪个选项是正确的多态实现方式?

A.Functionoverloading

B.Operatoroverloading

C.Polymorphism

D.BothAandB

答案:D

解析:C语言中多态的实现方式包括函数重载(Functionoverloading)和运算符重载(Operatoroverloading),因此A和B选项都是正确的;C选项是多态的概念,不是实现方式。

18.以下哪个选项是正确的继承实现方式?

A.Inheritance

B.Composition

C.Encapsulation

D.BothAandB

答案:A

解析:C语言中继承的实现方式是继承(Inheritance),组合(Composition)和封装(Encapsulation)是实现面向对象编程的其他方式,因此A选项是正确的。

19.以下哪个选项是正确的抽象实现方式?

A.Abstraction

B.Encapsulation

C.Inheritance

D.BothAandB

答案:D

解析:C语言中抽象的实现方式是抽象(Abstraction)和封装(Encapsulation),继承(Inheritance)是实现面向对象编程的其他方式,因此A和B选项都是正确的。

20.以下哪个选项是正确的异常处理机制?

A.try-catch

B.throw

C.finally

D.Alloftheabove

答案:D

解析:C语言中异常处理机制包括try-catch(尝试-捕获)、throw(抛出异常)、finally(finally块)等,因此A、B、C选项都是正确的。

二、填空题(每题2分,共20分)

1.在C语言中,用于输出数据的函数是______。

答案:printf

2.在C语言中,用于输入数据的函数是______。

答案:scanf

3.在C语言中,用于定义常量的关键字是______。

答案:const

4.在C语言中,用于定义函数的关键字是______。

答案:void

5.在C语言中,用于定义数组的语法是______。

答案:类型数组名[大小]

6.在C语言中,用于定义指针的关键字是______。

答案:*

7.在C语言中,用于定义结构体的关键字是______。

答案:struct

8.在C语言中,用于打开文件的关键字是______。

答案:fopen

9.在C语言中,用于关闭文件的关键字是______。

答案:fclose

10.在C语言中,用于动态分配内存的关键字是______。

答案:malloc

三、判断题(每题1分,共10分)

1.C语言中的变量名可以以数字开头。(×)

2.C语言中的字符串可以用单引号""包围。(×)

3.C语言中的条件语句可以使用then关键字。(×)

4.C语言中的for循环可以省略初始化、条件或更新部分。(×)

5.C语言中的数组可以动态改变大小。(×)

6.C语言中的函数可以返回多个值。(×)

7.C语言中的指针可以指向任何类型的变量。(√)

8.C语言中的结构体可以包含其他结构体。(√)

9.C语言中的文件操作需要包含头文件stdio.h。(√)

10.C语言中的预处理器指令在编译时处理。(√)

**2026年计算机二级C语言上机考试题库及答案**

**第二部分:程序填空题**

一、程序填空题(每空2分,共20分)

1.以下程序的功能是将输入的三个整数按从小到大的顺序输出,请补充完整代码。

```c

#include<stdio.h>

voidsort(inta,intb,intc){

inttemp;

if(a>b){temp=a;a=b;b=temp;}

if(a>c){temp=a;a=c;c=temp;}

if(b>c){temp=b;b=c;c=temp;}

printf("%d%d%d\n",_____,_____,_____);

}

intmain(){

intx,y,z;

scanf("%d%d%d",&x,&y,&z);

sort(x,y,z);

return0;

}

```

答案:a,b,c

解析:程序的功能是将输入的三个整数按从小到大的顺序输出,通过比较和交换实现排序。在sort函数中,首先比较a和b,如果a大于b,则交换a和b的值;然后比较a和c,如果a大于c,则交换a和c的值;最后比较b和c,如果b大于c,则交换b和c的值。最终,a、b、c分别存储了三个整数的最小值、中间值和最大值,因此需要输出a、b、c的值。

2.以下程序的功能是计算1到10的所有整数之和,请补充完整代码。

```c

#include<stdio.h>

intsum(){

inti,s=0;

for(i=1;i<=10;i++){

s=______;

}

returns;

}

intmain(){

printf("Sum=%d\n",sum());

return0;

}

```

答案:s+i

解析:程序的功能是计算1到10的所有整数之和。在sum函数中,使用for循环遍历1到10的所有整数,每次将当前整数i加到变量s上。因此,需要在s=______处填写s+i,表示将当前整数i加到变量s上。

3.以下程序的功能是计算阶乘,请补充完整代码。

```c

#include<stdio.h>

intfactorial(intn){

if(n==0)return1;

returnn*______;

}

intmain(){

intn;

scanf("%d",&n);

printf("Factorial=%d\n",factorial(n));

return0;

}

```

答案:factorial(n-1)

解析:程序的功能是计算阶乘。在factorial函数中,如果n等于0,则返回1(0的阶乘为1);否则,返回n乘以n-1的阶乘。因此,需要在n*______处填写factorial(n-1),表示返回n乘以n-1的阶乘。

4.以下程序的功能是判断一个数是否为素数,请补充完整代码。

```c

#include<stdio.h>

intis_prime(intn){

inti;

if(n<=1)return0;

for(i=2;i<=n/2;i++){

if(n%i==0)return______;

}

return1;

}

intmain(){

intn;

scanf("%d",&n);

if(is_prime(n))printf("%disaprimenumber\n",n);

elseprintf("%disnotaprimenumber\n",n);

return0;

}

```

答案:0

解析:程序的功能是判断一个数是否为素数。在is_prime函数中,如果n小于等于1,则返回0(不是素数);否则,使用for循环从2到n/2遍历所有整数,如果n能被任何一个整数整除,则返回0(不是素数);否则,返回1(是素数)。因此,需要在returnn%i==0处填写0,表示如果n能被任何一个整数整除,则返回0。

5.以下程序的功能是计算斐波那契数列的第n项,请补充完整代码。

```c

#include<stdio.h>

intfibonacci(intn){

if(n<=1)returnn;

return______+______;

}

intmain(){

intn;

scanf("%d",&n);

printf("Fibonacci=%d\n",fibonacci(n));

return0;

}

```

答案:fibonacci(n-1),fibonacci(n-2)

解析:程序的功能是计算斐波那契数列的第n项。在fibonacci函数中,如果n小于等于1,则返回n(斐波那契数列的前两项为0和1);否则,返回前两项的和。因此,需要在______+______处填写fibonacci(n-1)和fibonacci(n-2),表示返回前两项的和。

6.以下程序的功能是计算一个字符串的长度,请补充完整代码。

```c

#include<stdio.h>

intstrlen(char*s){

intlen=0;

while(_______){

len++;

s++;

}

returnlen;

}

intmain(){

charstr[100];

scanf("%s",str);

printf("Length=%d\n",strlen(str));

return0;

}

```

答案:*s!='\0'

解析:程序的功能是计算一个字符串的长度。在strlen函数中,使用while循环遍历字符串,每次检查当前字符是否为字符串结束符'\0',如果不是,则增加长度计数器len,并移动指针s到下一个字符。因此,需要在while(_______)处填写*s!='\0',表示当前字符不是字符串结束符。

7.以下程序的功能是将一个字符串反转,请补充完整代码。

```c

#include<stdio.h>

voidreverse(char*s){

char*end=s;

while(*end!='\0')end++;

end--;//Movetothelastcharacter

while(s<end){

chartemp=*s;

*s=*end;

*end=temp;

s++;

end--;

}

}

intmain(){

charstr[100];

scanf("%s",str);

reverse(str);

printf("Reversed=%s\n",str);

return0;

}

```

解析:程序的功能是将一个字符串反转。在reverse函数中,首先找到字符串的末尾,然后使用两个指针s和end分别指向字符串的开头和末尾,交换s和end指向的字符,并向中间移动,直到s和end相遇或交错。这样就可以实现字符串的反转。

8.以下程序的功能是判断一个字符串是否为回文,请补充完整代码。

```c

#include<stdio.h>

intis_palindrome(char*s){

char*end=s;

while(*end!='\0')end++;

end--;//Movetothelastcharacter

while(s<end){

if(*s!=*end)return0;

s++;

end--;

}

return1;

}

intmain(){

charstr[100];

scanf("%s",str);

if(is_palindrome(str))printf("%sisapalindrome\n",str);

elseprintf("%sisnotapalindrome\n",str);

return0;

}

```

解析:程序的功能是判断一个字符串是否为回文。在is_palindrome函数中,首先找到字符串的末尾,然后使用两个指针s和end分别指向字符串的开头和末尾,比较s和end指向的字符,如果任何一对字符不相同,则返回0(不是回文);否则,返回1(是回文)。这样就可以判断字符串是否为回文。

9.以下程序的功能是计算一个数的平方,请补充完整代码。

```c

#include<stdio.h>

intsquare(intn){

return______;

}

intmain(){

intn;

scanf("%d",&n);

printf("Square=%d\n",square(n));

return0;

}

```

答案:n*n

解析:程序的功能是计算一个数的平方。在square函数中,直接返回n乘以n的结果。因此,需要在return______处填写n*n,表示返回n乘以n的结果。

10.以下程序的功能是计算一个数的立方,请补充完整代码。

```c

#include<stdio.h>

intcube(intn){

returnn*______;

}

intmain(){

intn;

scanf("%d",&n);

printf("Cube=%d\n",cube(n));

return0;

}

```

答案:n*n

解析:程序的功能是计算一个数的立方。在cube函数中,直接返回n乘以n乘以n的结果。因此,需要在returnn*______处填写n*n,表示返回n乘以n的结果。

二、程序改错题(每题5分,共20分)

1.以下程序的功能是计算1到10的所有整数之和,但代码中存在错误,请指出并改正。

```c

#include<stdio.h>

intsum(){

inti,s=0;

for(i=1;i<=10;i--){

s=s+i;

}

returns;

}

intmain(){

printf("Sum=%d\n",sum());

return0;

}

```

错误:for循环的条件错误,应该是i<=10而不是i>=10。

改正:将for循环的条件改为i<=10。

改正后的代码:

```c

#include<stdio.h>

intsum(){

inti,s=0;

for(i=1;i<=10;i--){

s=s+i;

}

returns;

}

intmain(){

printf("Sum=%d\n",sum());

return0;

}

```

解析:程序的功能是计算1到10的所有整数之和。在for循环中,初始条件是i=1,结束条件是i<=10,每次循环i减1。这样会导致i从1减到0,循环不会执行。因此,需要将for循环的条件改为i<=10,这样i会从1增加到10,循环会正常执行。

2.以下程序的功能是计算阶乘,但代码中存在错误,请指出并改正。

```c

#include<stdio.h>

intfactorial(intn){

if(n==0)return0;

returnn*factorial(n-1);

}

intmain(){

intn;

scanf("%d",&n);

printf("Factorial=%d\n",factorial(n));

return0;

}

```

错误:递归基错误,0的阶乘应该是1而不是0。

改正:将递归基改为if(n==0)return1。

改正后的代码:

```c

#include<stdio.h>

intfactorial(intn){

if(n==0)return1;

returnn*factorial(n-1);

}

intmain(){

intn;

scanf("%d",&n);

printf("Factorial=%d\n",factorial(n));

return0;

}

```

解析:程序的功能是计算阶乘。在递归函数中,如果n等于0,则返回0(错误);否则,返回n乘以n-1的阶乘。但0的阶乘应该是1,因此需要将递归基改为if(n==0)return1。

3.以下程序的功能是判断一个数是否为素数,但代码中存在错误,请指出并改正。

```c

#include<stdio.h>

intis_prime(intn){

inti;

if(n<=1)return1;

for(i=2;i<=n/2;i++){

if(n%i==0)return0;

}

return0;

}

intmain(){

intn;

scanf("%d",&n);

if(is_prime(n))printf("%disaprimenumber\n",n);

elseprintf("%disnotaprimenumber\n",n);

return0;

}

```

错误:递归返回错误,应该是返回1而不是0。

改正:将递归返回改为if(n%i==0)return0;elsereturn1;

改正后的代码:

```c

#include<stdio.h>

intis_prime(intn){

inti;

if(n<=1)return0;

for(i=2;i<=n/2;i++){

if(n%i==0)return0;

}

return1;

}

intmain(){

intn;

scanf("%d",&n);

if(is_prime(n))printf("%disaprimenumber\n",n);

elseprintf("%disnotaprimenumber\n",n);

return0;

}

```

解析:程序的功能是判断一个数是否为素数。在for循环中,如果n能被任何一个整数整除,则返回0(不是素数);否则,返回1(是素数)。但初始条件错误,n<=1时应该返回0(不是素数),因此需要将初始条件改为if(n<=1)return0。

4.以下程序的功能是计算斐波那契数列的第n项,但代码中存在错误,请指出并改正。

```c

#include<stdio.h>

intfibonacci(intn){

if(n<=1)returnn;

returnn+fibonacci(n-1)+fibonacci(n-2);

}

intmain(){

intn;

scanf("%d",&n);

printf("Fibonacci=%d\n",fibonacci(n));

return0;

}

```

错误:递归公式错误,应该是fibonacci(n-1)+fibonacci(n-2)而不是n+fibonacci(n-1)+fibonacci(n-2)。

改正:将递归公式改为returnfibonacci(n-1)+fibonacci(n-2)。

改正后的代码:

```c

#include<stdio.h>

intfibonacci(intn){

if(n<=1)returnn;

returnfibonacci(n-1)+fibonacci(n-2);

}

intmain(){

intn;

scanf("%d",&n);

printf("Fibonacci=%d\n",fibonacci(n));

return0;

}

```

解析:程序的功能是计算斐波那契数列的第n项。在递归函数中,如果n小于等于1,则返回n(斐波那契数列的前两项为0和1);否则,返回前两项的和。但递归公式错误,应该是fibonacci(n-1)+fibonacci(n-2),而不是n+fibonacci(n-1)+fibonacci(n-2)。因此,需要将递归公式改为returnfibonacci(n-1)+fibonacci(n-2)。

**2026年计算机二级C语言上机考试题库及答案**

**第三部分:程序设计题**

一、程序设计题(每题10分,共30分)

1.以下程序的功能是计算一个数的各位数字之和,请补充完整代码。

```c

#include<stdio.h>

intsum_of_digits(intn){

intsum=0;

while(n!=0){

sum=sum+______;

n=n/10;

}

returnsum;

}

intmain(){

intn;

scanf("%d",&n);

printf("Sumofdigits=%d\n",sum_of_digits(n));

return0;

}

```

答案:n%10

解析:程序的功能是计算一个数的各位数字之和。在sum_of_digits函数中,使用while循环遍历一个数的每一位数字,每次取当前数的最后一位数字(n%10)加到sum上,然后将n除以10去掉最后一位数字。因此,需要在sum=sum+______处填写n%10,表示将当前数的最后一位数字加到sum上。

2.以下程序的功能是计算一个数的各位数字之积,请补充完整代码。

```c

#include<stdio.h>

intproduct_of_digits(intn){

intproduct=1;

while(n!=0){

product=product*______;

n=n/10;

}

returnproduct;

}

intmain(){

intn;

scanf("%d",&n);

printf("Productofdigits=%d\n",product_of_digits(n));

return0;

}

```

答案:n%10

解析:程序的功能是计算一个数的各位数字之积。在product_of_digits函数中,使用while循环遍历一个数的每一位数字,每次取当前数的最后一位数字(n%10)乘到product上,然后将n除以10去掉最后一位数字。因此,需要在product=product*______处填写n%10,表示将当前数的最后一位数字乘到product上。

3.以下程序的功能是判断一个数是否为水仙花数,请补充完整代码。

```c

#include<stdio.h>

intis_narcissistic(intn){

intoriginal=n,sum=0,digit;

while(n!=0){

digit=n%10;

sum=sum+digit*digit*digit;

n=n/10;

}

return______;

}

intmain(){

intn;

scanf("%d",&n);

if(is_narcissistic(n))printf("%disanarcissisticnumber\n",n);

elseprintf("%disnotanarcissisticnumber\n",n);

return0;

}

```

答案:original==sum

解析:程序的功能是判断一个数是否为水仙花数。在is_narcissistic函数中,首先保存原始的数到变量original中,然后使用while循环遍历一个数的每一位数字,每次取当前数的最后一位数字(digit),计算其立方的和(digit*digit*digit)加到sum上,然后将n除以10去掉最后一位数字。最后,比较原始的数(original)和各位数字立方的和(sum),如果相等,则返回1(是水仙花数);否则,返回0(不是水仙花数)。因此,需要在return______处填写original==sum,表示比较原始的数和各位数字立方的和。

4.以下程序的功能是计算一个数的各位数字的平方和,请补充完整代码。

```c

#include<stdio.h>

intsum_of_squares(intn){

intsum=0;

while(n!=0){

intdigit=n%10;

sum=sum+digit*digit;

n=n/10;

}

returnsum;

}

intmain(){

intn;

scanf("%d",&n);

printf("Sumofsquares=%d\n",sum_of_squares(n));

return0;

}

```

答案:digit*digit

解析:程序的功能是计算一个数的各位数字的平方和。在sum_of_squares函数中,使用while循环遍历一个数的每一位数字,每次取当前数的最后一位数字(digit),计算其平方(digit*digit)加到sum上,然后将n除以10去掉最后一位数字。因此,需要在sum=sum+______处填写digit*digit,表示将当前数的最后一位数字的平方加到sum上。

5.以下程序的功能是判断一个数是否为完全数,请补充完整代码。

```c

#include<stdio.h>

intis_perfect(intn){

intsum=0;

for(inti=1;i<=n/2;i++){

if(n%i==0)sum=sum+i;

}

return______;

}

intmain(){

intn;

scanf("%d",&n);

if(is_perfect(n))printf("%disaperfectnumber\n",n);

elseprintf("%disnotaperfectnumber\n",n);

return0;

}

```

答案:sum==n

解析:程序的功能是判断一个数是否为完全数。在is_perfect函数中,使用for循环遍历1到n/2的所有整数,如果n能被i整除,则将i加到sum上。完全数是指其所有正除数之和等于其本身,因此最后比较sum和n,如果相等,则返回1(是完全数);否则,返回0(不是完全数)。因此,需要在return______处填写sum==n,表示比较sum和n。

6.以下程序的功能是计算一个数的各位数字的立方和,请补充完整代码。

```c

#include<stdio.h>

intsum_of_cubes(intn){

intsum=0;

while(n!=0){

intdigit=n%10;

sum=sum+digit*digit*digit;

n=n/10;

}

returnsum;

}

intmain(){

intn;

scanf("%d",&n);

printf("Sumofcubes=%d\n",sum_of_cubes(n));

return0;

}

```

答案:digit*digit*digit

解析:程序的功能是计算一个数的各位数字的立方和。在sum_of_cubes函数中,使用while循环遍历一个数的每一位数字,每次取当前数的最后一位数字(digit),计算其立方(digit*digit*digit)加到sum上,然后将n除以10去掉最后一位数字。因此,需要在sum=sum+______处填写digit*digit*digit,表示将当前数的最后一位数字的立方加到sum上。

二、综合应用题(每题15分,共30分)

1.以下程序的功能是计算一个数的各位数字的平方和,并判断该数是否为水仙花数,请补充完整代码。

```c

#include<stdio.h>

intsum_of_squares(intn){

intsum=0;

while(n!=0){

intdigit=n%10;

sum=sum+digit*digit;

n=n/10;

}

returnsum;

}

intis_narcissistic(intn){

intoriginal=n,sum=0,digit;

while(n!=0){

digit=n%10;

sum=sum+digit*digit*digit;

n=n/10;

}

returnoriginal==sum;

}

intmain(){

intn;

scanf("%d",&n);

printf("Sumofsquares=%d\n",sum_of_squares(n));

if(is_narcissistic(n))printf("%disanarcissisticnumber\n",n);

elseprintf("%disnotanarcissisticnumber\n",n);

return0;

}

```

解析:程序的功能是计算一个数的各位数字的平方和,并判断该数是否为水仙花数。在main函数中,首先读取一个整数n,然后调用sum_of_squares函数计算n的各位数字的平方和,并输出结果。然后调用is_narcissistic函数判断n是否为水仙花数,并输出结果。sum_of_squares函数使用while循环遍历一个数的每一位数字,每次取当前数的最后一位数字(digit),计算其平方(digit*digit)加到sum上,然后将n除以10去掉最后一位数字。is_narcissistic函数首先保存原始的数到变量original中,然后使用while循环遍历一个数的每一位数字,每次取当前数的最后一位数字(digit),计算其立方的和(digit*digit*digit)加到sum上,然后将n除以10去掉最后一位数字。最后,比较原始的数(original)和各位数字立方的和(sum),如果相等,则返回1(是水仙花数);否则,返回0(不是水仙花数)。

2.以下程序的功能是计算一个数的各位数字的立方和,并判断该数是否为完全数,请补充完整代码。

```c

#include<stdio.h>

intsum_of_cubes(intn){

intsum=0;

while(n!=0){

intdigit=n%10;

sum=sum+digit*digit*digit;

n=n/10;

}

returnsum;

}

intis_perfect(intn){

intsum=0;

for(inti=1;i<=n/2;i++){

if(n%i==0)sum=sum+i;

}

returnsum==n;

}

intmain(){

intn;

scanf("%d",&n);

printf("Sumofcubes=%d\n",sum_of_cubes(n));

if(is_perfect(n))printf("%disaperfectnumber\n",n);

elseprintf("%disnotaperfectnumber\n",n);

return0;

}

```

解析:程序的功能是计算一个数的各位数字的立方和,并判断该数是否为完全数。在main函数中,首先读取一个整数n,然后调用sum_of_cubes函数计算n的各位数字的立方和,并输出结果。然后调用is_perfect函数判断n是否为完全数,并输出结果。sum_of_cubes函数使用while循环遍历一个数的每一位数字,每次取当前数的最后一位数字(digit),计算其立方(digit*digit*digit)加到sum上,然后将n除以10去掉最后一位数字。is_perfect函数使用for循环遍历1到n/2的所有整数,如果n能被i整除,则将i加到sum上。完全数是指其所有正除数之和等于其本身,因此最后比较sum和n,如果相等,则返回1(是完全数);否则,返回0(不是完全数)。

三、扩展题(每题10分,共20分)

1.以下程序的功能是计算一个数的各位数字的平方和,并判断该数是否为水仙花数,请补充完整代码,并添加注释。

`

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论