printf(\ printf(\ printf(\
return 0; }
第六章
6.1
程序改错v2.0(5分)
下面代码的功能是将百分制成绩转换为5分制成绩,具体功能是:如果用户输入的是非法字符或者不在合理区间内的数据(例如输入的是a,或者102,或-45等),则程序输出 Input error!,并允许用户重新输入,直到输入合法数据为止,并将其转换为5分制输出。目前程序存在错误,请将其修改正确。并按照下面给出的运行示例检查程序。 1. #include 2. int main() 3. { 4. int score; 5. char grade; 6. printf(\7. scanf(\8. if (score < 0 || score > 100) 9. printf(\10. else if (score >= 90) 11. grade = 'A’; 12. else if (score >= 80) 13. grade = 'B'; 14. else if (score >= 70) 15. grade = 'C'; 16. else if (score >= 60) 17. grade = 'D'; 18. else 19. grade = 'E'; 20. printf(\21. return 0; 22. }
程序运行结果示例1: Please input score: a↙ Input error! Please input score: -12↙ Input error! Please input score: 230↙ Input error! Please input score: 92↙ grade: A
程序运行结果示例2: Please input score: 88↙ grade: B
程序运行结果示例3:
Please input score: 73↙ grade: C
程序运行结果示例4:
Please input score: 65↙ grade: D
程序运行结果示例5:
Please input score: 27↙ grade: E
输入格式: \
输出格式:
输入提示信息:\
输入错误提示信息:\
输出格式:\注意:%c前面有一个空格)
输入样例:
输出样例:
#include int main() {
int score,m=0; char grade;
printf(\ do{
m=scanf(\ getchar();
if (m!=1 ||score < 0 || score > 100)
{ printf(\ }while (m==0); 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(\ return 0; }
6.2
编程计算 a+aa+aaa+…+aa…a(n个a)的值(4分)
题目内容:
编程计算 a+aa+aaa+…+aa…a(n个a)的值,n和a的值由键盘输入。例如,当n=4,a=2,表示计算2+22+222+2222的值。
程序运行结果示例: Input a,n: 2,4↙ sum=2468
输入格式:
\(先输入a,后输入n)
输出格式:
输入提示信息:\输出格式:\
输入样例:
输出样例:
#include int main(){
int a,n,sum=0,tem=1; printf(\ scanf(\ int i;
for (i=1;i<=n;i++) {
sum+=(a*tem); tem=tem*10+1; }
printf(\ return 0; }
6.3
搬砖问题(4分)
题目内容:
36块砖,36人搬,男搬4,女搬3,两个小孩抬一块砖,要求一次搬完,问男人、女人和小孩各需多少人?请用穷举法编程求解。
程序的运行结果示例: men=3,women=3,children=30
输入格式:
输出格式:
\
输入样例:
输出样例:
#include int main(){
int woman,man,kid;
for (woman=0;woman<=12;woman++) {
for (man=0;man<=9;man++) {
kid=36-man-woman;
if (4*man+3*woman+0.5*kid==36)
printf(\ } }
return 0; }
6.4
编程输出某年某月有多少天(考虑闰年)。(5分)
题目内容:
从键盘输入一个年份和月份,输出该月有多少天(考虑闰年),用switch语句编程。
程序运行结果示例1: Input year,month: 2015,3↙ 31 days
程序运行结果示例2: Input year,month: 2015,4↙ 30 days
程序运行结果示例3: Input year,month: 2016,2↙ 29 days
程序运行结果示例4:
Input year,month: 2014,2↙ 28 days
程序运行结果示例5: Input year,month: 2015,13↙ Input error!
输入格式:
\
输出格式:
输入提示信息:\ 输入错误提示信息:\ 输出格式: \ \ \ \ 输入样例
输出样例
#include int isleap(int n); int main(){
int year,month;
printf(\ scanf(\ switch (month){ case 1: case 3: case 5: case 7: case 8: case 10:
case 12: printf(\ case 4: case 6: case 9:
case 11:printf(\ case 2:if (isleap(year)) {
printf(\
}
else{ printf(\ }
default : printf(\
}
return 0; }
int isleap(int n) {
if (n0!=0&&n%4==0||n@0==0) return 1; else
return 0; }
第七章
7.1
递归法计算游戏人员的年龄(4分)
题目内容:
有n个人围坐在一起,问第n个人多大年纪,他说比第n-1个人大2岁;问第n-1个人,他说比第n-2个人大2岁,.....,问第3个人,他说比第2个人大2岁;问第2个人,他说比第1个人大2岁。第1个人说自己10岁,问第n个人多大年纪。 递归函数原型:unsigned int ComputeAge(unsigned int n); 提示: 递归公式
输入格式: \ 输出格式:
\
输入样例1: 5↙
输出样例1:
The_person's_age_is_18 输入样例2: 10↙
输出样例2:
The_person's_age_is_28
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串! (注意:在输出中,“_”代表空格,如果直接将上段示例粘贴到代码中,应将其替换为空格。)
#include
unsigned int Age(unsigned int age); int main(){
unsigned int n=0; scanf(\
printf(\ return 0; }
unsigned int Age(unsigned int n) {
if (n==1)
return 10; else
return Age(n-1)+2; }
7.2
魔术师猜数(4分)
题目内容:
在一种室内互动游戏中,魔术师要每位观众心里想一个三位数abc(a、b、c分别是百位、十位和个位数字),然后魔术师让观众心中记下acb、bac、bca、cab、cba五个数以及这5个数的和值。只要观众说出这个和是多少,则魔术师一定能猜出观众心里想的原数abc是多少。例如,观众甲说他计算的和值是1999,则魔术师立即说出他想的数是443,而观众乙说他计算的和值是1998,则魔术师说:“你算错了!”。请编程模拟这个数字魔术游戏。要求用函数实现,函数原型:int Magic(int m);其中形参m代表观众计算的和值。 输入格式: \ 输出格式:
观众计算错误,魔术师给出的结论:\ 观众计算正确,魔术师给出的结论:\ 输入样例1: 1998↙ 输出样例1:
The_sum_you_calculated_is_wrong! 输入样例2: 1999↙ 输出样例2: The_number_is_443
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串! (注意:在输出中,“_”代表空格,如果直接将上段示例粘贴到代码中,应将其替换为空格。)
#include int Magic(int m); int main(){ int m;
scanf(\ if( Magic(m))
printf(\ else
printf(\ return 0; }
int Magic(int n) {
int m; int a,b,c;
for (m=100;m<1000;m++){ a=m/100; c=m;
b=(m-a*100)/10;
if ((a*122+b*212+c*221)==n) return m; }
return 0; }
7.3
寻找中位数v1.0(4分)
题目内容:
编写一个函数返回三个整数中的中间数。函数原型:int mid(int a, int b, int c); 功能是返回a,b,c三数中大小位于中间的一个数。 输入格式:
\
输出格式:
\
输入样例1: 12 6 18↙ 输出样例1: The_result_is_12 输入样例2: -9 7 -2↙ 输出样例2: The_result_is_-2
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串! (注意:在输出中,“_”代表空格,如果直接将上段示例粘贴到代码中,应将其替换为空格。)
#include
int mid(int a, int b, int c); int main(){ int a,b,c;
scanf(\
printf(\ return 0; }
int mid(int a, int b, int c) {
int j,i,t;
int m[3]={a,b,c}; for (i=0;i<2;i++)
for (j=i;j<=2;j++) if (m[j]>m[i]) {t=m[j]; m[j]=m[i]; m[i]=t; } return m[1]; }
7.4
还原算术表达式(4分)
题目内容:
编写程序求以下算式中XYZ的值。
输入格式:
输出格式:\ 输入样例: 输出样例: X=3,Y=2,Z=1
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
#include
int mid(int a, int b, int c); int main(){ int x,y,z;
for (x=0;x<9;x++)
for (y=0;y<9;y++) for (z=0;z<9;z++)
if ((x*100+y*110+z*12)==532)
printf(\ return 0; }
第八章
8.1
计算礼炮声响次数(4分)
题目内容:
在海军节开幕式上,有A、B、C三艘军舰要同时开始鸣放礼炮各21响。已知A舰每隔5秒放1次,B舰每隔6秒放1次,C舰每隔7秒放1次。假设各炮手对时间的掌握非常准确,请编程计算观众总共可以听到几次礼炮声。
输入格式:无 输出格式:
n=%d
输入样例: 输出样例:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
#include int main() {
int t,n=0;
for (t=0;t<=140;t++) {
if (t%5==0 && t<=21*5) {
n++;
continue; }
if (t%6==0 && t<=21*6) { n++;
continue; }
if (t%7==0 && t<=21*7) { n++;
continue; }
}
printf(\
return 0; }
8.2
兔子生崽问题(4分)
题目内容:
假设一对小兔的成熟期是一个月,即一个月可长成成兔,那么如果每对成兔每个月都可以生一对小兔,一对新生的小兔从第二个月起就开始生兔子,试问从一对兔子开始繁殖,一年以后可有多少对兔子(即当年12月份总计有多少对兔子,含成兔和小兔)?请编程求解该问题。
参考答案:依题意,兔子的繁殖情况如图所示。图中实线表示成兔仍是成兔或者小兔长成成兔;虚线表示成兔生小兔。观察分析此图可发现如下规律:
(1)每月小兔对数 = 上个月成兔对数。
(2)每月成兔对数 = 上个月成兔对数 + 上个月小兔对数。 综合(1)和(2)有:每月成兔对数 = 前两个月成兔对数之和。
用fn(n=1,2,…)表示第n个月成兔对数,于是可将上述规律表示为如下递推公式:
输入格式:无 输出格式:
每个月兔子对数的输出格式: \
第12个月的兔子总数的输出格式: \ 输入样例: 输出样例:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
#include int creat(int n); int main() {
int each,total,i;
for (i=1;i<=12;i++)
printf(\ printf(\return 0;
}
int creat(int n) {
if (n==1 || n==2) return 1; else
return creat(n-1)+creat(n-2); }
8.3
抓交通肇事犯(4分)
题目内容:
一辆卡车违犯交通规则,撞人后逃跑。现场有三人目击事件,但都没记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是位数学家,他说:四位的车号刚好是一个整数的平方。现在请根据以上线索帮助警方找出车号以便尽快破案。 [提示]:假设这个4位数的前两位数字都是i,后两位数字都是j,则这个可能的4位数
k = 1000*i + 100*i + 10*j + j
式中,i和j都在0~9变化。此外,还应使k=m*m,m是整数。由于k是一个4位数,所以m值不可能小于31。
输入格式:无
输出格式:\k=%d,m=%d\\n\ 输入样例: 输出样例:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
#include int main() {
int a,b,c,d,i,j;
for (i=31;i<100;i++) {
j=i*i; a=j/1000; d=j;
b=j00/100; c=j0/10;
if (a==b&&c==d&&a!=c)
printf(\ }
return 0; }
8.4
检验并打印幻方矩阵。(4分)
题目内容:
幻方矩阵是指该矩阵中每一行、每一列、每一对角线上的元素之和都是相等的。从键盘输入一个5×5的矩阵并将其存入一个二维整型数组中,检验其是否为幻方矩阵,并将其按指定格式显示到屏幕上。 输入格式: \输出格式:
如果是幻方矩阵,输出提示信息: \ 矩阵元素的输出: \(换行使用\)
如果不是幻方矩阵,输出提示信息: \ 输入样例1: 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
(输人样例中“_”代表空格) 输出样例1: It is a magic square! **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 (输出样例中“*”代表空格) 输入样例2: 1_0_1_6_1 3_1_1_1_1 1_1_1_1_2 1_1_1_1_1 9_1_7_1_1
(输人样例中“_”代表空格) 输出样例2:
It is not a magic square!
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串! (输人样例中“_”代表空格,输出样例中“*”代表空格)
#include int judge (); int i,j;
int m[5][5]={0}; int main() {
for(i=0;i<5;i++)
for (j=0;j<5;j++)
scanf(\ if (judge()){
printf(\ for(i=0;i<5;i++)
{
for (j=0;j<5;j++)
printf(\ printf(\ } } else
printf(\
return 0; }
int judge () {
int l=0,r=0;
int s[5]={0},t[5]={0}; for (i=0;i<5;i++) for (j=0;j<5;j++) { s[i]+=m[i][j]; t[j]+=m[i][j]; if (i==j) l+=m[i][j]; if (i+j==4) r+=m[i][j]; } if (l!=r) return 0; for (i=0;i<5;i++) if (s[i]!=l||t[i]!=l) return 0; return 1; }
第九章
9.1
ISBN识别码判断(4分)
题目内容:
每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”就是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔符后的五位数字代表该书在该出版社的编号;最后一位为识别码。 识别码的计算方法如下:
首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,...,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。
你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。
程序运行结果示例1: 0-123-41562-4↙ Right
程序运行结果示例2: 0-123-41562-7↙ 0-123-41562-4
输入格式: 用gets()输入字符串
输入只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN的格式要求)。 输出格式:
输入的ISBN号码的识别码正确,输出信息: \
输入的ISBN号码的识别码错误,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”),输出格式:\ 注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串! 输入样例: 输入样例:
#include #include int i=0,j=0; int main() {
char s[14],d[14]; int m[9]={0}; int n=0,l=0; gets(s); n=s[12]-48;
for (i=0;s[i]!='\\0';i++) {
if (s[i]!='-') {
m[j]=s[i]; j++; } }
for (j=1;j<=9;j++) {
//printf(\ l+=(m[j-1]-48)*j; }
l=l;
if (l==n)
printf(\ else {
strncpy(d,s,12); d[12]=l+48;
d[13]='\\0'; printf(\ }
return 0; }
9.2
摘苹果(4分)
题目内容:
陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。 程序运行结果示例1:
100 110 130 200 140 150 156 187 197 149↙ 110↙ 4
程序运行结果示例2:
90 210 102 153 147 110 130 182 88 113↙ 100↙ 6
输入格式: \ 输入包括两行数据:
第1行包含10个100到200之间的整数(包括100和200,以厘米为单位),分别表示10个苹果到地面的高度。两个相邻的整数之间用一个空格隔开。
第2行只包括一个100到120之间的整数(包含100和120,以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。 输出格式: \
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串! 输入样例: 输出样例:
#include int main(){
int m[10]={0}; int i,j=0,n;
for (i=0;i<10;i++)
scanf(\ scanf(\ for (i=0;i<10;i++) if(m[i]<=n+30) j++;
printf(\ return 0; }
9.3
求最大素数(4分)
题目内容:
求500以内的10个最大素数及其和,并分别输出这10个最大素数及其和。 要求10个素数按从大到小的顺序输出。 输入格式: 无 输出格式:
10个最大素数的输出格式:\ 总和的输出格式:\ 输入样例: 输出样例:
#include #include int judge(int n); int main(){
int m[500]; int j,l=0,sum=0; for (j=500;j>0;j--) {
if (judge(j)) m[l++]=j; }
for (j=0;j<10;j++) {
sum+=m[j];
printf(\ }
printf(\ return 0; }
int judge(int n) {
int i;
for (i=2;i<=sqrt((double)n);i++) {
if (n%i==0) return 0; }
return 1; }
9.4
字符串逆序(4分)
题目内容:
用字符数组作函数参数编程,利用一个数组实现字符串(允许输入带空格的字符串)的逆序存放。要求如下: (1)在主函数中从键盘输入字符串,字符串的最大长度为80个字符。
调用Inverse()函数将字符串逆序存放,然后在主函数中输出逆序后的字符串。 (2)在子函数Inverse()中实现字符串的逆序存放。函数原型为: void Inverse(char str[]); 程序运行结果示例1: Input a string: abcde↙ Inversed results: edcba
程序运行结果示例2: Input a string: hello↙
Inversed results: olleh
输入格式: 用gets()输入字符串 输出格式:
输入提示信息:\ 输出提示信息:\\\n\用puts()输出字符串
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串! 输入样例: 输出样例:
#include #include #define maxn 80
void Inverse(char str[]); int main(){
char str[maxn];
printf(\ gets(str);
printf(\ Inverse(str); puts(str); return 0; }
void Inverse(char str[]) {
char ch;
int len = strlen(str),i; for(i = 0; i < len / 2; i++) {
ch = str[i];
str[i] = str[len - i - 1]; str[len - i - 1] = ch; } }
第十章
10.1
水手分椰子(4分)
题目内容:
五个水手在岛上发现一堆椰子,先由第1个水手把椰子分为等量的5堆,还剩下1个给了猴子,自己藏起1堆。然后,第2个水手把剩下的4堆混合后重新分为等量的5堆,还剩下1个给了猴子,自己藏起1堆。以后第3、4个水手依次按此方法处理。最后,第5个水手把剩下的椰子分为等量的5堆后,同样剩下1个给了猴子。请用迭代法编程计算并输出原来这堆椰子至少有多少个。
输入格式: 无 输出格式:\输入样例: 输出样例:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
#include check(int n){ int i;
for(i=0; i<5; i++) {
if(n%5!=1) return 0; n=n/5*4; }
return 1; }
int main() {
int i;
for(i=6; i<10000; i++) {
if(check(i)) {
printf(\ break; } }
return 0; }
10.2
找最值(4分)
题目内容:
从键盘任意输入10个整数,用指针变量作函数参数编程计算最大值和最小值,并返回它们所在数组中的位置。函数原型如下所示: int FindMax(int num[], int n, int *pMaxPos);//函数返回最大值,pMaxPos返回最大值所在的下标 int FindMin(int num[], int n, int *pMinPos);//函数返回最小值,pMaxPos返回最小值所在的下标 程序运行结果示例: Input 10 numbers: -1 2 3 45 92 8 9 12 7 8↙
Max=92,Position=4,Min=-1,Position=0
输入格式: \ 输出格式:
提示信息:\
输出结果:\ 输入样例: 输出样例:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串! 时间限制:500ms内存限制:32000kb
#include
int FindMax(int num[], int n, int *pMaxPos); int FindMin(int num[], int n, int *pMinPos); int num[10];
int i,maxdex=0,mindex=0;
int main(){
int max,min; int m,n;
printf(\ for (i=0;i<10;i++)
scanf(\ max=FindMax(num,10,&m); min =FindMin(num,10,&n);
printf(\ return 0; }
int FindMax(int num[], int n, int *pMaxPos) {
*pMaxPos=num[0]; for (i=1;i if (num[i]>*pMaxPos) {*pMaxPos=num[i]; maxdex=i; }
return maxdex; }
int FindMin(int num[], int n, int *pMinPos) {
*pMinPos=num[0]; for (i=1;i if (num[i]<*pMinPos) {*pMinPos=num[i]; mindex=i; } return mindex; }
10.3
星期查找(4分)
题目内容:
任意输入英文的星期几,通过查找如图所示的星期表,输出其对应的数字,若查到表尾,仍未找到,则输出错误提示信息。
提示:用一个二维字符数组weekDay来存放如图所示的星期表的内容(字符串)。输入待查找的字符串,然后在星期表中顺序查找与输入字符串相匹配的字符串。找到的字符串在星期表数组中的第一维下标(行号)即为题目所求。 程序运行结果示例1: Please enter a string: Friday↙ Friday is 5
程序运行结果示例2: Please enter a string: Fruday↙ Not found!
输入格式: 字符串输入采用gets()函数 输出格式:
输入提示信息:\:\\n\ 找到了,输出:\ 没找到,输出:\ 输入样例: 输出样例:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
#include #include #define max 50
int main() {
char week[7][10] ={\ int i,flag=0; char find[max];
printf(\ gets(find);
for (i=0; i<7; i++)
if (strcmp(week[i],find)==0) {
flag=1; break; } if(flag==0)
printf(\ else
printf(\ return 0; }
10.4
杨辉三角形(4分)
题目内容:
编程打印具有如下形式的杨辉三角形,其中输出数据的行数n从键盘输入,并且n<=10。 程序运行结果示例1: Input n (n<=10): 5↙ 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
程序运行结果示例2: Input n (n<=10): 7↙ 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
输入格式: \ 输出格式:
输入提示信息:\ 输出数据格式:\ 数据换行: \
输入样例: 输出样例:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
#include int main() {
int n;
int i,j,a[10][10];
printf(\ scanf(\ for(i=0; i for(j=0; j a[i][0]=1; a[i][i]=1; }
for(i=2; i for(j=1; j<=i-1; j++)
a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0; i for(j=0; j<=i; j++)
printf(\ printf(\
} }
第十一章
11.1
找数组最值(4分)
题目内容:
按如下函数原型编程从键盘输入一个m行n列的二维数组,然后计算数组中元素的最大值及其所在的行列下标值。其中,m和n的值由用户键盘输入。已知m和n的值都不超过10。 void InputArray(int *p, int m, int n);
int FindMax(int *p, int m, int n, int *pRow, int *pCol);//函数返回最大值,pRow和pCol分别返回最大值所在的行列下标 例如,程序的1次运行结果如下: Input n: 3,4↙
Input 3*4 array: 1 2 3 4↙ 5 6 7 8↙ 9 0 -1 -2↙
max=9,row=2,col=0 输入格式:
提示信息: \输入数组维数:\提示信息: \输入数组元素:\输出格式:
\输入样例: 输出样例:
#include
void InputArray(int (*p)[10], int m, int n);
int FindMax(int (*p)[10], int m, int n, int *pRow, int *pCol); int i,j;
int num[10][10]; int main() {
int m,n; int max=0; int row,col;
int *pRow=&row; int *pCol=&col;
printf(\ scanf(\
printf(\ InputArray(num,m,n);
max=FindMax(num,m,n,pRow,pCol);
printf(\ return 0; }
int FindMax(int (*p)[10], int m, int n, int *pRow, int *pCol) {
int tem=p[0][0]; for(i=0;item){
tem=p[i][j]; *pRow=i; *pCol=j;
} return tem; }
void InputArray(int (*p)[10], int m, int n) {
for(i=0;i scanf(\}
11.2
冒泡排序(4分)
题目内容:
采用冒泡法进行升序排序法的基本原理是:对数组中的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 输入格式: \输出格式:
输入数据个数提示:\输入数据提示:\输出提示:\输出格式:\输入样例: 输出样例:
#include int i,j;
int num[10000];
void Swap(int *m,int *n); int main() {
int n;
printf(\ scanf(\
printf(\ for(i=0;i scanf(\ for(i=0;i if (num[j] Swap(&num[j],&num[i]);
printf(\ for (i=0;i printf(\ return 0; }
void Swap(int *m,int *n) {
int tem; tem=*m; *m=*n; *n=tem; }
11.3
删除字符串中与某字符相同的字符(4分)
题目内容:
在字符串中删除与某字符相同的字符,要求用字符数组作函数参数。 程序运行结果示例: Input a string: hello, my friend!↙ Input a character: !↙
Results:hello, my friend 输入格式:
字符串输入用 gets()函数 单个字符输入用 getchar()函数 输出格式:
输入字符串的提示信息: \ 输入单个字符的提示信息: \ 输出格式: \ 输入样例: 输出样例:
#include #include #define maxn 1000
void delete_string(char str[],char ch); int main() {
char m[maxn],l[maxn]; char n;
printf(\ gets(m);
printf(\ n=getchar();
delete_string(m,n);
printf(\ return 0; }
void delete_string(char str[],char ch) {
int i,j;
for(i=j=0; str[i]!='\\0'; i++) if(str[i]!=ch)
str[j++]=str[i]; str[j]='\\0'; }
11.4
求最大数和最小数的最大公约数(4分)
题目内容:
从键盘输入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
输入格式: \ 输出格式:
输入提示信息:\Input 10 numbers:\\n\ 最大数输出格式:\ 最小数输出格式:\ 最大公约数输出格式:\ 输入样例: 输出样例:
#include #include #define maxn 10
void Swap(int *m,int *n); int gcd(int x,int y);
int i,j=0;
int num[maxn]; int main() {
int max,min;
printf(\ for (i=0; i<10; i++)
scanf(\ for(i=0; i<9; i++)
for (j=i; j<10; j++)
if (num[j] Swap(&num[j],&num[i]); max=num[9]; min=num[0];
printf(\ if (max!=0&&min!=0)
printf(\ return 0; }
void Swap(int *m,int *n) {
int tem; tem=*m; *m=*n; *n=tem; }
int gcd(int x,int y) {
int m; if(x return gcd(y,x); if(x%y!=0)
return gcd(y,x%y); else
return y; }
第十二章
12.1
百万富翁的换钱计划(4分)
题目内容:
有一天,一位百万富翁遇到一个陌生人,陌生人找他谈一个换钱的计划,陌生人对百万富翁说:“我每天给你10万元,而你第一天只需给我1分钱,第二天我仍给你10万元,你给我2分钱,第三天我仍给你10万元,你给我4分钱……。你每天给我的钱是前一天的两倍,直到满一个月(30天)为止”,百万富翁很高兴,欣然接受了这个契约。请编程计算在这一个月中陌生人总计给百万富翁多少钱,百万富翁总计给陌生人多少钱。 输入格式: 无
输出格式:
输出百万富翁给陌生人的钱: \输出陌生人给百万富翁的钱: \输入样例: 输出样例:
#include int main() {
double each1=100000,each2=0.01,sum1=0,sum2=0; int i;
for (i=1;i<=30;i++) {
sum1+=each1; sum2+=each2; each2*=2; }
printf(\ printf(\return 0; }
12.2
用计数控制的循环实现正数累加求和(4分)
题目内容:
输入一些整数,编程计算并输出其中所有正数的和,输入负数时不累加,继续输入下一个数。输入零时,表示输入数据结束。要求最后统计出累加的项数。 程序运行结果示例: Input a number: 1↙
Input a number: 3↙
Input a number: 4↙
Input a number: 2↙
Input a number: -8↙
Input a number:
-9↙
Input a number: 0↙
sum=10,count=4
输入格式: \ 输出格式:
输入提示信息: \ 输出格式: \ 输入样例: 输出样例:
#include #define m 100000 int main() {
int n,sum=0,count=0; do{
printf(\ if(n>0){
sum+=n; count++; }
}while(scanf(\
printf(\ return 0; }
12.3
平方根表(4分)
题目内容:
按如下格式输出100以内整数的平方根表。
输入格式: 无 输出格式: 输出表头: \
输出每行的开头数字: \ 输出第m行n列中的值:\ 输入样例: 输出样例:
#include #include int i,j; int main() {
for(i=0; i<10; i++) printf(\ putchar('\\n'); for (i=0; i<10; i++) {
printf(\ for (j=0; j<10; j++)
printf(\ printf(\
}
return 0; }
12.4
最大公约数(4分)
题目内容:
按照如下函数原型编写子函数计算正整数a和b的所有公约数。第一次调用,返回最大公约数。以后只要再使用相同参数调用,每次返回下一个小一些的公约数。无公约数时,函数CommonFactors()返回-1,主函数中不输出任何信息。 函数原型: int CommonFactors(int a, int b) 程序运行结果示例1: Input a and b: 100,50↙
Common factor 1 is 50 Common factor 2 is 25 Common factor 3 is 10 Common factor 4 is 5 Common factor 5 is 2 Common factor 6 is 1
程序运行结果示例2: Input a and b: 7,-3↙
输入格式: \ 输出格式:
输出公约数: \ 输入提示信息:\ 输入样例: 输出样例:
#include
int MaxCommonFactor(int a,int b); int CommonFactors(int a, int b); int main() {
int a,b;
printf(\ scanf(\ if (a>0 &&b>0)
CommonFactors(a, b); return 0; }
int CommonFactors(int a, int b) {
int *gcd=(int *)malloc(sizeof(int)*512); int i;
int index = 1;
b = MaxCommonFactor(a, b); for(i=b; i>0; i--)
if((a%i == 0) && (b%i == 0)) gcd[index++] = i; gcd[0] = index;
for (i=1; i printf(\ return gcd; }
int MaxCommonFactor(int a,int b) {
int temp;
if(a<=0||b<=0) return -1; while(b!=0) {
temp=a%b; a=b; b=temp; }
return a; }