1、C语言复习资料C语言复习资料1简单的算术运算和表达式例3.7强制类型转换:#include main() int m = 5; printf(m/2=%dn, m/2); printf(float)(m/2)=%fn,(float)(m/2; printf(float)m/2= %fn, (float)m/2); printf(m = %dn, m);2选择控制结构 例5.4多分支控制的条件语句:从键盘任意输入a,b,c的值,编程并计算一元二次方程ax2+bx+c=的根(分a=0,,=,0 讨论)#include #include #include #define EPS 1e-6main()
2、 float a, b, c, disc, p, q; printf(Please enter the coefficients a,b,c:); scanf(%f,%f,%f, &a, &b, &c); if (fabs(a) = EPS) /* a=0时,输出不是二次方程 */ printf(It is not a quadratic equation!n); exit(0); disc = b * b - 4 * a * c; /* 计算判别式 */ p = - b / (2 * a); q = sqrt(fabs(disc) / (2 * a); if (fabs(disc) EPS)
3、 /* 判别式大于0时,输出两不等实根 */ printf(x1 = %.2f, x2 = %.2fn, p+q, p-q); else /* 判别式小于0时,输出两共轭复根 */ printf(x1 = %.2f+%.2fi, , p, q); printf(x2 = %.2f-%.2fin, p, q); return 0;3 循环控制结构例6.1 三种循环语句:前n项和的计算#include main() int i, n, sum; printf(Input n:); scanf(%d, &n); sum = 0; /* 累加和变量初始化为0 */ for (i=1; i=n; i+)
4、 sum = sum + i; /* 做累加运算 */ printf(sum = %dn, sum);#include main() int i, n, sum; printf(Input n:); scanf(%d, &n); sum = 0; /* 累加和变量初始化为0 */ i = 1; while (i = n) sum = sum + i; /* 做累加运算 */ i+; /* 累加计数器加1 */ printf(sum = %dn, sum);#include main() int i, n, sum; printf(Input n:); scanf(%d, &n); sum =
5、0; /* 累加求和变量初始化为0 */ i = 1; do sum = sum + i; /* 做累加运算 */ i+; /* 累加计数器加1 */ while (i = n); printf(sum = %dn, sum);例6.4 嵌套循环:前n项阶乘之和#include main() int i, j, n; long p, sum = 0; /* 累加求和变量sum初始化为0 */ printf(Input n:); scanf(%d, &n); for (i=1; i=n; i+) p = 1; /* 每次循环之前都要将累乘求积变量p赋值为1 */ for (j=1; j=i; j
6、+) p = p * j; /* 累乘求积 */ sum = sum + p; /* 累加求和 */ printf(1!+2!+%d! = %ldn, n, sum);例6.10 猜数游戏最终版:#include #include #include main() int magic, guess, counter = 0, ret; char reply; /* 保存用户输入的回答 */ srand(time(NULL); do magic = rand() % 100 + 1; do printf(Please guess a magic number:); ret = scanf(%d,
7、&guess); while (ret != 1) /* 若存在输入错误,则重新输入 */ while (getchar() != n); /* 清除输入缓冲区中的非法字符 */ printf(Please guess a magic number:); ret = scanf(%d, &guess); counter+; if (guess magic) printf(Wrong!Too big!n); else if (guess magic) printf(Wrong!Too small!n); else printf(Right!n); while (guess!=magic & co
8、unter10); /*猜不对且未超10次继续猜*/ printf(counter = %dn, counter); printf(Do you want to continue(Y/N or y/n)?); /*提示是否继续*/ scanf( %c, &reply); /* %c前有一个空格 */ while (reply=Y | reply=y); /* 输入Y或y则程序继续 */4 函数例7.4 函数调用 复用:组合数的计算#include unsigned long Fact(unsigned int n); int main() int m, k; unsigned long p;
9、do printf(Input m,k (m=k0):); scanf(%d,%d, &m, &k); while (mk|m=0|k0); p = Fact(m) / (Fact(k) * Fact(m-k); printf(p = %lun, p);return 0;/* 函数功能:用迭代法计算无符号整型变量n的阶乘 */unsigned long Fact(unsigned int n)unsigned int i; unsigned long result = 1; for (i=2; i=n; i+) result *= i; return result;例7.6 函数的递归调用和递
10、归函数: Fibonacci(斐波那契)数列#include long Fib(int a);int main() int n, i, x; printf(Input n:); scanf(%d,&n); for (i=1; i=n; i+) x = Fib(i); /* 调用递归函数Fib()计算Fibonacci数列的第n项 */ printf(Fib(%d)=%dn, i, x); return 0;/* 函数功能:用递归法计算Fibonacci数列中的第n项的值 */long Fib(int n) if (n = 0) return 0; /* 基线情况 */ else if (n =
11、 1) return 1; /* 基线情况 */ else return (Fib(n-1) + Fib(n-2); /* 一般情况 */ 5 数组例8.5 向函数传递一维数组:从键盘输入某班学生某门课的成绩(已知每班人数最多不超过40人,具体人数由键盘输入),试编程计算其平均分#include #define N 40int Average(int score, int n); /* Average()函数原型 */void ReadScore(int score, int n); /* ReadScore()函数原型 */int main() int scoreN, aver, n; pr
12、intf(Input n:); scanf(%d, &n); ReadScore(score, n); /* 数组名作为函数实参调用函数ReadScore() */ aver = Average(score, n); /* 数组名作为函数实参调用函数Average() */ printf(Average score is %dn,aver); return 0;/* 函数功能: 计算n个学生成绩的平均分 */int Average(int score, int n) /* Average()函数定义 */ int i, sum = 0; for (i=0; in; i+) sum += sco
13、rei; return sum / n;/* 函数功能:输入n个学生的某门课成绩 */void ReadScore(int score, int n) /* ReadScore()函数定义 */ int i; printf(Input score:); for (i=0; in; i+) scanf(%d, &scorei); 例8.8 交换法排序:从键盘输入某班学生某门课的成绩(已知每班人数最多不超过40人),当输入为负值时,表示输入结束,试编程将分数按从高到低的顺序进行排序输出。用函数编程实现排序功能#include #define N 40int ReadScore(int score)
14、; /* ReadScore()函数原型 */void DataSort(int score, int n); /* DataSort()原函数型 */ void PrintScore(int score, int n); /* PrintScore()函数原型 */int main() int scoreN, n; n = ReadScore(score); /*调用函数ReadScore()输入成绩,返回学生人数*/ printf(Total students are %dn, n); DataSort(score, n); /* 调用函数DataSort()进行成绩排序 */ print
15、f(Sorted scores:); PrintScore(score, n); /* 调用函数Printscore()输出成绩排序结果 */ return 0;/* 函数功能:输入学生某门课的成绩,当输入负值时,结束输入,返回学生人数 */int ReadScore(int score) /* ReadScore()函数定义 */ int i = -1; /* i初始化为-1,可保证循环体内i增1后数组下标从0开始 */ do i+; printf(Input score:); scanf(%d, &scorei); while (scorei = 0); /* 输入负值时结束成绩输入 */
16、 return i; /* 返回学生人数 */* 函数功能:按交换法将数组score的元素值元素按从高到低排序 */void DataSort(int score, int n) /* DataSort()函数定义 */ int i, j, temp; for (i=0; in-1; i+) for (j=i+1; j scorei) /* 按数组score的元素值从高到低排序 */ temp = scorej; scorej = scorei; scorei = temp; /* 函数功能: 打印学生成绩 */void PrintScore(int score, int n) /* Prin
17、tScore()函数定义 */ int i; for (i=0; in; i+) printf(%4d, scorei); printf(n);例8.8 选择法排序(题目同上)#include #define N 40int ReadScore(int score); /* ReadScore()函数原型 */void DataSort(int score, int n); /* DataSort()原函数型 */ void PrintScore(int score, int n); /* PrintScore()函数原型 */int main() int scoreN, n; n = Rea
18、dScore(score); /*调用函数ReadScore()输入成绩,返回学生人数*/ printf(Total students are %dn, n); DataSort(score, n); /* 调用函数DataSort()进行成绩排序 */ printf(Sorted scores:); PrintScore(score, n); /* 调用函数Printscore()输出成绩排序结果 */ return 0;/* 函数功能:输入学生某门课的成绩,当输入负值时,结束输入,返回学生人数 */int ReadScore(int score) /* ReadScore()函数定义 */
19、 int i = -1; /* i初始化为-1,可保证循环体内i增1后数组下标从0开始 */ do i+; printf(Input score:); scanf(%d, &scorei); while (scorei = 0); /* 输入负值时结束成绩输入 */ return i; /* 返回学生人数 */* 函数功能:按选择法将数组score的元素值元素按从高到低排序 */void DataSort(int score, int n) int i, j, k, temp; for (i=0; in-1; i+) k = i; for (j=i+1; j scorek) /* 按数组sco
20、re的元素值从高到低排序 */ k = j; /* 记录最大数下标位置 */ if (k != i) /* 若最大数所在的下标位置不在下标位置i */ temp = scorek; scorek = scorei; scorei = temp; /* 函数功能: 打印学生成绩 */void PrintScore(int score, int n) /* PrintScore()函数定义 */ int i; for (i=0; in; i+) printf(%4d, scorei); printf(n);例8.9 在上题基础上同时输入学号并一同输出排序#include #define N 40i
21、nt ReadScore(int score, long num); /*ReadScore()函数原型*/void DataSort(int score, long num, int n); /*DataSort()原函数型*/ void PrintScore(int score, long num, int n);/*PrintScore()函数原型*/int main() int scoreN, n; long numN; n = ReadScore(score, num); /* 输入成绩和学号,返回学生总数 */ printf(Total students are %dn, n);
22、DataSort(score, num, n); /* 成绩排序 */ printf(Sorted scores:n); PrintScore(score, num, n); /* 输出成绩排序结果 */ return 0;/* 函数功能:输入学生的学号及其某门课成绩,当输入负值时,结束输入,返回学生人数 */int ReadScore(int score, long num) /* ReadScore()函数定义 */ int i = -1; /* i初始化为-1,可保证循环体内i增1后数组下标从0开始 */ do i+; printf(Input students ID and score
23、:); scanf(%ld%d, &numi, &scorei); /* 以长整型格式输入学号 */ while (numi 0 & scorei = 0); /* 输入负值时结束成绩输入 */ return i; /* 返回学生总数 */* 函数功能:按选择法将数组score的元素值按从高到低排序 */void DataSort(int score, long num, int n) /*DataSort()函数定义*/ int i, j, k, temp1; long temp2; for (i=0; in-1; i+) k = i; for (j=i+1; j scorek) /* 按数
24、组score的元素值从高到低排序 */ k = j; /* 记录最大数下标位置 */ if (k != i) /* 若最大数不在下标位置i */ /* 交换成绩 */ temp1 = scorek; scorek = scorei; scorei = temp1; /* 交换学号 */ temp2 = numk; numk = numi; numi = temp2; /* 函数功能:打印学生学号和成绩 */void PrintScore(int score, long num, int n) /*PrintScore()函数定义*/ int i; for (i=0; in; i+) print
25、f(%10ld%4dn, numi, scorei); /* 以长整型格式打印学号 */ 例8.10 线性查找(或称顺序查找):从键盘输入某班学生某门课的成绩(已知每班人数最多不超过40人),同时输入学生的学号,当输入为负值时,表示输入结束,试编程从键盘输入任意一个学号,查找该学生的成绩#include #define N 40int ReadScore(int score, long num); /*ReadScore()函数原型*/void DataSort(int score, long num, int n); /*DataSort()原函数型*/ void PrintScore(in
26、t score, long num, int n);/*PrintScore()函数原型*/int main() int scoreN, n; long numN; n = ReadScore(score, num); /* 输入成绩和学号,返回学生总数 */ printf(Total students are %dn, n); DataSort(score, num, n); /* 成绩排序 */ printf(Sorted scores:n); PrintScore(score, num, n); /* 输出成绩排序结果 */ return 0;/* 函数功能:输入学生的学号及其某门课成绩,当输入负值时,结束输入,返回学生人数 */int ReadScore(int score, long num) /* ReadScore()函数定义 */ int i = -1; /* i初始化为-1,可保证循环体内i增1后数组下标从0开始 */ do i+; printf(Input students ID and score:); scanf(%ld%d, &numi, &scorei); /* 以长整型格式输入学号 */ while (numi 0 & scorei = 0); /* 输入负值时结束
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1