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)
{
{
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)
{
{
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、枚举类型进