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的值可以保证其构成一个三角形),计算并输出三角形的面积。 **输入格式要求:\提示信息:\**输出格式要求:\程序运行示例如下: Input a,b,c:3,4,5 area = 6.00

答案:#include #include int main(void) { }

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

2.从键盘任意输入一个4位整数,编程计算并输出它的逆序数.例如:输入1234,分离出千位1、百位2、十位3和个位4,然后计算4*1000+3*100+2*10+1=4321,并输出4321。 **要求输入提示信息为:无 **要求输入格式为: \**要求输出格式为:\程序运行示例如下: 1234 此处为输入 4321 此处为输出 答案:

#include int main(void) {

int a, b, c, d,e; scanf(\b = a/1000; c = a00/100; d = a0/10; e = a;

a = e*1000+d*100+c*10+b; printf(\return 0;

float a, b, c, s, area; printf(\scanf(\s = (a + b + c) / 2;

area = sqrt(s*(s - a)*(s - b)*(s - c)); printf(\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(\ scanf(\ scanf(\ scanf(\

printf(\}

答案:#include main() { double b; int a = 65535; char c, d; int f, g;

b = (1234.0 - 1) / 10; scanf(\scanf(\scanf(\scanf(\

printf(\}

--------3

4.输入一行字符,统计其中的英文字符、数字字符、空格字符,以及其他字符的个数。请找出以下程序的错误,并改正之。 #include #include

#define ARR_SIZE = 80; main() {

charstr[ARR_SIZE]; int len, i;

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

printf(\请输入一个字符串:\ gets(str);

len = strlen(str);

for(i=0; i

if(a=

letter ++;

} elseif(0=

digit ++; } elseif(str[i]=' ')

{ space ++; } else

other ++; }

printf(\英文字符数:%d\\n\ printf(\数字字符数:%d\\n\ printf(\空格数:%d\\n\ printf(\其他字符数:%d\\n\ }

答案 :#include #include

#define ARR_SIZE 80 main() {

charstr[ARR_SIZE]; int len, i;

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

printf(\请输入一个字符串:\ gets(str);

len = strlen(str);

for(i = 0; i

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

letter++; }

elseif('0'<= str[i] && str[i]<= '9') {

digit++; }

elseif( str[i] == ' ') {

space++; } else

other++; }

printf(\英文字符数:%d\\n\ printf(\数字字符数:%d\\n\ printf(\空格数:%d\\n\ printf(\其他字符数:%d\\n\ }

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

5.对输入的一个数判断是否是素数。所谓素数是指这个数只能被1和自身整除。要求在主函数输入一个数,调用函数Fun()判断该数是否是素数。打印信息在主函数中进行。例如:从键盘输入5,5是素数则打印如下信息:\。又如:从键盘输入4, 4不是素数则打印如下信息:\。负数、0和1均不是素数。对输入的数据要考虑数据的合法性,不满足条件的数要重新输入直到满足条件为止。不能使用全局变量,不按给定的函数原型编写程序 不给分。Fun()函数原型为: int Fun(int m); **输入数据提示信息:\ 注:该提示信息请放在循环体外

**输入数据格式为:\**输出格式要求:

若是素数输出数据格式为:\ 若不是素数输出数据格式为: \不完整答案:#include intFun(inta) {

inti; if(a>1) {

for(i = 2;i

if(a%i==0) return0; else continue; } return1; } else return0; } main() {

intb,c;

printf(\ scanf(\ c = Fun(b); if(0 == c)

printf(\ else

printf(\ }

参考答案:#include \ intFun(intm); intmain()

{ intm, flag;

printf(\ do

{

scanf(\ }

while(m < 2); //e1

flag = Fun(m); //3

if(flag) //1

printf(\ else

printf(\

return0;

} intFun(intm)//2

{ inti, flag = 1; //1

for(i = 2; i < m; i++) //1 { if(m % i == 0) //1

{ flag = 0; //1 break; } }

returnflag;//2 }

- ---------------------------------------------------------5 6.求1898

现將不超过2000的所有素数从小到大排成第一行,第二行上的每个数都等于它“右肩”上的素数与“左肩”上的素数之差。请编程求出:第二行数中是否存在这样的若干个连续的整数,它们的和恰好是1898?假如存在的话,又有几种这样的情况? **输入格式要求:提示信息:\**输出格式要求:\程序运行示例如下:

There are follwing primes in first row : (1).101,......,1999 (2). 89,......,1987 (3). 53,......,1951 (4). 3,......,1901 答案:

#include #defineN 330 int a[N]; int main()

{ }

7.从键盘任意输入一个整数m,若m不是素数,则对m进行质因数分解,并将m表示为质因数从小到大顺序排列的乘积形式输出,否则输出\。例如,用户输入90时,程序输出90 = 2 * 3 * 3 * 5;用户输入17时,程序输出\prime number\。

输入提示信息:\输入格式:\输出格式:

是素数时输出\

}

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

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

if (b < 330) { } else

break;

if ((a[b] - a[c]) == 1898) { } else

continue;

printf(\, d, a[c], a[b]); d++;

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 (j == i) { } else

continue; a[k] = i; k++;

if (i%j == 0) else

continue; break;

否则输出用\,\运行示例1: Input m:90↙ 90 = 2 * 3 * 3 * 5 运行示例2: Input m:13↙ It is a prime number 答案:

#include #include intIsPrime(intx);

voidOutputPrimeFactor(intx); intmain() { intm;

printf(\ scanf(\ if(IsPrime(m)) {

printf(\ } else {

printf(\ OutputPrimeFactor(m); } return0; }

intIsPrime(intx) {

inti,flag=1;

intsquareRoot=sqrt(x); if(x<=1) { flag=0; }

for(i=2;i<=squareRoot&&flag;i++) {

if(x%i==0) { flag=0; } }

returnflag;

}

voidOutputPrimeFactor(intx) { inti;

for(i=2;i

if(x%i==0) {

printf(\ OutputPrimeFactor(x/i); return; } }

printf(\ }

---------------------------7 8.

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

**输入格式要求:\提示信息:\

**输出格式要求:\程序运行示例如下: Input number:876

number of decimal form:876

it's binary form: 00000000000000000000001101101100

答案:

#include #include int main() { }

---------------------------8 9.

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

***输入提示信息**:\***输入数据格式**:\***输出数据格式**:\

int a; char b[32];

printf(\); scanf(\, &a);

printf(\, a); printf(\); printf(\, itoa(a, b, 2));

示例 输入: 257 输出:

Please input n:263 答案:

#include int main() {

int n, i = 1, k;

printf(\ scanf(\ for (k = n + 1;i;k++) {

for (i = 2;i < k;i++) if (k%i == 0) break; else

continue; if (i == k) {

printf(\ i = 0; break; } } }

---------------9 10.

如果一个正整数m的所有小于m的不同因子(包括1)加起来正好等于m本身,那么就被称它为完全数。它是指这样的一些特殊的自然数,它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。

注意:1没有真因子,所以不是完全数。例如,6就是一个完全数,是因为6 = 1 + 2 + 3。 请编写一个判断完全数的函数IsPerfect(),然后判断从键盘输入的整数是否是完全数。

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

int IsPerfect(int x);

**要求输入提示信息为: \**要求输入格式为: \**要求输出格式为

\\

注:不能使用指针、结构体、共用体、文件、goto、枚举类型进行编程,主函数不能使用int main和return 0。 答案:

#include int IsPerfect(int x); int main() {

int m;

printf(\ scanf(\ if (IsPerfect(m))

printf(\ else

printf(\}

int IsPerfect(int x) {

int i = 1,b = 0; for (i = 1;i < x;i++) if (x%i == 0) {

b = b + i; continue; } else

continue; if (b == x) return 1; else

return 0; }

---------------------10 11.

用函数编程计算两整数的最大值,在主函数中调用该函数计算并输出从键盘任意输入的两整数的最大值。

**输入格式要求:\提示信息:\**输出格式要求:\程序运行示例如下: Input a,b:5,8 max = 8 答案:

#include int max(int a, int b)

{

if(a >= b) return a; else

return b; } main() {

int a = 0,b = 0; printf(\ scanf(\

printf(\}

---------------------------11 12.

利用求阶乘函数Fact(),编程计算并输出1! + 2! + …+ n!的值。 **输入格式要求:\提示信息:\**输出格式要求:\答案:

#include int sum_s(int i); main() {

unsigned int n = 0; unsigned long b = 0; printf(\ scanf(\ for (b;n;n--) {

b = b +sum_s(n); }

printf(\}

int sum_s(int i) {

int a;

for(a = 1;i;i--) {

if (i > 1) a = a * i; else

a = a * 1; }

return a;

}

--------------------------------------12 13.

编程输出如下菜单界面(具体的输出则以下面提示中要求的输出格式为准):

=======大学信息管理系统======= ------------------------------ 办公室管理 财务管理 教务管理 图书管理 科研管理 设备管理 人事管理 后勤管理 退出系统

------------------------------ 请您在上述功能中选择(0——8):

提示:输出如下格式

\大学信息管理系统======= \\n\\\办公室管理 5. 财务管理 \\n\\教务管理 6. 图书管理 \\n\\科研管理 7. 设备管理 \\n\\人事管理 8. 后勤管理 \\n\\退出系统\\n\

\

\请您在上述功能中选择(0——8):\\n\答案:

#include main() {

printf(\大学信息管理系统======= \\n\ printf(\ printf(\办公室管理 5. 财务管理 \\n\ printf(\教务管理 6. 图书管理 \\n\ printf(\科研管理 7. 设备管理 \\n\ printf(\人事管理 8. 后勤管理 \\n\ printf(\退出系统\\n\

printf(\ printf(\请您在上述功能中选择(0——8):\\n\}

-------------------------------------13 14.

利用静态变量计算n的阶乘。

**输入格式要求:\提示信息:\**输出格式要求:\程序运行示例如下: Input n:10 1! = 1 2! = 2 3! = 6 4! = 24 5! = 120 6! = 720 7! = 5040 8! = 40320 9! = 362880 10! = 3628800 答案:

#include int sum_s(int i); main() {

unsigned int n = 0,b = 1; printf(\ scanf(\ for (b = 1;b <= n;b++) {

printf(\ } }

int sum_s(int i) {

int a;

for(a = 1;i;i--) {

if (i > 1) a = a * i; else

a = a * 1; }

return a; }

------------------------------------------------14 15.

写一个程序从键盘输入两个整数,然后显示输出第1个数除以第2个数的结果。例如,输入123和12,程序的输出结果格式如下:

10 Remainder = 3 ------ 12 ) 123

提示:使用求余运算符获得余数,使用整数除法获得商。

**输入格式要求:\提示信息:\请输入两个整数:\**输出格式要求: \\\答案:

#include main() {

int a, b, c, d;

printf(\请输入两个整数:\ scanf(\ c = a / b; d = a % b;

printf(\ printf(\ printf(\}

-------------------------------------------15 16.

写一个程序,将接收的摄氏温度转换为对应的华氏温度。程序应显示如下的提示信息: Please input cels:

然后输入一个十进制数并回车,然后程序以合适的消息形式输出转换后的华氏温度。 程序使用如下的公式完成转换:摄氏温度 = 5.0 *(华氏温度 – 32.0) / 9.0 **输入格式要求:\提示信息:\**输出格式要求:\答案:

#include main() {

double a,b;

printf(\ scanf(\

b = (9.0 * a)/5.0 + 32.0; printf(\}

--------------------------16 17.

写一个程序,将接收的华氏温度转换为对应的摄氏温度。程序应显示如下的提示信息:

Please input fahr:

然后输入一个十进制数并回车,然后程序以合适的消息形式输出转换后的华氏温度。 程序使用如下的公式完成转换:摄氏温度 = 5.0 *(华氏温度 – 32.0) / 9.0 **输入格式要求:\提示信息:\**输出格式要求:\答案:

#include main() {

double a,b;

printf(\ scanf(\

b = 5.0 * (a - 32.0) / 9.0; printf(\}

-----------------------------------17 18.

编写一个程序,输入一个3位整数,要求逆序输出对应的数。例如:输入123,则输出321。 **输入格式要求:\提示信息:\**输出格式要求:\程序运行示例如下:

Please enter a positive integer: 345 345-->543 答案:

#include int main(void) {

int a, b, c, d,e;

printf(\ scanf(\ b = a/100; d = a0/10; e = a;

c = e*100+d*10+b; printf(\ return 0; }

-------------------------------------------18 19.

计算两个数的平方和

从键盘读入两个实数,编程计算并输出它们的平方和,要求使用数学函数pow(x,y)计算平方值,输出结果保留2位小数。

提示:使用数学函数需要在程序中加入编译预处理命令 #include

以下为程序的输出示例: Please input x and y: 1.2,3.4↙ result=13.00

输入格式: \

输出格式:

输入提示信息:\输出格式:\答案:

#include #include main() {

float x,y,z;

printf(\ scanf(\ z = pow(x,2) + pow(y,2); printf(\}

————————————————————————————————19 20.

写一个程序从键盘输入两个整数,然后显示第1个整数占第二个整数的百分比,保留到小数点后1位。例如输入5和40,程序输出结果如下: 5 is 12.5 percent of 40

**输入格式要求:\提示信息:\请输入两个整数:\**输出格式要求:\答案:

#include main() {

int a, b; float c;

printf(\请输入两个整数:\ scanf(\ c = (float)a / (float)b; c = c *100;

printf(\}

----------------------------------20 21.

求三角形面积。输入三角形的三个边长,计算三角形的面积。设三角形的三个边长分别为a、b、c,为简单起见,我们认为输入的三个边长数据是正确的,可以组成一个三角形。 **输入格式要求:\提示信息:\**输出格式要求:\程序运行示例如下: Enter 3 floats:2,2,3 area=1.98 答案:

#include #include int main(void) {

float a, b, c, s, area; printf(\ scanf(\ s = (a + b + c) / 2;

area = sqrt(s*(s - a)*(s - b)*(s - c)); printf(\ return 0; }

------------------------------------------21 22.

写一个程序计算长为11.5厘米,宽为2.5厘米,高为10厘米的盒子的体积和表面积。 程序说明:采用直接赋值,不用输入。 **输出格式要求\答案:

#include main() {

float a, b;

a = (11.5 * 2.5 + 11.5*10 +10 * 2.5)*2; b = 11.5 * 2.5 * 10;

printf(\} 23.

用递归方法计算整数n的阶乘n!。

**输入格式要求:\提示信息:\**输出格式要求:\程序运行示例如下: Input n:5 5! = 120 答案;

#include int f(int n)

{

if(n==1 ||n==0) return 1; else

return n * f(n - 1); } main() {

int n;

o: printf(\ scanf(\ while (n<0) {

printf(\ goto o; }

printf(\}

------------------------------------23 24.

用递归方法编程计算Fibonacci数列的前N项。其中fib(0)=0,fib(1)=1,fib(n)=fib(n-1)+fib(n-2)。 **输入格式要求:\提示信息:\**输出格式要求:\程序运行示例如下: Input n:10 Fib(1)=1 Fib(2)=1 Fib(3)=2 Fib(4)=3 Fib(5)=5 Fib(6)=8 Fib(7)=13 Fib(8)=21 Fib(9)=34 Fib(10)=55 答案:

#include int Fib(int n) {

if (n == 0) return 0; else if (n == 1) return 1; else

return Fib(n - 1) + Fib(n - 2); } main() {

int n, a;

printf(\ scanf(\ for (a = 1; a <= n;a++) {

printf(\ } }

--------------------------------------------24 25.

利用求阶乘函数Fact(),编程计算并输出从1到n之间所有数的阶乘值。 **输入格式要求:\提示信息:\**输出格式要求:\程序运行示例如下: Input n(n>0):10 1! = 1 2! = 2 3! = 6 4! = 24 5! = 120 6! = 720 7! = 5040 8! = 40320 9! = 362880 10! = 3628800 答案:

#include

int sum_s(unsigned int i) {

unsigned int a; for(a = 1;i;i--) {

if (i > 1) a = a * i; else

a = a * 1; }

return a; }

int Fact(unsigned int n)

{

unsigned int i; for(i = 1;i <= n; i++) {

printf(\ } } main() {

unsigned int i;

printf(\ scanf(\ Fact(i); }

---------------------------25 26.

爱因斯坦曾出过这样一道数学题:有一条长阶梯,若每步跨2阶,最后剩下1阶;若每步跨3阶,最后剩下2阶;若每步跨5阶,最后剩下4阶;若每步跨6阶,则最后剩下5阶;只有每步跨7阶,最后才正好1阶不剩。参考例6.15程序,编写计算这条阶梯共有多少阶的程序如下所示,其中存在一些语法和逻辑错误,请找出并改正之,然后上机运行程序并写出程序的运行结果。

#include main() {

int x = 1, find = 0; while (!find); {

if (x%2=1 && x%3=2 && x%5=4 && x%6=5 && x%7=0) {

printf(\ find = 1;

x++; } } } 答案:

#include main()

{ int x = 1, find = 0; while (!find) {

if (x % 2 == 1 && x % 3 == 2 && x % 5 == 4 && x % 6 == 5 && x % 7 == 0) {

printf(\ find = 1; } x++; } }

---------------26 27.

从键盘任意输入一个正整数,编程判断它的奇偶性。要求输入变量定义为int类型且由用户从键盘输入。

程序的运行示例1: Input an integer number: 4↙

4 is an even number

程序的运行示例2: Input an integer number: 3↙

3 is an odd number

输入格式: \

输出格式:

输入信息提示:\偶数输出格式:\奇数输出格式:\答案:

#include main() { }

-------------------------------------27 28.

int n, m;

printf(\scanf(\m = n % 2; if (m)

printf(\printf(\else

用动态数组编程输入任意m个班学生(每班n个学生)的某门课的成绩,计算最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。其中,m和n的值由用户从键盘任意输入(不限定m和n的上限值)。 输入提示信息:

\\输入格式:\

输出提示信息和格式:\答案:

#include #include

void InputScore(int *p, int m, int n);

int FindMax(int *p, int m, int n, int *pRow, int *pCol); int main() {

int *pScore, m, n, maxScore, row, col; printf(\ scanf(\

pScore = (int *)calloc(m * n, sizeof (int)); /* 申请动态内存 */ if (pScore == NULL) {

printf(\ exit(0); }

InputScore(pScore, m, n);

maxScore = FindMax(pScore, m, n, &row, &col);

printf(\ free(pScore); /* 释放动态内存 */ return 0; }

/* 函数功能:输入m行n列二维数组的值 */ void InputScore(int *p, int m, int n) { int i, j;

printf(\ for (i = 0; i < m; i++) {

for (j = 0; j < n; j++) {

scanf(\ } }

}

/* 函数功能:计算任意m行n列二维数组中元素的最大值,并指出其所在行列下标值 */

int FindMax(int *p, int m, int n, int *pRow, int *pCol) {

int i, j, max = p[0]; *pRow = 0; *pCol = 0;

for (i = 0; i < m; i++) {

for (j = 0; j < n; j++) {

if (p[i * n + j] > max) { max = p[i * n + j];

*pRow = i; /*记录行下标*/ *pCol = j; /*记录列下标*/ } } }

return max; }

-----------------------------28 29.

下面程序的功能是交换变量a和b中的值。 找出其中的错误并改正之。

#include main() {

int a,b,*p,*q,*t; p=&a; q=&b;

printf(\请输入变量a和b的值:\ scanf(\ *t=*p ; *p=*q ; *q=*t ;

printf(\交换后a和b的值:a=%d b=%d\\n\} 答案:

#include

main() {

int a,b,*p,*q,*t; p=&a; q=&b;

}

printf(\请输入变量a和b的值:\ scanf(\ *t=*p ; *p=*q ; *q=*t ;

printf(\交换后a和b的值:a=%d b=%d\\n\

-----------------------------------29 30.

编程打印200~300之间所有素数。要求判断一个数是否是素数用函数实现,打印结果请在主函数实现。判断一个数是否是素数函数原型为: int fun(int m); 参数说明:

参 数:m是要进行判断的数;

返回值:若此数是素数,则返回值为1;否则返回值为0 **输入提示信息: 无 **输入数据格式要求: 无 **输出数据格式要求: \注:不允许使用goto语句 答案:

#include int fun(int m); main() {

int a;

for (a = 200;a <= 300;a++) {

if (fum(a))

printf(\ else continue; } }

int fum(int m) {

int i;

for (i = 2;i < m;i++) {

if(m%i == 0) return 0; else continue; } return 1;

}

------------------------------30 31.

输入某班学生某门课的成绩(最多不超过40人),当输入为负值时,表示输入结束, 用函数编程统计成绩高于平均分的学生人数。

要求按如下原型编写统计成绩在全班平均分及平均分之上的学生人数 int GetAboveAver(int score[], int n); **输入要求:\**输出要求:

\\

\答案:

#include int a[40] = { 0 }, i = 0;

int GetAboveAver(int score[], int n); int main() { }

int GetAboveAver(int score[], int n) {

d = sum / i;

printf(\for (c = 0;c < i; c++) {

if (score[c] > d) int sum = 0, c; int d, e = 0;

for (c = 0;c < i; c++) { }

sum = sum + score[c]; for (i; i <= 40; i++) { }

printf(\GetAboveAver(a, i);

int b = 0; scanf(\if (b >= 0)

a[i] = b; break; else

}

}

e++; continue;

else

printf(\return 0;

-----------------------------30 31. /*

编程实现简单的计算器功能,要求用户按如下格式从键盘输入算式: 操作数1 运算符op 操作数2

计算并输出表达式的值,其中算术运算符包括:加(+)、减(-)、乘(*)、除(/)、^(次幂)。 要求使其能进行浮点数的算术运算,同时允许使用字符*、x与X作为乘号,并且允许输入的算术表达式中的操作数和运算符之间可以加入任意多个空格符。

**输入格式要求:\提示信息:\

**输出格式要求:\+ %f = %f \\n\- %f = %f \\n\* %f = %f \\n\/ %f = %f \\n\by zero!\\n\ 程序运行示例1如下:

Please enter the expression: 2.0 + 4.0 2.000000 + 4.000000 = 6.000000 程序运行示例2如下:

Please enter the expression: 2.0 - 4.0 2.000000 - 4.000000 = -2.000000 程序运行示例3如下:

Please enter the expression: 2.0 * 4.0 2.000000 * 4.000000 = 8.000000 程序运行示例4如下:

Please enter the expression: 2.0 x 4.0 2.000000 * 4.000000 = 8.000000 程序运行示例5如下:

Please enter the expression: 2.0 X 4.0 2.000000 * 4.000000 = 8.000000 程序运行示例6如下:

Please enter the expression: 2.0 / 4.0 2.000000 / 4.000000 = 0.5000000 程序运行示例7如下:

Please enter the expression: 2.0 / 0 Division by zero! 程序运行示例8如下:

Please enter the expression:2.0 ^5.0 2.000000 ^ 5.000000 = 32.000000 程序运行示例9如下:

Please enter the expression: 2.0 \\ 4.0

Invalid operator! */

#include #include int main() { }

-----------------------------31 32.

float a, b; char c;

printf(\); scanf(\,&a, &c, &b); if (c == '+') { }

elseif (c == '*' || c == 'x' || c == 'X')

printf(\, a, b, a*b); printf(\,a, b,pow(a,b)); printf(\); elseif (c == '^') else

if (b != 0)

printf(\, a, b, a / b); printf(\); else

printf(\, a, b, a + b); printf(\,a, b, a - b); elseif (c == '-') elseif (c == '/')

下面程序的功能是计算两个正整数的最小公倍数,请改正其中的错误。 #include

intMinCommonMultiple(inta, intb)

main() {

inta, b, x;

printf(\ scanf(\

x=MinCommonMultiple(inta,intb);

printf(\ }

intMinCommonMultiple(inta, intb); {

inti;

for(i=1; i

if(i%a==0 || i%b==0) returni; } }

答案:

#include

int MinCommonMultiple(int a, int b);

int main() { }

int MinCommonMultiple(inta, intb) { }

--------------------------------------32 33.

请编写函数fuc(),函数的功能是: 根据以下公式求出p的值,结果由函数值返回。m , n 是两个正整数,且 m>n. P= m!/(n!*(m-n)!)

**输入格式要求:\提示信息:\请输入m,n的值( m>n ):\\n\**输出格式要求:\项之和为:%lf\\n\程序运行示例如下: 请输入m,n的值( m>n ): 5 3

n项之和为:10.000000 答案:

int i;

for (i = 1; i <= a*b; i++) { }

if (i%a == 0 && i%b == 0)

return i;

int a, b, x;

printf(\); scanf(\, &a, &b); x = MinCommonMultiple(a, b);

printf(\, x);

#include intfuc(intm, intn); intsum_s(inti);

intmain() {

intm, n;

printf(\请输入m,n的值( m>n ):\\n\ scanf(\

printf(\项之和为:%lf\\n\ }

intfuc(intm, intn) {

intp;

p = sum_s(m) / (sum_s(n) * sum_s(m - n)); returnp; }

intsum_s(inti) {

ints_ = 1, a;

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

s_ = s_ *a; }

returns_; }

----------------------------------33 34.

采用穷举法,按如下函数原型

/* 函数功能:计算a和b的最小公倍数,当a或者b为非正整数时返回-1 */ int Lcm(int a, int b);

用函数编程实现计算两个正整数的最小公倍数(Least Common Multiple,LCM)的函数,在主函数中调用该函数计算并输出从键盘任意输入的两整数的最小公倍数。

**输入格式要求:\提示信息:\

**输出格式要求:\error!\\n\

程序运行示例如下: Input a,b:16,24

Least Common Multiple of 16 and 24 is 48 注:不允许使用goto语句

答案:

#include intLcm(inta, intb); intmain() {

inta, b;

printf(\ scanf(\ if(Lcm(a,b) > 0)

printf(\Common Multiple of %d and %d is %d\\n\a, b, Lcm(a, b)); else

printf(\ }

intLcm(inta, intb) {

inti;

if(a > 0 && b > 0) {

for(i = 1;i < a*b;i++) {

if((i % a == 0) && (i % b == 0)) returni; } } else

return-1; }

--------------------34 35.

输入某班学生某门课的成绩(最多不超过40人), 当输入为负值时,表示输入结束,

用函数编程统计成绩不低于平均分的学生人数。 要求:

(1)按如下函数原型进行编程:

int GetAboveAver(int score[], int n); (2)在主函数中: 输入学生成绩,

然后调用函数GetAboveAver计算成绩不低于平均分的学生人数, 最后输出该人数。 要求:

(1)学生成绩和平均分均定义为int类型 (2)**无输入提示信息 **输入格式为:\

**输出格式为:\

答案:

#include

inta[40] = { 0 }, i = 0;

intGetAboveAver(intscore[], intn); intmain()

{

for(i; i <= 40; i++) {

intb = 0;

scanf(\ if(b >= 0)

a[i] = b; else

break; }

GetAboveAver(a, i); }

intGetAboveAver(intscore[], intn) {

intsum = 0, c; intd, e = 0;

for(c = 0;c < i; c++) {

sum = sum + score[c]; }

d = sum / i;

for(c = 0;c < i; c++) {

if(score[c] >= d) e++; else

continue; }

printf(\ return0; }

----------------------------35 36.

从键盘任意输入10个整数存入一个数组中,

然后任意输入一个整数x,采用顺序查找法,在数组中查找该数, 如果找到,则函数返回该数在数组中的下标位置, 并在主函数中打印该值;

如果没有找到,则返回-1,并在主函数中打印“Not found!”。 要求按如下函数原型编程实现查找功能。 int Search(int a[], int n, int x); 在主函数中调用函数Search顺序查找x, 然后在主函数中打印查找结果。

要求必须按照题目要求和用函数编程,否则不给分。

**要求输入10个整数的提示信息格式为:

\(每输入一个数,键一次回车); **要求输入整数x的提示信息格式为: \

**要求输出格式为:

找到时的打印格式为\没找到时的打印格式为\

答案:

#include

intSearch(inta[], intn, intx); intb[10] = {0}; intmain() {

intx, n;

printf(\ for(x = 0; x < 10; x++) {

scanf(\ b[x] = n; }

printf(\ scanf(\ Search(b,n,x);

if(Search(b,n,x) > 0)

printf(\ else

printf(\ }

intSearch(inta[], intn, intx ) {

for(n = 0; n < 10; n++) {

if(a[n] == x) returnn; else

continue; }

return-1; }

-------------------36 37.

利用一个字符数组作函数参数,实现字符串(最大长度为80个字符 )的逆序存放。

要求如下:

(1)在子函数Inverse中实现字符串的逆序存放。函数原型为: void Inverse(char str[]); (2)在主函数中

从键盘输入字符串(使用gets函数) 然后,调用Inverse函数, 最后,输出逆序后的字符串。

(3)**输入提示信息:\ **输出提示信息:\ **输出格式:\

注:不能使用指针、结构体、共用体、文件、goto、枚举类型进行编程,主函数不能使用int main和return 0。

答案:

#include char str_1[81];

void Inverse(char str[]); int main() { }

void Inverse(charstr[]) { }

-----------------------37 38.

char b; int a, c;

for (a = 0;a < 81;a++) { }

for (c = 0;c < (a) / 2.0; c++) { }

printf(\); printf(\, str);

b = str[c];

str[c] = str[(a - 1) - c]; str[(a - 1) - c] = b; if (str[a] == '\\0')

break; continue; else

printf(\); gets(str_1); Inverse(str_1);

从键盘任意输入一个字符串,计算其实际字符个数并打印输出,即不使用字符串处理函数strlen()编程实现strlen()的功能。

**输入格式要求:\提示信息:\**输出格式要求:\程序的运行示例如下:

Please enter a string:Hello China The length of the string is: 11

答案:

#include main() {

inta;

charstr[100];

printf(\ gets(str);

for(a = 0;a <100; a++) {

if(str[a] == '\\0') break; else

continue; }

printf(\ }

----------------------38 39.

输入一行字符,统计其中的英文字符、数字字符、空格字符,以及其他字符的个数。请找出以下程序的错误,并改正之。 #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

if (a=

letter ++; }

else if (0=

digit ++; }

else if (str[i]=' ' ) { space ++; } else

other ++; }

printf(\英文字符数:%d\\n\ printf(\数字字符数:%d\\n\ printf(\空格数:%d\\n\

printf(\其他字符数:%d\\n\}

答案:

#include #include

#define ARR_SIZE 80

main() {

charstr[ARR_SIZE]; int len, i;

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

printf(\请输入一个字符串:\ gets(str);

len = strlen(str);

for(i = 0; i <= len; i++) {

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

}

}

{

letter++; }

elseif('0'<= str[i]&&str[i] <= '9') {

digit++; }

elseif(str[i] == ' ') {

space++; } else

other++;

printf(\英文字符数:%d\\n\ printf(\数字字符数:%d\\n\ printf(\空格数:%d\\n\

printf(\其他字符数:%d\\n\

--------------------39 40.

编程判断输入的一个字符串是否是“回文”。所谓“回文”字符串就是左读和右读都一样的字符串。例如: \就是一个回文字符串。

输入提示信息:\输入格式:gets()

判断是回文的输出提示信息:\

判断不是回文的输出提示信息:\

程序运行示例1: Input a string: abcba↙

This string is a plalindrome.

程序运行示例2: Input a string: friend↙

This string is not a plalindrome.

答案:

#include charstr_1[81];

voidInverse(charstr[]); intmain()

{

printf(\ gets(str_1); Inverse(str_1); }

voidInverse(charstr[]) {

charb; inta, c;

for(a = 0;a < 81;a++) {

if(str[a] == '\\0') break; else

continue; }

for(c = 0;c < (a) / 2.0; c++) {

if(str[c] == str[(a - 1) - c]) continue; else {

printf(\plalindrome.\

return; } }

printf(\ }

------------------------------40 41.

编程实现从键盘输入5个国名(每个国名最长80个字符), 找出并输出按字典顺序排在最前面的国名 要求:

(1)用gets输入字符串。 (2)

**输入提示信息为:\**输出格式为:\

答案:

#include main() {

inti;

}

chara[5][81] = {0}, b, c;

printf(\ for(i = 0; i < 5;i++) {

gets(a[i]); }

b = a[0][0];

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

if(a[i][0] < b) {

b = a[i][0]; c = i; }

elseif(a[i][0] == b) {

if(a[i][1] < a[i - 1][1]) c = i; else

c = i - 1; } else

continue; }

printf(\

---------------41 42.

一个n位正整数如果等于它的n个数字的n次方和,该数称为n位自方幂数。设计求3~6位自方幂数。 **输出格式要求:\位自幂数有:\每位完后换行)

程序运行示例如下:

3位自幂数有:153 370 371 407 4位自幂数有:1634 8208 9474 5位自幂数有:54748 92727 6位自幂数有:548834 尚未完成

---------------------42 43.

93084

从键盘为3*3的矩阵输入数据,找出主对角线上最大的元素,以及所在的行号。 **输入提示信息:无 **输入格式要求:\

**输出格式要求:\程序运行示例如下:

1 2 3 4 5 6 7 8 9

max=9 ,row=2

注:不允许使用goto语句

答案:

#include

main()

{ inti, j, row = 0, max; inta[3][3];

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

{ for(j = 0; j < 3; j++)

{

scanf(\ } }

max = a[0][0];

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

{ if(max < a[i][i])

{

max = a[i][i]; row = i; } }

printf(\ }

--------------------43 44.

任意输入英文的星期几,通过查找星期表,输出其对应的数字, 若查到表尾,仍未找到,则输出错误提示信息。

**输入格式要求:\提示信息:\**输出格式要求:\查找表中信息:

\\

程序运行示例1如下: Please enter a string:

Monday

Monday is 1

程序运行示例2如下: Monkey

Not found!

答案:

#include #include #define WEEKDAYS 7

#define MAX_STR_LEN 10 intmain()

{ inti, pos;

intfindFlag = 0; charx[MAX_STR_LEN];

charweekDay[][MAX_STR_LEN] = {\\

printf(\ scanf(\

for(i = 0; i < WEEKDAYS && !findFlag; i++)

{ if(strcmp(x, weekDay[i]) == 0)

{ pos = i;

findFlag = 1; } }

if(findFlag)

{ printf(\ } else

{ printf(\ }

return0; }

-----------------------44 45.

有一个3*4的矩阵,求其中的最大元素的值。矩阵为: {{1,3,5,7},{2,4,6,8},{15,17,34,12}};

**输出格式要求:\程序运行示例如下: max value is 34

答案:

#include main() {

inta[3][4] = {{1,3,5,7},{2,4,6,8},{15,17,34,12}}; inti, j, c; c = a[0][0];

for(i = 0; i < 3; i++) {

for(j = 0; j < 4; j++) {

if(a[i][j] >= c) c = a[i][j]; else

continue; } }

printf(\ }

-------------------45 46.

按如下函数原型编写程序,输入n×n阶矩阵,用函数编程计算并输出其两条对角线上的各元素之和。

void InputMatrix(int a[N][N], int n); int AddDiagonal(int a[N][N], int n); 输入提示信息: \

\输入格式:\

输出提示信息和输出格式:\

答案:

#include #define PL 50 main() {

inta[PL][PL];

inti, j, n, sum = 0; printf(\ scanf(\

printf(\ for(i = 0; i < n; i++)

}

for(j = 0; j < n; j++) {

scanf(\ }

for(i = 0; i < n; i++)

for(j = 0; j < n; j++) {

if(i == j || (i + j) == (n - 1)) sum = sum + a[i][j]; }

printf(\

------------------46 47.

有如下3*4的矩阵,求出其中值最大的元素的值。 1 2 3 4 9 8 7 6 10 -1 -4 4

在对数组进行初始化时,给出上面数据。

**要求输入提示信息为:无输入提示信息和输入数据 **要求输出格式为:\

答案:

#include main() {

inta[3][4] = { { 1,2,3,4 },{ 9,8,7,6 },{ 10,-1,-4,4 } }; inti, j, c; c = a[0][0];

for(i = 0; i < 3; i++) {

for(j = 0; j < 4; j++) {

if(a[i][j] >= c)

c = a[i][j]; else

continue; } }

printf(\ }

--------------------47 48.

输入一个正整数n,再输入n个学生的成绩,计算平均分,并统计不及格成绩的个数。

**输入格式要求:\提示信息:\grade #%d: \提示信息:\n: \

**输出格式要求:\程序运行示例如下: Enter n: 4

Enter grade #1: 67 Enter grade #2: 54 Enter grade #3: 88 Enter grade #4: 73 Grade average = 70.50 Number of failures = 1

答案:

#include doublea[40] = { 0 }; inti = 0;

intGetAboveAver(doublescore[], intn); intmain() {

intn;

printf(\ scanf(\ for(i; i < n; i++) {

printf(\ doubleb = 0; scanf(\ if(b >= 0)

a[i] = b; else

break; }

GetAboveAver(a, n); }

intGetAboveAver(doublescore[], intn) {

int c;

doublesum = 0, d; int e = 0;

for(c = 0;c < i; c++) {

sum = sum + score[c]; }

d = sum / i;

}

printf(\ for(c = 0;c < i; c++) {

if(score[c] < 60) e++; else

continue; }

printf(\ return0;

---------------------48 49.

直角三角形的三边满足a^2+b^2=c^2,如果三边都是整数,则称a、b、c为一组勾股数。

编程输出每边长都不大于20的所有勾股数。 **输入提示信息格式: 无 **输入数据格式要求: 无

**输出数据格式要求: \

答案:

#include #include main() {

inta, b, c;

for(a = 1; a <= 20; a++)

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

for(c = 1;c <= 20; c++) {

if(c >= b && b >=a)

if(pow(c,2) == pow(b,2)+pow(a,2)) printf(\n\

} }

---------------------49 50.

求菲波那奇数列:数列1、1、2、3、5、8、13、21、?,是著名的菲波那奇数列,其递推通项公式为:U_1=U_2=1, (n=1,2)U_n=U_{n-1}+U_{n-2},(n>=3) 求出第n项的值,请编写程序。

**输入格式要求:\提示信息:\**输出格式要求:\程序运行示例如下: Input n=?10

No. 10 is 55

答案:

#include intFct(intn); main() {

intn;

printf(\ scanf(\

printf(\ }

intFct(intn) {

if(n <= 2) return1; else

returnFct(n-1)+Fct(n - 2); }

-----------------------50 51.

下面程序的功能是读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。找出其中的错误,并改正之。 #include \ main()

{ inti,a,n=1; while(n<=7) {

do

{

scanf(\ }while(a<1 && a>50); for(i=1;i<=a;i++) printf(\ printf(\ n++; } }

答案:

#include \ intmain() {

inti, a, n = 1; while(n <= 7) {

}

scanf(\

if(a >= 1 && a <= 50);

for(i = 1;i <= a;i++) printf(\

printf(\ n++; }

-----------------51 52.

编写程序:有1,2,3,4共四个数字,能组成多少个互不相同的且无重复数字的三位数,都是多少。

**输出格式要求:\共有%d种组合!\程序运行示例如下: 1 2 3 1 2 4 1 3 2 1 3 4 1 4 2 1 4 3 2 1 3 2 1 4 2 3 1 2 3 4 2 4 1 2 4 3 3 1 2 3 1 4 3 2 1 3 2 4 3 4 1 3 4 2 4 1 2 4 1 3 4 2 1 4 2 3 4 3 1 4 3 2

共有24种组合!

答案:

#include main() {

int a, b, c, d = 0; for (a = 1;a <= 4;a++) for (b = 1; b <= 4; b++ ) for (c = 1;c <= 4; c++) {

if(a != b && a != c && b != c) {

printf(\ d++; } }

printf(\共有%d种组合!\}

---------------------------------52 53.

用while语句编程,输入一组整型数据,然后显示每次将输入数据进行累加运算后的结果。当输入0时,停止输入数据,结束程序的运行。 **输入格式要求:\提示信息:\**输出格式要求:\程序运行示例如下: Input num:1 sum = 1 Input num:2 sum = 3 Input num:3 sum = 6 Input num:4 sum = 10 Input num:0 sum = 10

答案:

#include main() {

int sum = 0,num; do {

printf(\ scanf(\ sum = sum + num;

printf(\ }while(num); }

--------------------------------------53 54.

利用pi/2 = (2/1)*(2/3)*(4/3)*(4/5)*(6/5)*(6/7)*...前100项之积,编程计算pi的值。

为保证计算精度,请用double类型计算。 **输出格式要求:\

答案:

#include main() {

doubled = 1, pi; inti, j;

for(i = 1; i <= 50; i++) for(j = 1; j <= 2; j++) {

if(j == 1)

d = d * (double)(i*2)/(i*2 - 1); else

d = d * (double)(i*2)/(i*2 + 1); } pi = 2*d;

printf(\ }

------------------------54 55.

利用π4=1?13+15?17+…,编程计算π的近似值,直到最后一项的绝对值小于10?4时为止,输出π的值并统计累加的项数。 **输出格式要求:\采用double定义累加和变量

答案:

#include intmain() {

doubled = 0, pi; inti, j = 0, k = 1;

for(i = 1;1 / (double)i >= 0.0001 || 1 /(double) i < -0.0001; i = i + 2) {

if(k % 2 == 0) {

d = d - 1 / (double)i; j++;

}

k++; } else {

d = d + 1 / (double)i; j++; k++; } }

d = d + 1/(double)i; j++;

pi = 4 * d;

printf(\

---------------------------------55 56.

从键盘输入10个整数,编程计算并输出其最大值、最小值及其所在元素的下标位置。

输入格式:\

输出格式:\\输入样例:

1 2 3 4 5 6 7 8 9 10 输出样例: max=10, pos=9 min=1, pos=0

答案:

#include main() {

inta[10] = {0}, j, i = 0, k = 0; intc, b;

for(j = 0; j < 10; j++) {

scanf(\ if(a[j] > i) {

i = a[j]; c = j; } if(j == 0) {

k = a[j]; b = j;