C经典编程练习题.pdf
C+经典编程例题(1)1、 (已 验 证 !)计 算 铁 路 运 费 。 已 知 从 甲 地 到 乙 地 , 每 张 票 托 运 行 李 不 超 过 50公 斤 时 , 按 每公 斤 0.13 元 , 超 过 50 公 斤 , 超 过 部 分 按 每 公 斤 0.2元 计 算 。 输 入 行 李 重 量 w,计 算 运 费 y.#include using namespace std;void main()float money=0,weight;cout<>weight; if (weight<0)cout<<” 数 据 错 误 !” <<endl;if (weight 50)money = 50 * 0.13 + (weight - 50) * 0.2;cout<<"n总 费 用 是 :"<<money<<endl;2、 (已 验 证 !)根 据 一 元 二 次 方 程 a*x*x+b*x+c=0求 解 方 程 。 输 入 a、 b、 c 的 值 , 求 x1、 x2 的 实 根 .#include #include using namespace std;void main() double a,b,c,p,x1,x2,D;cout<<"请 输 入 3 个 数 : "<<endl;cout<>a; cout<>b;cout<>c;cout<<"方 程 为 : "<<a<<"x2+"<<b<<"x+"<<c<<"=0"<<endl; D=b*b-4*a*c;if (D<0) cout<<"方 程 无 解 !"<<endl;if (D=0)p=-b/(2*a);x1=p+sqrt(D)/(2*a);cout<<"方 程 有 两 个 相 同 的 实 根 。 "<<endl;cout<<"x1=x2="<<x1<0)p=-b/(2*a);x1=p+sqrt(D)/(2*a);x2=p-sqrt(D)/(2*a);cout<<"方 程 有 两 个 不 同 的 实 根 。 "<<endl;cout<<"x1="<<x1<<endl<<"x2="<<x2<<endl; 3、 (已 验 证 !)分 别 使 用 for和 while 求 n!.注 解 n!=1*2*3*.*n,n由 键 盘 输 入 。For:#include using namespace std;void main() int i,n,s;s=1;cout<>n; for (i=1;i<=n;i+)s=i*s;cout<<s<<endl; While:#include using namespace std;void main() int i,n,s;s=1;i=1;cout<>n; while(i<=n)s=i*s;+i;cout<<s<<endl;4、 (已 验 证 !)百 钱 买 百 鸡 。 1只 公 鸡 5元 , 1 只 母 鸡 3 元 , 3 只 小 鸡 1 元 , 现 有 100 元 钱 要买 100只 鸡 , 有 什 么 解 法 。 分 别 使 用 三 重 循 环 和 二 重 循 环 来 解 . 鸡 翁 , 鸡 婆 , 鸡 雏 各 : 12、 4、 84只鸡 翁 , 鸡 婆 , 鸡 雏 各 : 8、 11、 81只鸡 翁 , 鸡 婆 , 鸡 雏 各 : 4、 18、 78只鸡 翁 , 鸡 婆 , 鸡 雏 各 : 0、 25、 75只(1).三 重 循 环 :#include using namespace std;void main() const int cock=20,hen=33,chicken=100; int c,h,ck;for(c=0;c<=cock;c+)for(h=0;h<=hen;h+)for(ck=0;ck<=chicken;ck+)if(c+h+ck)=100) (2).两 重 循 环 :#includeusing namespace std; void main() int c,h,ck;for(h=0;h<33;h+)for(ck=0;ck<100;ck+) c=100-h-ck;if(5*c+h*3+ck/3=100 5、 (已 验 证 !)求 所 有 水 仙 花 数 。 所 谓 水 仙 花 数 是 指 三 位 数 , 其 各 位 数 立 方 和 等 于 该 数 。 如153=1*1*1+5*5*5+3*3*3. (153 370 371 407)#include using namespace std;void main() int a,b,c,d;for (d=100;d<1000;d+) a=d/100; /分 解 出 百 位 b=d/10%10;/分 解 出 十 位c=d%10;/分 解 出 个 位if (d=a*a*a+b*b*b+c*c*c)cout<<d<<" " cout<<endl;6、 (已 验 证 !)解 数 学 灯 迷 。 有 以 下 算 式 ABCD-CDC=ABC, 其 中 ABCD均 为 一 位 非 负 整 数 ,求 ABCD的 值 。 (1098)#include using namespace std;void main() int a,b,c,d,e;for (e=1000;e<10000;e+) a=e/1000;b=e/100%10;c=e/10%10;d=e%10;if (e-(c*100+d*10+c)=a*100+b*10+c) cout<<e; cout<<endl;7、 (已 验 证 !)从 键 盘 输 入 一 个 整 数 , 判 断 此 数 是 否 为 回 文 数 。 所 谓 回 文 数 就 是 从 左 到 右 读 与从 右 到 左 读 是 一 样 的 数 。 如 12321、 7887等 。#include using namespace std; bool ifn(int x) int m=0,n;n=x;while(n) m=m*10+n%10;n=n/10; if(m=x) return true;if(m!=x) return false;void main( ) int a; cout<>a;if(ifn(a)cout<<a<<"是 回 文 数 !"<<endl;elsecout<<a<<"不 是 回 文 数 !"<<endl;8、 (已 验 证 !)使 用 函 数 计 算 y=2*x+3,输 入 x,求 y 的 值 。#include using namespace std;float y(int x) return 2*x+3;void main() int x;cout<>x; cout<<"Y="<<y(x)<<endl;9、 (已 验 证 !)使 用 递 归 函 数 , 求 99+97+95+.+3+1之 和 。 ( 和 是 2500。 )#include using namespace std;int sum(long n,long m) if(n=m)return(m);else return(m+sum(n,m-2);void main() int n,m;cout<<"输 入 范 围 : (nm):"<<endl;cout<>n;cout<>m;cout<<"从 "<<n<<"到 "<<m<<"的 和 为 :"<<sum(n,m)<<endl;10、 (已 验 证 !)已 知 杨 辉 三 角 11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 1.输 出 前 13行 的 值 .#include using namespace std; void main() int a11,i,j;a1=1;for(i=1;i=2;j-)aj=aj+aj-1;for(j=1;j<=i;j+)cout<<aj<<" "cout<<"n"11、 (已 验 证 !)约 瑟 夫 问 题 : n个 小 孩 围 成 一 圈 做 游 戏 , 给 定 一 个 数 m,现 从 s 个 小 孩 开 始 , 顺 时 计 数 , 每 数 到 m,该 小 孩 出 列 , 然 后 从 下 个 小 孩 重 新 数 数 , 数 到 m时 , 该 小 孩 出 列 , 如 果 反 复 ,直 到 所 以 小 孩 出 列 。 (太 复 杂 不 会 考 的 ! )#includeusing namespace std;int main() int N,M;cout<<"请 输 入 N, M"<>N>>M;int *a=new intN; for(int i=0;i<N;i+)ai=i+1;int countN=0;int countM=0;for(i=0;i+)if(ai%N!=-1) countM+; if(countM=M)cout<<ai%N<<"t"ai%N=-1; countN+;countM=0;if(countN=N)break;delete a;return 0; 字 符 串 编 程 :1、 (已 验 证 !)输 入 一 个 字 符 串 , 反 向 输 出 其 字 符 , 如 输 入 是 "abcdef",则 反 向 输 出 "fedcba".(1)、 利 用 string 流 :#include#include using namespace std; string rstring(string s)if(s.length()=1)return s;elsechar c=ss.length()-1;return c+rstring(s.substr(0,s.length()-1); void main()string str;cout<<"输 入 一 个 字 符 串 :"<>str;cout<<str<<"的 反 向 字 符 串 是 "<<rstring(str)<<endl; (2)、 数 组 倒 序 输 出 (很 简 单 ):#includeusing namespace std;void main()char str180;int l;cout<<"输 入 一 个 字 符 串 :"<>str; l=strlen(str);cout<<str<=0;i-)cout<<stri;cout<<endl;2、 (已 验 证 !)将 输 入 字 符 串 中 所 有 的 C去 掉 , 输 出 其 他 字 符 。#include using namespace std;void main()char str180;int l;cout<<"输 入 一 个 字 符 串 :"<>str;l=strlen(str);cout<<"过 滤 后 为 :"for (int i=0;i<l;i+) if (stri!=c cout<<endl; 3、 (已 验 证 !)输 入 字 符 串 , 判 断 此 字 符 串 是 否 为 回 文 , 如 "abcd",正 数 为 "abcd",反 数 为 "dcba",不 是 回 文 ,而 "aba",正 数 是 "aba",反 数 也 是 "aba",是 回 文 。#include using namespace std;void main( ) char str180,l;int i,t=0;cout<>str; l=strlen(str);for(i=0;i<l/2;i+)if(stri=strl-i-1) t=1;break; if(t=0)cout<<str<<"不 是 回 文 !"<<endl;else cout<<str<<"是 回 文 !"<<endl;