C语言经典小程序100例

lingmulhy

贡献于2015-05-30

字数:0 关键词: C/C++开发

? 【 程序 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; else bonus=bonus10+(i-1000000)*0.01; printf("bonus=%d",bonus); } ============================================================== 【 程序 3】 题 目: 一个 整数 ,它 加上 100 后 是一 个完 全平 方数 ,再 加上 168 又 是一 个完 全平 方数 ,请 问该 数 是多 少? 1.程 序分 析: 在 10万 以内 判断 ,先 将该 数加 上 100 后 再开 方, 再将 该数 加上 268 后 再开 方 ,如 果 开方 后 的 结果 满足 如下 条件 ,即 是结 果。 请看 具体 分析 : 2.程 序源 代码 : #include "math.h" main() { long int i,x,y,z; for (i=1;i<100000;i++) { x=sqrt(i+100); /*x 为 加上 100 后 开方 后的 结果 */ y=sqrt(i+268); /*y 为 再加 上 168 后 开方 后的 结果 */ if(x*x==i+100&&y*y==i+268)/*如 果一 个数 的平 方根 的平 方等 于该 数 ,这 说明 此数 是完 全 平 方数 */ printf("\n%ld\n",i); } } ============================================================== 【 程序 4】 题 目: 输入 某年 某月 某日 ,判 断这 一天 是这 一年 的第 几天 ? 1.程 序分 析 :以3月5日 为例 ,应 该先 把前 两个 月的 加起 来 ,然 后再 加上 5天 即本 年的 第几 天 , 特殊 情 况, 闰年 且输 入月 份大 于 3时 需考 虑多 加一 天。 2.程 序源 代码 : main() { int day,month,year,sum,leap; printf("\nplease input year,month,day\n"); scanf("%d,%d,%d",&year,&month,&day); switch(month)/*先 计算 某月 以前 月份 的总 天数 */ { case 1:sum=0;break; case 2:sum=31;break; case 3:sum=59;break; case 4:sum=90;break; case 5:sum=120;break; case 6:sum=151;break; case 7:sum=181;break; case 8:sum=212;break; case 9:sum=243;break; case 10:sum=273;break; case 11:sum=304;break; case 12:sum=334;break; default:printf("data error");break; } sum=sum+day; /*再 加上 某天 的天 数 */ if(year%400==0||(year%4==0&&year%100!=0))/*判 断是 不是 闰年 */ leap=1; else leap=0; if(leap==1&&month>2)/*如 果是 闰年 且月 份大 于 2,总 天数 应该 加一 天 */ sum++; printf("It is the %dth day.",sum);} ============================================================== 【 程序 5】 题 目: 输入 三个 整数 x,y,z, 请把 这三 个数 由小 到大 输出 。 1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y 则将x与y的 值 进行 交换 , 然 后再 用 x与z进 行比 较 ,如果x>z 则将x与z的 值进 行交 换 ,这 样能 使 x最小。 2.程 序源 代码 : main() { int x,y,z,t; scanf("%d%d%d",&x,&y,&z); if (x>y) {t=x;x=y;y=t;} /*交换x,y 的值*/ if(x>z) {t=z;z=x;x=t;}/*交换x,z 的值*/ if(y>z) {t=y;y=z;z=t;}/*交换z,y 的值*/ printf("small to big: %d %d %d\n",x,y,z); } ============================================================== 【 程序 6】 题 目: 用 *号 输出 字母 C的 图案 。 1.程 序分 析: 可先 用 '*'号 在纸 上写 出字 母 C, 再分 行输 出。 2.程 序源 代码 : #include "stdio.h" main() { printf("Hello C-world!\n"); printf(" ****\n"); printf(" *\n"); printf(" *\n"); printf(" ****\n"); } ============================================================== 【 程序 7】 题 目: 输出 特殊 图案 ,请 在 c环 境中 运行 ,看 一看 , Very Beautiful! 1.程 序分 析: 字符 共有 256 个 。不 同字 符, 图形 不一 样。 2.程 序源 代码 : #include "stdio.h" main() { char a=176,b=219; printf("%c%c%c%c%c\n",b,a,a,a,b); printf("%c%c%c%c%c\n",a,b,a,b,a); printf("%c%c%c%c%c\n",a,a,b,a,a); printf("%c%c%c%c%c\n",a,b,a,b,a); printf("%c%c%c%c%c\n",b,a,a,a,b);} ============================================================== 【 程序 8】 题 目: 输出 9*9 口 诀。 1.程 序分 析: 分行 与列 考虑 ,共 9行9列,i控 制行 , j控 制列 。 2.程 序源 代码 : #include "stdio.h" main() { int i,j,result; printf("\n"); for (i=1;i<10;i++) { for(j=1;j<10;j++) { result=i*j; printf("%d*%d=%-3d",i,j,result);/*-3d 表 示左 对齐 ,占 3位*/ } printf("\n");/*每 一行 后换 行 */ } } ============================================================== 【 程序 9】 题 目: 要求 输出 国际 象棋 棋盘 。 1.程 序分 析: 用 i控 制行 , j来 控制 列, 根据 i+j 的 和的 变化 来控 制输 出黑 方格 ,还 是白 方格 。 2.程 序源 代码 : #include "stdio.h" main() { int i,j; for(i=0;i<8;i++) { for(j=0;j<8;j++) if((i+j)%2==0) printf("%c%c",219,219); else printf(" "); printf("\n"); } } ============================================================== 【 程序 10】 题 目: 打印 楼梯 ,同 时在 楼梯 上方 打印 两个 笑脸 。 1.程 序分 析: 用 i控 制行 , j来 控制 列, j根据i的 变化 来控 制输 出黑 方格 的个 数。 2.程 序源 代码 : #include "stdio.h" main() { int i,j; printf("\1\1\n");/*输 出两 个笑 脸 */ for(i=1;i<11;i++) { for(j=1;j<=i;j++) printf("%c%c",219,219); printf("\n"); } } 【 程序 11】 题 目: 古典 问题 :有 一对 兔子 ,从 出生 后第 3个 月起 每个 月都 生一 对兔 子, 小兔 子长 到第 三个 月 后 每个 月又 生一 对兔 子, 假如 兔子 都不 死, 问每 个月 的兔 子总 数为 多少 ? 1.程 序分 析: 兔 子的 规律 为数 列 1,1,2,3,5,8,13,21.... 2.程 序源 代码 : main() { long f1,f2; int i; f1=f2=1; for(i=1;i<=20;i++) { printf("%12ld %12ld",f1,f2); if(i%2==0) printf("\n");/*控 制输 出, 每行 四个 */ f1=f1+f2; /*前 两个 月加 起来 赋值 给第 三个 月 */ f2=f1+f2; /*前 两个 月加 起来 赋值 给第 三个 月 */ } } ============================================================== 【 程序 12】 题 目: 判断 101-200 之 间有 多少 个素 数, 并输 出所 有素 数。 1.程 序分 析: 判断 素数 的方 法: 用一 个数 分别 去除 2到sqrt(这 个数 ), 如果 能被 整除 , 则 表明 此数 不是 素数 ,反 之是 素数 。 2.程 序源 代码 : #include "math.h" main() { int m,i,k,h=0,leap=1; printf("\n"); for(m=101;m<=200;m++) { k=sqrt(m+1); for(i=2;i<=k;i++) if(m%i==0) {leap=0;break;} if(leap) {printf("%-4d",m);h++; if(h%10==0) printf("\n"); } leap=1; } printf("\nThe total is %d",h); } ============================================================== 【 程序 13】 题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该 数 本 身。 例如 : 153 是 一个 “水 仙花 数 ”, 因为 153=1 的 三次 方+ 5的 三次 方+ 3的 三次 方 。 1.程 序分 析: 利用 for 循 环控 制 100-999 个 数, 每个 数分 解出 个位 ,十 位, 百位 。 2.程 序源 代码 : main() { int i,j,k,n; printf("'water flower'number is:"); for(n=100;n<1000;n++) { i=n/100;/*分 解出 百位 */ j=n/10%10;/*分 解出 十位 */ k=n%10;/*分 解出 个位 */ if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) { printf("%-5d",n); } } printf("\n"); } ============================================================== 【 程序 14】 题 目: 将一 个正 整数 分解 质因 数。 例如 :输 入 90,打 印出 90=2*3*3*5。 程 序分 析: 对 n进 行分 解质 因数 ,应 先找 到一 个最 小的 质数 k, 然后 按下 述步 骤完 成: (1)如 果这 个质 数恰 等于 n, 则说 明分 解质 因数 的过 程已 经结 束, 打印 出即 可。 (2)如果n<>k,但n能被k整 除, 则应 打印 出 k的 值, 并用 n除以k的商,作 为新 的正 整数 你 n, 重 复执 行第 一步 。 (3)如果n不 能被 k整 除, 则用 k+1 作为k的值,重 复执 行第 一步 。 2.程 序源 代码 : /* zheng int is divided yinshu*/ main() { int n,i; printf("\nplease input a number:\n"); scanf("%d",&n); printf("%d=",n); for(i=2;i<=n;i++) { while(n!=i) { if(n%i==0) { printf("%d*",i); n=n/i; } else break; } } printf("%d",n);} ============================================================== 【 程序 15】 题目:利 用条 件运 算符 的嵌 套来 完成 此题 :学 习成 绩 >=90 分 的同 学用 A表示,60-89 分 之间 的 用B表 示, 60分 以下 的用 C表 示。 1.程 序分 析: (a>b)?a:b 这 是条 件运 算符 的基 本例 子。 2.程 序源 代码 : main() { int score; char grade; printf("please input a score\n"); scanf("%d",&score); grade=score>=90?'A':(score>=60?'B':'C'); printf("%d belongs to %c",score,grade); } ============================================================== 【 程序 16】 题 目: 输入 两个 正整 数 m和n, 求其 最大 公约 数和 最小 公倍 数。 1.程 序分 析: 利用 辗除 法。 2.程 序源 代码 : main() { int a,b,num1,num2,temp; printf("please input two numbers:\n"); scanf("%d,%d",&num1,&num2); if(num1 { temp=num1; num1=num2; num2=temp; } a=num1;b=num2; while(b!=0)/*利 用辗 除法 ,直 到 b为0为止*/ { temp=a%b; a=b; b=temp; } printf("gongyueshu:%d\n",a); printf("gongbeishu:%d\n",num1*num2/a); } ============================================================== 【 程序 17】 题 目: 输入 一行 字符 ,分 别统 计出 其中 英文 字母 、空 格、 数字 和其 它字 符的 个数 。 1.程 序分 析: 利用 while 语句,条 件为 输入 的字 符不 为 '\n'. 2.程 序源 代码 : #include "stdio.h" main() {char c; int letters=0,space=0,digit=0,others=0; printf("please input some characters\n"); while((c=getchar())!='\n') { if(c>='a'&&c<='z'||c>='A'&&c<='Z') letters++; else if(c==' ') space++; else if(c>='0'&&c<='9') digit++; else others++; } printf("all in all:char=%d space=%d digit=%d others=%d\n",letters, space,digit,others); } ============================================================== 【 程序 18】 题 目: 求 s=a+aa+aaa+aaaa+aa...a 的 值, 其中 a是 一个 数字 。例 如 2+22+222+2222+22222(此时 共有5个 数相 加 ), 几个 数相 加有 键盘 控制 。 1.程 序分 析: 关键 是计 算出 每一 项的 值。 2.程 序源 代码 : main() { int a,n,count=1; long int sn=0,tn=0; printf("please input a and n\n"); scanf("%d,%d",&a,&n); printf("a=%d,n=%d\n",a,n); while(count<=n) { tn=tn+a; sn=sn+tn; a=a*10; ++count; } printf("a+aa+...=%ld\n",sn); } ============================================================== 【 程序 19】 题 目: 一个 数如 果恰 好等 于它 的因 子之 和, 这个 数就 称为 “完数”。 例如 6=1+2+3.编程 找出1000 以 内的 所有 完数 。 1. 程 序分 析: 请参 照程 序 <--上 页程 序 14. 2.程 序源 代码 : main() { static int k[10]; int i,j,n,s; for(j=2;j<1000;j++) { n=-1; s=j; for(i=1;i { if((j%i)==0) { n++; s=s-i; k[n]=i; } } if(s==0) { printf("%d is a wanshu",j); for(i=0;i printf("%d,",k[i]); printf("%d\n",k[n]); } } } ============================================================== 【 程序 20】 题 目: 一球 从 100 米 高度 自由 落下 ,每 次落 地后 反跳 回原 高度 的一 半; 再落 下, 求它 在 第10次 落地 时, 共经 过多 少米 ?第 10次 反弹 多高 ? 1.程 序分 析: 见下 面注 释 2.程 序源 代码 : main() { float sn=100.0,hn=sn/2; int n; for(n=2;n<=10;n++) { sn=sn+2*hn;/*第n次 落地 时共 经过 的米 数 */ hn=hn/2; /*第n次 反跳 高度 */ } printf("the total of road is %f\n",sn); printf("the tenth is %f meter\n",hn); } 【 程序 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】 题 目: 打印 出如 下图 案( 菱形 ) * *** ****** ******** ****** *** * 1.程 序分 析: 先把 图形 分成 两部 分来 看待 ,前 四行 一个 规律 ,后 三行 一个 规律 ,利 用双 重 for 循 环, 第一 层控 制行 ,第 二层 控制 列。 2.程 序源 代码 : main() { int i,j,k; for(i=0;i<=3;i++) { for(j=0;j<=2-i;j++) printf(" "); for(k=0;k<=2*i;k++) printf("*"); printf("\n"); } for(i=0;i<=2;i++) { for(j=0;j<=i;j++) printf(" "); for(k=0;k<=4-2*i;k++) printf("*"); printf("\n"); } } ============================================================== 【 程序 24】 题 目: 有一 分数 序列 : 2/1,3/2,5/3,8/5,13/8,21/13...求 出这 个数 列的 前 20项 之和 。 1.程 序分 析: 请抓 住分 子与 分母 的变 化规 律。 2.程 序源 代码 : main() { int n,t,number=20; float a=2,b=1,s=0; for(n=1;n<=number;n++) { s=s+a/b; t=a;a=a+b;b=t;/*这 部分 是程 序的 关键 ,请 读者 猜猜 t的 作用 */ } printf("sum is %9.6f\n",s); } ============================================================== 【 程序 25】 题 目: 求 1+2!+3!+...+20!的和 1.程 序分 析: 此程 序只 是把 累加 变成 了累 乘。 2.程 序源 代码 : main() { float n,s=0,t=1; for(n=1;n<=20;n++) { t*=n; s+=t; } printf("1+2!+3!...+20!=%e\n",s); } ============================================================== 【 程序 26】 题 目: 利用 递归 方法 求 5!。 1.程 序分 析: 递归 公式 : fn=fn_1*4! 2.程 序源 代码 : #include "stdio.h" main() { int i; int fact(); for(i=0;i<5;i++) printf("\40:%d!=%d\n",i,fact(i)); } int fact(j) int j; { int sum; if(j==0) sum=1; else sum=j*fact(j-1); return sum; } ============================================================== 【 程序 27】 题 目: 利用 递归 函数 调用 方式 ,将 所输 入的 5个 字符 ,以 相反 顺序 打印 出来 。 1.程 序分 析: 2.程 序源 代码 : #include "stdio.h" main() { int i=5; void palin(int n); printf("\40:"); palin(i); printf("\n"); } void palin(n) int n; { char next; if(n<=1) { next=getchar(); printf("\n\0:"); putchar(next); } else { next=getchar(); palin(n-1); putchar(next); } } ============================================================== 【 程序 28】 题 目: 有 5个 人坐 在一 起, 问第 五个 人多 少岁 ?他 说比 第 4个 人大 2岁 。问 第 4个 人岁 数, 他 说 比第 3个 人大 2岁。问 第三 个人 ,又 说比 第 2人 大两 岁 。问第2个人,说 比第 一个 人大 两岁 。 最后 问 第一 个人 ,他 说是 10岁 。请 问第 五个 人多 大? 1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知 道 第 四人 的岁 数, 依次 类推 ,推 到第 一人 ( 10岁), 再往 回推 。 2.程 序源 代码 : age(n) int n; { int c; if(n==1) c=10; else c=age(n-1)+2; return?; } main() { printf("%d",age(5)); } ============================================================== 【 程序 29】 题 目: 给一 个不 多于 5位 的正 整数 ,要 求: 一、 求它 是几 位数 ,二 、逆 序打 印出 各位 数字 。 1. 程 序分 析 :学 会分 解出 每一 位数 ,如 下解 释 :(这 里是 一种 简单 的算 法 ,师 专数 002 班 赵鑫 提 供) 2.程 序源 代码 : main( ) { long a,b,c,d,e,x; scanf("%ld",&x); a=x/10000;/*分 解出 万位 */ b=x%10000/1000;/*分 解出 千位 */ c=x%1000/100;/*分 解出 百位 */ d=x%100/10;/*分 解出 十位 */ e=x%10;/*分 解出 个位 */ if (a!=0) printf("there are 5, %ld %ld %ld %ld %ld\n",e,d,c,b,a); else if (b!=0) printf("there are 4, %ld %ld %ld %ld\n",e,d,c,b); else if (c!=0) printf(" there are 3,%ld %ld %ld\n",e,d,c); else if (d!=0) printf("there are 2, %ld %ld\n",e,d); else if (e!=0) printf(" there are 1,%ld\n",e); } ============================================================== 【 程序 30】 题 目: 一个 5位 数, 判断 它是 不是 回文 数。 即 12321 是 回文 数, 个位 与万 位相 同, 十位 与千 位 相 同。 1.程 序分 析: 同 29例 2.程 序源 代码 : main( ) { long ge,shi,qian,wan,x; scanf("%ld",&x); wan=x/10000; qian=x%10000/1000; shi=x%100/10; ge=x%10; if (ge==wan&&shi==qian)/*个 位等 于万 位并 且十 位等 于千 位 */ printf("this number is a huiwen\n"); else printf("this number is not a huiwen\n"); } 程序31】 题 目: 请输 入星 期几 的第 一个 字母 来判 断一 下是 星期 几, 如果 第一 个字 母一 样, 则继 续 判 断第 二个 字母 。 1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if 语句判断第二 个 字母 。 2.程 序源 代码 : #include void main() { char letter; printf("please input the first letter of someday\n"); while ((letter=getch())!='Y')/*当 所按 字母 为 Y时 才结 束 */ { switch (letter) {case 'S':printf("please input second letter\n"); if((letter=getch())=='a') printf("saturday\n"); else if ((letter=getch())=='u') printf("sunday\n"); else printf("data error\n"); break; case 'F':printf("friday\n");break; case 'M':printf("monday\n");break; case 'T':printf("please input second letter\n"); if((letter=getch())=='u') printf("tuesday\n"); else if ((letter=getch())=='h') printf("thursday\n"); else printf("data error\n"); break; case 'W':printf("wednesday\n");break; default: printf("data error\n"); } } } ============================================================== 【 程序 32】 题 目: Press any key to change color, do you want to try it. Please hurry up! 1.程 序分 析: 2.程 序源 代码 : #include void main(void) { int color; for (color = 0; color < 8; color++) { textbackground(color);/*设 置文 本的 背景 颜色 */ cprintf("This is color %d\r\n", color); cprintf("Press any key to continue\r\n"); getch();/*输 入字 符看 不见 */ } } ============================================================== 【 程序 33】 题 目: 学习 gotoxy()与clrscr()函数 1.程 序分 析: 2.程 序源 代码 : #include void main(void) { clrscr();/*清 屏函 数 */ textbackground(2); gotoxy(1, 5);/*定 位函 数 */ cprintf("Output at row 5 column 1\n"); textbackground(3); gotoxy(20, 10); cprintf("Output at row 10 column 20\n"); } ============================================================== 【 程序 34】 题 目: 练习 函数 调用 1. 程 序分 析: 2.程 序源 代码 : #include void hello_world(void) { printf("Hello, world!\n"); } void three_hellos(void) { int counter; for (counter = 1; counter <= 3; counter++) hello_world();/*调 用此 函数 */ } void main(void) { three_hellos();/*调 用此 函数 */ } ============================================================== 【 程序 35】 题 目: 文本 颜色 设置 1.程 序分 析: 2.程 序源 代码 : #include void main(void) { int color; for (color = 1; color < 16; color++) { textcolor(color);/*设 置文 本颜 色 */ cprintf("This is color %d\r\n", color); } textcolor(128 + 15); cprintf("This is blinking\r\n"); } ============================================================== 【 程序 36】 题 目: 求 100 之 内的 素数 1.程 序分 析: 2.程 序源 代码 : #include #include "math.h" #define N 101 main() { int i,j,line,a[N]; for(i=2;ia[j]) min=j; tem=a[i]; a[i]=a[min]; a[min]=tem; } /*output data*/ printf("After sorted \n"); for(i=0;iend) a[10]=number; else {for(i=0;i<10;i++) { if(a[i]>number) {temp1=a[i]; a[i]=number; for(j=i+1;j<11;j++) {temp2=a[j]; a[j]=temp1; temp1=temp2; } break; } } } for(i=0;i<11;i++) printf("%6d",a[i]); } ============================================================== 【 程序 40】 题 目: 将一 个数 组逆 序输 出。 1.程 序分 析: 用第 一个 与最 后一 个交 换。 2.程 序源 代码 : #define N 5 main() { int a[N]={9,6,5,4,1},i,temp; printf("\n original array:\n"); for(i=0;i>4; c=~(~0<<4); d=b&c; printf("%o\n%o\n",a,d); } ============================================================== 【 程序 55】 题 目: 学习 使用 按位 取反 ~。 1.程 序分 析: ~0=1; ~1=0; 2.程 序源 代码 : #include "stdio.h" main() { int a,b; a=234; b=~a; printf("\40: The a's 1 complement(decimal) is %d \n",b); a=~a; printf("\40: The a's 1 complement(hexidecimal) is %x \n",a); } ============================================================== 【 程序 56】 题 目: 画图 ,学 用 circle 画 圆形 。 1.程 序分 析: 2.程 序源 代码 : /*circle*/ #include "graphics.h" main() {int driver,mode,i; float j=1,k=1; driver=VGA;mode=VGAHI; initgraph(&driver,&mode,""); setbkcolor(YELLOW); for(i=0;i<=25;i++) { setcolor(8); circle(310,250,k); k=k+j; j=j+0.3; } } ============================================================== 【 程序 57】 题 目: 画图 ,学 用 line 画 直线 。 1.程 序分 析: 2.程 序源 代码 : #include "graphics.h" main() {int driver,mode,i; float x0,y0,y1,x1; float j=12,k; driver=VGA;mode=VGAHI; initgraph(&driver,&mode,""); setbkcolor(GREEN); x0=263;y0=263;y1=275;x1=275; for(i=0;i<=18;i++) { setcolor(5); line(x0,y0,x0,y1); x0=x0-5; y0=y0-5; x1=x1+5; y1=y1+5; j=j+10; } x0=263;y1=275;y0=263; for(i=0;i<=20;i++) { setcolor(5); line(x0,y0,x0,y1); x0=x0+5; y0=y0+5; y1=y1-5; } } ============================================================== 【 程序 58】 题 目: 画图 ,学 用 rectangle 画 方形 。 1.程 序分 析: 利用 for 循 环控 制 100-999 个 数, 每个 数分 解出 个位 ,十 位, 百位 。 2.程 序源 代码 : #include "graphics.h" main() {int x0,y0,y1,x1,driver,mode,i; driver=VGA;mode=VGAHI; initgraph(&driver,&mode,""); setbkcolor(YELLOW); x0=263;y0=263;y1=275;x1=275; for(i=0;i<=18;i++) { setcolor(1); rectangle(x0,y0,x1,y1); x0=x0-5; y0=y0-5; x1=x1+5; y1=y1+5; } settextstyle(DEFAULT_FONT,HORIZ_DIR,2); outtextxy(150,40,"How beautiful it is!"); line(130,60,480,60); setcolor(2); circle(269,269,137); } ============================================================== 【 程序 59】 题 目: 画图 ,综 合例 子。 1.程 序分 析: 2.程 序源 代码 : # define PAI 3.1415926 # define B 0.809 # include "graphics.h" #include "math.h" main() { int i,j,k,x0,y0,x,y,driver,mode; float a; driver=CGA;mode=CGAC0; initgraph(&driver,&mode,""); setcolor(3); setbkcolor(GREEN); x0=150;y0=100; circle(x0,y0,10); circle(x0,y0,20); circle(x0,y0,50); for(i=0;i<16;i++) { a=(2*PAI/16)*i; x=ceil(x0+48*cos(a)); y=ceil(y0+48*sin(a)*B); setcolor(2); line(x0,y0,x,y);} setcolor(3);circle(x0,y0,60); /* Make 0 time normal size letters */ settextstyle(DEFAULT_FONT,HORIZ_DIR,0); outtextxy(10,170,"press a key"); getch(); setfillstyle(HATCH_FILL,YELLOW); floodfill(202,100,WHITE); getch(); for(k=0;k<=500;k++) { setcolor(3); for(i=0;i<=16;i++) { a=(2*PAI/16)*i+(2*PAI/180)*k; x=ceil(x0+48*cos(a)); y=ceil(y0+48+sin(a)*B); setcolor(2); line(x0,y0,x,y); } for(j=1;j<=50;j++) { a=(2*PAI/16)*i+(2*PAI/180)*k-1; x=ceil(x0+48*cos(a)); y=ceil(y0+48*sin(a)*B); line(x0,y0,x,y); } } restorecrtmode(); } ============================================================== 【 程序 60】 题 目: 画图 ,综 合例 子。 1.程 序分 析: 2.程 序源 代码 : #include "graphics.h" #define LEFT 0 #define TOP 0 #define RIGHT 639 #define BOTTOM 479 #define LINES 400 #define MAXCOLOR 15 main() { int driver,mode,error; int x1,y1; int x2,y2; int dx1,dy1,dx2,dy2,i=1; int count=0; int color=0; driver=VGA; mode=VGAHI; initgraph(&driver,&mode,""); x1=x2=y1=y2=10; dx1=dy1=2; dx2=dy2=3; while(!kbhit()) { line(x1,y1,x2,y2); x1+=dx1;y1+=dy1; x2+=dx2;y2+dy2; if(x1<=LEFT||x1>=RIGHT) dx1=-dx1; if(y1<=TOP||y1>=BOTTOM) dy1=-dy1; if(x2<=LEFT||x2>=RIGHT) dx2=-dx2; if(y2<=TOP||y2>=BOTTOM) dy2=-dy2; if(++count>LINES) { setcolor(color); color=(color>=MAXCOLOR)?0:++color; } } closegraph(); } 【 程序 61】 题 目: 打印 出杨 辉三 角形 (要 求打 印出 10行 如下 图) 1.程 序分 析: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 2.程 序源 代码 : main() {int i,j; int a[10][10]; printf("\n"); for(i=0;i<10;i++) {a[i][0]=1; a[i][i]=1;} for(i=2;i<10;i++) for(j=1;jn2) swap(pointer1,pointer2); if(n1>n3) swap(pointer1,pointer3); if(n2>n3) swap(pointer2,pointer3); printf("the sorted numbers are:%d,%d,%d\n",n1,n2,n3); } swap(p1,p2) int *p1,*p2; {int p; p=*p1;*p1=*p2;*p2=p; } ============================================================== 【 程序 67】 题 目: 输入 数组 ,最 大的 与第 一个 元素 交换 ,最 小的 与最 后一 个元 素交 换, 输出 数组 。 1.程 序分 析: 谭浩 强的 书中 答案 有问 题。 2.程 序源 代码 : main() { int number[10]; input(number); max_min(number); output(number); } input(number) int number[10]; {int i; for(i=0;i<9;i++) scanf("%d,",&number[i]); scanf("%d",&number[9]); } max_min(array) int array[10]; {int *max,*min,k,l; int *p,*arr_end; arr_end=array+10; max=min=array; for(p=array+1;p*max) max=p; else if(*p<*min) min=p; k=*max; l=*min; *p=array[0];array[0]=l;l=*p; *p=array[9];array[9]=k;k=*p; return; } output(array) int array[10]; { int *p; for(p=array;parray;p--) *p=*(p-1); *array=array_end; m--; if(m>0) move(array,n,m); } ============================================================== 【 程序 69】 题目:有n个 人围 成一 圈 ,顺 序排 号 。从 第一 个人 开始 报数 (从1到3报数),凡 报到 3的 人退 出 圈 子, 问最 后留 下的 是原 来第 几号 的那 位。 1. 程 序分 析: 2.程 序源 代码 : #define nmax 50 main() { int i,k,m,n,num[nmax],*p; printf("please input the total of numbers:"); scanf("%d",&n); p=num; for(i=0;i\n"); for(i=0;i<=4;i++) { scanf("%d",&num); ptr->data=num; ptr->next=(link)malloc(sizeof(node)); if(i==4) ptr->next=NULL; else ptr=ptr->next; } ptr=head; while(ptr!=NULL) { printf("The value is ==>%d\n",ptr->data); ptr=ptr->next; } } ============================================================== 【 程序 73】 题 目: 反向 输出 一个 链表 。 1.程 序分 析: 2.程 序源 代码 : /*reverse output a list*/ #include "stdlib.h" #include "stdio.h" struct list { int data; struct list *next; }; typedef struct list node; typedef node *link; void main() { link ptr,head,tail; int num,i; tail=(link)malloc(sizeof(node)); tail->next=NULL; ptr=tail; printf("\nplease input 5 data==>\n"); for(i=0;i<=4;i++) { scanf("%d",&num); ptr->data=num; head=(link)malloc(sizeof(node)); head->next=ptr; ptr=head; } ptr=ptr->next; while(ptr!=NULL) { printf("The value is ==>%d\n",ptr->data); ptr=ptr->next; }} ============================================================== 【 程序 74】 题 目: 连接 两个 链表 。 1.程 序分 析: 2.程 序源 代码 : #include "stdlib.h" #include "stdio.h" struct list { int data; struct list *next; }; typedef struct list node; typedef node *link; link delete_node(link pointer,link tmp) {if (tmp==NULL) /*delete first node*/ return pointer->next; else { if(tmp->next->next==NULL)/*delete last node*/ tmp->next=NULL; else /*delete the other node*/ tmp->next=tmp->next->next; return pointer; } } void selection_sort(link pointer,int num) { link tmp,btmp; int i,min; for(i=0;idata; btmp=NULL; while(tmp->next) { if(min>tmp->next->data) {min=tmp->next->data; btmp=tmp; } tmp=tmp->next; } printf("\40: %d\n",min); pointer=delete_node(pointer,btmp); } } link create_list(int array[],int num) { link tmp1,tmp2,pointer; int i; pointer=(link)malloc(sizeof(node)); pointer->data=array[0]; tmp1=pointer; for(i=1;inext=NULL; tmp2->data=array[i]; tmp1->next=tmp2; tmp1=tmp1->next; } return pointer; } link concatenate(link pointer1,link pointer2) { link tmp; tmp=pointer1; while(tmp->next) tmp=tmp->next; tmp->next=pointer2; return pointer1; } void main(void) { int arr1[]={3,12,8,9,11}; link ptr; ptr=create_list(arr1,5); selection_sort(ptr,5); } ============================================================== 【 程序 75】 题 目: 放松 一下 ,算 一道 简单 的题 目。 1.程 序分 析: 2.程 序源 代码 : main() { int i,n; for(i=1;i<5;i++) { n=0; if(i!=1) n=n+1; if(i==3) n=n+1; if(i==4) n=n+1; if(i!=4) n=n+1; if(n==3) printf("zhu hao shi de shi:%c",64+i); } } ============================================================== 【 程序 76】 题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用 函数 1/1+1/3+...+1/n(利 用指 针函 数 ) 1.程 序分 析: 2.程 序源 代码 : main() #include "stdio.h" main() { float peven(),podd(),dcall(); float sum; int n; while (1) { scanf("%d",&n); if(n>1) break; } if(n%2==0) { printf("Even="); sum=dcall(peven,n); } else { printf("Odd="); sum=dcall(podd,n); } printf("%f",sum); } float peven(int n) { float s; int i; s=1; for(i=2;i<=n;i+=2) s+=1/(float)i; return(s); } float podd(n) int n; { float s; int i; s=0; for(i=1;i<=n;i+=2) s+=1/(float)i; return(s); } float dcall(fp,n) float (*fp)(); int n; { float s; s=(*fp)(n); return(s); } ============================================================== 【 程序 77】 题 目: 填空 练习 (指 向指 针的 指针 ) 1.程 序分 析: 2.程 序源 代码 : main() { char *s[]={"man","woman","girl","boy","sister"}; char **q; int k; for(k=0;k<5;k++) {;/*这 里填 写什 么语 句 */ printf("%s\n",*q); } } ============================================================== 【 程序 78】 题 目: 找到 年龄 最大 的人 ,并 输出 。请 找出 程序 中有 什么 问题 。 1.程 序分 析: 2.程 序源 代码 : #define N 4 #include "stdio.h" static struct man { char name[20]; int age; } person[N]={"li",18,"wang",19,"zhang",20,"sun",22}; main() {struct man *q,*p; int i,m=0; p=person; for (i=0;iage) q=p++; m=q->age;} printf("%s,%d",(*q).name,(*q).age); } ============================================================== 【 程序 79】 题 目: 字符 串排 序。 1.程 序分 析: 2.程 序源 代码 : main() { char *str1[20],*str2[20],*str3[20]; char swap(); printf("please input three strings\n"); scanf("%s",str1); scanf("%s",str2); scanf("%s",str3); if(strcmp(str1,str2)>0) swap(str1,str2); if(strcmp(str1,str3)>0) swap(str1,str3); if(strcmp(str2,str3)>0) swap(str2,str3); printf("after being sorted\n"); printf("%s\n%s\n%s\n",str1,str2,str3); } char swap(p1,p2) char *p1,*p2; { char *p[20]; strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p); } ============================================================== 【 程序 80】 题 目: 海滩 上有 一堆 桃子 ,五 只猴 子来 分。 第一 只猴 子把 这堆 桃子 凭据 分为 五份 ,多 了一 个, 这只 猴 子把 多的 一个 扔入 海中 ,拿 走了 一份 。第 二只 猴子 把剩 下的 桃子 又平 均分 成五 份, 又 多了 一 个, 它同 样把 多的 一个 扔入 海中 ,拿 走了 一份 ,第 三、 第四 、第 五只 猴子 都是 这样 做 的, 问 海滩 上原 来最 少有 多少 个桃 子? 1.程 序分 析: 2.程 序源 代码 : main() {int i,m,j,k,count; for(i=4;i<10000;i+=4) { count=0; m=i; for(k=0;k<5;k++) { j=i/4*5+1; i=j; if(j%4==0) count++; else break; } i=m; if(count==4) {printf("%d\n",count); break;} } } 【 程序 81】 题目:809*??=800*??+9*??+1 其中??代 表的 两位 数 ,8*??的 结果 为两 位数 ,9*??的 结果 为 3位数。 求??代 表的 两位 数, 及 809*??后 的结 果。 1.程 序分 析: 2.程 序源 代码 : output(long b,long i) { printf("\n%ld/%ld=809*%ld+%ld",b,i,i,b%i); } main() {long int a,b,i; a=809; for(i=10;i<100;i++) {b=i*a+1; if(b>=1000&&b<=10000&&8*i<100&&9*i>=100) output(b,i); } } ============================================================== 【 程序 82】 题 目: 八进 制转 换为 十进 制 1.程 序分 析: 2.程 序源 代码 : main() { char *p,s[6];int n; p=s; gets(p); n=0; while(*(p)!='\0') {n=n*8+*p-'0'; p++;} printf("%d",n); } ============================================================== 【 程序 83】 题 目: 求 0—7所 能组 成的 奇数 个数 。 1.程 序分 析: 2.程 序源 代码 : main() { long sum=4,s=4; int j; for(j=2;j<=8;j++)/*j is place of number*/ { printf("\n%ld",sum); if(j<=2) s*=7; else s*=8; sum+=s;} printf("\nsum=%ld",sum); } ============================================================== 【 程序 84】 题 目: 一个 偶数 总能 表示 为两 个素 数之 和。 1.程 序分 析: 2.程 序源 代码 : #include "stdio.h" #include "math.h" main() { int a,b,c,d; scanf("%d",&a); for(b=3;b<=a/2;b+=2) { for(c=2;c<=sqrt(b);c++) if(b%c==0) break; if(c>sqrt(b)) d=a-b; else break; for(c=2;c<=sqrt(d);c++) if(d%c==0) break; if(c>sqrt(d)) printf("%d=%d+%d\n",a,b,d); } } ============================================================== 【 程序 85】 题 目: 判断 一个 素数 能被 几个 9整除 1.程 序分 析: 2.程 序源 代码 : main() { long int m9=9,sum=9; int zi,n1=1,c9=1; scanf("%d",&zi); while(n1!=0) { if(!(sum%zi)) n1=0; else {m9=m9*10; sum=sum+m9; c9++; } } printf("%ld,can be divided by %d \"9\"",sum,c9); } ============================================================== 【 程序 86】 题 目: 两个 字符 串连 接程 序 1.程 序分 析: 2.程 序源 代码 : #include "stdio.h" main() {char a[]="acegikm"; char b[]="bdfhjlnpq"; char c[80],*p; int i=0,j=0,k=0; while(a[i]!='\0'&&b[j]!='\0') {if (a[i] { c[k]=a[i];i++;} else c[k]=b[j++]; k++; } c[k]='\0'; if(a[i]=='\0') p=b+j; else p=a+i; strcat(c,p); puts?; } ============================================================== 【 程序 87】 题 目: 回答 结果 (结 构体 变量 传递 ) 1.程 序分 析: 2.程 序源 代码 : #include "stdio.h" struct student { int x; char c; } a; main() {a.x=3; a.c='a'; f(a); printf("%d,%c",a.x,a.c); } f(struct student b) { b.x=20; b.c='y'; } ============================================================== 【 程序 88】 题 目: 读取 7个 数( 1—50) 的整 数值 ,每 读取 一个 值, 程序 打印 出该 值个 数的 *。 1.程 序分 析: 2.程 序源 代码 : main() {int i,a,n=1; while(n<=7) { do { scanf("%d",&a); }while(a<1||a>50); for(i=1;i<=a;i++) printf("*"); printf("\n"); n++;} getch(); } ============================================================== 【 程序 89】 题 目: 某个 公司 采用 公用 电话 传递 数据 ,数 据是 四位 的整 数, 在传 递过 程中 是加 密的 ,加 密规 则 如下 : 每 位数 字都 加上 5,然 后用 和除 以 10的 余数 代替 该数 字 ,再 将第 一位 和第 四位 交换 ,第二 位 和第 三位 交换 。 1.程 序分 析: 2.程 序源 代码 : main() {int a,i,aa[4],t; scanf("%d",&a); aa[0]=a%10; aa[1]=a%100/10; aa[2]=a%1000/100; aa[3]=a/1000; for(i=0;i<=3;i++) {aa[i]+=5; aa[i]%=10; } for(i=0;i<=3/2;i++) {t=aa[i]; aa[i]=aa[3-i]; aa[3-i]=t; } for(i=3;i>=0;i--) printf("%d",aa[i]); } ============================================================== 【 程序 90】 题 目: 专升 本一 题, 读结 果。 1.程 序分 析: 2.程 序源 代码 : #include "stdio.h" #define M 5 main() {int a[M]={1,2,3,4,5}; int i,j,t; i=0;j=M-1; while(i {t=*(a+i); *(a+i)=*(a+j); *(a+j)=t; i++;j--; } for(i=0;i printf("%d",*(a+i)); } 【 程序 91】 题 目: 时间 函数 举例 1 1.程 序分 析: 2.程 序源 代码 : #include "stdio.h" #include "time.h" void main() { time_t lt; /*define a longint time varible*/ lt=time(NULL);/*system time and date*/ printf(ctime(<)); /*english format output*/ printf(asctime(localtime(<)));/*tranfer to tm*/ printf(asctime(gmtime(<))); /*tranfer to Greenwich time*/ } ============================================================== 【 程序 92】 题 目: 时间 函数 举例 2 1.程 序分 析: 2.程 序源 代码 : /*calculate time*/ #include "time.h" #include "stdio.h" main() { time_t start,end; int i; start=time(NULL); for(i=0;i<3000;i++) { printf("\1\1\1\1\1\1\1\1\1\1\n");} end=time(NULL); printf("\1: The different is %6.3f\n",difftime(end,start)); } ============================================================== 【 程序 93】 题 目: 时间 函数 举例 3 1.程 序分 析: 2.程 序源 代码 : /*calculate time*/ #include "time.h" #include "stdio.h" main() { clock_t start,end; int i; double var; start=clock(); for(i=0;i<10000;i++) { printf("\1\1\1\1\1\1\1\1\1\1\n");} end=clock(); printf("\1: The different is %6.3f\n",(double)(end-start)); } ============================================================== 【 程序 94】 题 目: 时间 函数 举例 4,一 个猜 数游 戏, 判断 一个 人反 应快 慢 。( 版主 初学 时编 的) 1.程 序分 析: 2.程 序源 代码 : #include "time.h" #include "stdlib.h" #include "stdio.h" main() {char c; clock_t start,end; time_t a,b; double var; int i,guess; srand(time(NULL)); printf("do you want to play it.('y' or 'n') \n"); loop: while((c=getchar())=='y') { i=rand()%100; printf("\nplease input number you guess:\n"); start=clock(); a=time(NULL); scanf("%d",&guess); while(guess!=i) {if(guess>i) {printf("please input a little smaller.\n"); scanf("%d",&guess);} else {printf("please input a little bigger.\n"); scanf("%d",&guess);} } end=clock(); b=time(NULL); printf("\1: It took you %6.3f seconds\n",var=(double)(end-start)/18.2); printf("\1: it took you %6.3f seconds\n\n",difftime(b,a)); if(var<15) printf("\1\1 You are very clever! \1\1\n\n"); else if(var<25) printf("\1\1 you are normal! \1\1\n\n"); else printf("\1\1 you are stupid! \1\1\n\n"); printf("\1\1 Congradulations \1\1\n\n"); printf("The number you guess is %d",i); } printf("\ndo you want to try it again?(\"yy\".or.\"n\")\n"); if((c=getch())=='y') goto loop; } ============================================================== 【 程序 95】 题 目: 家庭 财务 管理 小程 序 1.程 序分 析: 2.程 序源 代码 : /*money management system*/ #include "stdio.h" #include "dos.h" main() { FILE*fp; struct date d; float sum,chm=0.0; int len,i,j=0; int c; char ch[4]="",ch1[16]="",chtime[12]="",chshop[16],chmoney[8]; pp: clrscr(); sum=0.0; gotoxy(1,1);printf("|---------------------------------------------------------------------------|"); gotoxy(1,2);printf("| money management system(C1.0) 2000.03 |"); gotoxy(1,3);printf("|---------------------------------------------------------------------------|"); gotoxy(1,4);printf("| -- money records -- | -- today cost list -- |"); 2005-1-22 11:33 回复 zhlei81 47位 粉丝 18楼 gotoxy(1,5);printf("| ------------------------ |-------------------------------------|"); gotoxy(1,6);printf("| date: -------------- | |"); gotoxy(1,7);printf("| | | | |"); gotoxy(1,8);printf("| -------------- | |"); gotoxy(1,9);printf("| thgs: ------------------ | |"); gotoxy(1,10);printf("| | | | |"); gotoxy(1,11);printf("| ------------------ | |"); gotoxy(1,12);printf("| cost: ---------- | |"); gotoxy(1,13);printf("| | | | |"); gotoxy(1,14);printf("| ---------- | |"); gotoxy(1,15);printf("| | |"); gotoxy(1,16);printf("| | |"); gotoxy(1,17);printf("| | |"); gotoxy(1,18);printf("| | |"); gotoxy(1,19);printf("| | |"); gotoxy(1,20);printf("| | |"); gotoxy(1,21);printf("| | |"); gotoxy(1,22);printf("| | |"); gotoxy(1,23);printf("|---------------------------------------------------------------------------|"); i=0; getdate(&d); sprintf(chtime,"%4d.%02d.%02d",d.da_year,d.da_mon,d.da_day); for(;;) { gotoxy(3,24);printf(" Tab __browse cost list Esc __quit"); gotoxy(13,10);printf(" "); gotoxy(13,13);printf(" "); gotoxy(13,7);printf("%s",chtime); j=18; ch[0]=getch(); if(ch[0]==27) break; strcpy(chshop,""); strcpy(chmoney,""); if(ch[0]==9) { mm:i=0; fp=fopen("home.dat","r+"); gotoxy(3,24);printf(" "); gotoxy(6,4);printf(" list records "); gotoxy(1,5);printf("|-------------------------------------|"); gotoxy(41,4);printf(" "); gotoxy(41,5);printf(" |"); while(fscanf(fp,"%10s%14s%f\n",chtime,chshop,&chm)!=EOF) { if(i==36) { getch(); i=0;} if ((i%36)<17) { gotoxy(4,6+i); printf(" "); gotoxy(4,6+i);} else if((i%36)>16) { gotoxy(41,4+i-17); printf(" "); gotoxy(42,4+i-17);} i++; sum=sum+chm; printf("%10s %-14s %6.1f\n",chtime,chshop,chm);} gotoxy(1,23);printf("|---------------------------------------------------------------------------|"); gotoxy(1,24);printf("| |"); gotoxy(1,25);printf("|---------------------------------------------------------------------------|"); gotoxy(10,24);printf("total is %8.1f$",sum); fclose(fp); gotoxy(49,24);printf("press any key to.....");getch();goto pp; } else { while(ch[0]!='\r') { if(j<10) { strncat(chtime,ch,1); j++;} if(ch[0]==8) { len=strlen(chtime)-1; if(j>15) { len=len+1; j=11;} strcpy(ch1,""); j=j-2; strncat(ch1,chtime,len); strcpy(chtime,""); strncat(chtime,ch1,len-1); gotoxy(13,7);printf(" ");} gotoxy(13,7);printf("%s",chtime);ch[0]=getch(); if(ch[0]==9) goto mm; if(ch[0]==27) exit(1); } gotoxy(3,24);printf(" "); gotoxy(13,10); j=0; ch[0]=getch(); while(ch[0]!='\r') { if (j<14) { strncat(chshop,ch,1); j++;} if(ch[0]==8) { len=strlen(chshop)-1; strcpy(ch1,""); j=j-2; strncat(ch1,chshop,len); strcpy(chshop,""); strncat(chshop,ch1,len-1); gotoxy(13,10);printf(" ");} gotoxy(13,10);printf("%s",chshop);ch[0]=getch();} gotoxy(13,13); j=0; ch[0]=getch(); while(ch[0]!='\r') { if (j<6) { strncat(chmoney,ch,1); j++;} if(ch[0]==8) { len=strlen(chmoney)-1; strcpy(ch1,""); j=j-2; strncat(ch1,chmoney,len); strcpy(chmoney,""); strncat(chmoney,ch1,len-1); gotoxy(13,13);printf(" ");} gotoxy(13,13);printf("%s",chmoney);ch[0]=getch();} if((strlen(chshop)==0)||(strlen(chmoney)==0)) continue; if((fp=fopen("home.dat","a+"))!=NULL); fprintf(fp,"%10s%14s%6s",chtime,chshop,chmoney); fputc('\n',fp); fclose(fp); i++; gotoxy(41,5+i); printf("%10s %-14s %-6s",chtime,chshop,chmoney); }}} ============================================================== 【 程序 96】 题 目: 计算 字符 串中 子串 出现 的次 数 1.程 序分 析: 2.程 序源 代码 : #include "string.h" #include "stdio.h" main() { char str1[20],str2[20],*p1,*p2; int sum=0; printf("please input two strings\n"); scanf("%s%s",str1,str2); p1=str1;p2=str2; while(*p1!='\0') { if(*p1==*p2) {while(*p1==*p2&&*p2!='\0') {p1++; p2++;} } else p1++; if(*p2=='\0') sum++; p2=str2; } printf("%d",sum); getch();} ============================================================== 【 程序 97】 题 目: 从键 盘输 入一 些字 符, 逐个 把它 们送 到磁 盘上 去, 直到 输入 一个 #为 止。 1.程 序分 析: 2.程 序源 代码 : #include "stdio.h" main() {FILE*fp; char ch,filename[10]; scanf("%s",filename); if((fp=fopen(filename,"w"))==NULL) {printf("cannot open file\n"); exit(0);} ch=getchar(); ch=getchar(); while(ch!='#') {fputc(ch,fp);putchar(ch); ch=getchar(); } fclose(fp); } ============================================================== 【 程序 98】 题目:从 键盘 输入 一个 字符 串 ,将 小写 字母 全部 转换 成大 写字 母 ,然 后输 出到 一个 磁盘 文件 “test” 中 保存 。 输 入的 字符 串以 !结 束。 1.程 序分 析: 2.程 序源 代码 : #include "stdio.h" main() {FILE*fp; char str[100],filename[10]; int i=0; if((fp=fopen("test","w"))==NULL) { printf("cannot open the file\n"); exit(0);} printf("please input a string:\n"); gets(str); while(str!='!') { if(str>='a'&&str<='z') str=str-32; fputc(str,fp); i++;} fclose(fp); fp=fopen("test","r"); fgets(str,strlen(str)+1,fp); printf("%s\n",str); fclose(fp); } 【 程序 99】 题目:有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排 列), 输 出到 一个 新文 件 C中. 1.程 序分 析 : 2.程 序源 代码 : #include "stdio.h" main() {FILE*fp; int i,j,n,ni; char c[160],t,ch; if((fp=fopen("A","r"))==NULL) {printf("file A cannot be opened\n"); exit(0);} printf("\n A contents are :\n"); for(i=0;(ch=fgetc(fp))!=EOF;i++) {c[i]=ch; putchar(c[i]); } fclose(fp); ni=i; if((fp=fopen("B","r"))==NULL) {printf("file B cannot be opened\n"); exit(0);} printf("\n B contents are :\n"); for(i=0;(ch=fgetc(fp))!=EOF;i++) {c[i]=ch; putchar(c[i]); } fclose(fp); n=i; for(i=0;ic[j]) {t=c[i];c[i]=c[j];c[j]=t;} printf("\n C file is:\n"); fp=fopen("C","w"); for(i=0;i

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档