(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;
}