建设银行深圳天健世纪支行网站大学生网页制作成品模板
参考:https://blog.csdn.net/qq_50696399/article/details/141574823
ch1 程序设计和C语言
ch1.1 什么是计算机程序
程序:一组计算机能识别和执行的指令;
指令:每条指令使计算机执行特定的操作;
只要让计算机执行这个程序,计算机就会“自动地”执行各条指令,有条不紊地进行工作。
计算机的本质是程序的机器,程序和指令是计算机系统中最基本的概念。
ch1.2 什么是计算机语言
机器指令(machine instruction):计算机能直接识别和接受的二进制代码;
机器语言(machine language):机器指令的集合;
汇编语言、符号汇编语言、符号语言(symbolic assembler language):计算机不能直接识别和执行符号语言的指令,需要一种称为汇编程序的软件把符号语言的指令转换为机器指令。一般,一条符号语言的指令对应转换为一条机器指令。转换过程称为“代真”或“汇编”;
高级语言(high level language):语言功能性强,且不依赖于具体机器,用它写出的程序对任何型号的计算机都适用(或只须作很少的修改);
计算机不能直接识别高级语言程序,要进行“翻译”。用一种称为编译程序的软件把高级语言写的程序(源程序source program)转换为机器指令的程序(目标程序object program),然后让计算机执行机器指令程序,最后得到结果。高级语言的一个语句往往对应多条机器指令。
ch1.4 最简单的C语言程序
//例1.1
int main()
{printf("This is a C program.\n");return 0;
}//例1.2
int main()
{int a, b, sum;a = 123;b = 456;sum = a + b;printf("sum is %d.\n", sum);return 0;
}//例1.3
int main()
{int max(int x, int y);int a, b, c;scanf("%d %d", &a, &b);c = max(a, b);printf("max=%d\n", c);return 0;
}
int max(int x, int y)
{int z;if (x > y)z = x;elsez = y;return z;
}
C语言程序的结构有以下特点:
(1)一个程序由一个或多个源程序文件组成,一个源程序文件包括:预处理指令(#include <stdio.h>)、全局声明(在函数之外进行的数据声明)、函数定义(main函数、max函数);
(2)函数是C程序的主要组成部分;
(3)一个函数包括:函数首部(函数的第1行)、函数体(函数首部下面的花括号内的部分)包括:声明部分(int a, b, c; int max(int x, int y))、执行部分;
(4)程序总是从main函数开始执行的;
(5)程序中要求计算机的操作是由函数中的C语句完成的;
(6)每个数据声明和语句的最后必须有一个分号;
(7)C语言本身不提供输入输出语句;
(8)程序应当包含注释;
ch1.5 运行C程序的步骤与方法
实线表示操作流程,虚线表示文件的输入输出。编辑后得到一个源程序文件f.c,编译时把源程序文件f.c输入,经过编译得到目标程序文件f.obj,再将所有目标模块输入计算机,与系统提供的库函数等进行连接,得到可执行目标程序f.exe,最后把f.exe输入计算机,并使之运行得到结果。
习题1
程序:一组计算机能识别和执行的指令;
程序设计:(1)问题分析;(2)设计算法;(3)编写程序;(4)对源程序进行编辑、编译和连接;(5)运行程序、分析结果;(6)编写程序文档
人和计算机交流信息需要解决语言问题。需要创造一种计算机和人都能识别的语言,这就是计算机语言。
高级语言(high level language):语言功能性强,且不依赖于具体机器,用它写出的程序对任何型号的计算机都适用(或只须作很少的修改);
(1)源程序:C语言编写的程序;目标程序:机器指令的程序;可执行程序:计算机能够执行的机器指令的程序;
(2)程序编辑;程序编译:源程序转为目标程序;程序连接:将所有目标模块输入计算机,与系统提供的库函数等进行连接,得到可执行目标程序f.exe
(3)程序:一组计算机能识别和执行的指令;程序模块:一个源程序文件,即将一个程序分成若干个程序模块;
(4)函数:C程序的主要组成部分;主函数:程序总是从main函数开始执行的;被调用函数:被某个函数所调用的函数称为被调函数,调用函数称为主调函数;库函数:系统提供的函数;
(5)程序调试:发现和排除程序中故障的过程;程序测试:设计多组测试数据,检查程序对不同数据的运行情况,从中尽量发现程序中存在的漏洞,并修改程序,使之能适用于各种情况。
//4.
int main()
{printf("Hello World!.\n");return 0;
}//5.
int main()
{printf("*****\n");printf(" *****\n");printf(" *****\n");printf(" *****\n");return 0;
}//5.
int main()
{int max(int a, int b, int c);int a, b, c;scanf("%d %d %d", &a, &b, &c);printf("max=%d\n", max(a, b, c));return 0;
}
int max(int a, int b, int c)
{int z;if (a > b)if (a > c)z = a;elsez = c;else if (b > c)z = b;elsez = c;return z;
}
ch2 算法——程序的灵魂
ch2.1 程序=算法+数据结构
一个程序包括:对数据的描述(数据结构data structure);对操作的描述(算法algorithm);
闰年:能被4整除,但不能被100整除;能被400整除;
素数:除了1和本身之外,不能被其他任何整数整除;
ch2.4 算法的特性
有穷性;确定性;有零个或多个输入;有一个或多个输出;有效性(可行性);
ch2.6 结构化程序设计方法
(1)自顶向下;
(2)逐步细化;
(3)模块化设计;
(4)结构化编码(强调程序应该使用顺序、选择(条件)、和重复(循环)这三种基本控制结构来构建);
习题2
算法:为解决一个问题而采取的方法和步骤;
结构化的算法:由基本结构(顺序、选择、循环)所构成的算法;
结构化程序设计:强调程序设计风格和程序结构的规范化,提倡清晰的结构。
主要内容:自顶向下;逐步细化;模块化设计;结构化编码
ch3 顺序程序设计
ch3.1 顺序程序设计举例
//例3.1
int main()
{float f, c;f = 64.0;c = 5.0 / 9 * (f - 32);printf("f = %f\nc = %f\n",f, c);return 0;
}//例3.2
int main()
{float r1 = 0.0036, r2 = 0.0225, r3 = 0.0198;float f1 = 1000 * (1 + r1);float f2 = 1000 * (1 + r2);float f3 = 1000 * (1 + r3 / 2) * (1 + r3 / 2);printf("f1 = %f\nf2 = %f\nf3 = %f\n", f1, f2, f3);return 0;
}
ch3.2 数据的表现形式及其运算
ch3.2.1 常量和变量
-
常量
(1)整形常量
(2)实型常量
①十进制小数形式:123.456,0.345
②指数形式:12.34e3(代表12.34乘十的三次方),0.145E-25(代表0.145乘十的负二十五次方)
(3)字符常量
①普通字符
②转义字符
(4)字符串常量
(5)符号常量
用#define指令 -
变量
-
常变量
定义变量时,前面加一个关键字const;
常变量具有变量的基本属性:有类型,占存储单元,只是不允许改变其值。常变量是有名字的不变量,常量是没有名字的不变量。有名字便于在程序中被引用。 -
标识符
ch3.2.2 数据类型
ch3.2.3 整型数据
ch3.2.4 字符型数据
ch3.2.5 浮点型数据
ch3.3 运算符和表达式
//例3.3
int main()
{char c1, c2;c1 = 'A';c2 = c1 + 32;printf("%c\n%d\n", c2, c2);return 0;
}
ch3.4 C语句
//例3.4
int main()
{float a, b, c, s, area;scanf("%f %f %f", &a, &b, &c);s = (a + b + c) / 2;area = sqrt(s * (s - a) * (s - b) * (s - c));printf("area = %f\n", area);return 0;
}
ch3.5 数据的输入输出
//例3.5
int main()
{double a, b, c, disc, x1, x2, p, q;scanf("%lf %lf %lf", &a, &b, &c);disc = b*b - 4*a*c;p = -b / 2*a;q = sqrt(disc) / 2*a;x1 = p + q;x2 = p - q;printf("x1 = %7.2f\nx2 = %7.2f\n", x1, x2);return 0;
}//例3.6
int main()
{double a = 1.0;printf("%20.15f\n", a / 3);return 0;
}//例3.7
int main()
{float a;a = 10000 / 3.0;printf("-25.15%f\n", a);return 0;
}
//例3.8
int main()
{int a = 66, b = 79, c = 89;putchar(a);putchar(b);putchar(c);putchar('\n');return 0;
}//例3.9
int main()
{char a, b, c;a = getchar();b = getchar();c = getchar();putchar(a);putchar(b);putchar(c);putchar('\n');return 0;
}//例3.10
int main()
{char c1, c2;c1 = getchar();c2 = c1 + 32;putchar(c2);putchar('\n');return 0;
}
习题3
//1.
int main()
{float r = 0.07;int n = 10;float p = pow((1 + r), n);printf("p = %f\n", p);return 0;
}//2.
int main()
{float r1 = 0.015, r2 = 0.021, r3 = 0.0275, r5 = 0.03, r = 0.0035;printf("一次存5年 = %f\n", 1000 * (1 + 5 * r5));printf("先存2年再存3年 = %f\n", 1000 * (1 + 2 * r2) * (1 + 3 * r3));printf("先存3年再存2年 = %f\n", 1000 * (1 + 3 * r3) * (1 + 2 * r2));printf("存1年存5次 = %f\n", 1000 * pow(1 + r1, 5));printf("存活期存5年 = %f\n", 1000 * pow(1 + r/4, 20));return 0;
}//3.
int main()
{float d = 300000, p = 6000, r = 0.01, m;m = log(p / (p - d * r)) / log(1 + r);printf("m=%.1f\n", m);return 0;
}//4.
int main()
{char c1 = 97, c2 = 98;//因为ASCII表中只有128个字符,197和198都超出了范围,所以值是随机的printf("c1 = %c,c2 = %c\n", c1, c2);printf("c1 = %d,c2 = %d\n", c1, c2);return 0;
}//5.
int main()
{int a, b;float x, y;char c1, c2;scanf("a = %d b = %d", &a, &b);scanf("%f %e", &x, &y);scanf("%c %c", &c1, &c2);printf("a = %d b = %d\nx = %f y = %f\nc1 = %c c2 = %c\n", a, b, x, y, c1, c2);return 0;
}//6.
int main()
{char c1 = 'C', c2 = 'h', c3 = 'i', c4 = 'n', c5 = 'a';c1 += 4; c2 += 4; c3 += 4; c4 += 4; c5 += 4;putchar(c1); putchar(c2); putchar(c3); printf("%c%c\n", c4, c5);return 0;
}//7.
int main()
{float r, h, y1, y2, y3, y4, y5;scanf("%f %f", &r, &h);printf("圆周长为:%.2f\n", 2 * 3.14 * r);printf("圆面积为:%.2f\n", 3.14 * r * r);printf("圆球表面积为:%.2f\n", 4 * 3.14 * r * r);printf("圆球体积为:%.2f\n", 4 / 3 * 3.14 * r * r * r);printf("圆柱体积为:%.2f\n", 3.14 * r * r * h);return 0;
}//8.
int main()
{char c1;int c2;c1 = getchar();c2 = getchar();printf("%c\n", c1);putchar(c2);return 0;
}
//若整型变量的值在0~127的范围内,char和int是等价的
ch4 选择结构程序设计
//例4.1
int main()
{double a, b, c, disc, x1, x2, p, q;scanf("%lf %lf %lf", &a, &b, &c);disc = b * b - 4 * a * c;if (disc < 0)printf("This equation hasn't real root\n");else{p = -b / (2 * a);q = sqrt(disc) / (2 * a);x1 = p + q;x2 = p - q;printf("real roots:%8.4f and %8.4f\n", x1, x2);}return 0;
}//例4.2
int main()
{float a, b, t;scanf("%f %f", &a, &b);if (a > b){t = a;a = b;b = t;}printf("min = %f, max = %f\n", a, b);return 0;
}//例4.3
int main()
{float a, b, c, t;scanf("%f %f %f", &a, &b, &c);if (a > b){t = a;a = b;b = t;}if (a > c){t = a;a = c;c = t;}if (b > c){t = b;b = c;c = t;}printf("min = %f, mid = %f, max = %f\n", a, b, c);return 0;
}//例4.4
int main()
{char ch;scanf("%c", &ch);ch = (ch >= 'A' && ch <= 'Z') ? ch + 32 : ch;printf("%c\n", ch);return 0;
}//例4.5
int main()
{int x,y;scanf("%d", &x);if (x>=0)if(x>0)y = 1;elsey = 0;elsey = -1;printf("x = %d,y = %d\n", x,y);return 0;
}//例4.6
int main()
{char grade;scanf("%c", &grade);printf("Your score : \n");switch (grade){case 'A':printf("85-100\n");break;case 'B':printf("70-84\n");break;case 'C':printf("60-69\n");break;case 'D':printf("0-59\n");break;default:printf("Error\n");break;}return 0;
}//例4.7
int main()
{void action1(int x, int y);void action2(int x, int y);char ch;int a = 15, b = 23;ch = getchar();switch (ch){case 'a':case 'A':action1(a, b);break;case 'b':case 'B':action2(a, b);break;default:printf("Error\n");break;}return 0;
}//例4.10
int main()
{int c, s;//250的倍数;距离float price, weight, discount, freight;//基本运费;重量;折扣;总运费;printf("Enter price, weight, s:");scanf("%f %f %d", &price, &weight, &s);if (s >= 3000)c = 12;elsec = s / 250;switch (c){case 0:discount = 0;break;case 1:discount = 2;break;case 2:case 3:discount = 5;break;case 4:case 5:case 6:case 7:discount = 8;break;case 8:case 9:case 10:case 11:discount = 10;break;case 12:discount = 15;break;}freight = price * weight * s * (1 - discount / 100);printf("freight = %10.2f\n", freight);return 0;
}
习题4
2.
在C语言中,“真”和“假”通常通过整数值来表示:
假:在C语言中,值为0被视为逻辑假。
真:任何非零值都被视为逻辑真。尽管如此,在实践中,通常使用1来代表逻辑真,但这不是强制的。
在条件语句(如if、while等)中,C语言通过评估表达式的值来决定其真假:
如果表达式的计算结果为0,则被认为是假。
如果表达式的计算结果为非零值,则被认为是真。
//3.
int main()
{int a = 3, b = 4, c = 5, x, y;printf("a + b > c && b == c的值为%d\n", a + b > c && b == c);//0printf("a || b + c && b - c的值为%d\n", a || b + c && b - c);//1printf("!(a > b) && !c || 1的值为%d\n", !(a > b) && !c || 1);//1printf("!(x = a) && (y = b) && 0的值为%d\n", !(x = a) && (y = b) && 0);//0printf("!(a + b) + c - 1 && b + c / 2的值为%d\n", !(a + b) + c - 1 && b + c / 2);//1return 0;
}//4.
int main()
{int a, b, c;printf("Input a b c:\n");scanf("%d %d %d", &a, &b, &c);if (a > b)if (a > c)printf("max=%d\n", a);elseprintf("max=%d\n", c);else if (b > c)printf("max=%d\n", b);elseprintf("max=%d\n", c);return 0;
}//5.
int main()
{int a;while (1){printf("Input a num:\n");scanf("%d", &a);if (a >= 1000 || a <= 0)printf("Input error, please input again\n");elsebreak;}printf("%d\n",(int)sqrt(a));return 0;
}//6.
int main()
{double x, y;scanf("%lf", &x);if (x < 1)y = x;else if (x <= 1 && x < 10)y = 2 * x - 1;else if (x >= 10)y = 3 * x - 11;printf("y = %lf\n", y);return 0;
}//7.
int main()
{int x,y;printf("Input x:\n");scanf("%d", &x);y = -1;//x=0时,y=-1if (x != 0)if (x > 0)y = 1;//x>0时,y=1else//else始终与上方离它最近的且未配对的if配对y = 0;//x<0时,y=0printf("x = %d,y = %d\n",x,y);return 0;
}int main()
{int x,y;printf("Input x:\n");scanf("%d", &x);y = 0;//x<0时,y=0if (x >= 0)if (x > 0)y = 1;//x>0时,y=1else//else始终与上方离它最近的且未配对的if配对y = -1;//x=0时,y=-1printf("x = %d,y = %d\n",x,y);return 0;
}//8.
int main()
{int score;printf("Input score:\n");scanf("%d", &score);switch (score / 10){case(10):case(9):printf("A\n");break;case(8):printf("B\n");break;case(7):printf("C\n");break;case(6):printf("D\n");break;default:printf("E\n");break;}return 0;
}//10.
int main()
{int num, b[5];printf("Input num:\n");scanf("%d", &num);int i;for (i = 0; i < 5; i++){b[i] = num % 10;if((num /= 10) == 0)break;}printf("它是%d位数\n", i+1);printf("分别输出每一位数字:\n");for (int j = i; j >= 0 ; j--){printf("%d", b[j]);}printf("逆序输出各位数字:\n");for (int j = 0; j < i+1; j++){printf("%d", b[j]);}return 0;
}//9.
int main()
{int i;printf("Input i:\n");scanf("%d", &i);if(i <= 100000){printf("price = %f\n", i*0.1);}else if (i <= 200000){printf("price = %f\n", 10000 + (i - 100000) * 0.075);}else if (i <= 400000){printf("price = %f\n", 17500 + (i - 200000) * 0.05);}else if (i <= 600000){printf("price = %f\n", 27500 + (i - 400000) * 0.03);}else if (i <= 1000000){printf("price = %f\n", 33500 + (i - 600000) * 0.015);}else{printf("price = %f\n", 39500 + (i - 1000000) * 0.01);}return 0;
}int main()
{int i,j;printf("Input i:\n");scanf("%d", &i);j = i / 100000;switch (j){case 0:printf("price = %f\n", i * 0.1); break;case 1:printf("price = %f\n", 10000 + (i - 100000) * 0.075);break;case 2:case 3:printf("price = %f\n", 17500 + (i - 200000) * 0.05);break;case 4:case 5:printf("price = %f\n", 27500 + (i - 400000) * 0.03);break;case 6:case 7:case 8:case 9:printf("price = %f\n", 33500 + (i - 600000) * 0.015);break;default:printf("price = %f\n", 39500 + (i - 1000000) * 0.01);break;}return 0;
}//11.
int main()
{int a,b,c,d,t;printf("Input a,b,c,d:\n");scanf("%d,%d,%d,%d", &a, &b, &c, &d);if (a > b) {t = a;a = b;b = t;}if (a > c) {t = a;a = c;c = t;}if (a > d) {t = a;a = d;d = t;}if (b > c) {t = b;b = c;c = t;}if (b > d) {t = b;b = d;d = t;}if (c > d) {t = c;c = d;d = t;}printf("a=%d,b=%d,c=%d,d=%d\n", a, b, c, d);return 0;
}//12.
int main()
{int h = 10;float x, y, x1 = 2, y1 = 2, x2 = -2, y2 = 2, x3 = -2, y3 = -2, x4 = 2, y4 = -2, d1, d2, d3, d4;printf("\n请输入一个点(x,y):");scanf("%f,%f", &x, &y);// 求该点到各中心点的距离 d1 = (x - x1) * (x - x1) + (y - y1) * (y - y1);d2 = (x - x2) * (x - x2) + (y - y2) * (y - y2);d3 = (x - x3) * (x - x3) + (y - y3) * (y - y3);d4 = (x - x4) * (x - x4) + (y - y4) * (y - y4);if (d1 > 1 && d2 > 1 && d3 > 1 && d4 > 1) h = 0;printf("\nh = %d\n", h);return 0;
}
ch5 循环结构程序设计
//例5.1
int main()
{int i = 1, sum = 0;while (i <= 100){sum += i;i++;}printf("sum=%d\n", sum);return 0;
}//例5.2
int main()
{int i = 1, sum = 0;do{sum += i;i++;} while (i <= 100);printf("sum=%d\n", sum);return 0;
}//例5.3
int main()
{int i, sum = 0;printf("please enter i, i = ?\n");scanf("%d", &i);while (i <= 10){sum += i;i++;} ;printf("sum=%d\n", sum);return 0;
}
int main()
{int i, sum = 0;printf("please enter i, i = ?\n");scanf("%d", &i);do{sum += i;i++;} while (i <= 10);printf("sum=%d\n", sum);return 0;
}//例5.4
#define SUM 100000
int main()
{float amount, aver, total;int i;for (i = 0, total = 0; i < 1000; i++){printf("please enter amountd\n");scanf("%f", &amount);total += amount;if(total >= SUM)break;}aver = total / (i+1);printf("num = %d\nave = %f\n", i+1, aver);return 0;
}//例5.5
int main()
{int n;for (n = 100; n <= 200; n++){if(n % 3 == 0)continue;printf("%d ", n);}return 0;
}//例5.6
int main()
{int i, j, n = 0;for (i = 1; i <= 4; i++){for (j = 1; j <= 5; j++){printf("%d\t", i * j);n++;}printf("\n");} return 0;
}//例5.7
int main()
{int n, sign = 1;double term, pi = 0;for (n = 1; ; n += 2){term = 1.0 / n;if (term < 1e-6)break;pi += sign * term;sign = -sign;}printf("pi = %f\n", 4 * pi);return 0;
}//例5.8
int main()
{int fn(int n);int n;double term, pi = 0;for (n = 1; n<=40; n++){printf("fn = %d\n", fn(n));}return 0;
}
int fn(int n)
{if (n == 1 || n == 2)return 1;elsereturn fn(n - 1) + fn(n - 2);
}
int main()
{double term, pi = 0;printf("f1 = 1\nf2 = 1\n");for (int n = 3, f1 = 1, f2 = 1, f3; n<=40; n++){f3 = f1 + f2;printf("f%d = %d\n", n, f3);f1 = f2;f2 = f3;}return 0;
}//例5.9
int main()
{int n, i;printf("please enter a intefer number, n = ?");scanf("%d", &n);for (i = 2; i < n;i++){if (n % i == 0)break;}if (i == n)printf("%d is a prime number\n", n);elseprintf("%d is not a prime number\n", n);return 0;
}//例5.10
int main()
{int n, i;for (n = 100; n <= 200; n++){for (i = 2; i < sqrt(n); i++){if (n % i == 0)break;}if (i >= sqrt(n))printf("%d is a prime number\n", n);}return 0;
}//例5.11
int main()
{char c;c = getchar();while (c != '\n') {if (c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z') {if (c >= 'W' && c <= 'Z' || c >= 'w' && c <= 'z')c -= 22;elsec += 4;}putchar(c);c = getchar();}return 0;
}
习题5
//2.
int main()
{int n, sign = 1;double term, pi = 0;for (n = 1; ; n += 2){term = 1.0 / n;if (term < 1e-8)break;pi += sign * term;sign = -sign;}printf("pi = %f\n", 4 * pi);printf("执行循环体的次数 = %d\n", (n+1) / 2 );return 0;
}//3.
int main()
{int m, n;printf("输入两个正整数m和n\n", &m, &n);scanf("%d %d", &m, &n);if(m > n){int temp = m;m = n;n = temp;}for (int i = m; ; i--){if (m % i == 0 && n % i == 0){printf("最大公约数是%d\n", i);break;}}for (int i = 2; ; i++){if (m * i % n == 0){printf("最小公倍数是%d\n", m * i);break;}}return 0;
}//4.
int main()
{char ch;int num1 = 0, num2 = 0, num3 = 0, num4 = 0;printf("输入一行字符串\n");while ((ch = getchar()) != '\n')//scanf空格就结束了字符串的输入{if (ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z')num1++;else if (ch == ' ')num2++;else if (ch >= '0' && ch <= '9')num3++;elsenum4++;}printf("英文字母 = %d\n", num1);printf("空格 = %d\n", num2);printf("数字 = %d\n", num3);printf("其他字符 = %d\n", num4);return 0;
}//5.
int main()
{int a, n, sn = 0;printf("输入a n\n");scanf("%d %d", &a, &n);for (int i = 1; i <= n; i++){int term = 0;for (int j = 1, t = 1; j <= i; j++, t *= 10){term += a * t;}sn += term;}printf("sn = %d\n", sn);return 0;
}//6.
int main()
{double sn = 0;for (int i = 1; i <= 20; i++){double term = 1;for (int j = 1; j <= i; j++){term *= j;}printf("term = %f\n", term);sn += term;}printf("sn = %f\n", sn);return 0;
}//7.
int main()
{double s1 = 0, s2 = 0, s3 = 0;for (int i = 1; i <= 100; i++){s1 += i;}for (int i = 1; i <= 50; i++){s2 += i * i;}for (int i = 1; i <= 10; i++){s3 += 1.0 / i;}printf("s = %f\n", s1 + s2 + s3);return 0;
}//8.
int main()
{for (int i = 100; i <= 999; i++){int a = i / 100;int b = i / 10 % 10;int c = i % 10;if (a * a * a + b * b * b + c * c * c == i)printf("%d\n", i);}return 0;
}//9.
int main()
{for (int i = 1; i <= 1000; i++){int sum = 0;int num[10] = { 0 };for (int j = 1, k = 0; j < i; j++){if (i % j == 0){sum += j;num[k++] = j;}}if (sum == i){printf("%d its factors are ", i);for (int k = 0; num[k] != 0; k++){printf("%d ", num[k]);}}}return 0;
}//10.
int main()
{double sum = 0, term, term1, term1_1 = 2, term1_2 = 3, term2, term2_1=1, term2_2=2;for (int i = 1; i <= 20; i++){if (i == 1){term1 = 2;term2 = 1;}else if (i == 2){term1 = 3;term2 = 2;}else{term1 = term1_1 + term1_2;term1_1 = term1_2;term1_2 = term1;term2 = term2_1 + term2_2;term2_1 = term2_2;term2_2 = term2;}term = term1 / term2;sum += term;}printf("sum = %f\n", sum);return 0;
}//11.
int main()
{double height = 100, s = 0;for (int i = 1; i <= 10; i++)//一下一上为一个循环,最后一次落地不算上{s += height;height /= 2;s += height;}printf("第10次落地时共经过%f米,第10次反弹%f高\n", s-height, height);return 0;
}//12.
int main()
{int t = 1;for (int i = 1; i < 10; i++){t = 2 * (t + 1);}printf("第1天共摘了%d个桃子\n", t);return 0;
}//13.
int main()
{double x1 = 1,x2 = 1,a = 2;do{x1 = x2;x2 = 1.0 / 2.0 * (x1 + a / x1);} while (fabs(x1 - x2) > 1e-5);printf("%lf", x2);return 0;
}//14.
int main()
{double x1 = 1.5, x2 = 1.5;do{x2 = x1 - (2 * x1 * x1 * x1 - 4 * x1 * x1 + 3 * x1 - 6) / (6 * x1 * x1 - 8 * x1 + 3);x1 = x2;} while (fabs(2 * x1 * x1 * x1 - 4 * x1 * x1 + 3 * x1 - 6) > 1e-5);printf("%lf", x2);return 0;
}//15.
int main()
{double l = -10, r = 10, mid;while (r - l >= 1e-5) {mid = (l + r) / 2;if (2 * pow(mid, 3) - 4 * pow(mid, 2) + 3 * mid - 6 >= 0) r = mid;else l = mid;}printf("\nmid=%8.5lf\n", mid);return 0;
}//16.
int main()
{int n;printf("Input n:");scanf("%d", &n);int j = 0;for (j = 0; j < n / 2; j++){for (int i = 0; i < n / 2 - j; i++)printf(" ");for (int i = 0; i < 2 * j + 1; i++)printf("*");printf("\n");}if (n % 2 != 0) {for (int i = 0; i < n; i++)printf("*");}printf("\n");for (j = 0; j < n / 2; j++){for (int i = 0; i < j + 1; i++)printf(" ");for (int i = 0; i < n - 2 * j - 2; i++)printf("*");printf("\n");}return 0;
}
ch6 利用数组处理批量数据
//例6.1
int main()
{int a[10];for (int i = 0; i < 10; i++){a[i] = i;}for (int i = 9; i >= 0; i--){printf("a[%d] = %d\n", i, a[i]);}return 0;
}//例6.2
int main()
{int f[20] = { 1, 1 };for (int i = 2; i < 20; i++){f[i] = f[i - 1] + f[i - 2];}for (int i = 0; i < 20; i++){printf("%d\n", f[i]);}return 0;
}//例6.3
//起泡法的基本思路:每次将相邻的两个数比较,将小的掉到前面
int main()
{int a[10], i, j, t;printf("input 10 numbers:\n");for (i = 0; i < 10; i++){scanf("%d", &a[i]);}for (i = 0; i < 9; i++)//10个数字相邻比较9次{for (j = 0; j < 9 - i; j++)//比较完一次少一次,比较时交换大小{if (a[j] > a[j + 1]){t = a[j];a[j] = a[j + 1];a[j + 1] = t;}}}for (i = 0; i < 10; i++){printf("%d ", a[i]);}return 0;
}//例6.4
int main()
{int a[2][3] = { 1,2,3,4,5,6 }, b[3][2], i, j;printf("a:\n");for (i = 0; i < 2; i++){for (j = 0; j < 3; j++){printf("\t%d",a[i][j]);b[j][i] = a[i][j];}printf("\n");}printf("a:\n");for (i = 0; i < 3; i++){for (j = 0; j < 2; j++){printf("\t%d", b[i][j]);}printf("\n");}return 0;
}//例6.5
int main()
{int a[3][4] = { 1,2,3,4,9,8,7,6,-10,10,-5,2 }, max = a[0][0], i, j;printf("a:\n");for (i = 0; i < 3; i++){for (j = 0; j < 4; j++){if (max < a[i][j]){max = a[i][j];printf("max:a[%d][%d] = %d\n", i, j, a[i][j]);}}}return 0;
}//例6.8
int main()
{char str[80];int i, num = 0, word = 0;fgets(str, sizeof(str), stdin);//scanf把空格当成了'\0',在C11标准中,gets函数已经被正式移除for (i = 0; str[i] != '\0'; i++){if (str[i] == ' ')word = 0;else if(word == 0){word = 1;num++;}}printf("There are %d words\n", num);return 0;
}//例6.9
int main()
{char str[3][20], t[20];int i, num = 0, word = 0;for(i = 0;i<3;i++)fgets(str[i], sizeof(str), stdin);if (strcmp(str[0], str[1]) > 0)if (strcmp(str[0], str[2]) > 0)strcpy(t , str[0]);else if (strcmp(str[1], str[2]) > 0)strcpy(t, str[1]);elsestrcpy(t, str[2]);printf("%s\n", t);return 0;
}
习题6
//1.
int main()
{for (int i = 2; i < 100; i++){int j;for (j = 2; j < sqrt(i); j++)if (i % j == 0)break;if (j > sqrt(i))printf("%d ", i);}return 0;
}//2.
int main()
{int a[10], t;for (int i = 0; i < 10; i++)scanf("%d", &a[i]);for (int i = 0; i < 9; i++){for (int j = 0; j < 9 - i; j++)if (a[j] > a[j + 1]){t = a[j];a[j] = a[j+1];a[j + 1] = t;}}for (int i = 0; i < 10; i++)printf("%d ", a[i]);return 0;
}//3.
int main()
{int a[3][3] = { {1,5,8},{2,4,6},{9,6,3} }, sum = 0;for (int i = 0; i < 3; i++){sum += a[i][i];}printf("%d", sum);return 0;
}//4.
int main()
{int a[5] = {-100,1,7,7,80}, b[6], t, gap[5], min, index = 0;scanf("%d", &t);for (int i = 0; i < 5; i++){gap[i] = fabs(a[i] - t);}min = gap[0];for (int i = 1; i < 5; i++){if (min > gap[i]){index = i;min = gap[i];}}printf("插入数字与第%d个最接近\n", index);if (t <= a[index]){for (int i = 0; i < index; i++)//前面保持不变b[i] = a[i];b[index] = t;//插入for (int i = index + 1; i < 6; i++)//后面重新赋值b[i] = a[i - 1];}else{for (int i = 0; i <= index; i++)b[i] = a[i];b[index+1] = t;for (int i = index + 2; i < 6; i++)b[i] = a[i - 1];}for (int i = 0; i < 6; i++){printf("%d ", b[i]);}return 0;
}//5.
int main()
{int a[5] = {8,6,5,4,1}, b[5];for (int i = 0; i < 5; i++){b[4-i] = a[i];}for (int i = 0; i < 5; i++){printf("%d ", b[i]);}return 0;
}//6.
int main()
{int a[10][10];for (int i = 0; i < 10; i++){a[i][0] = 1;//每行第一个元素为1a[i][i] = 1;//每行最后一个元素为1}for (int i = 2; i < 10; i++){for (int j = 1; j < i; j++){a[i][j] = a[i - 1][j - 1] + a[i - 1][j];}}for (int i = 0; i < 10; i++){for (int j = 0; j<i+1;j++){printf("%d\t", a[i][j]);}printf("\n");}return 0;
}//8.
int max_index[4][2], min_index[5][2];//每行最大与每列最小值的索引
int main()
{void max(int n, int a[][5]);void min(int n, int a[][5]);int a[4][5] = { {1, 2, 3, 4, 5}, {2, 4, 6, 8, 10}, {3, 6, 9, 12, 15}, {4, 8, 12, 16, 20} };for (int i = 0; i < 4; i++){max(i, a);}for (int i = 0; i < 5; i++){min(i, a);}for (int i = 0; i < 4; i++){for (int j = 0; j < 2; j++)printf("%d ", max_index[i][j]);printf("\n");}for (int i = 0; i < 5; i++){for (int j = 0; j < 2; j++)printf("%d ", min_index[i][j]);printf("\n");}for (int i = 0; i < 4; i++){for (int j = 0; j < 5; j++)if (max_index[i][0] == min_index[j][0] && max_index[i][1] == min_index[j][1]){printf("鞍点索引(%d,%d)", max_index[i][0], max_index[i][1]);break;}}return 0;
}
void max(int n, int a[][5])//每行的最大值
{int max_value = a[n][0];for (int i = 0; i < 5; i++){if (max_value <= a[n][i]){max_value = a[n][i];max_index[n][0] = n;max_index[n][1] = i;}}
}
void min(int n, int a[][5])//每列的最小值
{int min_value = a[0][n];for (int i = 0; i < 4; i++){if (min_value >= a[i][n]){min_value = a[i][n];min_index[n][0] = i;min_index[n][1] = n;}}
}//9.
int main()
{int a[15] = { 99, 91, 87, 80, 76, 71, 64, 58, 52, 47, 46, 38, 31, 22, 16 };int left = 0,right = 14,mid = left + (right-left)/2;int n;scanf("%d", &n);for (; left < right && mid != left && mid != right;){if (n > a[mid]){right = mid;mid = left + (right - left) / 2;}else if (n < a[mid]){left = mid;mid = left + (right - left) / 2;}else{printf("该数是数组中第%d个元素的值\n", mid + 1);return 0;}}printf("无此数\n");return 0;
}//10.
int main()
{char str[3][10] = {//'\0'算其他字符{"fu& 123 S"},{"(u& jb3 "},{"fu! sj B"}};int space[3] = { 0 }, big[3] = { 0 }, small[3] = { 0 }, num[3] = { 0 }, other[3] = { 0 };for (int i = 0; i < 3; i++){for (int j = 0; j < 10; j++){if (str[i][j] == ' ')space[i]++;else if (str[i][j] <= 'Z' && str[i][j] >= 'A')big[i]++;else if (str[i][j] <= 'z' && str[i][j] >= 'a')small[i]++;else if (str[i][j] <= '9' && str[i][j] >= '0')num[i]++;elseother[i]++;}}for (int i = 0; i < 3; i++){printf("space[%d] = %d, big[%d] = %d, small[%d] = %d, num[%d] = %d, other[%d] = %d\n", i,space[i], i,big[i], i,small[i], i,num[i], i,other[i]);}return 0;
}//11.
int main()
{//基数输出,偶数不输出for (int i = 1; i <= 9; i++){if (i % 2 == 1){for (int j = 0; j < i - 1; j++){printf(" ");}for (int j = 1; j <= 9; j++){if (j % 2 == 1)printf("*");elseprintf(" ");}}elseprintf("\n\n");}return 0;
}//12.
int main()
{char str1[20], str2[20];fgets(str1, sizeof(str1), stdin);for (int i = 0, t; str1[i] != '\n'; i++){if (str1[i] <= 'M' && str1[i] >= 'A'){t = str1[i] - 65 - 13;str2[i] = str1[i] + (2 * (-t) - 1);}else if(str1[i] <= 'Z' && str1[i] >= 'N'){t = str1[i] - 65 - 12;str2[i] = str1[i] - (2 * t - 1);}elsestr2[i] = str1[i];}for (int i = 0, t; str1[i] != '\n'; i++){if (str1[i] <= 'm' && str1[i] >= 'a'){t = str1[i] - 97 - 13;str2[i] = str1[i] + (2 * (-t) - 1);}else if (str1[i] <= 'z' && str1[i] >= 'n'){t = str1[i] - 97 - 12;str2[i] = str1[i] - (2 * t - 1);}elsestr2[i] = str1[i];}for(int i = 0; i<strlen(str1) - 1; i++)printf("%c",str2[i]);return 0;
}//13.
int main()
{char str1[80], str2[40];fgets(str1, sizeof(str1)-40, stdin);fgets(str2, sizeof(str1), stdin);int i, j;for (i = 0; str1[i] != '\n'; i++);for (j = 0; str2[j] != '\n'; j++){str1[i++] = str2[j];}str1[i] = '\0';printf("%s", str1);return 0;
}//14.
int main()
{char str1[40], str2[40];fgets(str1, sizeof(str1), stdin);fgets(str2, sizeof(str1), stdin);int i, j;for (i = 0; str1[i] != '\n' && str2[i] != '\n'; i++){if (str1[i] > str2[i]){printf("%d", str1[i] - str2[i]);break;}else if (str1[i] < str2[i]){printf("%d", str1[i] - str2[i]);break;}elsecontinue;}if (str1[i] == '\n')printf("s1=s2");return 0;
}//15.
int main()
{char str1[40], str2[40] = { 'F','u','\0','你' };int i = 0;for (i = 0; str2[i] != '\0'; i++){str1[i] = str2[i];}str1[i] = '\0';printf("%s", str1);return 0;
}
ch7 用函数实现模块化程序设计
//例7.1
int main()
{void print_star();void print_message();print_star();print_message();print_star();return 0;
}
void print_star()
{printf("******\n");
}
void print_message()
{printf("Hello World!\n");
}//例7.2
int main()
{int find(int x, int y);int x, y, max;scanf("%d %d", &x, &y);max = find(x, y);printf("max = %d\n", max);return 0;
}
int find(int x, int y)
{if (x < y)return y;elsereturn x;
}//例7.3
int main()
{int max(float x, float y);float a,b;int c;scanf("%f %f", &a, &b);c = max(a, b);printf("max = %d\n", c);return 0;
}
int max(float x, float y)
{float z;z = x > y ? x : y;return z;
}//例7.4
int main()
{float sum(float x, float y);float a,b;float c;scanf("%f %f", &a, &b);c = sum(a, b);printf("sum = %f\n", c);return 0;
}
float sum(float x, float y)
{return x + y;
}//例7.5
int max4(int a, int b, int c, int d);
int max2(int a, int b);
int main()
{int a, b, c, d;scanf("%d %d %d %d", &a, &b, &c, &d);c = max4(a, b, c, d);printf("max = %d\n", c);return 0;
}
int max4(int a, int b, int c, int d)
{int t1 = max2(a, b);int t2 = max2(c, d);return max2(t1, t2);
}
int max2(int a, int b)
{return a > b ? a : b;
}//例7.6
int main()
{int age(int n);printf("student5's age = %d\n", age(5));return 0;
}
int age(int n)
{if (n == 1)return 10;else return age(n-1) + 2;
}//例7.7
int main()
{int f(int n);int n;scanf("%d", &n);printf("n! = %d\n", f(n));return 0;
}
int f(int n)
{if (n == 1 || n==0)return 1;else return f(n-1) * n;
}//例7.9
int main()
{int max(int x, int y);int a[10], t, index, i;printf("enter 10 integer numbers:\n");for (i = 0; i < 10; i++){scanf("%d", &a[i]);}for (i = 1, t = a[0], index = 0; i < 10; i++){if (max(t, a[i]) > t){t = max(t, a[i]);index = i;}}printf("The largest number is %d\nit is the %dth number\n", t, index + 1);return 0;
}
int max(int x, int y)
{return x > y ? x : y;
}//例7.10
int main()
{float average(float array[]);float score[10];int i;printf("enter 10 scores:\n");for (i = 0; i < 10; i++){scanf("%f", &score[i]);}printf("average score is %5.2f\n", average(score));return 0;
}
float average(float array[])
{float ave = 0;for (int i = 0; i < 10; i++){ave += array[i] / 10;}return ave;
}//例7.11
int main()
{float average(float array[], int n);float score1[5] = { 98.5,97,91.5,60,55 };float score2[10] = { 67.5,89.5,99,69.5,77,89.5,76.5,54,60,99.5 };printf("average score1 is %5.2f\n", average(score1, 5));printf("average score2 is %5.2f\n", average(score2, 10));return 0;
}
float average(float array[], int n)
{float ave = 0;for (int i = 0; i < n; i++){ave += array[i] / n;}return ave;
}//例7.12
int main()
{void sort(int array[], int n);int a[10];printf("enter array:\n");for (int i = 0; i < 10; i++){scanf("%d", &a[i]);}sort(a, 10);printf("sorted array:\n");for (int i = 0; i < 10; i++){printf("%d ", a[i]);}return 0;
}
void sort(int array[], int n)
{for (int i = 0, t; i < n-1; i++){int min = array[i];int min_index = i;for (int j = i + 1; j < n; j++){if (array[j] < min)//先换索引,值不换保持数组不打乱{min_index = j;min = array[j];}}//遍历完找到最小的才换t = array[i];array[i] = array[min_index];array[min_index] = t;}
}//例7.13
int main()
{int max_value(int array[][4]);int a[3][4] = {1,3,5,7,2,4,6,8,15,17,34,12};printf("Max value is %d\n", max_value(a));return 0;
}
int max_value(int array[][4])
{int max = array[0][0];for (int i = 0; i < 3; i++){for (int j = 0; j < 4; j++){if (array[i][j] > max){max = array[i][j];}}}return max;
}//例7.14
int main()
{void f(float score[], int n);float score[10] = {89, 95, 87.5,100,67.5,97,59,84,73,90};f(score, 10);return 0;
}
void f(float score[], int n)
{float a[3] = { score[0], score[0], 0};for (int i = 0; i < 10; i++){if (score[i] < a[0])a[0] = score[i];if (score[i] > a[1])a[1] = score[i];a[2] += score[i] / n;}printf("平均分 = %f,最高分 = %f,最低分 = %f\n", a[2], a[1], a[0]); // 修正打印顺序
}//例7.15
int a = 3, b = 5;//全局变量
int main()
{int max(int a, int b);int a = 8;//局部变量,局部变量范围内全局变量不起作用printf("Max value is %d\n", max(a, b));//a = 3,b = 5return 0;
}
int max(int a, int b)
{return a > b ? a : b;//形参,与全局变量局部变量没有关系
}//例7.16
int main()
{int f(int);int a = 2, i;for (i = 0; i < 3; i++)printf("%d\n", f(a));return 0;
}
int f(int a)
{int b = 0;//auto可省略不写static int c = 3;b += 1;c += 1;return(a + b + c);
}//例7.17
int main()
{int fac(int);for (int i = 1; i <= 5; i++)printf("%d! = %d\n", i, fac(i));return 0;
}
int fac(int n)
{static int f = 1;f *= n;return f;
}//例7.18
int main()
{int max();extern int A, B, C;//把下面的ABC变量作用域扩展到从这里开始printf("Please enter three integer numbers:");scanf("%d %d %d", &A, &B, &C);printf("max is %d\n", max());return 0;
}
int A, B, C;//全局变量,作用范围为从这里往下
int max()
{int m;m = A > B ? A : B;if (C > m)m = C;return m;
}//例7.19
//file1.c
int A;
int main()
{int power(int);int b = 3, m;printf("Enter the number A and its power m\n");scanf("%d %d", &A, &m);printf("%d ** %d = %d\n", A,m,power(m));return 0;
}
//file2.c
extern int A;
int power(int n)
{int i, y = 1;for (i = 1; i <= n; i++)y *= A;return y;
}
习题7
//1.
int main()
{void f(int x, int y);int x, y;printf("输入两个整数\n");scanf(" %d %d", &x, &y);f(x, y);return 0;
}
void f(int x, int y)
{int t;for (int i = x > y ? y : x; i > 0 ; i--)if (x % i == 0 && y % i == 0){printf("最大公约数:%d\n", i);break;}for (int i = x > y ? x : y; ; i++)if (i % x == 0 && i % y == 0){printf("最小公倍数:%d\n", i);break;}
}//2.
int main()
{void big(double delta, double a, double b);void equal(float delta, float a, float b);void small(float delta, float a, float b);double a, b, c, delta;printf("input a b c\n");scanf(" %lf %lf %lf", &a, &b, &c);delta = b * b - 4 * a * c;if (delta > 0)big(delta, a, b);else if (delta == 0)equal(delta, a, b);elsesmall(delta, a, b);return 0;
}
void big(double delta, double a, double b)
{double x1 = (-b + sqrt(delta)) / (2 * a);double x2 = (-b - sqrt(delta)) / (2 * a);printf("x1 = %lf, x2 = %lf\n", x1 , x2);
}
void equal(float delta, float a, float b)
{float x = (-b) / (2 * a);printf("x = %f\n", x);
}
void small(float delta, float a, float b)
{float x = (-b) / (2 * a);float i = sqrt(-delta) / (2 * a);printf("x = %f ± %fi\n", x, i);
}//3.
int main()
{void f(int n);int x;printf("输入一个整数\n");scanf(" %d", &x);f(x);return 0;
}
void f(int n)
{int i;for (i = 2; i < sqrt(n); i++){if (n % 2 == 0)break;}if (i >= sqrt(n))printf("%d OK", n);elseprintf("%d NG", n);
}//4.
int main()
{void f(int a[][3]);int a[3][3] = { 1, 2, 3, 4, 5, 6, 7 , 8, 9 };f(a);for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){printf("%d\t", a[i][j]);}printf("\n");}return 0;;
}
void f(int a[][3])
{for (int i = 0; i < 3; i++){for (int j = i+1; j < 3; j++)// 注意这里的 j 从 i+1 开始{int t = a[i][j];a[i][j] = a[j][i];a[j][i] = t;}}
}//5.
int main()
{void f(char* str);char str[80];fgets(str, sizeof(str), stdin);f(str);printf("%s", str);return 0;
}
void f(char* str)
{int len = strlen(str) - 1;//减换行符;for (int i = 0; i < len / 2; i++){char t = str[i];str[i] = str[len - 1 - i];str[len - 1 - i] = t;}str[len] = '\0';
}//6.
int main()
{void f(char* str1, char* str2);char str1[80], str2[40];fgets(str1, sizeof(str1), stdin);fgets(str2, sizeof(str2), stdin);f(str1, str2);printf("%s", str1);return 0;
}
void f(char* str1, char* str2)
{int i, j;for (i = 0; str1[i] != '\n'; i++);for (j = 0; str2[j] != '\n'; j++){str1[i++] = str2[j];}str1[i] = '\0';
}//7.
int main()
{void f(char* str1, char* str2);char str1[80], str2[40];fgets(str1, sizeof(str1), stdin);f(str1, str2);printf("%s", str2);return 0;
}
void f(char str1[], char str2[])
{int i, j;for (i = 0, j = 0; str1[i] != '\n'; i++){if (str1[i] == 'a' || str1[i] == 'e' || str1[i] == 'i' || str1[i] == 'o' || str1[i] == 'u' || str1[i] == 'A' || str1[i] == 'E' || str1[i] == 'I' || str1[i] == 'O' || str1[i] == 'U')str2[j++] = str1[i];}str2[j] = '\0';
}//8.
int main()
{void f(char str1[]);char str1[80], str2[40];fgets(str1, sizeof(str1), stdin);f(str1);return 0;
}
void f(char str1[])
{int i, j;char str2[80];for (i = 0, j = 0; str1[i] != '\n'; i++){str2[j++] = str1[i];if (str1[i + 1] != '\n')str2[j++] = ' ';}str2[j] = '\0';printf("%s", str2);
}//9.
int main()
{void f(char str[], int count[]);char str[80];int count[4] = { 0 };fgets(str, sizeof(str), stdin);f(str, count);printf("字母 = %d,数字 = %d,空格 = %d,其他 = %d,", count[0], count[1], count[2], count[3] );return 0;
}
void f(char str[], int count[])
{for (int i = 0; str[i] != '\n'; i++){if (str[i] >= 'A' && str[i] <= 'Z' || str[i] >= 'a' && str[i] <= 'z')count[0]++;else if (str[i] >= '0' && str[i] <= '9')count[1]++;else if (str[i] == ' ')count[2]++;else count[3]++;}
}//10.
int main()
{void f(char str[], int count[]);char str[80]; char words[10][10] = {0};fgets(str, sizeof(str), stdin);f(str, words);int max = strlen(words[0]), max_index = 0;for (int i = 1; i < 10; i++)if (strlen(words[i]) > max){max = strlen(words[i]);max_index = i;}printf("%s", words[max_index]);return 0;
}
void f(char str[], char words[][10])
{for (int i = 0, k = 0; str[i] != '\n';){for (; str[i] == ' '&& str[i] != '\n'; i++);//找到单词的首字母int j = 0;for (; str[i] != ' '&& str[i] != '\n'; i++, j++)//j为单词字母数{words[k][j] = str[i];}words[k++][j] = '\0';}
}//11.
int main()
{void sort(char str[]);char str[11];//最后一个放'\n'fgets(str, sizeof(str), stdin);sort(str);for (int i = 0; i < 10; i++)printf("%c", str[i]);return 0;
}
void sort(char str[])
{for (int i = 0; i < 9; i++){for (int j = 0; j < 9 - i; j++){if (str[j] > str[j + 1]){int t = str[j];str[j] = str[j + 1];str[j + 1] = t;}}}
}//12.
//牛顿迭代法:xn+1 = xn - f(xn) / f'(xn)
int main()
{double sort(double x1, double a, double b, double c, double d);double a, b, c, d;scanf("%lf %lf %lf %lf", &a, &b, &c, &d);printf("%lf", sort(1.5, a, b, c, d));return 0;
}
double sort(double x1, double a, double b, double c, double d)
{float fxn;float fpxn;float x2;while (1){fxn = a * pow(x1, 3) + b * pow(x1, 2) + c * x1 + d;fpxn = 3 * a * pow(x1, 2) + 2 * b * x1 + c;x2 = x1 - fxn / fpxn;if (fabs(x2 - x1) > 1e-6)//当迭代地差不多时,连个x很接近,近似为解x1 = x2;elsereturn x2;} }//13.
int main()
{double p(int n, double x);int n;double x;scanf("%d %lf", &n, &x);printf("P%d(%lf) = %lf", n, x, p(n, x));return 0;
}double p(int n, double x)
{if (n == 0)return 1;else if (n == 1)return x;else if(n > 1)return ((2 * n - 1) * x * p(n - 1, x) - (n - 1) * p(n - 2, x)) / n;//书本公式有误
}//14.
int main()
{void ave_stu(double score[][5]);void ave_class(double score[][5]);void find_max(double score[][5]);double a[10][5] = { 87,88,92,67,78,88,86,87,98,90,76,75,65,65,78,67,87,60,90,67,77,78,85,64,56,76,89,94,65,76,78,75,64,67,77,77,76,56,87,85,84,67,78,76,89,86,75,64,69,90 };ave_stu(a);ave_class(a);find_max(a);return 0;
}void ave_stu(double score[][5])
{double ave = 0;for (int i = 0; i < 10; i++){ave = 0;for (int j = 0; j < 5; j++){ave += score[i][j] / 5;}printf("第%d个学生的平均分为%lf\n", i, ave);}
}
void ave_class(double score[][5])
{double ave = 0;for (int i = 0; i < 5; i++){ave = 0;for (int j = 0; j < 10; j++){ave += score[j][i] / 10;}printf("第%d个课的平均分为%lf\n", i, ave);}
}
void find_max(double score[][5])
{double max = score[0][0];int max_index[2] = { 0 };for (int i = 0; i < 10; i++){for (int j = 0; j < 5; j++){if (score[i][j] > max){max_index[0] = i;max_index[1] = j;max = score[i][j];}}}printf("最高分数对应第%d个学生,对应第%d个课程\n", max_index[0], max_index[1]);
}//15.
int main()
{void input(char str[][2][5]);//姓名和职工号最大长度为5(包含'\0')void sort(char str[][2][5]);char str[5][2][5];char num[5];input(str);printf("Orignal:\n");for (int i = 0; i < 5; i++){printf("姓名:%s 职工号:%s\n", str[i][0], str[i][1]);}sort(str);printf("Sorted:\n");for (int i = 0; i < 5; i++){printf("姓名:%s 职工号:%s\n", str[i][0], str[i][1]);}printf("输入职工号:\n");scanf("%s", num);printf("该职工姓名:%s\n",str[find(str, num)][0]);return 0;
}
void input(char str[][2][5])
{printf("输入5个职工的姓名和职工号\n");for (int i = 0; i < 5; i++){scanf("%s", str[i][0]);//姓名scanf("%s", str[i][1]);//职工号}
}
void sort(char str[][2][5])//交换字符串用strcpy
{char t[2][5];for(int i = 0;i < 4;i++)for(int j = 0;j < 4 - i; j++)if (atoi(str[j][1]) > atoi(str[j + 1][1]))//atoi将字符串为数字的字符串 转换为 数字{strcpy(t[0], str[j][0]); strcpy(str[j][0], str[j + 1][0]); strcpy(str[j + 1][0], t[0]);strcpy(t[1], str[j][1]); strcpy(str[j][1], str[j + 1][1]); strcpy(str[j + 1][1], t[1]);}
}
int find(char str[][2][5], char num[5])
{int left = 0, right = 4, mid = left + (right - left) / 2;for (; left < right;){if (atoi(str[mid][1]) > atoi(num)){right = mid;mid = left + (right - left) / 2;}else if (atoi(str[mid][1]) < atoi(num)){left = mid;mid = left + (right - left) / 2;}elsereturn mid;}
}//16.
int main()
{int translate(char num[5]);char num[5];printf("输入十六进制数:\n");scanf("%s", num);printf("相应的十进制数:%d\n", translate(num));return 0;
}
int translate(char num[5])
{int temp[4];//num[5]最后一个为'\0'int i,sum = 0;for (i = 0; num[i] != '\0'; i++)//i最大为4if (num[i] >= '0' && num[i] <= '9')//字符0对应的ascii的十进制数为48temp[i] = num[i] - 48;else {switch (num[i]){case 'a':case 'A':temp[i] = 10;break;case 'b':case 'B':temp[i] = 11;break;case 'c':case 'C':temp[i] = 12;break;case 'd':case 'D':temp[i] = 13;case 'e':case 'E':temp[i] = 14;break;case 'f':case 'F':temp[i] = 15;break;}}for (int j = 0; j < i; j++)sum += temp[j] * pow(16, i - j - 1);return sum;
}//17.
int main()
{void translate(int n);int num;printf("输入一个的十进制数\n");scanf("%d", &num);translate(num);return 0;
}
void translate(int n)
{if (n / 10 > 0)translate(n / 10);printf("%d",(char)(n % 10));
}//18.
int main()
{bool run(int year);int year, month, day;printf("输入年、月、日\n");scanf("%d %d %d", &year, &month, &day);printf("第%d天\n", count(year, month, day));return 0;
}
bool run(int year)
{if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)return true;elsereturn false;
}
int count(int year, int month, int day)
{int run_day = 28;if (run(year))run_day = 29;switch (month){case 1:return day;case 2:return 31 + day;case 3:return 31 + run_day + day;case 4:return 31 + run_day + 31 + day;case 5:return 31 + run_day + 31 + 30 + day;case 6:return 31 + run_day + 31 + 30 + 31 + day;case 7:return 31 + run_day + 31 + 30 + 31 + 30 + day;case 8:return 31 + run_day + 31 + 30 + 31 + 30 + 31 + day;case 9:return 31 + run_day + 31 + 30 + 31 + 30 + 31 + 30 + day;case 10:return 31 + run_day + 31 + 30 + 31 + 30 + 31 + 30 + 31 + day;case 11:return 31 + run_day + 31 + 30 + 31 + 30 + 31 + 30 + 31 + 30 + day;case 12:return 31 + run_day + 31 + 30 + 31 + 30 + 31 + 30 + 31 + 30 + 31 + day;}
}
17题思路