数值计算方法编程作业(C语言版)汇总
c语言算法100例

c语言算法100例以下是一些经典的C语言算法题目,总共提供100个例子供你练习和学习:1.编写一个程序,计算并输出斐波那契数列的前20个数。
2.编写一个程序,判断一个数是否为素数。
3.编写一个程序,计算并输出一个数的阶乘。
4.编写一个程序,实现两个数的交换(不使用第三个变量)。
5.编写一个程序,找出一个数组中的最大值。
6.编写一个程序,将一个字符串反转。
7.编写一个程序,判断一个字符串是否为回文字符串。
8.编写一个程序,实现冒泡排序算法对一个数组进行排序。
9.编写一个程序,实现二分查找算法在一个有序数组中查找指定的元素。
10.编写一个程序,计算并输出斐波那契数列的第n个数。
11.编写一个程序,将一个二维数组顺时针旋转90度。
12.编写一个程序,计算并输出一个数的平方根。
13.编写一个程序,判断一个字符串中是否包含重复字符。
14.编写一个程序,实现插入排序算法对一个数组进行排序。
15.编写一个程序,将一个有序数组合并为一个有序数组。
16.编写一个程序,判断一个数是否为完全数(即所有因子之和等于该数本身)。
17.编写一个程序,计算并输出一个数的倒数。
18.编写一个程序,判断一个字符串是否是另一个字符串的子串。
19.编写一个程序,实现选择排序算法对一个数组进行排序。
20.编写一个程序,计算并输出两个数的最大公约数。
21.编写一个程序,实现快速排序算法对一个数组进行排序。
22.编写一个程序,将一个字符串中的所有空格替换为指定的字符。
23.编写一个程序,判断一个数是否是回文数。
24.编写一个程序,计算并输出两个数的最小公倍数。
25.编写一个程序,实现归并排序算法对一个数组进行排序。
26.编写一个程序,判断一个字符串是否是有效的括号串。
27.编写一个程序,计算并输出一个数的立方根。
28.编写一个程序,实现堆排序算法对一个数组进行排序。
29.编写一个程序,判断一个数是否是质数。
30.编写一个程序,计算并输出一个数的二进制表示。
c语言数组编程题目

c语言数组编程题目含详解共5道1. 计算数组元素的和编写一个程序,计算给定数组中所有元素的和。
```c#include <stdio.h>int main() {int arr[] = {1, 2, 3, 4, 5};int n = sizeof(arr) / sizeof(arr[0]);int sum = 0;for (int i = 0; i < n; ++i) {sum += arr[i];}printf("数组元素的和: %d\n", sum);return 0;}```2. 查找数组中的最大值和最小值编写一个程序,查找给定数组中的最大值和最小值。
```c#include <stdio.h>int main() {int arr[] = {5, 2, 8, 1, 4};int n = sizeof(arr) / sizeof(arr[0]);int max = arr[0];int min = arr[0];for (int i = 1; i < n; ++i) {if (arr[i] > max) {max = arr[i];}if (arr[i] < min) {min = arr[i];}}printf("最大值: %d\n", max);printf("最小值: %d\n", min);return 0;}```3. 反转数组元素的顺序编写一个程序,反转给定数组的元素顺序。
```c#include <stdio.h>int main() {int arr[] = {1, 2, 3, 4, 5};int n = sizeof(arr) / sizeof(arr[0]);int temp;for (int i = 0; i < n / 2; ++i) {temp = arr[i];arr[i] = arr[n - i - 1];arr[n - i - 1] = temp;}printf("反转后的数组: ");for (int i = 0; i < n; ++i) {printf("%d ", arr[i]);}return 0;}```4. 删除数组中的指定元素编写一个程序,删除给定数组中的指定元素。
C语言编程例题

C语言编程例题1编程:由键盘输入两个整型变量a和b的值。
编程计算并输出a 与b的和、差、积、商、a除以b的余数、a b的值。
输入输出参考示例如下:提示:用到C语言的运算符(参见P52)+、-、*、/、%、函数pow()(参见附录C P385)请输入a,b的值:a=3,b=2a+b=5a-b=1a*b=6a/b=1a%b=1a^b=92、编程:求一元二次方程ax2+bx+c=0的实根x1,x2,。
a,b,c的值由键盘输入,设b2-4ac>0。
输入输出示例如下:请输入三个系数a,b,c的值:a=1,b=3,c=2x1=-1.00x2=-2.003、由键盘输入一个圆柱体的底面半径r和高度h的值,编程计算并输出该圆柱体的体积。
(注意:体积=底面积*高,要求将圆周率定义为符号常量PI)4、编写程序,从键盘输入两个数字字符并分别存放在字符型变量a和b中,要求通过程序将与这两个字符对应的数字相加后输出,例如,输入字符型数字7和5,输出的则是整型数12。
5、判断用户从键盘输入的任意一个字符是数字字符、字母字符还是其他字符,要求有必要的输入提示和输出信息;如果输入的是英文字母,再利用switch语句判断该字母是否是元音字母,并以“yes”或“no”字样输出判断结果。
6、编程实现:任意输入一个百分制成绩,输出成绩等级A、B、C、D。
当输入的分数小于0分或大于100分时,显示出错信息;在85~100分时为A,70~84分为B,55~69分为C,55分以下为D。
7、编写程序:从键盘输入x,利用幂级数展开计算sinx的近似值,要求误差小于10-6。
数值计算C语言常用小程序

数值计算C语言常用小程序C语言是一种流行的编程语言,广泛应用于计算机科学和软件开发领域。
在数值计算方面,C语言提供了一些常用的函数和技巧,可以帮助我们进行各种数值计算任务。
本文将介绍一些C语言常用的数值计算小程序。
1.求平均数```c#include <stdio.h>int maiint num;int sum = 0;int count = 0;float average;printf("请输入数字: ");while(num != -1)scanf("%d", &num);if(num != -1)sum += num;count += 1;}}average = (float)sum / count;printf("平均值为: %.2f\n", average);return 0;```这个程序会要求用户输入一系列数字,直到输入-1为止。
然后计算这些数字的平均值并输出。
2.求阶乘```c#include <stdio.h>int factorial(int n)if(n == 0)return 1;} elsereturn n * factorial(n-1);}int maiint n;int result;printf("请输入一个正整数: ");scanf("%d", &n);result = factorial(n);printf("%d的阶乘为: %d\n", n, result);return 0;```这个程序会要求用户输入一个正整数,然后使用递归的方式计算该整数的阶乘,并输出结果。
3.求平方根```c#include <stdio.h>#include <math.h>int maidouble num;printf("请输入一个数字: ");scanf("%lf", &num);if(num < 0)printf("无法计算负数的平方根\n");} elsedouble result = sqrt(num);printf("该数字的平方根为: %.2lf\n", result);}return 0;```这个程序会要求用户输入一个数字,然后计算该数字的平方根并输出。
c语言编程习题及答案

c语言编程习题及答案C语言是一种广泛使用的计算机编程语言,以其高效性和灵活性而闻名。
以下是一些C语言编程习题及其答案,供学习者练习和参考。
习题1:求两个数的和编写一个C程序,输入两个整数,输出它们的和。
```c#include <stdio.h>int main() {int num1, num2, sum;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);sum = num1 + num2;printf("%d + %d = %d\n", num1, num2, sum);return 0;}```习题2:计算圆的面积编写一个C程序,输入圆的半径,计算并输出圆的面积。
```c#include <stdio.h>#define PI 3.14159int main() {double radius, area;printf("请输入圆的半径:");scanf("%lf", &radius);area = PI * radius * radius;printf("圆的面积是:%.2f\n", area);return 0;}```习题3:判断一个数是奇数还是偶数编写一个C程序,输入一个整数,判断并输出它是奇数还是偶数。
```c#include <stdio.h>int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (num % 2 == 0) {printf("%d 是偶数。
\n", num);} else {printf("%d 是奇数。
C语言经典算法100例

【程序21】题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。
求第一天共摘了多少。
1.程序分析:采取逆向思维的方法,从后往前推断。
2.程序源代码:main(){int day,x1,x2;day=9;x2=1;while(day>0){x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/x2=x1;day--;}printf("the total is %d\n",x1);}==============================================================【程序22】题目:两个乒乓球队进行比赛,各出三人。
甲队为a,b,c三人,乙队为x,y,z三人。
已抽签决定比赛名单。
有人向队员打听比赛的名单。
a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
2.程序源代码:main(){char i,j,k;/*i是a的对手,j是b的对手,k是c的对手*/for(i='x';i<='z';i++)for(j='x';j<='z';j++){if(i!=j)for(k='x';k<='z';k++){ if(i!=k&&j!=k){ if(i!='x'&&k!='x'&&k!='z')printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);}}}}==============================================================【程序23】题目:打印出如下图案(菱形)【程序31】题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
数值计算方法编程作业汇总

数值计算方法编程作业汇总数值计算方法是数值分析的重要内容之一,它是通过数学模型和计算机技术对数学问题进行近似计算的方法。
在实际应用中,我们常常需要对各种数学问题进行求解,例如求方程的解、求函数的极值、求积分等。
本文将对数值计算方法的几个主要内容进行介绍,并给出C语言的编程实现示例。
1.数值解法的分类数值计算方法主要包括近似求解方法和数值计算方法两类。
近似求解方法是通过一系列逼近的方法来逼近最优解,包括插值与外推法、最小二乘法和优化等。
数值计算方法主要是采用数值计算的方法对具体问题进行求解,包括方程求根、线性方程组的求解、插值与拟合、积分与微分等。
2.数值解法的代码实现下面以方程求根和插值与拟合为例,给出C语言的编程实现示例。
(1)方程求根方程求根是数值计算方法的基本问题之一、常见的方程求根方法包括二分法、牛顿迭代法、割线法和弦截法等。
以下是二分法的C语言实现示例:```c#include <stdio.h>double f(double x)//定义方程f(x)=x^2-2return x * x - 2;double bisection(double a, double b, double eps) while (b - a > eps)double c = (a + b) / 2.0;if (f(c) == 0)return c;}else if (f(a) * f(c) < 0)b=c;}elsea=c;}}return (a + b) / 2.0;int maidouble a = 1.0;double b = 2.0;double eps = 1e-8;double root = bisection(a, b, eps);printf("Root: %lf\n", root);return 0;```(2)插值与拟合插值与拟合是数值计算方法中的重要问题,常用的方法包括拉格朗日插值、牛顿插值和最小二乘法等。
C语言作业题总结

1、编写程序:从键盘输入两个数,计算两个数的和、差、积、商,将这些结果输出。
(有能力的同学,可以试一试完成一个简单的计算器)# include <stdio.h># include <math.h>int main(){float r1,r2,p1,p2,p3,p4;r1=8;r2=2;p1=r1+r2;p2=r1-r2;p3=r1*r2;p4=r1/r2;printf("p1=%f\np2=%f\np2=%f\np4=%f\n",p1,p2,p3,p4);return 0;}按要求编写程序,并上机运行。
题目为:设半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积,圆柱体积。
用scanf输入数据,输出计算结果。
输出时要有文字说明,取小数点后两位数字。
# include<stdio.h># define PI 3.14void main(){float r,h,C1,S1,S2,V1,V2;scanf ("%f%f",&r,&h);C1=2*PI*r;S1=PI*r*r;S2=4*PI*r*r;V1=4.0/3*PI*r*r*r;V2=PI*r*r*h;printf("C1=%.2f\nS1=%.2f\nS2=%.2f\nV1=%.2f\nV2=%.2f\n",C1,S1,S2,V1,V2);}编程序,用getchar函数读入两个字符给c1、c2,然后分别用putchar函数和printf 函数输出这两个字符。
#include<stdio.h>void main(){char c1,c2;c1=getchar();c2=getchar();putchar(c1);putchar('\n');printf("%c\n",c2);return 0;}(1).给出一个百分制成绩,要求输出成绩等级A、B、C、D、E。
计算方法C语言编程

计算方法C语言编程1、已知方程340+-=在区间[1,2]内有一根,试问用二分法求根,使其具有5位有x x效数字至少应二分多少次?【程序设计】%------二分法------%clc;cleara=1;b=2;n=0;x=1.0;x0=0;while(abs(x-x0)>0.00005);x0=x;x=(a+b)/2if f1(x)>0b=x;elsea=x;endn=n+1;endN=n〖运行结果〗x =1.3788N =152、用迭代法求50.20--=的正根,要求准确到小数点后第5位。
x x【程序设计】%-------迭代法------%clc;clearx0=0.00000;x=1.50000;k=0;y=(log(x+0.20000))/5.0000;x0=x;x=exp(y);while(abs(x-x0)>0.00005);y=(log(x+0.20000))/5.0000;x0=x;x=exp(y);k=k+1;endN=kX=vpa(x,6)%准确到小数点后第五位〖运行结果〗3、用牛顿法求方程3310--=在x0=2附近的根,要求准确到小数点后第3位。
x x【程序设计】function f=f3(x)f=x^3-3*x-1;%------牛顿法-----%clc;clearx0=1.0;x=2.0;k=0;if diff(f3(x0))==0breakendwhile(abs(x-x0)>0.0005);x0=x;x=x-(x^3-3*x-1)/(3*x^2-3);k=k+1;endX=vpa(x,4),%精确到小数点后第三位N=k〖运行结果〗4、分别用单点和双点弦截法求方程310--=在[1,1.5]内的根。
要求|x n+1-x n|≤0.000005x x【程序设计】%------单点弦截法----%clc;clearx1=1.0;x2=2.0;k=0;while abs(x2-x1)>0.000005;t=x2-((x2^2-x2-1)*(x2-x1))/((x2^3-x2-1)-(x1^3-x1-1));x1=x1;x2=t;k=k+1;end X=k; Y=x2%------双点弦截法----% clc;clear x1=1.0;x2=2.0; k=0;while abs(x2-x1)>0.000005;t=x2-((x2^2-x2-1)*(x2-x1))/((x2^3-x2-1)-(x1^3-x1-1)); x1=x2; x2=t; k=k+1; end X=k,Y=x2〖运行结果〗X = 28 Y =1.61805、分别用列主元素消去法求解下列方程组。
c语言有关于数的编程题汇总

c语言有关于数的编程题汇总
当涉及到C语言编程中与数相关的题目时,有许多不同类型的
题目可以涵盖。
以下是一些常见的数学编程题目的汇总,它们涵盖
了不同的概念和技巧:
1. 判断质数,编写一个程序,判断一个给定的整数是否为质数。
质数是只能被1和自身整除的数。
2. 斐波那契数列,编写一个程序,打印斐波那契数列的前n个
数字。
斐波那契数列是一个每个数字都是前两个数字之和的数列。
3. 最大公约数和最小公倍数,编写一个程序,计算两个给定整
数的最大公约数和最小公倍数。
4. 逆序数字,编写一个程序,将一个给定的整数逆序输出。
例如,输入12345,输出54321。
5. 阶乘计算,编写一个程序,计算一个给定整数的阶乘。
阶乘
是从1到该数的连续乘积。
6. 素数间距,编写一个程序,找到给定范围内的所有素数对,并计算它们之间的间距。
素数对是指相邻的两个素数。
7. 找出最大和最小数字,编写一个程序,从给定的一组数字中找出最大和最小的数字。
8. 简单计算器,编写一个程序,实现简单的加法、减法、乘法和除法运算。
9. 数字猜谜游戏,编写一个程序,生成一个随机数,并提示用户猜测该数字,直到猜中为止。
10. 十进制转二进制,编写一个程序,将一个给定的十进制数转换为二进制表示。
以上只是一些常见的数学编程题目,你可以根据自己的需求和兴趣选择适合的题目进行练习。
同时,还可以通过使用循环、条件语句、函数等C语言的特性来解决这些问题。
希望这些题目能够帮助你加深对C语言的理解和掌握。
数值计算方法编程作业(C语言版)汇总

1:第二章(1)二分法求解非线性方程:#include<stdio.h>#include <math.h> #define f(x) ((x*x-1)*x-1) void main(){ float a,b,x,eps;int k=0;printf("intput eps\n");/* 容许误差*/ scanf("%f",&eps);printf("a,b=\n");for(;;){scanf("%f, %f",&a ,&b);if(f(a)*f(b)>=0) /* 判断是否符合二分法使用的条件*/ printf(" 二分法不可使用,请重新输入:\n");else break;} dox=(a+b)/2;k++;if(f(a)*f(x)<0) /* 如果f(a)*f(x)<0 ,则根在区间的左半部分*/b=x;else if(f(a)*f(x)>0) /* 否则根在区间的右半部分*/a=x;else break;}while(fabs(b-a)>eps);/* 判断是否达到精度要求,若没有达到,继续循环*/ x=(a+b)/2; /* 取最后的小区间中点作为根的近似值*/ printf("\n The root is x=%f, k=%d\n",x,k);}运行结果:intput eps0.00001 a,b=2,-5The root is x=1.324721, k=20Press any key to continue 总结:本题关键在于两个端点的取值和误差的判断,此程序较容易。
二分法收敛速度较快,但缺点是只能求解单根。
(2)牛顿法求解非线性方程:#include <stdio.h>#include <math.h>float f(float x) /* 定义函数f(x) */{ return((-3*x+4)*x-5)*x+6; }float f1(float x) /* 定义函数f(x) 的导数*/{ return (-9*x+8)*x-5; }void main(){ float eps,x0,x1=1.0;printf("input eps:\n");scanf("%f",&eps); /* 输入容许误差*/do{ x0=x1; /* 准备下一次迭代的初值*/ x1=x0-f(x0)/f1(x0); /* 牛顿迭代*/}while(fabs(x1-x0)>eps); /* 当满足精度,输出近似根*/ printf("x=%f\n",x1);} 程序运行结果:x=1.265328 总结:关键是牛顿迭代的应用,程序中最大缺点是函数及其导数已唯一给出确定不可求的随意函数的根,牛顿法比二分法收敛快,可以求重根。
数值分析编程题c语言汇总

数值分析实习报告- 1 -数值分析实习报告上机实习题一一、题目:b与已知A12.38412,2.115237,-1.061074,1.112336,-0.113584,0.718719,1.742382,3.067813,-2.0317 432.115237,19.141823,-3.125432,-1.012345,2.189736,1.563849,-0.784165,1.112348,3.123124-1.061074,-3.125432,15.567914,3.123848,2.031454,1.836742,-1.056781,0.336993,-1.0101 031.112336,-1.012345,3.123848,27.108437,4.101011,-3.741856,2.101023,-0.71828,-0.037585A=-0.113584,2.189736,2.031454,4.101011,19.897918,0.431637,-3.111223,2.121314,1.7841370.718719,1.563849,1.836742,-3.741856,0.431637,9.789365,-0.103458,-1.103456,0.2384171.742382,-0.784165,-1.056781,2.101023,-3.111223,-0.103458,14.7138465,3.123789,-2.21 34743.067813,1.112348,0.336993,-0.71828,2.121314,-1.103456,3.123789,30.719334,4.446782-2.031743,3.123124,-1.010103,-0.037585,1.784317,0.238417,-2.213474,4.446782,40.00001b={2.1874369,33.992318,-25.173417,0.84671695,1.784317,-86.612343,1.1101230,4.719345 ,-5.6784392}1.用Household变换,把A化为三对角阵B(并打印B)。
C语言经典算法100例【范本模板】

【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4.组成所有的排列后再去掉不满足条件的排列.2.程序源代码:main(){int i,j,k;printf("\n”);for(i=1;i〈5;i++) /*以下为三重循环*/for(j=1;j<5;j++)for (k=1;k<5;k++){if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/printf(”%d,%d,%d\n”,i,j,k);}}==============================================================【程序2】题目:企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7。
5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1。
5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1。
程序分析:请利用数轴来分界,定位.注意定义时需把奖金定义成长整型。
2。
程序源代码:main(){long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf(”%ld",&i);bonus1=100000*0。
1;bonus2=bonus1+100000*0。
75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0。
3;bonus10=bonus6+400000*0。
C编程题目算法大全

曾经在软通动力写过的算法题其中有一小部分是参考网上的资料,现在拿出来给大家分享!第3章控制语句/* 1、打印出所有的“水仙花数”。
所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如,153是一水仙花数,因为153 = 13 + 53 + 33。
*/#include<iostream.h>void main(){int i, a=0, b=0, c=0;for(i=100;i<1000;i++){a=i%10;b=i/10%10;c=i/100%10;if(a*a*a+b*b*b+c*c*c==i)cout<<"i="<<i<<endl;}}/* 2、一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如,6的因子为1、2、3,而6 = 1 + 2 + 3,因此6是“完数”。
编程序找出1000之内的所有完数,并按下面的格式输出其因子:6 -〉1,2,3 */#include<iostream.h>void main(){int i,j,sum=0,a[50],k,t;for(i=1;i<=1000;i++){sum=0;for(j=1;j<i;j++){if(i%j==0){sum+=j;a[k++]=j;}}t=k;if(sum==i){cout<<i<<"->";for(k=0;k<t;k++){cout<<a[k];if(k<t-1)cout<<",";}cout<<endl;}k=0;}}/* 3、求Sn=a+aa+aaa+…+aa…a之值,其中a是一个数字。
例如:2+22+222+…+22222(此时n=5),n由键盘输入。
*/#include<iostream.h>void main(){double a,sn=0.0,sum=0.0;int n,i;cout<<"please input a number";cin>>a;cout<<"please input n number";cin>>n;sn=a;sum=a;for(i=2;i<=n;i++){sum=sum*10+a;sn+=sum;}cout<<"Sn="<<sn<<endl;}/* 4、一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。
C语言经典算法100例

题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
2.程序源代码:main() {int i,j,k;printf("\n");for(i=1;i<5;i++) /*以下为三重循环*/for(j=1;j<5;j++)for (k=1;k<5;k++) {if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/printf("%d,%d,%d\n",i,j,k); }}==============================================================【程序2】题目:企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。
注意定义时需把奖金定义成长整型。
2.程序源代码:main() {long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf("%ld",&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i<=100000)bonus=i*0.1;else if(i<=200000)bonus=bonus1+(i-100000)*0.075;else if(i<=400000)bonus=bonus2+(i-200000)*0.05;else if(i<=600000)bonus=bonus4+(i-400000)*0.03;else if(i<=1000000)bonus=bonus6+(i-600000)*0.015;elsebonus=bonus10+(i-1000000)*0.01;printf("bonus=%d",bonus); }==============================================================题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
C语言经典算法100例

C语言经典算法100例【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
2.程序源代码:main() {int i,j,k;printf("\n");for(i=1;i<5;i++) /*以下为三重循环*/for(j=1;j<5;j++)for (k=1;k<5;k++) {if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/printf("%d,%d,%d\n",i,j,k); }}==============================================================【程序2】题目:企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。
注意定义时需把奖金定义成长整型。
2.程序源代码:main() {long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf("%ld",&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i<=100000)bonus=i*0.1;else if(i<=200000)bonus=bonus1+(i-100000)*0.075;else if(i<=400000)bonus=bonus2+(i-200000)*0.05;else if(i<=600000)bonus=bonus4+(i-400000)*0.03;else if(i<=1000000)bonus=bonus6+(i-600000)*0.015;elsebonus=bonus10+(i-1000000)*0.01;printf("bonus=%d",bonus); }==============================================================【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
c语言编程题汇总

实验一:简单的C程序设计(2学时)一、实验方式:一人一机二、实验目的:1、了解C语言程序的编译环境和编写过程。
2、掌握C语言程序在Visual C++ 6.0环境下的调试过程。
3、初步了解C语言程序的特点。
4、掌握C语言的数据类型。
三、实验内容:1、计算两个数x和y的和。
(教材P5【例1-2】)2、从键盘输入华氏温度h,输出摄氏温度c(摄氏温度=5/9*(华氏温度-32))。
(实验教材P18)3、给定圆环,输入内圆环半径r1、外圆环半径r2,求出圆环的面积。
(实验教材P27)4、从键盘上输入两个整数x、y,实现两个数的交换,并求出最大值、最小值和两个数的平均值。
(实验教材P21)5、输入并运行以下程序,分析运行结果。
(实验教材P27)#include <stdio.h>void main( ){int i,j;i=8; j=10;printf(“%d,%d\n”,++i,++j);i=8; j=10;printf(“%d,%d\n”,i++,j++);i=8; j=10;printf(“%d,%d\n”,++i,i);i=8; j=10;printf(“%d,%d\n”,i++,i);}四、实验程序代码:1#include "stdio.h"void main(){int x,y,sum;x=123;y=456;sum=x+y;printf("sum is=%d\n",sum);}#include "stdio.h"main(){double h,c;// printf("Input h\n");scanf("%lf",&h);c=5.0/9*(h-32);printf("c=%lf",c);}3#include "stdio.h"#define p 3.14void main(){float r1,r2;double s1,s2,s;printf("please enter r1,r2:");scanf("%f%f",&r1,&r2);s2=r2*r2*p;s1=r1*r1*p;s=s2-s1;printf(“圆环面积为%lf\n",s);}4#include "stdio.h"void main(){int x,y,t,max,sum=0;float average;printf("请输入两个整数 x y:");scanf("%d%d",&x,&y);printf("您输入的两个整数 x y为:");printf("x=%d,y=%d\n",x,y);max=x;if(max<y) max=y;sum=x+y;average=sum/2.0;{t=x;x=y;y=t;}printf("交换后的两个整数 x y为:");printf("x=%d,y=%d\n",x,y);printf("最大值max=%d\n",max);printf("平均值average=%f\n",average); }五、实验运行结果(截图):2.3.4.实验二:顺序结构程序设计(2学时) 一、实验方式:一人一机二、实验目的:1、掌握标识符、常量、变量的定义及使用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1:第二章(1)二分法求解非线性方程:#include<stdio.h>#include <math.h>#define f(x) ((x*x-1)*x-1)void main(){ float a,b,x,eps;int k=0;printf("intput eps\n");/* 容许误差*/scanf("%f",&eps);printf("a,b=\n");for(;;){scanf("%f, %f",&a ,&b);if(f(a)*f(b)>=0) /* 判断是否符合二分法使用的条件*/printf("二分法不可使用,请重新输入:\n");else break;}do{ x=(a+b)/2;k++;if(f(a)*f(x)<0) /* 如果f(a)*f(x)<0,则根在区间的左半部分*/b=x;else if(f(a)*f(x)>0) /* 否则根在区间的右半部分*/a=x;else break;}while(fabs(b-a)>eps);/*判断是否达到精度要求,若没有达到,继续循环*/x=(a+b)/2; /* 取最后的小区间中点作为根的近似值*/printf("\n The root is x=%f, k=%d\n",x,k);}运行结果:intput eps0.00001a,b=2,-5The root is x=1.324721, k=20Press any key to continue总结:本题关键在于两个端点的取值和误差的判断,此程序较容易。
二分法收敛速度较快,但缺点是只能求解单根。
(2)牛顿法求解非线性方程:#include <stdio.h>#include <math.h>float f(float x) /* 定义函数f(x) */{ return((-3*x+4)*x-5)*x+6; }float f1(float x) /* 定义函数f(x)的导数*/{ return (-9*x+8)*x-5; }void main(){ float eps,x0,x1=1.0;printf("input eps:\n");scanf("%f",&eps); /* 输入容许误差*/do{ x0=x1; /* 准备下一次迭代的初值*/x1=x0-f(x0)/f1(x0); /* 牛顿迭代*/}while(fabs(x1-x0)>eps); /*当满足精度,输出近似根*/printf("x=%f\n",x1);}程序运行结果:x=1.265328总结:关键是牛顿迭代的应用,程序中最大缺点是函数及其导数已唯一给出确定不可求的随意函数的根,牛顿法比二分法收敛快,可以求重根。
2:第三章(1)列主元素消去法求解线性方程:#include<iostream>#include<cmath>#define N 20using namespace std;void load();float a[N][N];int m;int main(){int i,j;int c,k,n,p,r;float x[N],l[N][N],s,d;cout<<"下面请输入未知数的个数m=";cin>>m;cout<<endl;cout<<"请按顺序输入增广矩阵a:"<<endl;load();for(i=0;i<m;i++){for(j=i;j<m;j++)c=(fabs(a[j][i])>fabs(a[i][i]))?j:i; /*找列最大元素*/for(n=0;n<m+1;n++){s=a[i][n]; a[i][n]=a[c][n]; a[c][n]=s;} /*将列最大数防在对角线上*/for(p=0;p<m+1;p++)cout<<a[i][p]<<"\t";cout<<endl;for(k=i+1;k<m;k++){l[k][i]=a[k][i]/a[i][i];for(r=i;r<m+1;r++) /*化成三角阵*/a[k][r]=a[k][r]-l[k][i]*a[i][r];}}x[m-1]=a[m-1][m]/a[m-1][m-1];for(i=m-2;i>=0;i--){d=0;for(j=i+1;j<m;j++)d=d+a[i][j]*x[j];x[i]=(a[i][m]-d)/a[i][i]; /*求解*/}cout<<"该方程组的解为:"<<endl;for(i=0;i<m;i++)cout<<"x["<<i<<"]="<<x[i]<<"\t";//system("pause");return 0;}void load(){int i,j;for(i=0;i<m;i++)for(j=0;j<m+1;j++)cin>>a[i][j];}运行结果:下面请输入未知数的个数m=3请按顺序输入增广矩阵a:1 2 3 45 1 0 84 6 9 24 6 9 20 -6.5 -11.25 5.50 -1.86265e-008 -0.115385 3.92308该方程组的解为:x[0]=-9.99999 x[1]=58 x[2]=-34 Press any key to continue总结:列主元素消去法的目的是为了防止减去一个较小的数时大数淹没小数,而使结果产生较大误差,本程序关键在每次消元时找到相应列中的最大项,然后交换两行位置,在进行计算。
(2)LU分解法求解线性方程:#include<stdio.h>void solve(float l[][100],float u[][100],float b[],float x[],int n){int i,j;float t,s1,s2;float y[100];for(i=1;i<=n;i++) /* 第一次回代过程开始*/{s1=0;for(j=1;j<i;j++){t=-l[i][j];s1=s1+t*y[j];}y[i]=(b[i]+s1)/l[i][i]; }for(i=n;i>=1;i--) /* 第二次回代过程开始*/{s2=0;for(j=n;j>i;j--){t=-u[i][j];s2=s2+t*x[j];}x[i]=(y[i]+s2)/u[i][i];}}void main(){float a[100][100],l[100][100],u[100][100],x[100],b[100];int i,j,n,r,k;float s1,s2;for(i=1;i<=99;i++)/*将所有的数组置零,同时将L矩阵的对角值设为1*/ for(j=1;j<=99;j++){l[i][j]=0,u[i][j]=0;if(j==i) l[i][j]=1;}printf ("input n:\n");/*输入方程组的个数*/scanf("%d",&n);printf ("input array A:\n");/*读取原矩阵A*/for(i=1;i<=n;i++)for(j=1;j<=n;j++)scanf("%f",&a[i][j]);printf ("input array B:\n");/*读取列矩阵B*/for(i=1;i<=n;i++)scanf("%f",&b[i]);for(r=1;r<=n;r++)/*求解矩阵L和U*/ {for(i=r;i<=n;i++){s1=0;for(k=1;k<=r-1;k++)s1=s1+l[r][k]*u[k][i];u[r][i]=a[r][i]-s1;}for(i=r+1;i<=n;i++){s2=0;for(k=1;k<=r-1;k++)s2=s2+l[i][k]*u[k][r];l[i][r]=(a[i][r]-s2)/u[r][r];}}printf("array L:\n");/*输出矩阵L*/ for(i=1;i<=n;i++){for(j=1;j<=n;j++)printf("%7.3f ",l[i][j]);printf("\n");}printf("array U:\n");/*输出矩阵U*/ for(i=1;i<=n;i++){for(j=1;j<=n;j++)printf("%7.3f ",u[i][j]);printf("\n");}solve(l,u,b,x,n);printf("解为:\n");for(i=1;i<=n;i++)printf("x%d=%f\n",i,x[i]);}运行结果:input n:3input array A:2 2 34 7 7-2 4 5input array B:3 1 -7array L:1.000 0.000 0.0002.000 1.000 0.000-1.000 2.000 1.000array U:2.000 2.0003.0000.000 3.000 1.0000.000 0.000 6.000解为:x1=2.000000x2=-2.000000x3=1.000000Press any key to continue总结:关键是把矩阵分解为L、U两个三角矩阵,回代过程比较简单。
3:第四章(1)拉格朗日差值多项式;#include<stdio.h>#include<math.h>#define MAX 100void main(){ int i,j,k,m,n,N,mi;float tmp,mx;float X[MAX][MAX],Y[MAX],x[MAX],y[MAX],a[MAX];printf("\n 输入拟合多项式的次数:\n");scanf("%d",&m);printf("\n 输入给定点的个数n及坐标(x,y):\n");scanf("%d",&N);printf("\n");for(i=0;i<N;i++)scanf("%f,%f",&x[i],&y[i]);for(i=0;i<=m;i++){for(j=i;j<=m;j++){tmp=0;for(k=0;k<N;k++)tmp=tmp+pow(x[k],(i+j));X[i][j]=tmp;X[j][i]=X[i][j];}}for(i=0;i<=m;i++){tmp=0;for(k=0;k<N;k++)tmp=tmp+y[k]*pow(x[k],i);Y[i]=tmp;}for(j=0;j<m;j++){for(i=j+1,mi=j,mx=fabs(X[j][j]);i<=m;i++)if(fabs(X[i][j])>mx){mi=i;mx=fabs(X[i][j]);}if(j<mi){tmp=Y[j];Y[j]=Y[mi];Y[mi]=tmp;for(k=j;k<=m;k++){tmp=X[j][k];X[j][k]=X[mi][k];X[mi][k]=tmp;}}for(i=j+1;i<=m;i++){tmp=-X[i][j]/X[j][j];Y[i]+=Y[j]*tmp;for(k=j;k<=m;k++)X[i][k]+=X[j][k]*tmp;}}a[m]=Y[m]/X[m][m];for(i=m-1;i>=0;i--){a[i]=Y[i];for(j=i+1;j<=m;j++)a[i]-=X[i][j]*a[j];a[i]/=X[i][i];}printf("\n 所求的二次多项式为:\n");printf("P(x)=%f",a[0]);for(i=1;i<=m;i++)printf("+(%f)*x^%d",a[i],i);}运行结果:输入拟合多项式的次数:5输入给定点的个数n及坐标(x,y):31,25,34,2所求的二次多项式为:P(x)=1.980417+(0.282759)*x^1+(-0.299937)*x^2+(0.022071)*x^3+(0.016624)*x^4+(-0.0 01934)*x^5Press any key to continue总结:拉格朗日计算公式中,只需要知道各个点即可4:第五章(1)曲线拟合:#include<stdio.h>#include<math.h>#define MAX 100void main(){ int i,j,k,m,n,N,mi;float tmp,mx;float X[MAX][MAX],Y[MAX],x[MAX],y[MAX],a[MAX];printf("\n 输入拟合多项式的次数:\n");scanf("%d",&m);printf("\n 输入给定点的个数n及坐标(x,y):\n");scanf("%d",&N);printf("\n");for(i=0;i<N;i++)scanf("%f,%f",&x[i],&y[i]);for(i=0;i<=m;i++){for(j=i;j<=m;j++){tmp=0;for(k=0;k<N;k++)tmp=tmp+pow(x[k],(i+j));X[i][j]=tmp;}}for(i=0;i<=m;i++){tmp=0;for(k=0;k<N;k++)tmp=tmp+y[k]*pow(x[k],i);Y[i]=tmp;}for(j=0;j<m;j++){for(i=j+1,mi=j,mx=fabs(X[j][j]);i<=m;i++)if(fabs(X[i][j])>mx){mi=i;mx=fabs(X[i][j]);}if(j<mi){tmp=Y[j];Y[j]=Y[mi];Y[mi]=tmp;for(k=j;k<=m;k++){tmp=X[j][k];X[j][k]=X[mi][k];X[mi][k]=tmp;}}for(i=j+1;i<=m;i++){tmp=-X[i][j]/X[j][j];Y[i]+=Y[j]*tmp;for(k=j;k<=m;k++)X[i][k]+=X[j][k]*tmp;}}a[m]=Y[m]/X[m][m];for(i=m-1;i>=0;i--){a[i]=Y[i];for(j=i+1;j<=m;j++)a[i]-=X[i][j]*a[j];}printf("\n 所求的二次多项式为:\n");printf("P(x)=%f",a[0]);for(i=1;i<=m;i++)printf("+(%f)*x^%d",a[i],i);}输入拟合多项式的次数:2输入给定点的个数n及坐标(x,y):51,25,32,48,3-1,5所求的二次多项式为:P(x)=3.952280+(-0.506315)*x^1+(0.050877)*x^2Press any key to continue 5:第六章(1)辛普生求积方法:#include <stdio.h>#define N 16 /* 等分数*/float func(float x){ float y;y=4.0/(1+x*x);return(y);}void gedianzhi(float y[],float a,float h){ int i;for(i=0;i<=N;i++)y[i]=func(a+i*h);}float simpson(float y[],float h){ float s,s1,s2;int i;s1=y[1];s2=0.0;for(i=2;i<=N-2;i=i+2){ s1+=y[i+1]; /* 计算奇数项的函数值之和*/s2+=y[i]; /* 计算偶数项的函数值之和 */}s=y[0]+y[N]+4.0*s1+2.0*s2;return(s*h/3.0);}main(){ float a,b,h,s,f[N+1];scanf("%f,%f",&a,&b);h=(b-a)/( float)N;gedianzhi(f,a,h);s=simpson(f,h);printf("s=%f\n",s);}运行结果:1,3s=1.854590Press any key to continue总结:辛普生算法是一种积分方法,采用三点法插值,如果h 较小的话,误差很小,因为它的插值余项)(2180)()4(4ξf h a b f R ⎪⎭⎫ ⎝⎛--=,辛普生算法比较精确,程序关键是对所取的点的取和,注意 6:第七章(1)改进欧拉法求解常微分方程的初值问题#include <stdio.h>float func(float x,float y){ return(y-x);}float euler(float x0,float xn,float y0,int N){ float x,y,yp,yc,h;int i;x=x0;y=y0;h=(xn-x0)/(float)N;for(i=1;i<=N;i++){ yp=y+h*func(x,y);x=x0+i*h;yc=y+h*func(x,yp);y=(yp+yc)/2.0;}return(y);}main(){ float x0,xn,y0,e;int n;printf("\ninput n:\n ");scanf("%d",&n);printf("input x0,xn:\n ");scanf("%f,%f",&x0,&xn);printf("input y0:\n ");scanf("%f",&y0);e=euler(x0,xn,y0,n);printf("y(%f)=%6.4f",y0,e);}input n:20input x0,xn:1,6input y0:2y(2.000000)=7.0000Press any key to continue (2)四阶龙格—库塔法#include <stdio.h>float func(float x,float y){ return(x-y);}float runge_kutta(float x0,float xn,float y0,int N) { float x,y,y1,y2,h,xh;float d1,d2,d3,d4;int i;x=x0;y=y0;h=(xn-x0)/(float)N;for(i=1;i<=N;i++){ xh=x+h/2;d1=func(x,y);d2=func(xh,y+h*d1/2.0);d3=func(xh,y+h*d2/2.0);d4=func(xh,y+h*d3);y=y+h*(d1+2*d2+2*d3+d4)/6.0;x=x0+i*h; }return(y);}main(){ float x0,xn,y0,e;int N;printf("\ninput n:\n ");scanf("%d",&N);printf("input x0,xn:\n ");scanf("%f,%f",&x0,&xn);printf("input y0:\n ");scanf("%f",&y0);e=runge_kutta(x0,xn,y0,N);printf("y(%f)=%8.6f",y0,e);}input n:10input x0,xn:1,2input y0:5y(5.000000)=2.833863Press any key to continue 2-2 Gauss-Seidel方法#include <math.h>#include<stdio.h>int gsdl(a,b,n,x,eps)int n;double a[],b[],x[],eps;{int i,j,u,v;double p,t,s,q;for(i=0;i<=n-1;i++){u=i*n+i;x[i]=0.0;for(j=0;j<=n-1;j++){v=i*n+j;p=p+fabs(a[v]);}}if(p>=fabs(a[u])){printf(“fail\n”);return(-1);}}p=eps+1.0;while(p>=eps){for(i=0;i<=n-1;i++){t=x[i];s=0.0;for(j=0;j<=n-1;j++){if(j!=i){s=s+a[i*n+j]*x[j];}x[i]=(b[i]-s)/a[i*n+j];q=fabs(x[i]-t)/(1.0+fabs(x[i]));{p=q;}}}return(1);}main(){int i;double eps;static double a[4][4]={{7,2,1,-2}{9,15,3,-2}{-2,-2,11,5}{1,3,2,13}}; static double x[5],b[4]={4,7,-1,0};eps=0.000001;if(dsdl(a,b,4,x,eps)>0){for(i=0;i<=3;i++){printf(“x(%d)=%13.7e\n”,i,x[i]);}}。