当前位置:文档之家› C语言编程习题

C语言编程习题

C语言编程习题
C语言编程习题

(1)设某企业2006年的产值为5000万,计划以后每年的增长率为x(x从键盘输入,例如输入8.75表示8.75%),计算该企业的产值在哪年实现翻番以及翻番时的产值,然后输出(输出时以万为单位,应考虑有小数)。

#include

#include

int main(void)

{

double x, y;

int year, n = 0;

printf("Please input x:");

scanf("%lf", &x);

do

{

n++;

y = 5000 * pow((1 + x / 100), n);

} while (y < 10000);

year = 2006 + n;

printf("year = %d nian, chanzhi = %.2f\n", year, y);

return 0;

}

(2)已知某银行整存整取存款不同期限的年息利率分别为:3.15%期限一年,3.63%期限二年, 4.02%期限三年,4.69%期限五年,5.36%期限八年。从键盘上输入存钱的本金(以元为单位,必须定义为int且应考虑金额很大的情况)和存款期限(只考虑1,2,3,5,8),求到期时能从银行得到的利息(以元为单位,应考虑有小数,不计复利)。

#include

int main(void)

{

int benjin, cunqi;

double lixi;

printf("Please input benjin, cunqi:");

scanf("%d,%d", &benjin, &cunqi);

switch (cunqi)

{

case 1:

lixi = benjin * 3.15 / 100;

printf("lixi = %.2f yuan\n", lixi);

break;

case 2:

lixi = benjin * 3.63 / 100 * 2;

printf("lixi = %.2f yuan\n", lixi);

break;

case 3:

lixi = benjin * 4.02 / 100 * 3;

printf("lixi = %.2f yuan\n", lixi);

break;

case 5:

lixi = benjin * 4.69 / 100 * 5;

printf("lixi = %.2f yuan\n", lixi);

break;

case 8:

lixi = benjin * 5.36 / 100 * 8;

printf("lixi = %.2f yuan\n", lixi);

break;

default:

printf("cunqi error!\n");

}

return 0;

}

(3)编写一个简单计算器程序,输入格式为:data1 op data2。其中data1和data2是参加运算的两个数(data1、data2必须定义为int,但二者相加可能超出int能表示的范围),op为运算符,它的取值只能是+、-、*、/、%。

#include

int main(void)

{

int data1, data2;

char op;

printf("Please input data1 op data2:");

scanf("%d %c %d", &data1, &op, &data2);

switch (op)

{

case '+':

printf("%d+%d=%f\n", data1, data2, (double)data1 + (double)data2);

break;

case '-':

printf("%d-%d=%d\n", data1, data2, data1 - data2);

break;

case '*':

printf("%d*%d=%f\n", data1, data2, (double)data1 * (double)data2);

break;

case '/':

if (data2 != 0)

{

printf("%d/%d=%d\n", data1, data2, data1 / data2);

}

else

{

printf("Error! chu shu wei 0.\n");

}

break;

case '%':

if (data2 != 0)

{

printf("%d%%%d=%d\n", data1, data2, data1 % data2);

}

else

{

printf("Error! chu shu wei 0.\n");

}

break;

default:

printf("运算符错误!\n");

}

return 0;

}

(4)编写一程序P2-211.C实现以下功能

根据输入的n在屏幕上显示对应的以#组成的菱形图案。

#include

int main(void)

{

int n;

int i, j;

printf("Please input n:");

scanf("%d", &n);

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

{

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

{

printf(" ");

}

for (j = 1; j <= 2 * i - 1; j++)

{

printf("#");

}

printf("\n");

}

for (i = n; i >= 1; i--)

{

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

{

printf(" ");

}

for (j = 1; j <= 2 * i - 1; j++)

{

printf("#");

printf("\n");

}

return 0;

}

(5)编写一程序P2-213.C实现以下功能

根据输入的n在屏幕上显示对应的图案。编程可用素材:printf("Please input n: ")...。

程序的运行效果应类似地如图1和图2所示,图1中的3和图2中的5是从键盘输入的内容。

#include

int main(void)

{

int num;

int i, j;

printf("Please input n:");

scanf("%d", &num);

for (i = 1; i <= num; i++)

{

for (j = 1; j <= (i - 1); j++)

{

printf(" ");

}

printf("%c", '@');

if (i < num)

{

for (j = 1; j <= 2 * (num - i) - 1; j++)

{

printf(" ");

}

printf("%c", '@');

}

printf("\n");

}

for (i = num - 1; i >= 1; i--)

{

for (j = 1; j <= (i - 1); j++)

{

printf(" ");

}

printf("%c", '@');

for (j = 1; j <= 2 * (num - i) - 1; j++)

{

printf(" ");

}

printf("%c", '@');

printf("\n");

}

return 0;

}

(6)根据输入的n在屏幕上显示对应的图案。编程可用素材:printf("Please input n: ")...。

程序的运行效果应类似地如图1和图2所示,图1中的3和图2中的5是从键盘输入的内容。

#include

int main(void)

{

int num;

int i, j;

printf("Please input n:");

scanf("%d", &num);

for (i = 1; i <= num; i++)

{

printf("%c", '$');

if (i < num)

{

for (j = 1; j <= num-1-i; j++)

{

printf(" ");

}

printf("%c", '$');

}

printf("\n");

}

for (i = num - 1; i >= 1; i--)

{

printf("%c", '$');

for (j = 1; j <= num - 1 - i; j++)

{

printf(" ");

}

printf("%c", '$');

printf("\n");

}

return 0;

}

(7)求S=1/1!+1/2!+1/3!+…+1/N!并输出结果(显示时小数部分占16位,计算时要求从第1项开始往后累加)。N为任意自然数(只考虑int型),从键盘读入。编程可用素材:printf("Please input n: ")...、printf("\nS=1/1!+1/2!+...+1/...!=...。

#include

int main(void)

{

int nn, i;

double sum = 0, fac = 1;

printf("Please input n:");

scanf("%d", &nn);

for (i = 1; i <= nn; i++)

{

fac = fac * i;

sum = sum + 1 / fac;

}

printf("S=1/1!+1/2!+...+1/%d!=%.16f", nn, sum);

return 0;

}

(8)求任意的一个m×m矩阵的最大数及其所在的行列数,m(2<=m<=20)及矩阵元素从键盘输入(只考虑int型)。编程可用素材:printf("Please input m: ")...、printf("\nPlease input array:\n")...、printf("\nmax=...,i=...,j=...\n"...。

程序的运行效果应类似地如图1所示,图1中的5和

1 45 67 235 464

35 6 89 32342 8

347 9346 47 95 746

46 785 436 19434 634

3235 567 24 8465 25

是从键盘输入的内容。

#include

int main(void)

{

int arr[20][20];

int i, j, m, max, maxi, maxj;

printf("Please input m:");

scanf("%d", &m);

printf("Please input array:\n");

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

{

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

{

scanf("%d", &arr[i][j]);

}

}

max = arr[0][0];

maxi = 0;

maxj = 0;

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

{

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

{

if (max < arr[i][j])

{

max = arr[i][j];

maxi = i;

maxj = j;

}

}

}

printf("max=%d, i=%d, j=%d\n", max, maxi, maxj);

return 0;

}

(9)求任意的一个m×m矩阵的对角线上元素之和,m(2<=m<=20)及矩阵元素从键盘输入(只考虑int型,且不需考虑求和的结果可能超出int型能表示的范围)。编程可用素材:printf("Please input m: ")...、printf("\nPlease input array:\n")...、printf("\nsum=...\n"...。

程序的运行效果应类似地如图1所示,图1中的5和

1 45 67 235 464

35 6 89 32342 8

347 9346 47 95 746

46 785 436 19434 634

3235 567 24 8465 25

是从键盘输入的内容。

#include

int main(void)

{

int sum = 0, arr[20][20];

int m, i, j;

printf("Please input m:");

scanf("%d", &m);

printf("Please input array:\n");

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

{

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

{

scanf("%d", &arr[i][j]);

}

}

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

{

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

{

if ((i == j) || ((i + j) == (m - 1)))

{

sum = sum + arr[i][j];

}

}

}

printf("sum=%d\n", sum);

return 0;

}

(10)求任意的一个m×m矩阵的周边元素之和,m(2<=m<=20)及矩阵元素从键盘输入(只考虑int型,且不需考虑求和的结果可能超出int型能表示的范围)。编程可用素材:printf("\nPlease input m: ")...、printf("\nPlease input array:\n")...、printf("\nsum=...\n"...。

程序的运行效果应类似地如图1所示,图1中的5和

1 45 67 235 464

35 6 89 32342 8

347 9346 47 95 746

46 785 436 19434 634

3235 567 24 8465 25

是从键盘输入的内容。

#include

int main(void)

{

int sum = 0, arr[20][20];

int m, i, j;

printf("Please input m:");

scanf("%d", &m);

printf("Please input array:\n");

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

{

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

{

scanf("%d", &arr[i][j]);

}

}

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

{

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

{

if ((i == 0) || (j == 0) || (i == (m - 1)) || (j == (m - 1)))

{

sum = sum + arr[i][j];

}

}

}

printf("sum=%d\n", sum);

return 0;

}

(11)编写一程序P2-219.C实现以下功能

从键盘读入一行字符(约定:字符数≤127字节),将其中的数字字符以及这些数字字符的数量在屏幕上显示,注意:要求先显示这些数字字符的数量。编程可用素材:printf("Please input string:")...、printf("\nshu zi ge shu wei:...、printf("\nshu zi wei:...。

程序的运行效果应类似地如图1所示,图1中的gfaskl45623cvsac,53dwafl faf32535as3bf0是从键盘输入的内容。

#include

#include

int main(void)

{

char arr1[128], arr2[128];

int num = 0;

int i;

printf("Please input string:");

gets(arr1);

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

{

if (arr1[i] >= '0' && arr1[i] <= '9')

{

num++;

arr2[num - 1] = arr1[i];

}

}

printf("shu zu ge shu wei:%d\n", num);

printf("shu zi wei:");

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

{

printf("%c", arr2[i]);

}

printf("\n");

return 0;

}

(12)编写一程序P2-222.C实现以下功能

从键盘上读入一行字符(约定:字符数≤127字节),按以下方法将其加密变换:A->Z a->z

B->Y b->y

C->X c->x

…………

Z->A z->a

即字母A变成Z、字母B变成Y...,非字母字符不变。最后在屏幕上先显示这一行字符的长度,再显示生成的密文。

编程可用素材:printf("Please input string:")...、printf("\nzi fu chuan chang du:...、printf("\nmi wen:...。

程序的运行效果应类似地如图1所示,图1中的sfasfk,lmw4tywerysfcvasgewr xfasftg是从键盘输入的内容。

#include

#include

int main(void)

{

char str[128];

int i;

printf("Please input string:");

gets(str);

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

{

if ((str[i] >= 'a') && (str[i] <= 'z'))

{

str[i] = 'a' + ('z' - str[i]);

}

else if ((str[i] >= 'A') && (str[i] <= 'Z'))

{

str[i] = 'A' + ('Z' - str[i]);

}

}

printf("zi fu chuan chang du: %d\n", strlen(str));

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

return 0;

}

(13)编写一程序P3-311.C实现以下功能

①从键盘上先后读入两个字符串,假定存储在字符数组s1和s2中。注意,这两个字符串最长均可达到127个字符、最短均可为0个字符。

②将字符串s2插入字符串s1中,插入方法为:s2的第i个字符插入到原s1的第i个字符后,如果s2比s1(假定s1的长度为L1)长,则s2的第L1个字符开始到s2结尾的所有字符按在s2中的顺序放在新生成的s1后。提示,合并时可使用中间数组。例如: s1输入为"123456789",S2输入为"abcdefghijk",则输出的s1为:

1a2b3c4d5e6f7g8h9ijk

③在屏幕上输出新生成的s1。

编程可用素材:printf("Please input string1:")...、printf("Please input string2:")...、printf("\nstring1:...\n"...。

程序的运行效果应类似地如图1所示,其中的123456789和abcdefghijk是从键盘输入的内容。

#include

#include

int main(void)

{

char s1[255], s2[128], s3[255];

int i, j;

printf("Please input string1:");

gets(s1);

printf("Please input string2:");

gets(s2);

printf("\n");

for (i = 0, j = 0; (s1[i] != '\0') && (s2[i] != '\0'); i++, j = j + 2)

{

s3[j] = s1[i];

s3[j+1] = s2[i];

}

if (s2[i] != '\0')

{

for (; s2[i] != '\0'; i++, j++)

{

s3[j] = s2[i];

}

s3[j] = '\0';

}

else if (s1[i] != '\0')

{

for (; s1[i] != '\0'; i++, j++)

{

s3[j] = s1[i];

}

s3[j] = '\0';

}

strcpy(s1, s3);

printf("string1:%s\n", s3);

return 0;

}

(14)编写一程序P4-412.C实现以下功能

①程序运行时先显示Please input numbers:,再从键盘上读入一组整数(只考虑int型),数与数之间只使用空格或回车作分隔。数可正可负,最多10000个,但若读入的数为-222时,则表示输入结束且-222不算在该组数内。

②对这一组数按从小到大的顺序进行排序。

③将排序后的这一组数输出到屏幕上,输出格式为每行6个数,数与数之间使用逗号(,)分隔,两个逗号之间的宽度(不算逗号)为6且使用左对齐格式。注意,行尾没有逗号。

编程可用素材:printf("Please input numbers:")...、printf("\nOutput:\n")...。

程序的运行效果应类似地如图1所示,其中的100 120 89 72 -19 200 500 210 235 6 24 1234 78 234 -234 -2342 346 23524 7823 -3411 23423 -2 22是从键盘输入的内容。

#include

int main(void)

{

int i, j, num = 0, tmp, count, data[10000];

printf("Please input numbers:");

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

{

scanf("%d", &tmp);

if (tmp != -222)

{

data[i] = tmp;

num++;

}

else

{

break;

}

}

for (j = 0; j < num - 1; j++)

{

for (i = 0; i < num - j -1; i++)

{

if (data[i] > data[i+1])

{

tmp = data[i];

data[i] = data[i+1];

data[i+1] = tmp;

}

}

}

printf("Output:\n");

for (i = 0, count = 0; i < num; i++)

{

printf("%-6d", data[i]);

count++;

if ((count % 6 == 0) || (count == num))

{

printf("\n");

}

else

{

printf(",");

}

}

return 0;

}

(15)编写一程序P4-415.C实现以下功能

设有10名歌手(编号为1-10)参加歌咏比赛,另有6名评委打分,每位歌手的得分从键盘输入:先提示“Please input singer's score: ”,再依次输入第1个歌手的6位评委打分(10分制,分数为整型,分数之间使用空格分隔),第2个歌手的6位评委打分...以此类推。计算出每位歌手的最终得分(扣除一个最高分和一个最低分后的平均分,最终得分保留2位小数),最后按最终得分由高到低的顺序输出每位歌手的编号及最终得分。

注意:变量数据类型的选择应适当,在保证满足设计要求精度的情况下,养成不浪费内存空间和计算时间的好习惯。编程可用素材:printf ("Please input singer's score: ")...、printf("\nscores:\n")...、printf("No....:...。

程序的运行效果应类似地如图1所示,其中的1 4 7 3 6 3

4 6 8 3

5 8

7 3 6 8 4 2

7 4 7 4 6 4

4 5 6 7 2 5

3 5 7 8 9 3

7 4 4 7 3 8

9 4 3 7 3 6

4 8 3 7 2 8

5 1

6

7

8 7

是从键盘输入的内容。

#include

#define N 10

struct person

{

int number;

int score[6];

float finalScore;

};

int main(void)

{

int i, j, sum, max, min;

struct person tmp, singer[N];

printf("Please input:");

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

{

singer[i].number = i + 1;

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

{

scanf("%d", &singer[i].score[j]);

}

}

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

{

max = min = singer[i].score[0];

sum = singer[i].score[0];

for (j = 1; j < 6; j++)

{

if (singer[i].score[j] > max)

{

max = singer[i].score[j];

}

else if (singer[i].score[j] < min)

{

min = singer[i].score[j];

}

sum = sum + singer[i].score[j];

}

sum = sum - min - max;

singer[i].finalScore = (float)sum / 4;

}

for (i = 0; i < N - 1; i++)

{

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

{

if (singer[j].finalScore > singer[i].finalScore)

{

tmp = singer[j];

singer[j] = singer[i];

singer[i] = tmp;

}

}

}

printf("scores:\n");

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

{

printf("NO.%d:%.2f\n", singer[i].number, singer[i].finalScore);

}

return 0;

}

相关主题
文本预览
相关文档 最新文档