您的当前位置:首页C语言练习题答案

C语言练习题答案

2024-05-02 来源:爱问旅游网
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 = %.2f\\n\"

程序运行示例如下:

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

area =

答案:#include<>

#include<>

int main(void)

{

float a, b, c, s, area;

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

scanf(\"%f,%f,%f\

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

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

printf(\"area = %.2f\\n\

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\

b = a/1000;

c = a%1000/100;

d = a%100/10;

e = a%10;

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

printf(\"%d\

return 0;

}

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

3.有关输入输出问题。

输入为:12a↙

b↙

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

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

#include <>

main()

{

int b;

unsigned short a = 65535;

short k = a;

char c, d;

int f, g;

b = - 1) / 10;

scanf(\"%c\

scanf(\"%c\

scanf(\"%d\

scanf(\"%d\

printf(\"%c,%c,%c,%c,%f,%d\

}

答案:#include <>

main()

{

double b;

int a = 65535;

char c, d;

int f, g;

b = - 1) / 10;

scanf(\"%c\

scanf(\"%c\

scanf(\"%c\\

scanf(\"%c\

printf(\"%c,%c,%c,%c,%f,%d\

}

--------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{

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()

{

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' <= 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(\"英文字符数:%d\\n\

printf(\"数字字符数:%d\\n\

printf(\"空格数:%d\\n\

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

}

--------------------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 number\\n\"

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

不完整答案:#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\

c = Fun(b);

if(0 == c)

printf(\"%d is not a prime number\\n\

else

printf(\"%d is a prime number\\n\

}

参考答案:#include \"\"

int Fun(int m);

int main()

{

int m, flag;

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

do

{

scanf(\"%d\

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

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

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

程序运行示例如下:

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,......,%d\\n\", 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 number\\n\"

否则输出用\"%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\

if(IsPrime(m))

{

printf(\"It is a prime number\\n\");

}

else

{

printf(\"%d = \

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&&flag;i++)

{

if(x%i==0)

{

flag=0;

}

}

return flag;

}

void OutputPrimeFactor(int x)

{

int i;

for(i=2;i{

if(x%i==0)

{

printf(\"%d * \

OutputPrimeFactor(x/i);

return;

}

}

printf(\"%d\

}

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

8.

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

**输入格式要求:\"%d\" 提示信息:\"Input number:\"**输出格式要求:\"number of decimal form:%d\\n\" \" it\\'s 程序运行示例如下: Input number:876

number of decimal form:876

it's binary form: 000000000000000000000000答案:

binary form: \"

#include <> #include <> int main() { }

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

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

***输入提示信息**:\"Input n:\" ***输入数据格式**:\"%d\" ***输出数据格式**:\"%d\" 示例 输入: 257 输出:

Please input n:263

int a; char b[32];

printf(\"Input number:\"); scanf(\"%d\", &a);

printf(\"number of decimal form:%d\\n\", a); printf(\" it\\'s binary form: \"); printf(\"%s\\n\", itoa(a, b, 2));

答案: #include<> int main() {

int n, i = 1, k;

printf(\"Please input n:\"); scanf(\"%d\ for (k = n + 1;i;k++) {

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

continue; if (i == k) {

printf(\"%d\ 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 number\\n\" \"%d is not a perfect number\\n\"

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

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

int m;

printf(\"Input m:\\n\"); scanf(\"%d\ if (IsPerfect(m))

printf(\"%d is a perfect number\\n\ else

printf(\"%d is not a perfect number\\n\}

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.

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

**输入格式要求:\"%d,%d\" 提示信息:\"Input a,b:\" **输出格式要求:\"max = %d\\n\"

程序运行示例如下: 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(\"Input a,b:\"); scanf(\"%d,%d\

printf(\"max = %d\\n\}

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

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

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

unsigned int n = 0; unsigned long b = 0; printf(\"Input n(n>0):\"); scanf(\"%u\ for (b;n;n--) {

b = b +sum_s(n); }

printf(\"sum = %lu\\n\}

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\" \"------------------------------\\n\" \"1. 办公室管理 5. 财务管理 \\n\" \"2. 教务管理 6. 图书管理 \\n\" \"3. 科研管理 7. 设备管理 \\n\" \"4. 人事管理 8. 后勤管理 \\n\" \"0. 退出系统\\n\"

\"------------------------------\\n\"

\"请您在上述功能中选择(0——8):\\n\" 答案: #include <> main() {

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

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

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

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

**输入格式要求:\"%d\" 提示信息:\"Input n:\" **输出格式要求:\"%d! = %ld\\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(\"Input n:\"); scanf(\"%d\ for (b = 1;b <= n;b++) {

printf(\"%d! = %ld\\n\ } }

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

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

**输入格式要求:\"%d%d\" 提示信息:\"请输入两个整数:\" **输出格式要求: \"%13d Remainder = %d\\n\" \" ------\\n\" \"%5d ) %5d\" 答案: #include <>

main() {

int a, b, c, d;

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

printf(\"%13d Remainder = %d\\n\ printf(\" ------\\n\"); printf(\"%5d ) %5d\}

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

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

然后输入一个十进制数并回车,然后程序以合适的消息形式输出转换后的华氏温度。 程序使用如下的公式完成转换:摄氏温度 = *(华氏温度 – ) / **输入格式要求:\"%lf\" 提示信息:\"Please input cels: \" **输出格式要求:\"The fahr is: %.2f\" 答案: #include <> main() {

double a,b;

printf(\"Please input cels: \");

scanf(\"%lf\ b = * a)/ + ;

printf(\"The fahr is: %.2f\}

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

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

然后输入一个十进制数并回车,然后程序以合适的消息形式输出转换后的华氏温度。 程序使用如下的公式完成转换:摄氏温度 = *(华氏温度 – ) / **输入格式要求:\"%lf\" 提示信息:\"Please input fahr: \" **输出格式要求:\"The cels is: %.2f\" 答案: #include <> main() {

double a,b;

printf(\"Please input fahr: \"); scanf(\"%lf\ b = * (a - / ;

printf(\"The cels is: %.2f\}

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

编写一个程序,输入一个3位整数,要求逆序输出对应的数。例如:输入123,则输出321。

**输入格式要求:\"%d\" 提示信息:\"Please enter a positive integer: \" **输出格式要求:\"%d-->%d\\n\" 程序运行示例如下:

Please enter a positive integer: 345 345-->543 答案: #include<> int main(void) {

int a, b, c, d,e;

printf(\"Please enter a positive integer: \"); scanf(\"%d\ b = a/100; d = a%100/10; e = a%10;

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

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

计算两个数的平方和

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

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

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

输入格式: \"%f,%f\"

输出格式:

输入提示信息:\"Please input x and y:\\n\" 输出格式:\"result=%.2f\\n\" 答案: #include <> #include <> main() {

float x,y,z;

printf(\"Please input x and y:\\n\"); scanf(\"%f,%f\ z = pow(x,2) + pow(y,2); printf(\"result=%.2f\\n\}

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

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

**输入格式要求:\"%d%d\" 提示信息:\"请输入两个整数:\" **输出格式要求:\"%d is %.1f percent of %d\" 答案: #include <> main() {

int a, b; float c;

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

printf(\"%d is %.1f percent of %d\}

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

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

area= 答案: #include<> #include<> int main(void) {

float a, b, c, s, area; printf(\"Enter 3 floats:\"); scanf(\"%f,%f,%f\ s = (a + b + c) / 2;

area = sqrt(s*(s - a)*(s - b)*(s - c)); printf(\"area=%.2f\\n\ return 0; }

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

写一个程序计算长为厘米,宽为厘米,高为10厘米的盒子的体积和表面积。 程序说明:采用直接赋值,不用输入。 **输出格式要求\"area=%.2f,volume=%.2f\" 答案: #include <> main() {

float a, b;

a = * + *10 +10 * *2;

b = * * 10;

printf(\"area=%.2f,volume=%.2f\} 23.

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

**输入格式要求:\"%d\" 提示信息:\"Input n:\" \"n<0, data error!\\n\" **输出格式要求:\"%d! = %ld\\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(\"Input n:\"); scanf(\"%d\ while (n<0)

{

printf(\"n<0, data error!\\n\"); goto o; }

printf(\"%d! = %ld\\n\}

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

用递归方法编程计算Fibonacci数列的前N项。其中fib(0)=0,fib(1)=1,fib(n)=fib(n-1)+fib(n-2)。 **输入格式要求:\"%d\" 提示信息:\"Input n:\" **输出格式要求:\"Fib(%d)=%d\\n\" 程序运行示例如下: 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(\"Input n:\"); scanf(\"%d\ for (a = 1; a <= n;a++) {

printf(\"Fib(%d)=%d\\n\ } }

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

利用求阶乘函数Fact(),编程计算并输出从1到n之间所有数的阶乘值。 **输入格式要求:\"%u\" 提示信息:\"Input n(n>0):\" **输出格式要求:\"%d! = %lu\\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(\"%d! = %lu\\n\ } } main() {

unsigned int i;

printf(\"Input n(n>0):\"); scanf(\"%u\ Fact(i); }

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

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

#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(\"x = %d\\n\ 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(\"x = %d\\n\ 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

输入格式: \"%d\"

输出格式:

输入信息提示:\"Input an integer number:\\n\" 偶数输出格式:\"%d is an even number\\n\" 奇数输出格式:\"%d is an odd number\\n\" 答案: #include <> main()

{ }

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

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

\"Input array size m,n:\" \"Input %d*%d array:\\n\" 输入格式:\"%d,%d\"

输出提示信息和格式:\"maxScore = %d, class = %d, number = %d\\n\" 答案: #include <> #include <>

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

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

int n, m;

printf(\"Input an integer number:\\n\"); scanf(\"%d\m = n % 2; if (m)

printf(\"%d is an odd number\\n\

else

printf(\"%d is an even number\\n\

int main() {

int *pScore, m, n, maxScore, row, col; printf(\"Input array size m,n:\"); scanf(\"%d,%d\

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

printf(\"No enough memory!\\n\"); exit(0); }

InputScore(pScore, m, n);

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

printf(\"maxScore = %d, class = %d, number = %d\\n\ free(pScore); /* 释放动态内存 */ return 0; }

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

printf(\"Input %d*%d array:\\n\ for (i = 0; i < m; i++) {

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

{

scanf(\"%d\ } }

}

/* 函数功能:计算任意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(\"%d%d\ *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(\"%d%d\ *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 **输入提示信息: 无 **输入数据格式要求: 无 **输出数据格式要求: \"%d\\n\" 注:不允许使用goto语句 答案: #include <> int fun(int m); main() {

int a;

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

{

if (fum(a))

printf(\"%d\\n\ 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);

**输入要求:\"%d\" **输出要求:

\"Total students are %d\\n\" \"Average score is %d\\n\"

\"Students of above average is %d\\n\" 答案: #include <>

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

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

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

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

printf(\"Total students are %d\\n\GetAboveAver(a, i);

int b = 0; scanf(\"%d\if (b >= 0)

a[i] = b;

else

break;

}

int sum = 0, c; int d, e = 0;

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

sum = sum + score[c];

d = sum / i;

printf(\"Average score is %d\\n\for (c = 0;c < i; c++) { }

printf(\"Students of above average is %d\\n\return 0;

if (score[c] > d)

e++;

else

continue;

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

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

计算并输出表达式的值,其中算术运算符包括:加(+)、减(-)、乘(*)、除(/)、^(次幂)。

要求使其能进行浮点数的算术运算,同时允许使用字符*、x与X作为乘号,并且允许输入的算术表达式中的操作数和运算符之间可以加入任意多个空格符。

**输入格式要求:\"%f %c%f\" 提示信息:\"Please enter the expression:\\n\"

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

Please enter the expression: + + =

程序运行示例2如下:

Please enter the expression: - - =

程序运行示例3如下:

Please enter the expression: * * =

程序运行示例4如下:

Please enter the expression: x * =

程序运行示例5如下:

Please enter the expression: X * =

程序运行示例6如下:

Please enter the expression: / / =

程序运行示例7如下:

Please enter the expression: / 0Division by zero!

程序运行示例8如下:

Please enter the expression: ^ ^ =

程序运行示例9如下:

Please enter the expression: \\ Invalid operator! */

#include <> #include <> int main() {

float a, b; char c;

printf(\"Please enter the expression:\\n\"); scanf(\"%f %c %f\",&a, &c, &b); if (c == '+')

printf(\"%f + %f = %f \\n\", a, b, a + b);

else if (c == '-')

printf(\"%f - %f = %f \\n\",a, b, a - b);

else if (c == '/') {

if (b != 0)

printf(\"%f / %f = %f \\n\", a, b, a / b);

}

}

else

printf(\"Division by zero!\");

else if (c == '*' || c == 'x' || c == 'X')

printf(\"%f * %f = %f \\n\", a, b, a*b);

else if (c == '^')

printf(\"%f ^ %f = %f \\n\",a, b,pow(a,b));

else

printf(\"Invalid operator! \\n\");

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

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

int MinCommonMultiple(int a, int b) main() {

int a, b, x;

printf(\"Input a,b:\"); scanf(\"%d,%d\

x=MinCommonMultiple(int a,int b); printf(\"MinCommonMultiple = %d\\n\ }

int MinCommonMultiple(int a, int b); {

int i;

for (i=1; iif (i%a==0 || i%b==0) return i; } }

答案: #include <>

int MinCommonMultiple(int a, int b);

int main() { }

int MinCommonMultiple(int a, int b) {

int i;

for (i = 1; i <= a*b; i++) int a, b, x;

printf(\"Input a,b:\"); scanf(\"%d,%d\", &a, &b); x = MinCommonMultiple(a, b);

printf(\"MinCommonMultiple = %d\\n\", x);

}

{ }

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

return i;

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

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

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

n项之和为: 答案:

#include <>

int fuc(int m, int n); int sum_s(int i); int main() {

int m, n;

printf(\"请输入m,n的值( m>n ):\\n\"); scanf(\"%d %d\

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

}

int fuc(int m, int n) {

int p;

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

int sum_s(int i) {

int s_ = 1, a; for (a = 1;a <=i;a++) {

s_ = s_ *a; }

return s_; }

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

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

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

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

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

**输出格式要求:\"Least Common Multiple of %d and %d is %d\\n\" \"Input error!\\n\"

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

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

答案:

#include <>

int Lcm(int a, int b); int main() {

int a, b;

printf(\"Input a,b:\"); scanf(\"%d,%d\ if(Lcm(a,b) > 0)

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

printf(\"Input error!\\n\"); }

int Lcm(int a, int b) {

int i;

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

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

{

if ((i % a == 0) && (i % b == 0)) return i; } } else return -1; }

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

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

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

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

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

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

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

**输出格式为:\"Students of above average is %d\\n\"

答案:

#include <>

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

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

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

int b = 0; scanf(\"%d\ if (b >= 0) a[i] = b; else

break; }

GetAboveAver(a, i); }

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

int sum = 0, c; int d, 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(\"Students of above average is %d\\n\ return 0; }

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

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

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

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

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

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

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

找到时的打印格式为\"Subscript of x is %d\\n\" 没找到时的打印格式为\"Not found!\\n\"

答案:

#include <>

int Search(int a[], int n, int x); int b[10] = {0}; int main() {

int x, n;

printf(\"Input 10 numbers:\\n\"); for (x = 0; x < 10; x++) {

scanf(\"%d\ b[x] = n; }

printf(\"Input x:\\n\"); scanf(\"%d\ Search(b,n,x);

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

printf(\"Subscript of x is %d\\n\

else

printf(\"Not found!\\n\"); }

int Search(int a[], int n, int x ) {

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

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

continue; } return -1; }

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

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

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

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

(3)**输入提示信息:\"Input a string:\\n\" **输出提示信息:\"Inversed results:\\n\" **输出格式:\"%s\\n\"

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

答案: #include<> char str_1[81];

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

void Inverse(char str[]) {

char b; int a, c;

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

if (str[a] == '\\0')

break;

printf(\"Input a string:\\n\"); gets(str_1); Inverse(str_1);

else

}

}

continue;

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

printf(\"Inversed results:\\n\"); printf(\"%s\\n\", str);

b = str[c];

str[c] = str[(a - 1) - c]; str[(a - 1) - c] = b;

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

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

**输入格式要求:\"%s\" 提示信息:\"Please enter a string:\" **输出格式要求:\"The length of the string is: %u\\n\" 程序的运行示例如下:

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

答案:

#include<> main() {

int a;

char str[100];

printf(\"Please enter a string:\"); gets(str);

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

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

printf(\"The length of the string is: %u\\n\ }

----------------------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; iif (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() {

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 <= len; i++) {

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(\"英文字符数:%d\\n\ printf(\"数字字符数:%d\\n\ printf(\"空格数:%d\\n\ printf(\"其他字符数:%d\\n\ }

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

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

输入提示信息:\"Input a string:\\n\" 输入格式:gets()

判断是回文的输出提示信息:\"This string is a plalindrome.\" 判断不是回文的输出提示信息:\"This string is not a plalindrome.\"

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

This string is a plalindrome.

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

This string is not a plalindrome.

答案:

#include<> char str_1[81];

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

printf(\"Input a string:\\n\"); gets(str_1); Inverse(str_1); }

void Inverse(char str[]) {

char b; int a, c;

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

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

continue; }

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

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

printf(\"This string is not a plalindrome.\");

return; } }

printf(\"This string is a plalindrome.\"); }

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

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

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

**输入提示信息为:\"Input five countries' names:\\n\" **输出格式为:\"The minimum is:%s\\n

答案:

#include<> main() {

int i;

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

printf(\"Input five countries' names:\\n\"); 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; }

else if (a[i][0] == b) {

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

c = i - 1; } else

continue; }

printf(\"The minimum is:%s\\n\ }

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

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

程序运行示例如下:

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

93084

尚未完成

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

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

**输出格式要求:\"max=%d ,row=%d\" 程序运行示例如下: 1 2 3 4 5 6 7 8 9 max=9 ,row=2

注:不允许使用goto语句

答案:

#include <> main()

{ int i, j, row = 0, max; int a[3][3];

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

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

scanf(\"%d\ } }

max = a[0][0];

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

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

{

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

printf(\"max=%d ,row=%d\ }

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

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

**输入格式要求:\"%s\" 提示信息:\"Please enter a string:\\n\" **输出格式要求:\"%s is %d\\n\" \"Not found!\\n\" 查找表中信息:

\"Sunday\\"Saturday\"

程序运行示例1如下:

Please enter a string: Monday Monday is 1

程序运行示例2如下: Monkey Not found!

答案:

#include <> #include <> #define WEEKDAYS 7 #define MAX_STR_LEN 10 int main()

{ int i, pos; int findFlag = 0; char x[MAX_STR_LEN];

char weekDay[][MAX_STR_LEN] = {\"Sunday\\"Wednesday\

printf(\"Please enter a string:\\n\"); scanf(\"%s\

for (i = 0; i < WEEKDAYS && !findFlag; i++) { if (strcmp(x, weekDay[i]) == 0)

{ pos = i; findFlag = 1; } }

if (findFlag)

{ printf(\"%s is %d\\n\ } else

{ printf(\"Not found!\\n\"); }

return 0; }

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

有一个3*4的矩阵,求其中的最大元素的值。矩阵为: {{1,3,5,7},{2,4,6,8},{15,17,34,12}}; **输出格式要求:\"max value is %d\\n\" 程序运行示例如下: max value is 34

答案:

#include <>

main() {

int a[3][4] = {{1,3,5,7},{2,4,6,8},{15,17,34,12}}; int i, 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(\"max value is %d\\n\ }

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

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

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

\"Input %d*%d matrix:\\n\" 输入格式:\"%d\"

输出提示信息和输出格式:\"sum = %d\\n\"

答案:

#include <> #define PL 50 main() {

int a[PL][PL]; int i, j, n, sum = 0; printf(\"Input n:\"); scanf(\"%d\

printf(\"Input %d*%d matrix:\\n\ for (i = 0; i < n; i++) for(j = 0; j < n; j++) {

scanf(\"%d\ }

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(\"sum = %d\\n\

}

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

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

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

**要求输入提示信息为:无输入提示信息和输入数据 **要求输出格式为:\"max=%d\\n\"

答案:

#include <> main() {

int a[3][4] = { { 1,2,3,4 },{ 9,8,7,6 },{ 10,-1,-4,4 } }; int i, 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(\"max=%d\\n\ }

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

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

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

**输出格式要求:\"Grade average = %.2f\\n\" \"Number of failures = %d\\n\" 程序运行示例如下: Enter n: 4

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

答案:

#include <>

double a[40] = { 0 }; int i = 0;

int GetAboveAver(double score[], int n); int main()

{

int n;

printf(\"Enter n: \"); scanf(\"%d\ for (i; i < n; i++) {

printf(\"Enter grade #%d: \ double b = 0; scanf(\"%lf\ if (b >= 0) a[i] = b; else

break; }

GetAboveAver(a, n); }

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

int c;

double sum = 0, d; int e = 0;

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

sum = sum + score[c];

}

d = sum / i;

printf(\"Grade average = %.2f\\n\ for (c = 0;c < i; c++) {

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

continue; }

printf(\"Number of failures = %d\\n\ return 0; }

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

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

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

**输出数据格式要求: \"a=%d\b=%d\c=%d\\n\"

答案:

#include <> #include<>

main() {

int a, 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(\"a=%d\b=%d\c=%d\\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项的值,请编写程序。

**输入格式要求:\"%d\" 提示信息:\"Input n=?\" **输出格式要求:\"No. %d is %d\\n\" 程序运行示例如下: Input n=?10 No. 10 is 55

答案:

#include<> int Fct(int n);

main() {

int n;

printf(\"Input n=?\"); scanf(\"%d\

printf(\"No. %d is %d\\n\ }

int Fct(int n) {

if(n <= 2) return 1; else

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

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

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

{ int i,a,n=1; while(n<=7) { do {

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

答案:

#include \"\" int main() {

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

scanf(\"%d\ if (a >= 1 && a <= 50); for (i = 1;i <= a;i++) printf(\"*\");

printf(\"\\n\"); n++; } }

-----------------51

52.

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

**输出格式要求:\" % d % d % d\\n\" \"共有%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 % d % d\\n\ d++; } }

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

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

用while语句编程,输入一组整型数据,然后显示每次将输入数据进行累加运算后的结果。当输入0时,停止输入数据,结束程序的运行。 **输入格式要求:\"%d\" 提示信息:\"Input num:\" **输出格式要求:\"sum = %d\\n\" 程序运行示例如下: 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(\"Input num:\"); scanf(\"%d\ sum = sum + num;

printf(\"sum = %d\\n\ }while(num); }

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

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

为保证计算精度,请用double类型计算。 **输出格式要求:\"pi = %f\\n\"

答案:

#include<> main() {

double d = 1, pi; int i, 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(\"pi = %f\\n\

}

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

利用π4=1−13+15−17+…,编程计算π的近似值,直到最后一项的绝对值小于

10−4时为止,输出π的值并统计累加的项数。

**输出格式要求:\"pi = %f\\ncount = %d\\n\" 采用double定义累加和变量

答案:

#include<> int main() {

double d = 0, pi; int i, j = 0, k = 1;

for (i = 1;1 / (double)i >= || 1 /(double) i < ; 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(\"pi = %f\\ncount = %d\\n\ }

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

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

输入格式:\"%d\"

输出格式:\"max=%d, pos=%d\\n\" \"min=%d, pos=%d\\n\" 输入样例:

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

答案:

#include <> main() {

int a[10] = {0}, j, i = 0, k = 0; int c, b;

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

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

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

k = a[j]; b = j; } else if(a[j] < k) {

k = a[j]; b = j; } }

printf(\"max=%d, pos=%d\\n\ printf(\"min=%d, pos=%d\\n\ }

----------------56

57.

冒泡排序(Bubble Sort),也称为沉降排序(Sinking Sort),之所以称其为冒泡排序,是因为算法中值相对较小的数据会像水中的气泡一样逐渐上升到数组的最顶端。与此同时,较大的数据逐渐地下沉到数组的底部。这个处理过程需在整个数组范围内反复执行多遍。每一遍执行时,比较相邻的两个元素。若顺序不对,则将其位置交换,当没有数据需要交换时,数据也就排好序了。编程将排序函数DataSort()改用冒泡法实现。

**输入格式要求:\"%d\" 提示信息:\"Input n:\" \"Input %d numbers:\" **输出格式要求:\"Sorting results:\" \"%4d\" 程序运行示例如下: Input n:10

Input 10 numbers: 2 9 3 4 0 6 8 7 5 1

Sorting results: 0 1 2 3 4 5 6 7 8 9

答案:

#include<>

void DataSort(int a[],int n); main() {

int a[100] = {0}, n,i = 0; printf(\"Input n:\"); scanf(\"%d\

printf(\"Input %d numbers:\ do {

scanf(\"%d\ i++; }while(i < n);

DataSort(a,n); }

void DataSort(int a[],int n) {

int j, t, i;

for(i = 0;i < n; i++) for (j = 1;j < n; j++) if(a[j] < a[j - 1]) {

t = a[j-1]; a[j-1] = a[j]; a[j] = t; }

printf(\"Sorting results:\"); for(i = 0; i < n; i++) printf(\"%4d\ }

------------------------57 58.

冒泡排序

采用冒泡法进行升序排序法的基本原理是:对数组中的n个数执行n-1遍检查操作,在每一遍执行时,对数组中剩余的尚未排好序的元素进行如下操作:对相邻的两个元素进行比较,若排在后面的数小于排在前面的数,则交换其位置,这样

每一遍操作中都将参与比较的数中的最大的数沉到数组的底部,经过n-1遍操作后就将全部n个数按从小到大的顺序排好序了。 程序的某次运行结果如下: Input n:10↙

Input 10 numbers:2 9 3 4 0 6 8 7 5 1↙

Sorting results: 0 1 2 3 4 5 6 7 8 9

输入格式:\"%d\" 输出格式:

输入数据个数提示:\"Input n:\" 输入数据提示:\"Input %d numbers:\" 输出提示:\"Sorting results:\" 输出格式:\"%4d\"

答案:

#include<>

void DataSort(int a[], int n); main() {

int a[100] = { 0 }, n, i = 0; printf(\"Input n:\"); scanf(\"%d\

printf(\"Input %d numbers:\ do {

scanf(\"%d\

i++; } while (i < n); DataSort(a, n); }

void DataSort(int a[], int n) {

int j, t, i;

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

for (j = 1;j < n; j++) if (a[j] < a[j - 1]) {

t = a[j - 1]; a[j - 1] = a[j]; a[j] = t; }

printf(\"Sorting results:\"); for (i = 0; i < n; i++) printf(\"%4d\ }

----------------------------------58

59.(出题人是sb)

程序改错

下面代码的功能是将百分制成绩转换为5分制成绩,具体功能是:如果用户输入的是非法字符或者不在合理区间内的数据(例如输入的是a,或者102,或-45等),

则程序输出 Input error!,否则将其转换为5分制输出。目前程序存在错误,请将其修改正确。并按照下面给出的运行示例检查程序。 #include<> int main() {

int score; char grade;

printf(\"Please input score:\"); scanf(\"%d\

if (score < 0 || score > 100) printf(\"Input error!\\n\"); else if (score >= 90) grade = 'A’; else if (score >= 80) grade = 'B'; else if (score >= 70) grade = 'C'; else if (score >= 60) grade = 'D'; else

grade = 'E';

printf(\"grade:%c\\n\ return 0; }

程序运行结果示例1: Please input score: -1↙

Input error!

程序运行结果示例2: Please input score: 95↙ grade: A

程序运行结果示例3: Please input score: 82↙ grade: B

程序运行结果示例4: Please input score: 72↙ grade: C

程序运行结果示例5: Please input score: 66↙ grade: D

程序运行结果示例6: Please input score: 32↙ grade: E

程序运行结果示例7: Please input score: 127↙ Input error!

输入格式: \"%d\"

输入提示信息:\"Please input score:\\n\" 输入错误提示信息:\"Input error!\\n\"

输出格式:\"grade: %c\\n\" (注意:%c前面有一个空格)

答案:

#include<> int main() {

int score; char grade;

printf(\"Please input score:\\n\"); scanf(\"%d\

if (score < 0 || score > 100) printf(\"Input error!\\n\"); else if (score >= 90) {

grade = 'A';

printf(\"grade: %c\\n\ }

else if (score >= 80) {

grade = 'B';

printf(\"grade: %c\\n\ }

else if (score >= 70) {

grade = 'C';

printf(\"grade: %c\\n\ }

else if (score >= 60) { grade = 'D';

printf(\"grade: %c\\n\ } else

{ grade = 'E';

printf(\"grade: %c\\n\ }

return 0; }

-------------------------59

60.

下面程序用于输入三角形的三条边a,b,c,判断它们能否构成三角形,若能,则指出是何种三角形:等腰三角形、直角三角形、等腰直角三角形,一般三角形。若不能,则输出“不是三角形\\n” 浮点数的运算允许的误差在范围内即可。

请修改下面程序,使其运行结果完全正确。只有全部错误都修改正确才给分,部分错误修改正确不给分。允许修改和增加语句,但是不允许删除语句,也不要修改变量的类型。 #include <> int main() {

float a, b, c; int flag;

scanf(\"%d,%d,%d\

if (a+b>c || b+c>a || a+c>b); {

if (a=b||b=c||c=a) {

printf(\"等腰三角形\\n\"); flag = 0; }

else if (a*a+b*b=c*c || a*a+c*c=b*b || c*c+b*b=a*a)

{

printf(\"直角三角形\\n\"); flag = 0; }

if (!flag) {

printf(\"一般三角形\\n\"); } } else {

printf(\"不是三角形\\n\"); } return 0; }

答案:

#include <> int main() {

float a, b, c; int flag;

scanf(\"%d,%d,%d\ if (a + b>c && b + c>a && a + c>b) {

if ((a == b || b == c || c == a) && (a*a + b*b == c*c || a*a + c*c == b*b || c*c + b*b == a*a)) {

printf(\"等腰直角三角形\\n\"); }

else if (a == b || b == c || c == a) {

printf(\"等腰三角形\\n\"); flag = 0; }

else if (a*a + b*b == c*c || a*a + c*c == b*b || c*c + b*b == a*a) {

printf(\"直角三角形\\n\"); flag = 1; } else {

printf(\"一般三角形\\n\"); } } else {

printf(\"不是三角形\\n\"); }

return 0;

}

------------------60

61.

编写程序实现以下功能:从键盘输入一个大写英文字母,将该字母转换成小写字母后,打印输出转换后的小写字母及其所对应的ASC码值。 **输入提示信息**:\"Enter a capital letter:\\n\" **输入数据格式**:\"%c\" **输出数据格式**:\"%c,%d\\n\"

友情提示:从键盘输入一个字符可用scanf也可用getchar

答案:

#include<> int main() {

char a_;

printf(\"Enter a capital letter:\\n\"); scanf(\"%c\

printf(\"%c,%d\\n\ }

--------------------------------61

62.

编写程序计算圆的面积和周长。已知pi定义为. **输入格式要求:\"%f\" 提示信息:\"请输入半径的值:\" **输出格式要求:\"半径为%的圆的面积为%,圆的周长为%\\n\"

示例运行如下: 请输入圆的半径:

半径为 的圆的面积为 ,圆的周长为

答案:

#include<> #define pi main() {

float r, c, s;

printf(\"请输入半径的值:\"); scanf(\"%f\ c = 2*pi*r; s = pi*r*r;

printf(\"半径为%的圆的面积为%,圆的周长为%\\n\ }

-------------------------62

63.

从键盘任意输入一个3位整数,编程计算并输出它的逆序数(忽略整数前的正负号)。例如,输入-123,则忽略负号,由123分离出其百位1、十位2、个位3,然后计算3*100+2*10+1 = 321,并输出321。 **输入格式要求:\"%d\" 提示信息:\"Input x:\" **输出格式要求:\"y = %d\\n\" 程序运行示例如下: Input x:-123 y = 321

答案:

#include<> int main(void) {

int a, b, c, d, e; printf(\"Input x:\"); scanf(\"%d\ if (a < 0) a = -a; c = a / 100; d = a % 100 / 10; e = a % 10;

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

--------------------------------63

64.

求输入两个数的和、差、积、商和余数(如果是浮点数,则需将其强转为整型后计算余数)。请改正程序中的错误,使它能得出正确的结果。 #include <> main() {

float a, b;

float sum, minus, product, quotient; int remainder;

printf(\"\\n请输入两个数:\\n\"); scanf(\"%f\\n%f\ sum = a + b; minus = a - b; product = a * b; quotient = a / b; remainder = a % b;

printf(\"和为:%.2f\\n\ printf(\"差为:%.2f\\n\ printf(\"积为:%.2f\\n\ printf(\"商为:%.2f\\n\ printf(\"余数为:%d\\n\ }

答案:

#include <> main() {

float a, b;

float sum, minus, product, quotient; int remainder;

printf(\"\\n请输入两个数:\\n\"); scanf(\"%f%f\ sum = a + b; minus = a - b; product = a * b; quotient = a / b;

remainder = (int)a % (int)b; printf(\"和为:%.2f\\n\ printf(\"差为:%.2f\\n\ printf(\"积为:%.2f\\n\ printf(\"商为:%.2f\\n\ printf(\"余数为:%d\\n\ }

---------------------------------64

65.

已知三角形的三边长为a,b,c,计算三角形面积的公式为: area =sqrt(s(s-a)(s-b)(s-c)),s=1/2(a+b+c) 其中,a,b,c为浮点数,sqrt为开平方计算。

要求编写程序,从键盘输入a,b,c的值,计算并输出三角形的面积。 注意:不用判断输入的边长值是否满足三角形要求, 只需进行简单计算即可。

**要求输入提示信息格式为:\"Input a,b,c:\"; **要求输入数据格式:\"%f,%f,%f\" **输出格式要求:\"area=%.2f\\n\"

答案:

#include <> #include<> main() {

float a, b, c,area, s; printf(\"Input a,b,c:\"); scanf(\"%f,%f,%f\ s=(a+b+c)/2;

area =sqrt(s*(s-a)*(s-b)*(s-c)); printf(\"area=%.2f\\n\ }

---------------------------------65

66.

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

计算并输出表达式的值,其中算术运算符包括:加(+)、减(-)、乘(*)、除(/)。

**输入格式要求:\"%d%c%d\" 提示信息:\"Please enter an expression:\" **输出格式要求:\"%d + %d = %d \\n\" \"%d - %d = %d \\n\" \"%d * %d = %d \\n\" \"%d / %d = %d \\n\" \"Division by zero!\\n\" \"Invalid operator! \\n\" 程序运行示例1如下:

Please enter an expression:22+12 22 + 12 = 34

程序运行示例2如下:

Please enter an expression:22-12 22 - 12 = 10

程序运行示例3如下:

Please enter an expression:22*12 22 * 12 = 264

程序运行示例4如下:

Please enter an expression:22/12 22 / 12 = 1

程序运行示例5如下:

Please enter an expression:22/0 Division by zero! 程序运行示例6如下:

Please enter an expression:22\\12 Invalid operator!

答案:

#include <> #include <> int main() {

int a, b; char c;

printf(\"Please enter an expression:\"); scanf(\"%d %c %d\ if (c == '+')

printf(\"%d + %d = %d \\n\

else if (c == '-')

printf(\"%d - %d = %d \\n\ else if (c == '/') {

if (b != 0)

printf(\"%d / %d = %d \\n\ else

printf(\"Division by zero!\"); }

else if (c == '*' || c == 'x' || c == 'X') printf(\"%d * %d = %d \\n\ else if (c == '^')

printf(\"%d ^ %d = %d \\n\ else

printf(\"Invalid operator! \\n\"); }

---------------------------------66

67.

计算n!算法如下,请改正程序中的错误,使它能得出正确的结果。 #include <>

long fact(int n);

main() {

int n, result = 0;

printf(\"Input n:\"); scanf(\"%d\

result = fact(n);

printf(\"%d != %d\ }

long fact(int n) {

int result; if (n < 0)

printf(\"n<0,data error!\\n\"); else {

result = n * fact(n - 1); return result; } }

答案:

#include <> long fact(int n); main()

{

int n, result = 0; printf(\"Input n:\"); scanf(\"%d\ if (n < 0)

printf(\"n<0,data error!\\n\"); else {

result = fact(n); }

printf(\"%d != %d\ }

long fact(int n) {

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

return fact(n - 1)*n; } }

---------------------------------67

68.

用递归法将一个整数n转换成字符串,例如输入483,应输出字符串“483”。n的位数不确定,可以是任意位数的整数。 **输入提示:\"\\n输入整数:\" **输入格式:\"%d\"

**输出提示:\"\\n输出是:\" **输出转换的字符串

程序的运行示例如下: 输入整数:345 输出是:345

答案:

#include <>

void convert(int n);

void main() {

int num;

printf(\"\\n输入整数:\"); scanf(\"%d\ printf(\"\\n输出是:\"); convert(num);

}

void convert(int n) {

if (n / 10 == 0) {

putchar('0' + n % 10); }

else {

convert(n / 10);

putchar('0' + n % 10); }

}

---------------------------------68

69.

假设有40个学生被邀请来给餐厅的饮食和服务质量打分,分数划分为1~10这10个等级(1表示最低分,10表示最高分),编程统计并按如下格式输出餐饮服务质量调查结果。 Grade Count 1 2 3 ...

**输入格式要求:\"%d\" 提示信息:\"Input the feedbacks of 40 students:\\n\" \"input error!\\n\"

**输出格式要求:\"Feedback\Count\Histogram\\n\" \"%8d\%5d\\" 程序运行示例如下:

Input the feedbacks of 40 students: 10 9 10 8 7 6 5 10 9 8 8 9 7 6 10 9 8 8 7 7 6 6 8 8 9 9 10 8 7 7 9 8 7 9 7 6 5 9 8 7 Feedback 1 2 3 4

Count Histogram 0 0 0 0

5 10 7

***** ********** *******

Histogram

5 6 7 8 9 10

答案:

2 ** 5 ***** 9 ********* 10 ********** 9 ********* 5 *****

#include <> main() {

int a[10] = {0}, n, i;

printf(\"Input the feedbacks of 40 students:\\n\"); for (i = 1; i <= 40; i++) {

scanf(\"%d\ if(n == 1) a[0]++; else if(n == 2) a[1]++; else if(n == 3) a[2]++; else if(n == 4) a[3]++; else if(n == 5) a[4]++;

else if(n == 6) a[5]++; else if(n == 7) a[6]++; else if(n == 8) a[7]++; else if(n == 9) a[8]++; else if(n == 10) a[9]++; else

printf(\"input error!\\n\"); }

printf(\"Feedback\Count\Histogram\\n\"); for(i = 0; i < 10;i++) {

printf(\"%8d\%5d\\ for(n = 1; n <= a[i];n++) printf(\"*\"); printf(\"\\n\"); } }

----------------------------69

70.

编程比较用户键盘输入的口令与内设的口令secret是否相同。若相同,则输出\"Correct password! Welcome to the system...\",若passwordpassword\"。 输入提示信息:\"Input Password:\" 输入格式:\"%s\" 输出提示信息:

\"Correct password! Welcome to the system...\\n\" \"Invalid password!user inputpassword\\n\"

答案:

#include <>

#include <>

int main() {

char password[7] = \"secret\";

char userInput[81];

printf(\"Input Password:\");

scanf(\"%s\

if (

strcmp(userInput, password) == 0

)

printf(\"Correct password! Welcome to the system...\\n\");

else if (

strcmp(userInput, password)<0

)

printf(\"Invalid password!user inputelse

printf(\"Invalid password!user input>password\");

return 0;

}

----------------------------70

71.

编写一个C函数,实现保留小数点后第N-1位,从第N位四舍五入。用该函数对数组a[5]中的各元素从小数点后第2位开始四舍五入。 a[5]={,,,,}

**输出格式要求:\"Old array:\\n\" \"a[%d]=%.3f\\" \"\\nnew array:\\n\" \"a[%d]=%.2f\\" 程序运行示例如下: Old array:

a[0]= a[1]= a[2]= a[3]= a[4]=

new array:

a[0]= a[1]= a[2]= a[3]= a[4]=

答案:

#include<> #include<>

float fife(float a,int n); main() {

int i;

float a[5]={,,,,}; printf(\"Old array:\\n\"); for(i = 0;i < 5;i++)

{

printf(\"a[%d]=%.3f\\ }

printf(\"\\nnew array:\\n\"); for(i = 0;i < 5;i++) {

printf(\"a[%d]=%.2f\\ } }

float fife(float a, int n ) {

int b, c;

c = a * pow(10,n); b = c%10; if(b >= 5) {

a = (int)(a * pow(10,n - 1)) + 1; a = a/10; return a; } else {

a = (int)(a * pow(10,n - 1)); a = a/10; return a;

} }

-----------------------------71

72.

求最大数和最小数的最大公约数

从键盘输入10个正整数,求出最大数,最小数,以及他们的最大公约数。要求用数组实现。

程序运行结果示例1: Input 10 numbers:

15 23 56 87 94 105 78 19 22 43↙ maxNum=105 minNum=15 15

程序运行结果示例2: Input 10 numbers: 33 1 2 9 8 7 5 4 0 10↙ maxNum=33 minNum=0

输入格式: \"%d\" 输出格式:

输入提示信息:\"Input 10 numbers:\\n\"

最大数输出格式:\"maxNum=%d\\n\" 最小数输出格式:\"minNum=%d\\n\" 最大公约数输出格式:\"%d\"

答案:

#include<> main() {

int a[10] = {0}, i, j, min = 0, max = 0; printf(\"Input 10 numbers:\\n\"); for(i = 0; i < 10; i++) {

scanf(\"%d\ if(0 == i) {

min = a[i]; max = a[i]; } else {

if(a[i] >= max) max = a[i]; if(a[i] <= min) min = a[i]; } }

printf(\"maxNum=%d\\n\ printf(\"minNum=%d\\n\ for(i = min;1 <= i; i--) {

if((min % i == 0) &&(max % i == 0)) {

printf(\"%d\ break; } } }

-----------------------------72

73.

写一个函数days,实现主函数将年、月、日(结构体类型)传递给days函数,days函数计算该年该月该日是该年的第几天并传回主函数输出。 程序的运行示例如下: 请输入日期(年,月,日) 1990,2,14

2月14日是1990年的第45天。

答案1

#include <> struct time_1 {

int year;

int month; int day; };

int days(struct time_1 Atime); int main() {

struct time_1 Atime; int a, b, c,d;

printf(\"请输入日期(年,月,日)\\n\\n\"); scanf(\"%d,%d,%d,\ = a; = b; = c;

d = days(Atime);

printf(\"%d月%d日是%d年的第%d天。\ return 0; }

int days(struct time_1 Atime) {

int _day; if % 4 == 0) {

if == 1) _day = ; else if == 2)

_day = + 31; else if == 3) _day = + 60; else if == 4) _day = + 91; else if == 5)

_day = + 121; else if == 6)

_day = + 152; else if == 7)

_day = + 182; else if == 8)

_day = + 213; else if == 9)

_day = + 244; else if == 10) _day = + 274; else if == 11) _day = + 305; else if == 12) _day = + 335; }

if % 4 != 0) {

if == 1)

_day = ; else if == 2) _day = + 31; else if == 3)

_day = + 60 - 1; else if == 4)

_day = + 91 - 1; else if == 5)

_day = + 121 - 1; else if == 6)

_day = + 152 - 1; else if == 7)

_day = + 182 - 1; else if == 8)

_day = + 213 - 1; else if == 9)

_day = + 244 - 1; else if == 10)

_day = + 274 - 1; else if == 11)

_day = + 305 - 1; else if == 12)

_day = + 335 - 1; }

return _day;

}

答案2

#include <> struct time_1 { };

int days(struct time_1 Atime); int main() {

struct time_1 Atime; int a, b, c,d; int year; int month; int day;

o: printf(\"请输入日期(年,月,日)\");

scanf(\"%d,%d,%d,\", &a, &b, &c); if (a % 4 == 0) {

if ((2 == b) && (c > 29)) { }

else if ((1 == b || 3 == b || 5 == b || 7 == b || 8 == b || 10 == b || 12 == b)

printf(\"你输入的日期有误!\"); goto o;

&& (c > 31))

}

{ }

else if (c > 30) { }

printf(\"你输入的日期有误!\"); goto o;

printf(\"你输入的日期有误!\"); goto o;

else {

if ((2 == b) && (c > 28)) { }

else if ((1 == b || 3 == b || 5 == b || 7 == b || 8 == b || 10 == b || 12 == b)

printf(\"你输入的日期有误!\"); goto o;

&& (c > 31))

{ }

else if (c > 30) {

printf(\"你输入的日期有误!\"); goto o;

}

}

}

printf(\"你输入的日期有误!\"); goto o;

= a; = b; = c;

d = days(Atime);

printf(\"%d月%d日是%d年的第%d天。\", b, c, a, d); return 0;

int days(struct time_1 Atime) {

int _day; if % 4 == 0) {

if == 1)

_day = ;

else if == 2)

_day = + 31;

else if == 3)

_day = + 60;

else if == 4)

_day = + 91;

else if == 5)

}

_day = + 121;

else if == 6)

_day = + 152;

else if == 7)

_day = + 182;

else if == 8)

_day = + 213;

else if == 9)

_day = + 244;

else if == 10)

_day = + 274;

else if == 11)

_day = + 305;

else if == 12)

_day = + 335;

else {

if == 1)

_day = ;

else if == 2)

_day = + 31;

else if == 3)

_day = + 60 - 1;

else if == 4)

}

}

_day = + 91 - 1;

else if == 5)

_day = + 121 - 1;

else if == 6)

_day = + 152 - 1;

else if == 7)

_day = + 182 - 1;

else if == 8)

_day = + 213 - 1;

else if == 9)

_day = + 244 - 1;

else if == 10)

_day = + 274 - 1;

else if == 11)

_day = + 305 - 1;

else if == 12)

_day = + 335 - 1;

return _day;

-----------------------------73

74.

马克思手稿中有一道趣味数学题:有30个人,其中可能有男人、女人和小孩,在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人?

假设男人为x人,女人为y人,小孩为z人,则有以下方程组:

{x+y+z=303x+2y+z=50

main() {

int x,y,z;

printf(\"Man \ Women \ Childern\\n\"); for (x=0; x<16; x++)

for (y=0; y<25; y++) {

z = 30 – x - y;

if (3 * x + 2 * y + z = 50)

printf(\"%3f\ %5f\ %8f\\n\ } }

答案:

#include<> int main() {

int x, y, z;

printf(\"Man \ Women \ Childern\\n\"); for (x = 1; x<16; x++)

for (y = 1; y<25; y++) {

z = (30 - x) - y;

if ((3 * x + 2 * y + z) == 50)

printf(\"%3d\ %5d\ %8d\\n\ } return 0; }

-----------------------------74

75.

程序:计算本金和复利之和。

编写程序打印出一个表格,这个表格显示了在几年时间内100美金投资在不通利率上的价值。用户将输入利率和要投资的年数。假设整合利息一年一次,表格将显示出一年间在此输入利率下河后边四个更高利率下投资的价值。

**输入格式要求:\"%d\" 提示信息:\"Enter interest rate:\" \"Enter number of year:\"

**输出格式要求:\"\\nyears\" \"%6d%%\" \"%3d \" \"%\" 下面是程序运行时的情况: Enter intereset rate: 6 Enter number of years: 5

years

答案:

6%

7%

8%

9%

10%

1 2 3 4 5

#include<> int main() {

int i, y, r, j,k; float a[5], b = 100;

printf(\"Enter interest rate:\"); scanf(\"%d\", &r);

printf(\"Enter number of year:\"); scanf(\"%d\", &y); printf(\"\\nyears\");

for (i = r; i <= (r + 4);i++) { }

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

printf(\"\\n%3d\\", i); k = r;

for (j = 1;j <= 5;j++) { }

b = ((float)r / 100) * b + b;

printf(\"%\", ((float)k/ 100)*b + b); k++;

printf(\"%6d%%\", i);

}

} return 0;

-----------------------------75

76.

给定如下定义: struct date_rec {

int day ; int month ; int year ; };

写一个函数接收两个日期,如果两个日期相同,则返回0,如果第一个日期晚于第二个日期,则返回1,如果第一个日期早于第二个日期,则返回-1。并编写main函数测试它。

**输入格式要求:\"%d%d%d\" 提示信息:\"请输入当前日期(年 月 日):\" **输出格式要求:\"当前日期:%d年%d月%d日!\\n\" \"第一个日期晚于第二个日期!\" \"第一个日期早于第二个日期!\" \"两个日期相同!\"

程序运行示例如下:

请输入当前日期(年 月 日):2012 9 10 请输入当前日期(年 月 日):2013 7 10

当前日期:2012年9月10日! <=== 输出

当前日期:2013年7月10日! 第一个日期早于第二个日期!

答案:

#include<> struct date_rec {

int day; int month; int year; };

int time_1(struct date_rec _time1, struct date_rec _time2); int main() {

struct date_rec _time1, _time2;

printf(\"请输入当前日期(年 月 日):\"); printf(\"请输入当前日期(年 月 日):\"); scanf(\"%d%d%d\

printf(\"当前日期:%d年%d月%d日!\\n\

scanf(\"%d%d%d\

printf(\"当前日期:%d年%d月%d日!\\n\ if (0 == time_1(_time1, _time2)) printf(\"两个日期相同!\"); else if (-1 == time_1(_time1, _time2))

printf(\"第一个日期早于第二个日期!\"); else if (1 == time_1(_time1, _time2))

printf(\"第一个日期晚于第二个日期!\"); }

int time_1(struct date_rec _time1, struct date_rec _time2) {

if >

return 1; else if == {

if >

return 1; else if == {

if >

return 1; else if == return 0; else

return -1; } else

return -1; }

else

return -1; }

评论

-----------------------------76

77.

写一个函数,如果它首次被调用,则返回字母A,第二次被调用,则返回字母B,第三次调用,则返回字母C,以此类推。(提示:使用一个static数据类型) 函数原型为:char call_times(void)。 编写main函数测试它。

**输出格式要求:\"第一次调用返回字符%c!\\n\" \"第二次调用返回字符%c!\\n\" \"第三次调用返回字符%c!\\n\"

答案:

#include<>

char call_times(void); char achar; int main() {

achar = 'A' - 1;

printf(\"第一次调用返回字符%c!\\n\ printf(\"第二次调用返回字符%c!\\n\ printf(\"第三次调用返回字符%c!\\n\

return 0; }

char call_times(void) {

achar = achar + 1; return achar; }

-----------------------------77

78.

编程将字符串s倒序输出,要求利用函数递归实现。 **输入格式要求:\"%s\" 提示信息:\"input your string:\\n\" **输出格式要求:\"%c\" 程序运行的输入输出样例: 屏幕先输出提示信息: input your string: 然后用户键盘输入: abcdefg 最后屏幕输出: gfedcba

答案:

#include<> char str(char b); int i = 0;

char a[80] = { 0 }; int main() {

printf(\"input your string:\\n\"); scanf(\"%s\ str(*a); }

char str(char b) {

if (b != '\\0') {

i++;

str(*(a + i)); printf(\"%c\ } else

return '\\0'; }

-----------------------------78

79.

#include <>

unsigned long Factorial(unsigned int n); {

} main() {

if (n < 0) { }

else if (n==0 && n==1) { } else { }

return n * Factorial(n-1); return 1;

printf(\"data error!\"); return 0;

int n; }

答案:

unsigned long x; printf(\"Input n:\\n\"); scanf(\"%d\ x = Factorial(n);

printf(\"%d!=%ld\\n\

#include <>

unsigned long Factorial(unsigned int n) {

if (n == 0 || n == 1) {

return 1; } else {

return n * Factorial(n - 1); } }

int main() {

int n;

unsigned long x; printf(\"Input n:\\n\"); scanf(\"%d\ if(n >= 0) {

printf(\"%d!=%ld\\n\ } else

printf(\"data error!\"); return 0;

}

-----------------------------79

80.

从键盘输入10个整数,用函数编程实现计算其最大值和最小值,并互换它们所在数组中的位置。

要求按如下函数原型编写程序 void ReadData(int a[], int n); void PrintData(int a[], int n); void MaxMinExchang(int a[], int n); **输入提示信息要求: \"Input n(n<=10):\\n\" \"Input %d numbers:\\n\" **要求输入格式为:\"%d\"

**输出提示信息:\"Exchange results:\" **要求输出格式为:\"%5d\"

输出数组中所有数据后换行

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

答案:

#include <> main() {

int a[10] = { 0 }, j, i = 0, k = 0; int c, b, n;

printf(\"Input n(n<=10):\\n\");

scanf(\"%d\

printf(\"Input %d numbers:\\n\ for (j = 0; j < n; j++) {

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

i = a[j]; c = j; }

if (j == 0) {

k = a[j]; b = j; }

else if (a[j] < k) {

k = a[j]; b = j; } }

a[c] = k; a[b] = i;

printf(\"Exchange results:\"); for(j = 0; j < n; j++)

printf(\"%5d\ }

-----------------------------80

81

按如下函数原型编写程序,用一个整型数组feedback保存调查的40个反馈意见。用函数编程计算反馈意见的平均数(Mean)、中位数(Median)和众数(Mode)。中位数指的是排列在数组中间的数。如果原始数据的个数是偶数,那么中位数等于中间那两个元素的算术平均值。众数是数组中出现次数最多的那个数(不考虑两个或两个以上的反馈意见出现次数相同的情况)。 int Mean(int answer[], int n); int Median(int answer[], int n); int Mode(int answer[], int n); void DataSort(int a[], int n);

输入提示信息:\"Input the feedbacks of 40 students:\\n\" 输入格式:\"%d\"

输出提示信息和输出格式: \"Mean value = %d\\n\" \"Median value = %d\\n\" \"Mode value = %d\\n\"

.答案:

#include<>

int a[40] = { 0 };

void DataSort(int a[], int n);

int Mean(int answer[], int n); int Median(int answer[], int n); int Mode(int answer[], int n); int main() { }

int i = 0;

printf(\"Input the feedbacks of 40 students:\\n\"); do {

scanf(\"%d\", &a[i]); i++;

} while (i < 40); DataSort(a, 40);

printf(\"Mean value = %d\\n\", Mean(a, 40)); printf(\"Median value = %d\\n\", Median(a, 40)); printf(\"Mode value = %d\\n\", Mode(a, 40)); return 0;

从键盘任意输入10个整数存入一个数组中,然后任意输入一个整数x,采用顺序查找法,在数组中查找该数,要求按如下函数原型编程实现查找功能。 int Search(int a[], int n, int x);

在主函数中调用函数Search顺序查找x,然后在主函数中打印查找结果。 如果找到,则函数返回该数在数组中的下标位置,并在主函数中打印该值; 如果没有找到,则返回-1,并在主函数中打印“Not found!”。 要求必须按照题目要求和用函数编程,否则不给分。

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

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

找到时的打印格式为\"Subscript of x is %d\\n\" 没找到时的打印格式为\"Not found!\\n\"

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

答案:

#include<>

int search(int a[], int n, int x); int main() {

int a[10] = { 0 }, n, x; printf(\"Input 10 numbers:\\n\"); for (n = 0; n < 10; n++) scanf(\"%d\ printf(\"Input x:\\n\"); scanf(\"%d\ n = search(a, n, x); if (n == -1)

printf(\"Not found!\"); else

printf(\"Subscript of x is %d\\n\

return 0; }

int search(int a[], int n, int x) {

int i;

for (i = 0; i < n; i++) if (a[i] == x) return i; return -1; }

用函数编程统计平均成绩。要求在主函数中输入学生成绩,输入负数时,结束输入,调用子函数Average()计算平均成绩,并输出结果。 函数原型:int Average(int score[],int n) ****要求输入提示信息为:\"Input score:\" ****输出格式要求为: \"Total students are %d\\n\" \"Average score is %d\\n\"

答案:

#include<>

int Average(int score[],int n); int main() {

int a[100] = {0}, i , j = 0 ; for (j = 0;j < 100;j++) {

printf(\"Input score:\"); scanf(\"%d\ if(i >= 0) a[j] = i; else break; }

printf(\"Total students are %d\\n\

printf(\"Average score is %d\\n\ Average(a,j); }

请编写一个查找子字符串的程序,并统计子字符串出现的次数。

**输入格式要求:\"%s\" 提示信息:\"请输入主串:\" \"请输入要查找的串:\" **输出格式要求:\"%s,%s:\" \"子串出现的次数:%d\\n\" \"子串不在主串中\\n\" 程序运行示例1如下: 请输入主串:Hello,world! 请输入要查找的串:l

Hello,world!,l:子串出现的次数:3 程序运行示例2如下: 请输入主串:Hello,world! 请输入要查找的串:abc

Hello,world!,abc:子串不在主串中

答案:

#include<> int main()

{

int i, j, a = 0, b = 0,c = 0;

char str1[100] = {0},str2[100] = {0}; printf(\"请输入主串:\"); scanf(\"%s\

printf(\"请输入要查找的串:\"); scanf(\"%s\

for(i = 0;str1[i] != '\\0' ;i++) a++;

for(i = 0;str2[i] != '\\0';i++ ) b++;

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

for(j = 0; str1[j + i] == str2[j]; j++); if(j == b) c++; } if(c)

printf(\"%s,%s:子串出现的次数:%d\\n\ else

printf(\"%s,%s:子串不在主串中\\n\ return 0; }

-----------------------------83

84.

不用标准库函数strcmp,自己编写一个函数MyStrcmp 实现将两个字符串s和t进行比较,

然后将s和t中第一个不相同字符的ASCII码值之差作为函数值返回。 要求如下:

(1)函数MyStrcmp函数原型为: int MyStrcmp(char s[],char t[]) (2)在主函数中

从键盘分别输入两个字符串s和t, (每个字符串的最大长度为80个字符) 然后调用MyStrcmp函数, 接下来,判定该函数的返回值:

如果大于0,输出\"string s>string t.\\n\" 如果小于0,输出\"string s输入s之前提示:\"Input s\\n\" 输入t之前提示:\"Input t\\n\"

答案:

#include<>

int Mystrcmp(char s[],char t[]) {

int i,j;

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

if(s[i] == t[i]) continue;

else if(s[i] > t[i]) return s[i] - t[i]; else

return s[i] - t[i]; return 0; }

int main() {

char s[80] = {0},t[80] = {0}; printf(\"Input s\\n\"); gets(s);

printf(\"Input t\\n\"); gets(t);

if(Mystrcmp(s,t) == 0)

printf(\"string s=string t.\\n\"); else if(Mystrcmp(s,t) < 0) printf(\"string sprintf(\"string s>string t.\\n\"); }

-----------------------------84

85.

下列给定程序中,函数fun()的功能是:从s所指字符串中,找出t所指字符串的个数作为函数值返回。如,当s所指字符串中的内容为abcdabfab,t所指字符串的内容为ab,则函数返回整数3。请改正程序中的错误,使它得出正确的结果: #include <>

int fun(char *s, char *t) {

int n; char *p, *r; n = 0; while (*s) {

p = s; r = t; while (*r) if (*r == *p) { r++; p++ }

else break; if (r == '\\0') n++; s++; }

return n; } main() {

char s[100], t[100]; int m;

printf(\"\\nPlease enter string s: \"); scanf(\"%s\

printf(\"\\nPlease enter substring t:\"); scanf(\"%s\ m = fun(s, t);

printf(\"\\nThe result is: m=%d\\n\ }

答案:

#include <>

int fun(char *s, char *t) {

int n; char *p, *r; n = 0; while (*s) {

p = s; r = t; while (*r)

if (*r == *p) {

r++; p++; }

else break; if (*r == '\\0') n++; s++; }

return n; } main() {

char s[100], t[100]; int m;

printf(\"\\nPlease enter string s: \"); scanf(\"%s\

printf(\"\\nPlease enter substring t:\"); scanf(\"%s\

m = fun(s, t);

printf(\"\\nThe result is: m=%d\\n\ }

-----------------------------85

86.

从键盘输入某单位职工的月收入(最多不超过30人),具体人数由键盘输入。试编程输出该单位职最高月收入和最低月收收。 输出格式:printf(\"min=%,max=%\\n\ 要求:利用函数计算n名职工的最高和最低月收入。

函数原型:void find_MaxMin(float income[],int n,float *pmax,float *pmin);

答案:

#include<>

void find_MaxMin(float income[], int n) {

int i;

float Max, Min; for (i = 0; i < n;i++) {

scanf(\"%f\ }

Max = Min = income[0]; for (i = 0; i < n;i++) {

if (income[i] > Max)

Max = income[i]; else if (income[i] < Min) Min = income[i]; else

continue; }

printf(\"min=%,max=%\\n\ }

int main() {

int n;

float income[30] = { 0 }; scanf(\"%d\ find_MaxMin(income, n); return 0; }

-----------------------------86

87.

编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数 求1/1+1/3+...+1/n(要求利用函数指针编程) 程序运行示例1如下: 10 Even=

程序运行示例2如下:

9 Odd=

答案:

#include<> void E(int n); void O(int n); int main() {

int n;

scanf(\"%d\ if (n % 2) O(n); else

E(n); return 0; }

void E(int n) {

int i;

float Even = 0;

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

Even = Even + (float)1 / (2 * i); printf(\"Even=%f\\n\ }

void O(int n) {

int i;

float Odd = 0;

for (i = 1;i <= n; i = i + 2) Odd = Odd + (float)1 / i; printf(\"Odd=%f\\n\ }

-----------------------------87

88.

给下面程序改错。程序功能是输入10个数,按从小到大顺序排序。 #include <> #define SIZE 10; main( )

{ int i, j, t, a[SIZE];

printf(\"input 10 numbers: \\n\"); for(i = 1;i <= SIZE;i++) scanf(\"%d\ printf(\"\\n\");

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

for (j = SIZE - 1; j >= i + 1; j--) if (a[j] > a[j-1]) {

t=a[j]; a[j-1]=a[j]; a[j]=t; }

for (i = 0; i < SIZE; i++) printf(\"%d\\n\ } 注意:

(1)请将修改正确后的完整源程序拷贝粘贴到答题区内。

(2)对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。 (3)当且仅当错误全部改正,且程序运行结果调试正确,才给加5分。 (4)改错时不能改变程序原有的意图,也不要改变代码的输入输出格式。

答案:

#include <> #define SIZE 10 main( )

{ int i, j, t, a[SIZE];

printf(\"input 10 numbers: \\n\"); for(i = 0;i < SIZE;i++)

scanf(\"%d\ printf(\"\\n\");

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

for (j = SIZE - 1; j >= i + 1; j--) if (a[j] < a[j-1]) {

t=a[j]; a[j]=a[j-1]; a[j-1]=t; }

for (i = 0; i < SIZE; i++) printf(\"%d\\n\ }

-----------------------------88

89.

程序模拟简单运算器的工作:输入一个算式(没有空格),遇等号'='说明输入结束,输出结果。假设计算器只能进行加、减、乘、除运算,运算数和结果都是整数,4种运算符的优先级相同,按从左到右的顺序计算。例如输入\"1+2*10-10/2=\"后,输出10。

**输出格式要求:\"%d\" 出错提示信息:\"错误的运算符:%c\" 程序运行示例如下:

1+2*10-10/2= <===此行为输入 10 <===此行为输出

答案:

#include <>

int main(void)

{ int num, num1, op; char ch;

num = 0; num1 = 0; op = '+'; do

{ ch = getchar();

if (ch >= '0' && ch <= '9')

{ num1 = num1 * 10 + (ch - '0'); } else

{ if (op == '+')

{ num = num + num1; }

else if (op == '-')

{ num = num - num1; }

else if (op == '*')

{ num = num * num1; }

else if (op == '/')

{ num = num / num1; } else

{ printf(\"错误的运算符:%c\ exit(0); } op = ch; num1 = 0; } }

while (ch != '=');

printf(\"%d\

return 0; }

-----------------------------89

90.

猴子吃桃程序_扩展2

猴子第一天摘了若干个桃子,吃了一半,不过瘾,又多吃了1个。第二天早上将剩余的桃子又吃掉一半,并且又多吃了1个。此后每天都是吃掉前一天剩下的一半零一个。到第n天再想吃时,发现只剩下1个桃子,问第一天它摘了多少桃子?为了加强交互性,由用户输入不同的天数n进行递推,即假设第n天的桃子数为

1。同时还要增加对用户输入数据的合法性验证(如:不允许输入的天数是0和负数)

程序运行结果示例: Input days: 0↙

Input days: -5↙ Input days: a↙

Input days: 3↙ x=10

输入格式:\"%d\" 输出格式:

输入提示信息:\"Input days:\\n\" 输出:\"x=%d\\n\"

答案:

#include<> int main()

{ int x = 1, day, n, flag; do

{

flag = 0;

printf(\"Input days:\\n\"); n = scanf(\"%d\ if (n != 1)

{ flag = 1;

while (getchar() != '\\n'); }

if (day <= 0) flag = 1; }

while (flag == 1);

while (day > 1)

{ x = (x + 1) * 2; day--; }

printf(\"x=%d\\n\ return 0; }

-----------------------------90

91.

编程打印如下形式的杨辉三角形。打印的杨辉三角形的行数n(不超过15行)。要求由用户在主函数中通过键盘输入。请按照如下给定的函数原型进行编程。函数CaculateYH用于生成杨辉三角形,函数PrintYH用于打印杨辉三角形。给定的函数原型如下:

void CaculateYH(int a[][N], int n); void PrintYH(int a[][N], int n); **输入提示信息**:\"Input n(n<15):\\n\" **输入数据格式**:\"%d\" **输出提示信息**:无 **输出数据格式**:\"%5d\" 杨辉三角形形式如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 1 10 45 120 210 252 210 120 45 10 1答案:

#include<> #define N 15

int shu[N][N] = { 0 };

void CaculateYH(int a[][N], int n); void PrintYH(int a[][N], int n); int main() {

int n;

printf(\"Input n(n<15):\\n\"); scanf(\"%d\ CaculateYH(shu, n); PrintYH(shu, n); return 0; }

/********************************/ void CaculateYH(int a[][N], int n) {

int i, j;

for (i = 0;i < n;i++) a[i][0] = 1; for (j = 1; j < n; j++) a[0][j] = 0; for (i = 1; i < n; i++)

for (j = 1; j < n; j++)

a[i][j] = a[i - 1][j - 1] + a[i - 1][j]; for (i = 0; i < n; i++)

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

shu[i][j] = a[i][j]; }

/*********************************/ void PrintYH(int a[][N], int n) {

int i, j;

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

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

if (a[i][j] > 0)

printf(\"%5d\ }

printf(\"\\n\"); } }

-----------------------------91

92.

将字符串s1从第m个字符开始剩余的所有字符,送入字符数组s2中。 注意:

(1)请将修改正确后的完整源程序拷贝粘贴到答题区内。

(2)对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。 (3)当且仅当错误全部改正,且程序运行结果调试正确,才得满分。

#include \"\" main() {

int i,j,m;

char s1[80],s2[80];

printf(\"input a string:\\n\"); gets(s1[]);

printf(\"input start point:\\n\"); scanf(\"%d\ i=m-1; j=0;

while(s1[i]!='\\0') {

s2[j]=s1[i]; }

s2[j]='\\0'; puts(s2); }

答案:

#include \"\" int main() {

int i, j, m;

char s1[80], s2[80];

printf(\"input a string:\\n\"); gets(s1);

printf(\"input start point:\\n\"); scanf(\"%d\ i = m - 1; j = 0;

while ((s1[i] != '\\0')&&(i < 80)) {

s2[j] = s1[i]; i++; j++; }

s2[j] = '\\0'; puts(s2); return 0; }

-----------------------------92

93.

谁家孩子跑最慢

张、王、李三家各有三个小孩。一天,三家的九个孩子在一起比赛短 跑,规定不分年龄大小,跑第一得9分,跑第二得8分,一次类推。比赛结果

各家的总分相同,且这些孩子没有同时到达终点,也没有一家的两个或三 个孩子获得相连的名次。已知获第一名的是李家的孩子,获得第二的是王 家的孩子。求各家各个孩子的得分,获得最后一名的是谁家的孩子?

**输入格式要求:提示信息:\"The last one arrived to end is a child from family Zhang.\\n\" **输出格式要求:\"%d \" 程序运行示例如下: 7 5 3 8 6 1 9 4 2

The last one arrived to end is a child from family Wang.

答案:

#include<> int score[4][4]; main()

{ int i, j, k, who; score[1][1] = 7; score[2][1] = 8; score[3][1] = 9; for (i = 4; i < 6; i++)

for (j = 4; j < 7; j++)

for (k = 4; i != j && k < 7; k++) if (k != 1 && k != j

&& 15 - i - score[1][1] != 15 - j - score[2][1]

&& 15 - i - score[1][1] != 15 - k - score[3][1]

&& 15 - j - score[2][1] != 15 - k - score[3][1])

{ score[1][2] = i;

score[1][3] = 15 - i - 7; score[2][2] = j;

score[2][3] = 15 - j - 8; score[3][2] = k;

score[3][3] = 15 - k - 9; }

for (who = 0, i = 1; i <= 3; i++, printf(\"\\n\")) for (j = 1; j <= 3; j++) {

printf(\"%d \ if (score[i][j] == 1) who = i; } if (who == 1)

printf(\"The last one arrived to end is a child from family Zhang.\\n\");

else if (who == 2)

printf(\"The last one arrived to end is a child from family

Wang.\\n\"); else

printf(\"The last one arrived to end is a child from family Wang.\\n\"); }

-----------------------------93

94.

在给定的一组书名中,从键盘任意输入一个书名(书名可以有空格)。若找到,则打印该书名,否则打印\"没找到\"。找出其中错误并改正之。 #include <> #include <> int main() {

int i, findFlag;

char x;

char str[][13]={ \"Pascal\C\

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

while (i<6 & !findFlag) {

if (x = str[i]) {

findFlag = 1; } i++; }

if (findFlag) {

printf(\"%s\\n\ } else {

printf(\"没找到!\\n\"); }

return 0; }

注意:对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。 改错时不能改变程序原有的意图,但是可以改变变量的类型。

答案:

#include <> #include <> main()

{ int i = 0, findFlag = 0; char x[13];

char str[][13] = { \"Pascal\\"Basic\\"Fortran\\"Java\\"Visual C\

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

while (i < 6 && !findFlag) { if ( strcmp(x, str[i]) == 0 ) { findFlag = 1; } i++; }

if ( findFlag )

{ printf(\"%s\\n\ } else

{ printf(\"没找到!\\n\"); } }

-----------------------------94

95.

检验并打印幻方矩阵。在下面的5×5阶幻方矩阵中,每一行、每一列、每一对角线上的元素之和都是相等的,试编写程序将这些幻方矩阵中的元素读到一个二维整型数组中,然后检验其是否为幻方矩阵,并将其按如下格式显示到屏幕上。 17 23 4 10 11

输出提示信息:\"It is a magic square!\\n\" 输出格式:\"%4d\"(换行使用\"\\n\")

答案:

24 5 6 12 18

1 7 13 19 25

8 14 20 21 2

15 16 22 3 9

#include<> int main() {

int a[5][5] =

{ { 17,24,1,8,15 },{ 23,5,7,14,16 },{ 4,6,13,20,22 },{ 10,12,19,21,3 },{ 11,18,25,2,9 } };

int i,j,b = 0,c = 1,d = 0,e = 0,sum = 0; for (i = 0; i < 5; i++) sum = sum + a[0][i];

for(i = 0; i < 5; i++,b = 0) {

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

b = b + a[i][j]; }

if(b == sum ) continue; else { c = 0; break; } } b = 0;

for(i = 0; i < 5; i++,b = 0) {

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

b = b + a[j][i]; }

if(b == sum ) continue; else { c = 0; break;

} }

for(i = 0; i < 5; i++) for(j = 0; j < 5; j++) {

if(i == j) d = d + a[i][j]; if(i + j == 5) e = e + a[i][j]; }

if((d != sum)||(e != sum)) c = 0; if(c)

printf(\"It is a magic square!\\n\"); else

printf(\"It is a magic square!\\n\"); for(i = 0; i < 5; i++,b = 0) {

for(j = 0; j < 5; j++) printf(\"%4d\ printf(\"\\n\"); } return 0; }

-----------------------------95

96.

超长正整数的加法

请设计一个算法完成两个超长正整数的加法。 **输出格式要求:\" s1=\" \" s2=\" \"s1+s2=\" 程序运行示例如下: 87589 9

s1=87589 s2=9 s1+s2=36978 超长正整数的加法

请设计一个算法完成两个超长正整数的加法。 **输出格式要求:\" s1=\" \" s2=\" \"s1+s2=\" 程序运行示例如下: 87589 9

s1=87589 s2=9 s1+s2=36978

答案:

#include <>

#define HUNTHOU 10000 typedef struct node

{ int data;

struct node *next;

} NODE; NODE *insert_after (u,num) NODE *u; int num; { NODE *v;

v=(NODE *)malloc(sizeof(NODE)); v->data = num; u->next = v; return(v); }

NODE * addint(p,q) NODE *p,*q;

{ NODE *pp,*qq,*r,*s,*t; int total,number,carry; pp=p->next; qq=q->next; s=(NODE *)malloc(sizeof(NODE)); s->data=-1; t=s; carry=0;

while(pp->data!=-1 && qq->data!=-1)

{ total =pp->data + qq->data + carry; number = total % HUNTHOU; carry = total / HUNTHOU; t=insert_after(t,number);

pp=pp->next; qq=qq->next; }

r=(pp->data!=-1)? pp : qq ; while (r->data!=-1)

{ total = r->data+carry; number = total % HUNTHOU; carry = total / HUNTHOU; t = insert_after(t,number); r = r->next; }

if (carry) t=insert_after(t,1); t->next=s; return(s); }

NODE *inputint(void) { NODE *s, *ps, *qs; struct number {int num; struct number *np; } *p,*q; int i,j,k; long sum; char c; p=NULL;

while((c=getchar())!='\\n' ) if(c>='0'&&c<='9')

{q=(struct number *)malloc(sizeof(struct number)); q->num=c-'0'; q->np=p; p=q; }

s=(NODE *)malloc(sizeof(NODE)); s->data=-1; ps=s;

while(p!=NULL)

{ sum=0; i=0; k=1;

while(i<4 && p!=NULL) { sum=sum+k*(p->num); i++; p=p->np; k=k*10; }

qs=(NODE *)malloc(sizeof(NODE)); qs->data=sum; ps->next=qs; ps=qs; }

ps->next=s;

return(s); }

printint(s) NODE *s;

{ if(s->next->data!=-1 ) { printint(s->next);

if (s->next->next->data==-1) printf(\"%d\ else

{ int i,k=HUNTHOU;

for(i=1;i<=4;i++,k/=10)

putchar('0'+s->next->data%(k)/(k/10)); } } } main()

{ NODE *s1,*s2,*s;

NODE *inputint(),*addint(),*insert_after(); s1=inputint(); s2=inputint(); printf(\" s1=\");

printint(s1); putchar('\\n'); printf(\" s2=\");

printint(s2); putchar('\\n'); s=addint(s1,s2);

printf(\"s1+s2=\");

printint(s); putchar('\\n'); }

-----------------------------96

因篇幅问题不能全部显示,请点此查看更多更全内容