c语言复习题答案(49题)

更新时间:2023-03-10 04:33:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、 顺序结构程序设计======================================== 1 已知三角形的三边长为a,b,c,计算三角形面积的公式为:

1(a?b?c) 2要求编写程序,从键盘输入a,b,c的值,计算并输出三角形的面积。

#include #include void main() {

float a,b,c,s,area;

scanf(\ s=1.0/2*(a+b+c);

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

printf(\ b=%7.2f, c=%7.2f, s=%7.2f\\n\ printf(\}

2 编程从键盘输入圆的半径r,计算并输出圆的周长和面积。 #include \#define Pi 3.14 void main() {

float r,c,area;

printf(\请输入圆的半径:\scanf(\c=2*Pi*r; area=Pi*r*r;

printf(\该圆的周长是%.2f,面积是%.2f\\n\}

二、 选择结构程序设计==========================================

area = s(s?a)(s?b)(s?c),s=

1 从键盘任意输入一个年号,判断它是否是闰年。若是闰年,输出“Yes”,否则输出“No”。已知符合下列条件之一者是闰年:

? 能被4整除,但不能被100整除。 ? 能被400整除。 #include main() { int year, flag; printf(\ scanf(\

if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {

flag = 1; /*如果year是闰年,则标志变量flag置1*/ } else { flag = 0; /*否则,标志变量flag置0*/ } if (flag) {

printf(\ /*打印“是闰年”*/ } else { printf(\ /* 打印“不是闰年”*/ } }

2 通过键盘输入一个字符,判断该字符是数字字符、大写字母、小写字母、空格还是其他字符。

#include main() { char ch; scanf(\ if ((ch >= 97 && ch <= 122) || (ch >= 65 && ch <= 98)) { printf(\ } else if (ch <= 57 && ch >= 48) { printf(\ } else if (ch == 95) { printf(\ } else { printf(\

}

}

3 华氏和摄氏温度的转换公式为C=5/9×(F-32)。其中,C表示摄氏温度,F表示华氏温

度。要求:华氏0℉~300℉,每隔20℉输出一个华氏温度对应的摄氏温度值。 #include #include main() { int upper,step; float fahr = 0,celsius; upper = 300; step = 20; while ( fahr< upper) {

celsius = 5.0 / 9 * (fahr - 32); printf(\ fahr = fahr + step; } }

4 编程判断输入整数的正负性和奇偶性。 #include main() { int m; printf(\ scanf(\ /*输入一个整数*/ if (m > 0) /*是否为正数*/ { if (m%2 == 0) /*是正数,且能被2整除,则是正偶数*/ { printf(\ } else /*不能被2整除,则是正奇数*/ { printf(\ } } else if (m < 0) /*判断是否为负数*/ { if (m % 2 == 0)

}

{ printf(\/*是负偶数*/ } else { printf(\/*是负奇数*/ } } else { printf(\是0*/ }

5 编程计算分段函数

x?0?e?x?y??1 x?0 ?xx?0??e输入x,打印出y值。流程图如图1-2所示。

#include #include main() {

int x; double y;

printf(\ scanf(\ /* 输入一个整数*/ if (x > 0) { y = exp(-x); /*如果大于0,计算y=exp(-x)的值 */ }

else if (x == 0) { y = 1; /*x=0,则y=1*/ } else { y = -exp(x); /*x<0,则y=-exp(x)*/ }

printf(\}

6 输入三角形的三条边a,b,c,判断它们能否构成三角形。若能构成三角形,指出是何种三角形(等腰三角形、直角三角形、一般三角形)。 #include #include #define LIMIT 1e-1

main() { float a, b, c; int flag = 1; printf(\ scanf(\/*输入三角形的三条边*/ /*三角形的基本条件*/ if ((a + b) > c && ((b + c) > a) && ((a + c) > b)) { if (fabs(a-b) <= LIMIT || fabs(b-c) <= LIMIT || fabs(c-a) <= LIMIT) /*等腰三角形的条件*/ { printf(\等腰\ flag = 0; } if (fabs(a * a + b * b - c * c) <= LIMIT || fabs(a * a + c * c - b * b) <= LIMIT || fabs(c * c + b * b - a * a) <= LIMIT) /*直角三角形的条件 */ { printf(\直角\ flag = 0; } if (flag) { printf(\一般\ } printf(\三角形\\n\ } else { printf(\不是三角形\\n\ } }

7 在屏幕上显示一张如下所示的时间表: *****Time***** 1 morning

2 afternoon 3 night

Please enter your choice:

操作人员根据提示进行选择,程序根据输入的时间序号显示相应的问候信息,选择1时显示\, 选择2时显示\, 选择3时显示\,对于其他选择显示\,用switch语句编程实现。 #include main() { char c; printf(\ printf(\ printf(\ printf(\ printf(\/*建立相应的菜单 */ c = getchar(); /*输入选项*/ switch (c) /*通过switch选择 */ { case 1: printf(\ break; case 2: printf(\ break; case 3: printf(\ break; default: printf(\ } }

8 读入一个年份和月份,打印出该月有多少天(考虑闰年),用switch语句编程。 #include main() { int year, month; printf(\ scanf(\ /*输入相应的年和月*/ switch (month) {

case 1: case 3: case 5: case 7: case 8: case 10: case 12: printf(\ break; case 2: if((year % 4== 0 && year % 100 != 0)||(year % 400 == 0)) { printf(\闰年的2月有29天 */ } else { printf(\/*平年的2月有28天 */ } break; case 4: case 6: case 9: case 11: printf(\ break; default: printf(\ } }

三、 循环结构程序设计========================================== 1 编程计算1!+2!+3!+4!+…+10!的值。

#include main() { long term = 1,sum = 0; int i; for (i = 1; i <= 10; i++) { term = term * i; sum = sum + term;

}

}

printf(\

2 编程计算 a+aa+aaa+…+aa…a(n个a)的值,n和a的值由键盘输入。

#include main() { long term = 0,sum = 0; int a , i, n; printf(\ scanf(\ /*输入a,n的值*/ for (i = 1; i <= n; i++) { term = term * 10 + a; /*求出累加项*/ sum = sum + term; /*进行累加*/ } printf(\}

?224466?3 利用?=?????×100项之积计算?的值。 ?…的前...22133557#include main() { double term, result = 1; /*累乘项初值应为1*/ int n; for (n = 2; n <= 100; n = n + 2) { term = (double)( n * n)/(( n - 1) * ( n + 1)); /*计算累乘项*/ result = result * term; } printf(\}

4 计算1?

11111????????,直到最后一项的绝对值小于10-4为止。 23499100#include #include main() { int n = 1; float term = 1.0, sign = 1,sum = 0; while (fabs(term) >= 1e-4) /*判断末项大小*/ { term = sign / n; /*求出累加项*/ sum = sum + term; /*累加*/ sign = -sign; /*改变项的符号*/ n++; /*分母加1*/ } printf(\}

x3x5x7x95 利用泰勒级数sin(x)≈x??????,计算sin(x) 的值。要求最后一项的绝对

3!5!7!9!值小于10-5,并统计出此时累加了多少项。 #include #include main() { int n = 1,count = 1; float x; double sum , term; /*因为位数多,所以定义为双精度 */ printf(\ scanf(\ sum = x; term = x; /*赋初值*/ do { term = -term * x * x / ((n + 1) * (n + 2)); sum = sum + term; /*累加 */ n = n + 2; count++; }while (fabs(term) >= 1e-5); printf(\}

6 打印所有的“水仙花数”。所谓“水仙花数”,是指一个三位数,其各位数字的立方和等

于该数本身。例如,153是“水仙花数”,因为153=13+33+53。 #include main() { int i, j, k, n; printf(\ for (n = 100; n < 1000; n++) { i = n / 100; /*分出百位*/ j = (n - i * 100) / 10; /*分出十位*/ k = n % 10; /*分出个位*/ if (i*100 + j*10 + k == i*i*i + j*j*j + k*k*k) { printf(\/*输出结果*/ } } printf(\}

7 从键盘任意输入一个4位数x,编程计算x的每一位数字相加之和(忽略整数前的正负

号)。例如,输入x为1234,则由1234分离出其千位1、百位2、十位3、个位4,然后计算1+2+3+4=10,并输出10。

#include #include main() { int i1, i2, i3, i4, k, n; printf(\ scanf(\ k = fabs(n); /*取绝对值*/ i1 = k / 1000; /*分离出千位*/ i2 = (k - i1 * 1000) / 100; /*分离出百位*/ i3 = (k - i1 * 1000 - i2 * 100) / 10; /*分离出十位*/ i4 = k % 10; /*分离出个位*/ printf(\}

8 三色球问题。若一个口袋中放有12个球,其中有3个红色的,3个白色的,6个黑色的,

从中任取8个球,问共有多少种不同的颜色搭配?

五、 二维数组========================================== 1 输入5×5阶的矩阵,编程实现:

(1)求两条对角线上的各元素之和。

(2)求两条对角线上行、列下标均为偶数的各元素之积。

#include #define ARR_SIZE 10

main() { int a[ARR_SIZE][ARR_SIZE], i, j, n, sum = 0; long product = 1; printf(\ scanf(\ printf(\ for (i=0; i

printf(\}

2 编程打印如下形式的杨辉三角形。

1 1 1 1 2 1 1 3 3 1

1 4 6 4 1 1 5 10 10 5 1

#include

#define ARR_SIZE 11

void YHTriangle(int a[][ARR_SIZE], int n); void PrintYHTriangle(int a[][ARR_SIZE], int n);

main() { int a[ARR_SIZE][ARR_SIZE], n;

printf(\ n (n<=10):\

scanf(\ /*根据要求输入杨辉三角形的行数*/

YHTriangle(a,n); PrintYHTriangle(a,n); }

/*函数功能: 计算杨辉三角形中各元素数值

函数参数: 整型数组a,存放计算得到的杨辉三角形数据 整型变量n,代表杨辉三角形的行数 函数返回值:无 */

void YHTriangle(int a[][ARR_SIZE], int n) { int i, j ; for (i=1; i<=n; i++) { a[i][1] = 1; a[i][i] = 1; }

for (i=3; i<=n; i++) { for (j=2; j<=i-1; j++) { a[i][j] = a[i-1][j-1] + a[i-1][j]; } } }

/* 函数功能: 输出杨辉三角形

函数参数: 整型数组a,存放杨辉三角形数据 整型变量n,代表杨辉三角形的行数 函数返回值:无 */

void PrintYHTriangle(int a[][ARR_SIZE], int n) { int i , j ;

for (i=1; i<=n; i++) { for (j=1; j<=i; j++) { printf(\ } printf(\ } }

3 利用公式cij=aij+bij计算m×n阶矩阵A和m×n阶矩阵B之和。已知aij为矩阵A的元素,

bij为矩阵B的元素,cij为矩阵C的元素(i=1,2,…,m;j=1,2,…,n)。

#include

#define ROW 2 #define COL 3

/* 函数功能: 输入矩阵元素,存于数组a中 函数参数: 整型数组a,存放矩阵元素 返回值: 无 */

void InputMatrix(int a[ROW][COL]) { int i , j ; for (i=0; i

函数功能: 计算矩阵之和,即计算数组a、b对应位置数据相加之和,结果存于数组c中

函数参数: 整型数组a、b,分别存放两个待求和的矩阵元素 整型数组c,存放矩阵求和结果 返回值: 无 */

void AddMatrix(int a[ROW][COL], int b[ROW][COL], int c[ROW][COL]) { int i , j ; for (i=0; i

void PrintMatrix(int a[ROW][COL]) { int i , j ; for (i=0; i

main() { int a[ROW][COL], b[ROW][COL], c[ROW][COL]; printf(\ InputMatrix(a); printf(\ InputMatrix(b);

}

AddMatrix(a, b, c); printf(\PrintMatrix(c);

4* 利用公式cij=?aik*bkj计算矩阵A和矩阵B之积。已知aij为m×n阶矩阵A的元素(i=1,

k?1n2,…,m;j=1,2,…,n),bij为n×m阶矩阵B的元素(i=1,2,…,n;j=1,2,…,

m),cij为m×m阶矩阵C的元素(i=1,2,…,m;j=1,2,…,m)。

#include

#define ROW 2 #define COL 3

/* 函数功能: 计算矩阵相乘之积,结果存于数组c中 函数参数: 整型数组a、b,分别存放两个待求乘积的矩阵元素 整型数组c,存放矩阵相乘的结果 返回值: 无 */

MultiplyMatrix(int a[ROW][COL], int b[COL][ROW], int c[ROW][ROW]) { int i, j, k; for (i=0; i

/* 函数功能: 输出矩阵a中的元素

函数参数: 整型数组a,存放矩阵元素 返回值: 无 */

void PrintMatrix(int a[ROW][ROW]) {

int i , j ; for (i=0; i

main() { int a[ROW][COL], b[COL][ROW], c[ROW][ROW], i, j; printf(\ for (i=0; i

六、字符数组==========================================

1 输入一行字符,统计其中的英文字符、数字字符、空格和其他字符的个数。

#include #include

#define ARR_SIZE 80

main() { char str[ARR_SIZE]; int len, i, letter = 0, digit = 0, space = 0, others = 0; printf(\ string:\ gets(str); for (i=0; str[i]!='\\0'; i++) { if (str[i]>='a' && str[i]<='z' || str[i]>='A' && str[i]<='Z') letter ++; /*统计英文字符*/ else if (str[i] >= '0' && str[i] <= '9' ) digit ++; /*统计数字字符*/ else if (str[i] == ' ' ) space ++; /*统计空格*/ else others ++; /*统计其他字符的个数*/ } printf(\ %d\\n\ printf(\ %d\\n\ printf(\ %d\\n\ printf(\ %d\\n\}

2 编写一个程序,实现将字符数组中的字符串逆序存放的功能。 #include #include

#define ARR_SIZE 80

void Inverse(char str[], char ptr[]); main() {

char a[ARR_SIZE], b[ARR_SIZE];

printf(\ }

/*函数功能: 实现将字符数组中的字符串逆序存放 函数参数: 字符数组a,存放源字符串

字符数组b,存放逆序字符串 gets(a); Inverse(a, b);

printf(\

puts(b);

函数返回值:无 */

void Inverse(char str[], char ptr[]) {

int i = 0, j; j = strlen(str) - 1; while (str[i] != '\\0') {

ptr[j] = str[i]; i++;

j--;

} ptr[i]='\\0'; }

3 从键盘输入一行字符,统计其中有多少单词。假设单词之间以空格分开。 #include main() {

gets(str); if (str[0] != ' ') { } else { }

for (i=1; str[i]!='\\0'; i++) {

if (str[i] != ' ' && str[i-1] == ' ' ) {

}

num++;

num = 0; num = 1; char str[20]; int i, num;

}

}

printf(\

4 编写一个程序,其功能是删除字符串s中所出现的与变量c相同的字符。 #include

void Squeeze(char s[], char c); main()

{ }

void Squeeze(char s[], char c) {

for (i=j=0; s[i] != '\\0'; i++) {

if (s[i] != c) { }

s[j] = s[i] ; j++;

int i,j;

printf(\gets(str);

printf(\c = getchar(); Squeeze(str,c); puts(str); char str[20],c;

}

}

s[j] = '\\0';

5 不用函数strcat(),编程实现字符串连接函数strcat()的功能,将字符串srcStr连接到字符

串dstStr的尾部。

#include #include

#define ARR_SIZE 80

void MyStrcat(char dstStr[], char srcStr[]); main() { }

/* 函数功能:将源字符串srcStr中的字符串连接到目的字符串dstStr之后

函数参数:字符数组srcStr,存放源字符串 printf(\puts(s); MyStrcat(s,t);

printf(\gets(s);

printf(\gets(t);

char s[ARR_SIZE], t[ARR_SIZE];

字符数组dstStr,存放目的字符串

源字符串srcStr和目的字符串dstStr连接后的字符串也存于此数组中

函数返回值:无 */

void MyStrcat(char dstStr[], char srcStr[]) {

unsigned int i, j;

i = strlen(dstStr); /*将下标移动到目的字符串末尾*/ for (j=0; j<=strlen(srcStr); j++, i++) {

dstStr[i] = srcStr[j]; } }

七、 函 数==========================================

1 设计一个函数,判断一个整数是否为素数。 #include main() { } /*

函数功能: 判断参数是否是素数

函数入口参数: number为整型数,要求为正整数

int n, ret; printf(\scanf(\ret = IsPrimeNumber(n); if (ret != 0) { } else { }

printf(\printf(\

函数返回值: 非0值表示是素数,否则不是素数 */

int IsPrimeNumber(int number) { }

k2 编程计算组合数p?Cm?int i;

if (number <= 1)

return 0;

/* 负数、0和1都不是素数 */

for (i=2; i<=sqrt(number); i++) { }

if ((number % i) == 0) /* 被整除,不是素数 */

return 0;

return 1;

m!的值。

k!(m?k)!#include

unsigned long Factorial(unsigned int number); main() {

do{

unsigned int m, k; double p;

} /*

printf(\scanf(\

}while(m < k) ;

p = (double)Factorial(m) / (Factorial(k) * Factorial (m-k)); printf(\

函数功能: 计算参数的阶乘 函数入口参数: 无符号整型 函数返回值: 运算结果 */

unsigned long Factorial(unsigned int number) { }

3 设计一个函数MinCommonMultiple(),计算两个正整数的最小公倍数。 #include

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

return result;

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

result *= i;

unsigned long i, result = 1;

} /*

int a, b, x;

printf(\scanf(\

x = MinCommonMultiple(a,b);

printf(\

函数功能: 计算两个正整数的最小公倍数 函数入口参数:两个整型数 函数返回值: 最小公倍数 */

int MinCommonMultiple(int a, int b) { }

4 设计一个函数MaxCommonFactor(),利用欧几里德算法(也称辗转相除法)计算两个正

整数的最大公约数。

#include

for (i=1; i

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

return i*a;

int i;

}

char *pEnd; /*指针变量pEnd指向字符串的最后一个字符*/

len = strlen(pStr); /*求出字符串长度*/

for (pStart=pStr,pEnd=pStr+len-1; pStart

temp = *pStart; *pStart = *pEnd; *pEnd = temp;

5 编程判断输入的一串字符是否为“回文”。所谓“回文”,是指顺读和倒读都一样的字符串。如\,\都是回文。

#include #include main() {

printf(\gets(str); len = strlen(str); pStart = str; pEnd = str + len - 1;

while ((*pStart == *pEnd) && (pStart < pEnd)) { pStart++;

char str[80], *pStart, *pEnd; int len;

}

pEnd--; }

if (pStart < pEnd) {

printf(\} else {

printf(\}

6 编写一个能对任意m×n阶矩阵进行转置运算的函数Transpose()。

#include

#define ROW 3 #define COL 4

void Transpose(int (*a)[COL], int (*at)[ROW], int row, int col); void InputMatrix(int (*s)[COL], int row, int col); void PrintMatrix(int (*s)[ROW], int row, int col); main() {

printf(\

InputMatrix(s, ROW, COL); /*输入原矩阵,s指向矩阵s的第0行,是行指针*/ int s[ROW][COL]; int st[COL][ROW];

/*s代表原矩阵*/ /*st代表转置后的矩阵*/

}

/* 函数功能: 对任意row行col列的矩阵转置

函数入口参数: 指向一维整型数组的指针变量a,指向单元存放转置前的矩阵元素 整型变量row,矩阵的行数即二维整型数组的行数 整型变量col,矩阵的列数即二维整型数组的列数

函数出口参数: 指向一维整型数组的指针变量at,指向单元存放转置后的矩阵元素 函数返回值: 无 */

void Transpose(int (*a)[COL], int (*at)[ROW], int row, int col) { }

void InputMatrix(int (*s)[COL], int row, int col) /*输入矩阵元素*/ {

for (i=0; i

for (i=0; i

for (j=0; j

*(*(at+j)+i) = *(*(a+i)+j);

int i, j;

printf(\

PrintMatrix(st, COL, ROW); /*输出转置矩阵,*st指向st的第0行,是行指针*/ Transpose(s, st, ROW, COL); /*对矩阵s进行转置,结果存放于st中*/

}

{ }

for (j=0; j

scanf(\

/*这里*(s+i)+j等价于&s[i][j]*/

void PrintMatrix(int (*s)[ROW], int row, int col) /*输入矩阵元素*/ { }

7 用指针数组编程实现:从键盘任意输入一个数字表示月份值n,程序输出该月份的英文表示,若n不在1~12之间,则输出“Illegal month”。

#include main() {

int n;

static char *monthName[]={\month\\\

\\\\\

for (i=0; i

for (j=0; j

printf(\

printf(\这里*(*(s+i)+j)等价于s[i][j]*/

int i, j;

\ \

printf(\ scanf(\

/*输入月份*/

\

\

\

if ((n <= 12) && (n >= 1)) {

printf(\输出相应月份*/ } else {

printf(\ } }

8 口袋中有若干红、黄、蓝、白、黑五种颜色的球,每次从口袋中取出3个球,编程打印出得到3种不同颜色的球的所有可能取法。 #include main () {

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

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

for(k=j+1;k<5;k++)

char *ballColor[]={\int i,j,k,m=0;

/*输出错误*/

本文来源:https://www.bwwdw.com/article/7fxa.html

Top