最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

C语言练习题答案

IT圈 admin 41浏览 0评论

2024年3月11日发(作者:衅妙思)

C语言练习题答案

1.已知三角形的三边长为a,b,c,计算三角形面积的公式为:

area=sqrt(s(s-a)(s-b)(s-c)),其中s=(a+b+c)/2。

试编程从键盘输入a,b,c的值(假设a,b,c的值可以保证其

构成一个三角形),计算并输出三角形的面积。

**输入格式要求:"%f,%f,%f" 提示信息:"Input a,b,c:"

**输出格式要求:"area = %.2fn"

程序运行示例如下:

Input a,b,c:3,4,5

area = 6.00

答案:#include

#include

int main(void)

{

float a, b, c, s, area;

printf("Input a,b,c:");

scanf("%f,%f,%f", &a, &b, &c);

s = (a + b + c) / 2;

area = sqrt(s*(s - a)*(s - b)*(s - c));

printf("area = %.2fn", area);

return 0;

}

-----------------1

2.从键盘任意输入一个4位整数,编程计算并输出它的逆序数.例如:

输入1234,分离出千位1、百位2、十位3和个位4,然后计算

4*1000+3*100+2*10+1=4321,并输出4321。

**要求输入提示信息为:无

**要求输入格式为: "%d"

**要求输出格式为:"%d"

程序运行示例如下:

1234 此处为输入

4321 此处为输出

答案:

#include

int main(void)

{

int a, b, c, d,e;

scanf("%d",&a);

b = a/1000;

c = a%1000/100;

d = a%100/10;

e = a%10;

a = e*1000+d*100+c*10+b;

printf("%d",a);

return 0;

}

--------------2

3.有关输入输出问题。

输入为:12a↙

b↙

运行结果为:1,2,a,b,123.300000,65535

请改正程序中的错误,使它能得出正确的结果。

#include

main()

{

int b;

unsigned short a = 65535;

short k = a;

char c, d;

int f, g;

b = (1234.0 - 1) / 10;

scanf("%c", &c);

scanf("%c", &d);

scanf("%d", &f);

scanf("%d", &g);

printf("%c,%c,%c,%c,%f,%d", c, d , f, g, b, k); }

答案:#include

main()

{

double b;

int a = 65535;

char c, d;

int f, g;

b = (1234.0 - 1) / 10;

scanf("%c", &c);

scanf("%c", &d);

scanf("%ct", &f);

scanf("%c", &g);

printf("%c,%c,%c,%c,%f,%d", c, d , f, g, b, a);

}

--------3

4.输入一行字符,统计其中的英文字符、数字字符、空格字符,

以及其他字符的个数。请找出以下程序的错误,并改正之。#include

#include

#define ARR_SIZE = 80;

main()

{

char str[ARR_SIZE];

int len, i;

int letter=0,digit=0,space=0,other=0;

printf("请输入一个字符串:");

gets(str);

len = strlen(str);

for (i=0; i<="" p="">

{

if (a=

{

letter ++;

}

else if (0=

{

digit ++;

}

else if (str[i]=' ' )

{

space ++;

}

else

other ++;

}

printf("英文字符数:%dn", letter);

printf("数字字符数:%dn", digit);

printf("空格数:%dn", space);

printf("其他字符数:%dn", other);

}

答案:#include

#include

#define ARR_SIZE 80

main()

{

char str[ARR_SIZE];

int len, i;

int letter = 0, digit = 0, space = 0, other = 0;

printf("请输入一个字符串:");

gets(str);

len = strlen(str);

for (i = 0; i<="" p="">

{

if ('a' <= str[i]&&str[i] <= 'z' || 'A' <= str[i]&&str[i] <= 'Z')

{

letter++;

}

else if ('0' <= str[i] && str[i]<= '9')

{

digit++;

}

else if ( str[i] == ' ')

{

space++;

}

else

other++;

}

printf("英文字符数:%dn", letter);

printf("数字字符数:%dn", digit);

printf("空格数:%dn", space);

printf("其他字符数:%dn", other);

}

--------------------4

5.对输入的一个数判断是否是素数。所谓素数是指这个数只能被1

和自身整除。要求在主函数输入一个数,调用函数Fun()判断该数是否

是素数。打印信息在主函数中进行。例如:从键盘输入5,5是素数则

打印如下信息:"5 is a prime number"。又如:从键盘输入4, 4不是素

数则打印如下信息:"4 is not a prime number"。负数、0和1均不是

素数。对输入的数据要考虑数据的合法性,不满足条件的数要重新输

入直到满足条件为止。不能使用全局变量,不按给定的函数原型编写程

不给分。Fun()函数原型为: int Fun(int m);

**输入数据提示信息:"Please input a number:n"

注:该提示信息请放在循环体外

**输入数据格式为:"%d"

**输出格式要求:

若是素数输出数据格式为:"%d is a prime numbern"

若不是素数输出数据格式为: "%d is not a prime numbern" 不

完整答案:#include

int Fun(int a)

{

int i;

if(a>1)

{

for(i = 2;i

{

if(a%i==0)

return 0;

else

continue;

}

return 1;

}

else

return 0;

}

main()

{

int b,c;

printf("Please input a number:n");

scanf("%d",&b);

c = Fun(b);

if(0 == c)

printf("%d is not a prime numbern",b);

else

printf("%d is a prime numbern",b);

}

参考答案:#include "stdio.h"

int Fun(int m);

int main()

{

int m, flag;

printf("Please input a number:n");

do

{

scanf("%d", &m); //1

}

while (m < 2); //e1

flag = Fun(m); //3

if (flag) //1

printf("%d is a prime numbern", m);

else

printf("%d is not a prime numbern", m); //1

return 0;

}

int Fun(int m)//2

{

int i, flag = 1; //1

for (i = 2; i < m; i++) //1

{

if (m % i == 0) //1

{

flag = 0; //1

break;

}

}

return flag;//2

}

- ---------------------------------------------------------5

6.求1898

现將不超过2000的所有素数从小到大排成第一行,第二行上的每

个数都等于它“右肩”上的素数与“左肩”上的素数之差。请编程求

出:第二行数中是否存在这样的若干个连续的整数,它们的和恰好是

1898?假如存在的话,又有几种这样的情况?

**输入格式要求:提示信息:"There are follwing primes in first

row :n"

**输出格式要求:"(%d).%3d,......,%dn"

程序运行示例如下:

There are follwing primes in first row :

(1).101,......,1999

(2). 89,......,1987

(3). 53,......,1951

(4). 3,......,1901

答案:

#include

#define N 330

int a[N];

int main()

{

int c = 0, b = 0, d = 1;

int i = 0, j = 0, k = 0;

for (i = 3;i <= 2000;i++)

{

for (j = 2;j < i;j++)

{

if (i%j == 0)

break;

else

continue;

}

if (j == i)

{

a[k] = i;

k++;

}

else

continue;

}

printf("There are follwing primes in first row :n");

for (c = 329;c >= 0;c--)

for (b = c + 1;c < b;b++)

if (b < 330)

{

if ((a[b] - a[c]) == 1898)

{

printf("(%d).%3d,......,%dn", d, a[c], a[b]);

d++;

}

else

continue;

}

else

break;

}

7.从键盘任意输入一个整数m,若m不是素数,则对m进行质因

数分解,并将m表示为质因数从小到大顺序排列的乘积形式输出,否

则输出"It is a prime number"。例如,用户输入90时,程序输出90

= 2 * 3 * 3 * 5;用户输入17时,程序输出"It is a prime number"。

输入提示信息:"Input m:"

输入格式:"%d"

输出格式:

是素数时输出"It is a prime numbern"

否则输出用"%d = ","%d * "

运行示例1:

Input m:90↙

90 = 2 * 3 * 3 * 5

运行示例2:

Input m:13↙

It is a prime number

答案:

#include

#include

int IsPrime(int x);

void OutputPrimeFactor(int x);

int main()

{

int m;

printf("Input m:");

scanf("%d",&m);

if(IsPrime(m))

{

printf("It is a prime numbern");

}

else

{

printf("%d = ",m);

OutputPrimeFactor(m);

}

return 0;

}

int IsPrime(int x)

{

int i,flag=1;

int squareRoot=sqrt(x);

if(x<=1)

{

flag=0;

}

for(i=2;i<=squareRoot&&flagi++)

{

if(x%i==0)

{

flag=0; }

}

return flag;

void OutputPrimeFactor(int x)

{

int i;

for(i=2;i

{

if(x%i==0)

{

printf("%d * ",i);

OutputPrimeFactor(x/i);

return;

}

}

printf("%d",x);

}

---------------------------7

8.

将任一整数转换为二进制形式。

**输入格式要求:"%d" 提示信息:"Input number:"

**输出格式要求:"number of decimal form:%dn" " it's

binary form: " 程序运行示例如下:

Input number:876

number of decimal form:876

it's binary form: 01101100

答案:

#include

#include

int main()

{

int a;

char b[32];

printf("Input number:");

scanf("%d", &a);

printf("number of decimal form:%dn", a);

printf(" it's binary form: ");

printf("%sn", itoa(a, b, 2));

}

---------------------------8

9.

求自然数n最近的素数k, k>n。

***输入提示信息**:"Input n:"

***输入数据格式**:"%d"

***输出数据格式**:"%d"

示例

输入:

257

输出:

Please input n:263

答案:

#include

int main()

{

int n, i = 1, k;

printf("Please input n:");

scanf("%d", &n);

for (k = n + 1;i;k++)

{

for (i = 2;i < k;i++)

if (k%i == 0)

break;

else

continue;

if (i == k)

{

printf("%d", k);

i = 0;

break;

}

}

}

---------------9

10.

如果一个正整数m的所有小于m的不同因子(包括1)加起来正

好等于m本身,那么就被称它为完全数。它是指这样的一些特殊的自

然数,它所有的真因子(即除了自身以外的约数)的和,恰好等于它

本身。

注意:1没有真因子,所以不是完全数。例如,6就是一个完全数,

是因为6 = 1 + 2 + 3。

请编写一个判断完全数的函数IsPerfect(),然后判断从键盘输入

的整数是否是完全数。

要求:按如下原型编写判断完全数的函数,若函数返回0,则代表

不是完全数,若返回1,则代表是完全数。

int IsPerfect(int x);

**要求输入提示信息为: "Input m:n"

**要求输入格式为: "%d"

**要求输出格式为

"%d is a perfect numbern"

"%d is not a perfect numbern"

注:不能使用指针、结构体、共用体、文件、goto、枚举类型进

2024年3月11日发(作者:衅妙思)

C语言练习题答案

1.已知三角形的三边长为a,b,c,计算三角形面积的公式为:

area=sqrt(s(s-a)(s-b)(s-c)),其中s=(a+b+c)/2。

试编程从键盘输入a,b,c的值(假设a,b,c的值可以保证其

构成一个三角形),计算并输出三角形的面积。

**输入格式要求:"%f,%f,%f" 提示信息:"Input a,b,c:"

**输出格式要求:"area = %.2fn"

程序运行示例如下:

Input a,b,c:3,4,5

area = 6.00

答案:#include

#include

int main(void)

{

float a, b, c, s, area;

printf("Input a,b,c:");

scanf("%f,%f,%f", &a, &b, &c);

s = (a + b + c) / 2;

area = sqrt(s*(s - a)*(s - b)*(s - c));

printf("area = %.2fn", area);

return 0;

}

-----------------1

2.从键盘任意输入一个4位整数,编程计算并输出它的逆序数.例如:

输入1234,分离出千位1、百位2、十位3和个位4,然后计算

4*1000+3*100+2*10+1=4321,并输出4321。

**要求输入提示信息为:无

**要求输入格式为: "%d"

**要求输出格式为:"%d"

程序运行示例如下:

1234 此处为输入

4321 此处为输出

答案:

#include

int main(void)

{

int a, b, c, d,e;

scanf("%d",&a);

b = a/1000;

c = a%1000/100;

d = a%100/10;

e = a%10;

a = e*1000+d*100+c*10+b;

printf("%d",a);

return 0;

}

--------------2

3.有关输入输出问题。

输入为:12a↙

b↙

运行结果为:1,2,a,b,123.300000,65535

请改正程序中的错误,使它能得出正确的结果。

#include

main()

{

int b;

unsigned short a = 65535;

short k = a;

char c, d;

int f, g;

b = (1234.0 - 1) / 10;

scanf("%c", &c);

scanf("%c", &d);

scanf("%d", &f);

scanf("%d", &g);

printf("%c,%c,%c,%c,%f,%d", c, d , f, g, b, k); }

答案:#include

main()

{

double b;

int a = 65535;

char c, d;

int f, g;

b = (1234.0 - 1) / 10;

scanf("%c", &c);

scanf("%c", &d);

scanf("%ct", &f);

scanf("%c", &g);

printf("%c,%c,%c,%c,%f,%d", c, d , f, g, b, a);

}

--------3

4.输入一行字符,统计其中的英文字符、数字字符、空格字符,

以及其他字符的个数。请找出以下程序的错误,并改正之。#include

#include

#define ARR_SIZE = 80;

main()

{

char str[ARR_SIZE];

int len, i;

int letter=0,digit=0,space=0,other=0;

printf("请输入一个字符串:");

gets(str);

len = strlen(str);

for (i=0; i<="" p="">

{

if (a=

{

letter ++;

}

else if (0=

{

digit ++;

}

else if (str[i]=' ' )

{

space ++;

}

else

other ++;

}

printf("英文字符数:%dn", letter);

printf("数字字符数:%dn", digit);

printf("空格数:%dn", space);

printf("其他字符数:%dn", other);

}

答案:#include

#include

#define ARR_SIZE 80

main()

{

char str[ARR_SIZE];

int len, i;

int letter = 0, digit = 0, space = 0, other = 0;

printf("请输入一个字符串:");

gets(str);

len = strlen(str);

for (i = 0; i<="" p="">

{

if ('a' <= str[i]&&str[i] <= 'z' || 'A' <= str[i]&&str[i] <= 'Z')

{

letter++;

}

else if ('0' <= str[i] && str[i]<= '9')

{

digit++;

}

else if ( str[i] == ' ')

{

space++;

}

else

other++;

}

printf("英文字符数:%dn", letter);

printf("数字字符数:%dn", digit);

printf("空格数:%dn", space);

printf("其他字符数:%dn", other);

}

--------------------4

5.对输入的一个数判断是否是素数。所谓素数是指这个数只能被1

和自身整除。要求在主函数输入一个数,调用函数Fun()判断该数是否

是素数。打印信息在主函数中进行。例如:从键盘输入5,5是素数则

打印如下信息:"5 is a prime number"。又如:从键盘输入4, 4不是素

数则打印如下信息:"4 is not a prime number"。负数、0和1均不是

素数。对输入的数据要考虑数据的合法性,不满足条件的数要重新输

入直到满足条件为止。不能使用全局变量,不按给定的函数原型编写程

不给分。Fun()函数原型为: int Fun(int m);

**输入数据提示信息:"Please input a number:n"

注:该提示信息请放在循环体外

**输入数据格式为:"%d"

**输出格式要求:

若是素数输出数据格式为:"%d is a prime numbern"

若不是素数输出数据格式为: "%d is not a prime numbern" 不

完整答案:#include

int Fun(int a)

{

int i;

if(a>1)

{

for(i = 2;i

{

if(a%i==0)

return 0;

else

continue;

}

return 1;

}

else

return 0;

}

main()

{

int b,c;

printf("Please input a number:n");

scanf("%d",&b);

c = Fun(b);

if(0 == c)

printf("%d is not a prime numbern",b);

else

printf("%d is a prime numbern",b);

}

参考答案:#include "stdio.h"

int Fun(int m);

int main()

{

int m, flag;

printf("Please input a number:n");

do

{

scanf("%d", &m); //1

}

while (m < 2); //e1

flag = Fun(m); //3

if (flag) //1

printf("%d is a prime numbern", m);

else

printf("%d is not a prime numbern", m); //1

return 0;

}

int Fun(int m)//2

{

int i, flag = 1; //1

for (i = 2; i < m; i++) //1

{

if (m % i == 0) //1

{

flag = 0; //1

break;

}

}

return flag;//2

}

- ---------------------------------------------------------5

6.求1898

现將不超过2000的所有素数从小到大排成第一行,第二行上的每

个数都等于它“右肩”上的素数与“左肩”上的素数之差。请编程求

出:第二行数中是否存在这样的若干个连续的整数,它们的和恰好是

1898?假如存在的话,又有几种这样的情况?

**输入格式要求:提示信息:"There are follwing primes in first

row :n"

**输出格式要求:"(%d).%3d,......,%dn"

程序运行示例如下:

There are follwing primes in first row :

(1).101,......,1999

(2). 89,......,1987

(3). 53,......,1951

(4). 3,......,1901

答案:

#include

#define N 330

int a[N];

int main()

{

int c = 0, b = 0, d = 1;

int i = 0, j = 0, k = 0;

for (i = 3;i <= 2000;i++)

{

for (j = 2;j < i;j++)

{

if (i%j == 0)

break;

else

continue;

}

if (j == i)

{

a[k] = i;

k++;

}

else

continue;

}

printf("There are follwing primes in first row :n");

for (c = 329;c >= 0;c--)

for (b = c + 1;c < b;b++)

if (b < 330)

{

if ((a[b] - a[c]) == 1898)

{

printf("(%d).%3d,......,%dn", d, a[c], a[b]);

d++;

}

else

continue;

}

else

break;

}

7.从键盘任意输入一个整数m,若m不是素数,则对m进行质因

数分解,并将m表示为质因数从小到大顺序排列的乘积形式输出,否

则输出"It is a prime number"。例如,用户输入90时,程序输出90

= 2 * 3 * 3 * 5;用户输入17时,程序输出"It is a prime number"。

输入提示信息:"Input m:"

输入格式:"%d"

输出格式:

是素数时输出"It is a prime numbern"

否则输出用"%d = ","%d * "

运行示例1:

Input m:90↙

90 = 2 * 3 * 3 * 5

运行示例2:

Input m:13↙

It is a prime number

答案:

#include

#include

int IsPrime(int x);

void OutputPrimeFactor(int x);

int main()

{

int m;

printf("Input m:");

scanf("%d",&m);

if(IsPrime(m))

{

printf("It is a prime numbern");

}

else

{

printf("%d = ",m);

OutputPrimeFactor(m);

}

return 0;

}

int IsPrime(int x)

{

int i,flag=1;

int squareRoot=sqrt(x);

if(x<=1)

{

flag=0;

}

for(i=2;i<=squareRoot&&flagi++)

{

if(x%i==0)

{

flag=0; }

}

return flag;

void OutputPrimeFactor(int x)

{

int i;

for(i=2;i

{

if(x%i==0)

{

printf("%d * ",i);

OutputPrimeFactor(x/i);

return;

}

}

printf("%d",x);

}

---------------------------7

8.

将任一整数转换为二进制形式。

**输入格式要求:"%d" 提示信息:"Input number:"

**输出格式要求:"number of decimal form:%dn" " it's

binary form: " 程序运行示例如下:

Input number:876

number of decimal form:876

it's binary form: 01101100

答案:

#include

#include

int main()

{

int a;

char b[32];

printf("Input number:");

scanf("%d", &a);

printf("number of decimal form:%dn", a);

printf(" it's binary form: ");

printf("%sn", itoa(a, b, 2));

}

---------------------------8

9.

求自然数n最近的素数k, k>n。

***输入提示信息**:"Input n:"

***输入数据格式**:"%d"

***输出数据格式**:"%d"

示例

输入:

257

输出:

Please input n:263

答案:

#include

int main()

{

int n, i = 1, k;

printf("Please input n:");

scanf("%d", &n);

for (k = n + 1;i;k++)

{

for (i = 2;i < k;i++)

if (k%i == 0)

break;

else

continue;

if (i == k)

{

printf("%d", k);

i = 0;

break;

}

}

}

---------------9

10.

如果一个正整数m的所有小于m的不同因子(包括1)加起来正

好等于m本身,那么就被称它为完全数。它是指这样的一些特殊的自

然数,它所有的真因子(即除了自身以外的约数)的和,恰好等于它

本身。

注意:1没有真因子,所以不是完全数。例如,6就是一个完全数,

是因为6 = 1 + 2 + 3。

请编写一个判断完全数的函数IsPerfect(),然后判断从键盘输入

的整数是否是完全数。

要求:按如下原型编写判断完全数的函数,若函数返回0,则代表

不是完全数,若返回1,则代表是完全数。

int IsPerfect(int x);

**要求输入提示信息为: "Input m:n"

**要求输入格式为: "%d"

**要求输出格式为

"%d is a perfect numbern"

"%d is not a perfect numbern"

注:不能使用指针、结构体、共用体、文件、goto、枚举类型进

发布评论

评论列表 (0)

  1. 暂无评论