C语言实战105例

合集下载

(完整)C语言程序设计100个经典例子

(完整)C语言程序设计100个经典例子

经典C语言程序设计100例1。

数字排列 2.奖金分配问题3.已知条件求解整数4.输入日期判断第几天5。

输入整数进行排序6。

用*号显示字母C的图案7。

显示特殊图案8。

打印九九口诀9。

输出国际象棋棋盘10。

打印楼梯并按条件打印笑脸 11.经典兔子问题12。

判断素数13.水仙花数问题14。

正整数分解质因数15.学习成绩划分16。

正整数求其最大公约数和最小公倍数17.统计英文字母/空格/数字个数18.求s=a+aa+aaa+aa..。

a的值 19.求解”完数”20。

球体自由落下物理问题21.猴子吃桃问题22。

乒乓球比赛抽签问题23.打印菱形图案24。

分数数列求和25。

求1+2!+3!+.。

+20!的和26.利用递归方法求5!27.将输入字符以相反顺序打印28.岁数问题29。

求解正整数位数30.判断回文数31.星期几猜测游戏32.改变文本颜色33.学习gotoxy()与clrscr()函数 34。

练习函数调用35。

设置文本颜色36。

求100之内的素数37.对10个数进行排序38.求3*3矩阵对角线元素之和39。

数字插入数组重新排序40。

将一个数组逆序输出41.static定义静态变量用法42。

使用auto定义变量用法43。

使用static的另一用法44.使用external 的用法45。

使用register定义变量方法46。

宏#define命令练习(1) 47.宏#define命令练习(2)48.宏#define 命令练习(3)49.#if #ifdef和#ifndef的综合应用50.#include 的应用练习51。

学习使用按位与 & 52.学习使用按位或 |53.学习使用按位异或 ^ 54.取一个整数从右端开始的4~7位。

55。

学习使用按位取反~56.用circle画圆形57.学用line画直线58.用rectangle画方形 59。

画图综合例子60.画图综合例子261.打印杨辉三角形62。

学习putpixel画点 63.画椭圆ellipse 64。

C语言简单的23 个例子

C语言简单的23 个例子

例1.1:输入两个数,输出其中的最大者方法一:#include "stdio.h"int main(){int a,b,max;scanf("%d %d",&a,&b);if (a>b) max=a;else max=b;printf("%d\n",max);return 0;}方法二:#include"stdio.h"int main(){int m,n;scanf("%d %d",&m,&n);printf("%d\n",(m>n)?m:n);return 0;}例1.2:输入三个数,输出其最大者#include "stdio.h"int main(){int a,b,c;scanf("%d %d %d",&a,&b,&c);printf("%d\n",a>b?(a>c?a:c):(b>c?b:c));return 0;}例2:求一个数的绝对值方法一:#include "stdio.h"int main(){int a,absa;printf("enter one number:\n");scanf("%d",&a);if (a<0)absa=-a;elseabsa=a;printf("|%d|=%d\n",a,absa);return 0;}方法二:#include"stdio.h"#include"math.h"int main(){int a;scanf("%d",&a);printf("%d\n",abs(a));return 0;}例3:两个数的四则运算#include "stdio.h"int main(){double x,y;char op;printf("输入运算式:\n");scanf("%lf%c%lf",&x,&op,&y);switch (op){case '+':printf("%.2f%c%.2f=%.2f\n",x,op,y,x+y);break;case '-':printf("%.2f%c%.2f=%.2f\n",x,op,y,x-y);break;case '*':printf("%.2f%c%.2f=%.2f\n",x,op,y,x*y);break;case '/':if (y==0)printf("error!\n");elseprintf("%.2f%c%.2f=%.2f\n",x,op,y,x/y);break;default :printf("expression is error!\n");}return 0;}例4:求N个数的平均数,以-1结束输入,且-1不纳入计算#include "stdio.h"int main(){int n=0;double a,sum=0;while(1){scanf("%lf",&a);if(a==-1) break;sum+=a;n++;}printf("%.2f\n",sum/n);return 0;}例5:打印出九九乘法口诀#include "stdio.h"int main(){int i,j;for (i=1;i<10;i++){ for(j=i;j<10;j++){printf("%dx%d=%-4d",i,j,i*j);}printf("\n");}return 0;}例6:大小写转换,以数字0结束输入#include "stdio.h"int main(){char ch;while(1){scanf("%c",&ch);if(ch=='0') break;if(ch>='A'&&ch<='Z')printf("%c\n",ch+32);if(ch>='a'&&ch<='z')printf("%c\n",ch-32);}return 0;}例7:打印菱形图案#include "stdio.h"int main(){int i,j,k;for (i=0;i<10;i++){for (j=0;j<=9-i;j++)printf(" ");for (k=0;k<=2*i;k++)printf("%c",3);printf("\n");}for (i=0;i<=9;i++){for (j=0;j<=i+1;j++)printf(" ");for (k=0;k<=16-2*i;k++)printf("%c",3);printf("\n");}return 0;}例8:求100以内所有的素数#include "stdio.h"#include "math.h"main(){int m,i,k,t=0,j=1,n=0;printf("%3d:",j);for (m=2;m<=300;m=m+1){k=(int)sqrt(m);for (i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1){printf("%5d",m);t++;if(t%4==0) printf("\n%3d:",++j);}}printf("\n");return 0;}例9:输出Fibonacci数列的前20项及其和(Fibonacci数列:1,1,2,3,5,8,13,21···)#include "stdio.h"int main(){int i,sum=0,f[20]={1,1};for (i=2;i<20;i=i+1)f[i]=f[i-1]+f[i-2];for (i=0;i<20;i=i+1){printf("%6d",f[i]);sum=sum+f[i];if ((i+1)%4==0) printf("\n");}printf("sum=%d\n",sum);return 0;}例10:输出各位数均不相同的三位数,及其个数#include "stdio.h"int main(){int n,i,j,k;n=0;for (i=1;i<=9;i++)for (k=1;k<=9;k++)if (k!=i)for (j=0;j<=9;j++)if(j!=i&&j!=k){n++;printf("%d ",100*i+10*j+k);if (n%10==0) printf("\n");}printf("\n");printf("共%d个数\n",n);return 0;}例11:输入一个数,求其阶乘#include "stdio.h"int main(){int i,s,n;printf("n=");scanf("%d",&n);i=1;s=2;while (i<=n){s=s*i;i=i+1;}printf("%d!=%d\n",n,s);return 0;}例12:将一个数分解质因数#include"stdio.h"int main(){int i,n;printf("please input numbers:\n");for(;;){scanf("%d",&n);printf("%d=",n);for(i=2;i<=n;i++){while(n!=1){if(n%i==0){ printf("%d*",i);n=n/i;}else break;}}if(n==1) printf("\b \n");else printf("%d\n",n);}return 0;}例13:汉诺塔游戏#include<stdio.h>void move(char a,char b){static int i=0;printf("%c-->%c %d\n",a,b,++i);}void hanoi(int m,char a,char b,char c){if(m==1) move(a,c);else{hanoi(m-1,a,c,b);move(a,c);hanoi(m-1,b,a,c);}}int main(){int m;printf("请输入方块数:");scanf("%d",&m);hanoi(m,'A','B','C');return 0;}例14:求一句话中单词的个数#include<stdio.h>int main(){char s[100],c;int i,temp=0,num=0;gets(s);for(i=0;(c=s[i])!='\0';i++){if (c==' ') temp=0;else if (temp==0){num=num+1;temp=1;}}printf("%d\n",num);return 0;}例15:水仙花数(三位数,各位数字的三次方之和等于该数)方法一:#include "stdio.h"int main(){int i,j,z,n;for (n=100;n<1000;n++){i=n/100;j=n/10-10*i;z=n%10;if(n==i*i*i+j*j*j+z*z*z)printf("%5d",n);}printf("\n");return 0;}方法二:#include"stdio.h"int main(){int i,j,k;for(i=1;i<=9;i++)for(j=0;j<=9;j++)for(k=0;k<=9;k++)if(i*i*i+j*j*j+k*k*k==100*i+10*j+k)printf("%4d",100*i+10*j+k);printf("\n");return 0;}例16:字符串b在字符串a中出现的次数,b中可以用“?”代替未知字母#include<stdio.h>#define N 1000int main(){int i,j,m,n,k,x=0;char a[N],b[N];gets(a);gets(b);for(i=0;a[i]!='\0';i++);for(j=0;b[j]!='\0';j++);m=i--;n=j--;for(i=0;i<=m-n+1;i++){k=0;for(j=0;j<n;j++)if(b[j]=='?') {k=1;continue;}else if(a[i+j]==b[j]) k=1;else k=0;if (k) x++;}printf("%d\n",x);return 0;}例17:冒泡排序#include "stdio.h"#define N 10int main(){int i,j,t,max,a[N]={1,1,2,3,15,28,133,21,34,777};int x;printf("初始数组元素为:");for (i=0;i<N;i++)printf("%d ",a[i]);printf("\n");for (i=0;i<N-1;i++)for (j=0;j<N-i-1;j++)if (a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}printf("从小到大排序后的数组为:");for (i=0;i<N;i++);printf("%3d",a[i]);return 0;}例18:选择排序#include "stdio.h"#define N 10int main(){int i,t,j,max,a[N]={1,1,2,3,15,28,133,21,34,777};int x;printf("初始数组元素为:");for (i=0;i<N;i++)printf("%d ",a[i]);printf("\n");for (i=0;i<N-1;i++){t=i;for (j=i+1;i<N;j++)if (a[j]<a[t]) t=j;if (t!=i) {x=a[t];a[t]=a[i];a[i]=x;}}printf("从小到大排序的数组为:");for (i=0;i<N;i++)printf ("%d",a[i]);printf("\n");return 0;}例19:数组元素的插入#include "stdio.h"#define N 10int main(){int i,j,a[N]={1,1,2,3,15,28,133,21,34};int x;printf("初始数组元素为:");for (i=0;i<N;i++)printf("%d ",a[i]);printf("\n");printf("请输入要插入的下标位置(0-%d):",N-1);scanf("%d",&i);printf("请输入要插入的数:");scanf("%d\n",x);for (j=N-1;j>i;j--)a[j]=a[j-1];a[i]=x;printf("插入元素之后的数组为:");for (i=0;i<N;i++)printf("%4d",a[i]);printf("\n");return 0;}例20:数组元素的删除#include "stdio.h"#define N 10int main(){int i,j,a[N]={1,1,2,3,15,28,133,21,34,88};int x;printf("初始数组元素为:");for (i=0;i<N;i++)printf("%d ",a[i]);printf("\n");printf("请输入要删除的下标位置(0-%d)",N-1);scanf("%d",&i);for (j=i+1;j<N;j++)a[j-1]=a[j];printf("删除后的数组为:");for (i=0;i<N;i++)printf("%4d",a[i]);printf("\n");return 0;}例21:数组中的最大值#include "stdio.h"#define N 10int main(){int i,max,a[N]={1,1,2,3,15,28,133,21,34,777};int x;printf("初始数组元素为:");for (i=0;i<N;i++)printf("%d ",a[i]);printf("\n");max=a[0];for (i=1;i<N;i++)if (a[i]>=max) max=a[i];printf("数组的最大值是%d\n",max);return 0;}例22:数组中最大值的下标#include "stdio.h"#define N 10int main(){int i,max,a[N]={1,1,2,3,15,28,133,21,34,777};int x;printf("初始数组元素为:");for (i=0;i<N;i++)printf("%d ",a[i]);printf("\n");max=0;for (i=1;i<N;i++)if (a[i]>=a[max]) max=i;printf("数组的最大值的下标是%d\n",max);return 0;}例23:查找数组中特定的元素#include "stdio.h"#define N 10int main(){int i,j,t,a[N]={1,1,2,3,15,28,133,21,34,88};int x;printf("初始数组元素为:");for (i=0;i<N;i++)printf("%d ",a[i]);printf("\n");printf("请输入要查找的元素:");scanf("%d",&x);t=-1;for (i=0;i<N;i++)if (a[i]==x) t=i;if (t==-1) printf("数组中没有该数!\n");else printf("该数位于数组的第%d个下标\n",t);return 0;}。

C语言经典实例程序100例

C语言经典实例程序100例

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语言案例100例

c语言案例100例

c语言案例100例C语言是一种广泛应用于系统软件开发和嵌入式系统编程的高级编程语言。

它以其简洁、高效和可移植性而闻名,因此被广泛用于各种应用领域。

本文将为您介绍100个C语言案例,旨在帮助您更好地理解和运用C语言。

案例一:Hello World```c#include <stdio.h>int main() {printf("Hello, World!");return 0;}```这是C语言中最简单的程序,它会输出"Hello, World!"。

案例二:求和```c#include <stdio.h>int main() {int num1, num2, sum;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);sum = num1 + num2;printf("两个整数的和为:%d", sum);return 0;}```这个程序会要求用户输入两个整数,然后计算并输出它们的和。

案例三:判断奇偶数```c#include <stdio.h>int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (num % 2 == 0) {printf("%d是偶数", num);} else {printf("%d是奇数", num);}return 0;}```这个程序会要求用户输入一个整数,然后判断它是奇数还是偶数,并输出相应的结果。

......(继续介绍更多的案例)通过以上100个C语言案例,您可以系统地学习和掌握C语言的各个方面。

每个案例都涉及不同的主题,从简单的Hello World程序到复杂的数据结构和算法,涵盖了C语言中的各种常见用法和技巧。

C语言实用程序100例

C语言实用程序100例

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?__________________________________________________________________程序分析:兔子的规律为数列1,1,2,3,5,8,13,21….___________________________________________________________________程序源代码: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;/*前两个月加起来赋值给第三个月*/}}上题还可用一维数组处理,you try!题目:判断101-200之间有多少个素数,并输出所有素数。

__________________________________________________________________程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

___________________________________________________________________程序源代码:#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);}题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。

C语言编程实例100题(带解析适合新手超经典)

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;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语言程序设计100个经典例子(可编辑修改word版)

C语言程序设计100个经典例子(可编辑修改word版)

经典C 语言程序设计100 例1.数字排列2.奖金分配问题3.已知条件求解整数4.输入日期判断第几天5.输入整数进行排序6.用*号显示字母C 的图案7.显示特殊图案8.打印九九口诀9.输出国际象棋棋盘10.打印楼梯并按条件打印笑脸11.经典兔子问题12.判断素数13.水仙花数问题14.正整数分解质因数15.学习成绩划分16.正整数求其最大公约数和最小公倍数17.统计英文字母/空格/数字个数18.求s=a+aa+aaa+aa...a 的值19.求解"完数" 20.球体自由落下物理问题21.猴子吃桃问题22.乒乓球比赛抽签问题23.打印菱形图案24.分数数列求和25.求1+2!+3!+...+20!的和26.利用递归方法求5! 27.将输入字符以相反顺序打印28.岁数问题29.求解正整数位数30.判断回文数31.星期几猜测游戏32.改变文本颜色33.学习gotoxy()与clrscr()函数34.练习函数调用35.设置文本颜色36.求100 之内的素数37.对10 个数进行排序38.求3*3 矩阵对角线元素之和39.数字插入数组重新排序40.将一个数组逆序输出41.static 定义静态变量用法42.使用auto 定义变量用法43.使用static 的另一用法44.使用external 的用法45.使用register 定义变量方法46.宏#define 命令练习(1) 47.宏#define 命令练习(2) 48. 宏#define 命令练习(3)49.#if #ifdef 和#ifndef 的综合应用50.#include 的应用练习51.学习使用按位与& 52. 学习使用按位或|53.学习使用按位异或^ 54.取一个整数从右端开始的4~7 位。

55.学习使用按位取反~56.用circle 画圆形57.学用line 画直线58.用rectangle 画方形59.画图综合例子60.画图综合例子261.打印杨辉三角形62.学习putpixel 画点63.画椭圆ellipse 64.利用ellipse and rectangle 画图65.画个最优美的图案66.输入3 个数字按大小顺序输出67.输入数组交换元素重新输出68.多个整数后移位置问题69.圆圈报数问题70.计算一个字符串长度71.编写输入/输出函数72.创建链表73.反向输出链表74.连接两个链表75.算一道简单题目76.调用函数求1/2+1/4+...+1/n 77.填空练习(指向指针的指针) 78.找到年龄最大的人79.字符串排序80.海滩猴子分桃81.已知公式条件求数字82.八进制转换为十进制83.求0-7 所能组成的奇数个数84. 由两个素数之和表示的偶数85.判断一个素数能被几个9 整除86.两个字符串连接程序87.结构体变量传递88. 读取数字的整数值并打印出该值个数的*89.数据加密90.专升本一题91.时间函数举例1 92.时间函数举例293.时间函数举例3 94.一个猜数游戏95.家庭财务管理小程序96.计算字符串中子串出现的次数97.输入字符并保存到磁盘98.字符串转换成大写字母并输出保存99.文件操作应用1100.文件操作应用2c 语言经典100 题【实用】【程序1】题目:有1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。

100个经典C语言编程例子(答案另附)

100个经典C语言编程例子(答案另附)

100个经典C语言编程例子(答案另附)1:计算 A+B 的问题时间限制:1000MS 内存限制:10000K总提交数:1347 正确数:655问题描述输入两个整数 a 和 b ,计算 a+b 的结果并输出。

输入两个整数输出一个整数输入样例1 2输出样例32:Hello World!时间限制:1000MS 内存限制:65536K总提交数:848 正确数:693问题描述编写第一个C语言程序。

在屏幕上输出:Hello World!输入程序没有输入输出Hello World!输入样例输出样例Hello World!提示1、输出的内容要与题目的要求完全一样,不能多字符也不能少字符。

3:两个整数的值互换时间限制:1000MS 内存限制:65536K总提交数:1235 正确数:530问题描述输入两个整数a,b ,将 a 和 b 的值互换,并输出。

例如:输入: 2 5输出: 5 2输入两个整数输出两个整数输入样例2 5输出样例5 2提示注意输入和输出的格式,两个数据之间用一个空格隔开。

问题来源4:计算三门课程总分和平均分时间限制:1000MS 内存限制:65536K总提交数:1190 正确数:482问题描述输入三门课程的成绩,输出总分和平均分。

要求:(1)输入三个数,用空格隔开。

输入的数可以是小数。

(2)输出两个数,用空格隔开。

输出的数保留两位小数。

例如:输入: 75 80 90输出: 245.00 81.67 输入输入三个数,用空格隔开。

输入的数可以是小数。

输出输出两个数,用空格隔开。

输出的数保留两位小数。

输入样例75 80 90输出样例245.00 81.67问题来源5:鸡兔同笼问题时间限制:1000MS 内存限制:65536K总提交数:872 正确数:443问题描述这个问题,是我国古代著名趣题之一。

大约在1500年前,《孙子算经》中就记载了这个有趣的问题。

书中是这样叙述的:“今有鸡兔同笼,上有三十五头,下有九十四足,问鸡兔各几何?这四句话的意思是:有若干只鸡兔同在一个笼子里,从上面数,有35个头;从下面数,有94只脚。

C语言经典编程100例--实践版(可编辑)

C语言经典编程100例--实践版(可编辑)

C语言经典编程100例--实践版1绘制余弦曲线在屏幕上用显示0360度的余弦函数cos x 曲线问题分析与算法设计如果在程序中使用数组这个问题十分简单但若规定不能使用数组问题就变得不容易了关键在于余弦曲线在0360度的区间内一行中要显示两个点而对一般的显示器来说只能按行输出即输出第一行信息后只能向下一行输出不能再返回到上一行为了获得本文要求的图形就必须在一行中一次输出两个为了同时得到余弦函数cos x 图形在一行上的两个点考虑利用cos x 的左右对称性将屏幕的行方向定义为x列方向定义为y则0180度的图形与180360度的图形是左右对称的若定义图形的总宽度为62列计算出x行0180度时y点的坐标m 那么在同一行与之对称的180360度的y点的坐标就应为62-m程序中利用反余弦函数acos计算坐标 xy 的对应关系使用这种方法编出的程序短小精炼体现了一定的技巧程序说明与注释includeincludeint mainint xmfor y 1y -1y- 01 y为列方向值从1到-1步长为01m acos y 10 计算出y对应的弧度m乘以10为图形放大倍数for x 1x mx printf " "printf "" 控制打印左侧的号for x 62-mx printf " "printf "\n" 控制打印同一行中对称的右侧号return 0思考题如何实现用显示0360度的sin x 曲线2绘制余弦曲线和直线在屏幕上显示0360度的cos x 曲线与直线f x 45 y-1 31的迭加图形其中cos x 图形用表示f x 用表示在两个图形相交的点上则用f x 图形的符号问题分析与算法设计本题可以在上题的基础上进行修改图形迭加的关键是要在分别计算出同一行中两个图形的列方向点坐标后正确判断相互的位置关系为此可以先判断图形的交点再分别控制打印两个不同的图形程序注释与说明includeint maindouble yint xmnyyfor yy 0yy 20yy 对于第一个y坐标进行计算并在一行中打印图形y 01yy y屏幕行方向坐标m acos 1-y 10 m cos x 曲线上y点对应的屏幕列坐标n 45 y-1 31 n 直线上y点对应的列坐标for x 0x 62x x 屏幕列方向坐标if x mx n printf "" 直线与cos x 相交时打印else if x n printf "" 打印不相交时的直线图形else if x mx 62-m printf "" 打印不相交时的cos x 图形else printf " " 其它情况打印空格printf "\n"return 0思考题如何实现sin x 曲线与cos x 曲线图形的同时显示3绘制圆在屏幕上用画一个空心的圆问题分析与算法设计打印圆可利用图形的左右对称性根据圆的方程RR XXYY可以算出圆上每一点行和列的对应关系程序说明与注释includeincludeint maindouble yint xmfor y 10y -10y--m 25sqrt 100-yy 计算行y对应的列坐标m25是屏幕纵横比调节系数因为屏幕的行距大于列距不进行调节显示出来的将是椭圆for x 1x 30-mx printf " " 图形左侧空白控制printf "" 圆的左侧for x 30mx printf " " 图形的空心部分控制printf "\n" 圆的右侧return 0思考题实现函数y x2的图形与圆的图形叠加显示4歌星大奖赛在歌星大奖赛中有10个评委为参赛的选手打分分数为1100分选手最后得分为去掉一个最高分和一个最低分后其余8个分数的平均值请编写一个程序实现问题分析与算法设计这个问题的算法十分简单但是要注意在程序中判断最大最小值的变量是如何赋值的程序说明与注释includeint mainint integeriminsum-32768 先假设当前的最大值为C语言整型数的最小值min 32767 先假设当前的最小值min为C语言整型数的最大值sum 0 将求累加和变量的初值置为0for i 1i 10iprintf "Input number d "iscanf "d"integer 输入评委的评分sum integer 计算总分if integer integer 通过比较筛选出其中的最高分if integer min min integer 通过比较筛选出其中的最低分printf "Canceled scored\nCanceled min scored\n"min printf "Average scored\n" sum--min 8 输出结果运行结果Input number1 90Input number2 91Input number3 93Input number4 94Input number5 90Input number6 99Input number7 97Input number8 92Input number9 91Input number10 95Canceled score99Canceled min score90Average score92思考题题目条件不变但考虑同时对评委评分进行裁判即在10个评委中找出最公平即评分最接返平均分和最不公平即与平均分的差距最大的评委程序应该怎样实现5求最大数问555555的约数中最大的三位数是多少问题分析与算法设计根据约数的定义对于一个整数N除去1和它自身外凡能整除N的数即为N的约数因此最简单的方法是用2到N-1之间的所有数去除N即可求出N的全部约数本题只要求取约数中最大的三位数则其取值范围可限制在100到999之间程序说明与注释includeint mainlong iint jprintf "Please input number"scanf "ld"ifor j 999j 100j--if ij 0printf "The factor with 3 digits in ld isd\n"ijbreak运行结果输入555555输出The factor with 3 digits in 555555 is7776高次方数的尾数求13的13次方的最后三位数问题分析与算法设计解本题最直接的方法是将13累乘13次方截取最后三位即可但是由于计算机所能表示的整数范围有限用这种正确的算法不可能得到正确的结果事实上题目仅要求最后三位的值完全没有必要求13的13次方的完整结果研究乘法的规律发现乘积的最后三位的值只与乘数和被乘数的后三位有关与乘数和被乘数的高位无关利用这一规律可以大大简化程序程序说明与注释includeint mainint ixylast 1 变量last保存求X的Y次方过程中的部分乘积的后三位printf "Input X and Y XY "scanf "dd"xyfor i 1i yi X自乘Y次last lastx1000 将last乘X后对1000取模即求积的后三位printf "The last 3 digits of dd isd\n"xylast1000 打印结果运行结果Input X and Y XY 1313The last 3 digits of 1313 is253Input X and Y XY 1320The last 3 digits of 1320 is8017阶乘尾数零的个数100的尾数有多少个零问题分析与算法设计可以设想先求出100的值然后数一下末尾有多少个零事实上与上题一样由于计算机所能表示的整数范围有限这是不可能的为了解决这个问题必须首先从数学上分析在100结果值的末尾产生零的条件不难看出一个整数若含有一个因子5则必然会在求100时产生一个零因此问题转化为求1到100这100个整数中包含了多少个因子5若整数N能被25整除则N包含2个因子5若整数N能被5整除则N包含1个因子5程序说明与注释includeint mainint acount 0for a 5a 100a 5 循环从5开始以5的倍数为步长考察整数count 若为5的倍数计数器加1if a25 count 若为25的倍数计数器再加1printf "The number of 0 in the end of 100 is d\n"count 打印结果return 0运行结果The number of 0 in the end of 100 is 24问题进一步讨论本题的求解程序是正确的但是存在明显的缺点程序中判断整数N包含多少个因子5的方法是与程序中的100有关的若题目中的100改为1000则就要修改程序中求因子5的数目的算法了思考题修改程序中求因子5的数目的算法使程序可以求出任意N的末尾有多少个零8借书方案知多少小明有五本新书要借给ABC三位小朋友若每人每次只能借一本则可以有多少种不同的借法问题分析与算法设计本问题实际上是一个排列问题即求从5个中取3个进行排列的方法的总数首先对五本书从1至5进行编号然后使用穷举的方法假设三个人分别借这五本书中的一本当三个人所借的书的编号都不相同时就是满足题意的一种借阅方法程序说明与注释int mainint abccount 0printf "There are diffrent methods for XM to distribute books to 3 readers\n"for a 1a 5a 穷举第一个人借5本书中的1本的全部情况for b 1b 5b 穷举第二个人借5本书中的一本的全部情况for c 1a bc 5c 当前两个人借不同的书时穷举第三个人借5本书中的1本的全部情况if c ac b 判断第三人与前两个人借的书是否不同printf count8"2dddd ""2dddd\n "countabc打印可能的借阅方法运行结果There are diffrent methods for XM to distribute books to 3 readers1 1232 1243 1254 1325 1346 1357 1428 1439 145 1015211153 12154 13213 14214 1521516231 17234 18235 19241 2024321245 22251 23253 24254 2531226314 27315 28321 29324 3032531341 32342 33345 34351 3535236354 37412 38413 39415 4042141423 42425 43431 44432 4543546451 47452 48453 49512 5051351514 52521 53523 54524 5553156532 57534 58541 59542 605439杨辉三角形在屏幕上显示杨辉三角形11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1问题分析与算法设计杨辉三角形中的数正是 xy 的N次方幂展开式各项的系数本题作为程序设计中具有代表性的题目求解的方法很多这里仅给出一种从杨辉三角形的特点出发可以总结出1 第N行有N1个值设起始行为第0行2 对于第N行的第J个值 N 2当J 1或J N1时其值为1J 1且J N1时其值为第N-1行的第J-1个值与第N-1行第J个值之和将这些特点提炼成数学公式可表示为1 x 1或x N1c xyc x-1y-1 c x-1y 其它本程序应是根据以上递归的数学表达式编制的程序说明与注释includeint mainint ijn 13printf "N "while n 12scanf "d"n 控制输入正确的值以保证屏幕显示的图形正确for i 0i ni 控制输出N行for j-0j 24-2ij printf " " 控制输出第i行前面的空格for j 1j i2j printf "4d"c ij 输出第i行的第j个值printf "\n"void int c int xint y 求杨辉三角形中第x行第y列的值int zif y 1 y x1 return 1 若为x行的第1或第x1列则输出1z c x-1y-1 c x-1y 否则其值为前一行中第y-1列与第y列值之和return z思考题自行设计一种实现杨辉三角形的方法10数制转换将任一整数转换为二进制形式问题分析与算法设计将十进制整数转换为二进制的方法很多这里介绍的实现方法利用了C语言能够对位进行操作的特点对于C语言来说一个整数在计算机内就是以二进制的形式存储的所以没有必要再将一个整数经过一系列的运算转换为二进制形式只要将整数在内存中的二进制表示输出即可程序说明与注释includevoid printb intintint mainint xprintf "Input number"scanf "d"xprintf "number of decimal formd\n"xprintf " its binary form"printb xsizeof int 8 x整数 sizeof int int型在内存中所占的字节数sizeof int 8int型对应的位数putchar \nvoid printb int xint nif n 0putchar 0 unsigned x 1 n-1 n-1 输出第n位printb xn-1 归调用输出x的后n-1位运行结果输入8输出number of decimal form8its bunary form0000000000001000输入-8输出number of decimal form-8its binary form1XXXXXXXXXX11000输入32767输出number of decimal form32767its binary form01XXXXXXXXXX1111输入-32768输出number of decimal form-32768its binary form1XXXXXXXXXX00000输入128输出number of decimal form128its binary form0000000010000000问题的进一步讨论充分利用C语言可以对位进行操作的特点可以编写许多其它高级语言不便于编写甚至根本无法编写的程序位操作是C语言的一大特点在深入学习C语言的过程中应力求很好掌握程序中使用的位运算方法不是最佳的也可以不用递归操作大家可以自行对程序进行优化思考题将任意正整数转换为四进制或八进制数11打鱼还是晒网中国有句俗语叫三天打鱼两天晒网某人从1990年1月1日起开始三天打鱼两天晒网问这个人在以后的某一天中是打鱼还是晒网问题分析与算法设计根据题意可以将解题过程分为三步1 计算从1990年1月1日开始至指定日期共有多少天2 由于打鱼和晒网的周期为5天所以将计算出的天数用5去除3 根据余数判断他是在打鱼还是在晒网若余数为123则他是在打鱼否则是在晒网在这三步中关键是第一步求从1990年1月1日至指定日期有多少天要判断经历年份中是否有闰年二月为29天平年为28天闰年的方法可以用伪语句描述如下如果年能被4除尽且不能被100除尽或能被400除尽则该年是闰年否则不是闰年C语言中判断能否整除可以使用求余运算即求模程序说明与注释includeint days struct date daystruct dateint yearint monthint dayint mainstruct date todaytermint yeardayyeardayprintf "Enter yearmonthday"scanf "ddd"todayyeartodaymonthtodayday 输入日期termmonth 12 设置变量的初始值月termday 31 设置变量的初始值日for yearday 0year 1990year todayyearyeartermyear yearyearday days term 计算从1990年至指定年的前一年共有多少天yearday days today 加上指定年中到指定日期的天数day yearday5 求余数if day 0day 4 printf "he was fishing at that day\n" 打印结果else printf "He was sleeping at that day\n"int days struct date daystatic int day_tab[2][13]0312831303130313130313031 平均每月的天数0312931303130313130313031int ilplp dayyear4 0dayyear100 0dayyear400 0判定year为闰年还是平年lp 0为平年非0为闰年for i 1i daymonthi 计算本年中自1月1日起的天数dayday day_tab[lp][i]return dayday运行结果Enter yearmonthday1991 10 25He was fishing at dayEnter yearmonthday1992 10 25He was sleeping at dayEnter yearmonthday1993 10 25He was sleeping at day思考题请打印出任意年份的日历12抓交通肇事犯一辆卡车违反交通规则撞人后逃跑现场有三人目击事件但都没有记住车号只记下车号的一些特征甲说牌照的前两位数字是相同的乙说牌照的后两位数字是相同的但与前两位不同丙是数学家他说四位的车号刚好是一个整数的平方请根据以上线索求出车号问题分析与算法设计按照题目的要求造出一个前两位数相同后两位数相同且相互间又不同的整数然后判断该整数是否是另一个整数的平方程序说明与注释includeincludeint mainint ijkcfor i 1i 9i i车号前二位的取值for j 0j 9j j车号后二位的取值if i j 判断二位数字是否相异k i1000i100j10j 计算出可能的整数for c 31cc kc 判断该数是否为另一整数的平方if cc k printf "Lorry--No is d\n"k 若是打印结果运行结果Lorry _Nois 774413该存多少钱假设银行一年整存零取的月息为063现在某人手中有一笔钱他打算在今后的五年中的年底取出1000元到第五年时刚好取完请算出他存钱时应存入多少问题分析与算法设计分析存钱和取钱的过程可以采用倒推的方法若第五年年底连本带息要取1000元则要先求出第五年年初银行存款的钱数第五年初存款 1000 11200063依次类推可以求出第四年第三年的年初银行存款的钱数第四年年初存款第五年年初存款1000 11200063第三年年初存款第四年年初存款1000 11200063第二年年初存款第三年年初存款1000 11200063第一年年初存款第二年年初存款1000 11200063通过以上过程就可以很容易地求出第一年年初要存入多少钱程序说明与注释includeint mainint ifloat total 0for i 0i 5i i 为年数取值为04年total total1000 10006312 累计算出年初存款数额第五次的计算结果即为题解printf "He must save 2f at first\n"total运行结果He must save 403944 at first14怎样存钱利最大假设银行整存整取存款不同期限的月息利率分别为063 期限 1年066 期限 2年069 期限 3年075 期限 5年084 期限 8年利息本金月息利率12存款年限现在某人手中有2000元钱请通过计算选择一种存钱方案使得钱存入银行20年后得到的利息最多假定银行对超过存款期限的那一部分时间不付利息问题分析与算法设计为了得到最多的利息存入银行的钱应在到期时马上取出来然后立刻将原来的本金和利息加起来再作为新的本金存入银行这样不断地滚动直到满20年为止由于存款的利率不同所以不同的存款方法年限存20年得到的利息是不一样的分析题意设2000元存20年其中1年存i1次2年存i2次3年存i3次5年存i5次8年存i8次则到期时存款人应得到的本利合计为2000 1rate1 i1 1rate2 i2 1rate3 i3 1rate5 i5 1rate8 i8其中rateN为对应存款年限的利率根据题意还可得到以下限制条件0 i8 20 i5 20-8i8 50 i3 20-8i8-5i5 30 i2 20-8i8-5i5-3i3 20 i1 20-8i8-5i5-3i3-2i2可以用穷举法穷举所有的i8i5i3i2和i1的组合代入求本利的公式计算出最大值就是最佳存款方案程序说明与注释includeincludeint mainint i8i5i3i2i1n8n5n3n2n1float 0termfor i8 0i8 3i8 穷举所有可能的存款方式for i5 0i5 20-8i8 5i5for i3 0i3 20-8i8-5i5 3i3for i2 0i2 20-8i8-5i5-3i3 2i2i1 20-8i8-5i5-3i3-2i2term 20000pow double 10006312 double i1pow double 120006312 double i2pow double 130006912 double i3pow double 150007512 double i5pow double 180008412 double i8计算到期时的本利合计if termtermn1 i1n2 i2n3 i3n5 i5n8 i8printf "For inum profithe should so save his money in a bank\n" printf " made fixed deposit for 8 year d times\n"n8printf " made fixed deposit for 5 year d times\n"n5printf " made fixed deposit for 3 year d times\n"n3printf " made fixed deposit for 2 year d times\n"n2printf " made fixed deposit for 1 year d times\n"n1printf " Toal 2f\n"输出存款方式运行结果For inum profithe should so save his money in a bankmade fixed deposit for 8 year 0timesmade fixed deposit for 5 year 4timesmade fixed deposit for 3 year 0timesmade fixed deposit for 2 year 0timesmade fixed deposit for 1 year 0timesTotal884101可见最佳的存款方案为连续四次存5年期思考题某单位对职工出售住房每套为2万元买房付款的方法是一次交清优惠20从第一年开始每年年初分期付款5年交清优惠5010年交清优惠1020年交清没有优惠现在有人手中正好有2万元若假定在今后20年中物价和银行利率均保持不变问他应当选择哪种付款方式可以使应付的钱最少15捕鱼和分鱼ABCDE五个人在某天夜里合伙去捕鱼到第二天凌晨时都疲惫不堪于是各自找地方睡觉日上三杆A第一个醒来他将鱼分为五份把多余的一条鱼扔掉拿走自己的一份B第二个醒来也将鱼分为五份把多余的一条鱼扔掉保持走自己的一份CDE依次醒来也按同样的方法拿走鱼问他们合伙至少捕了多少条鱼问题分析与算法设计根据题意总计将所有的鱼进行了五次平均分配每次分配时的策略是相同的即扔掉一条鱼后剩下的鱼正好分成五份然后拿走自己的一份余下其它的四份假定鱼的总数为X则X可以按照题目的要求进行五次分配X-1后可被5整除余下的鱼为4 X-1 5若X满足上述要求则X就是题目的解程序说明与注释includeint mainint nixflag 1 flag控制标记for n 6flagn 采用试探的方法令试探值n逐步加大for x ni 1flagi 5iif x-1 5 0 x 4 x-1 5else flag 0 若不能分配则置标记falg 0退出分配过程if flag break 若分配过程正常结束则找到结果退出试探的过程else flag 1 否则继续试探下一个数printf "Total number of fish catched d\n"n 输出结果运行结果Total number of fish catched 3121问题的进一步讨论程序采用试探法试探的初值为6每次试探的步长为1这是过分保守的做法可以在进一步分析题目的基础上修改此值增大试探的步长值以减少试探次数思考题请使用其它的方法求解本题16出售金鱼买卖提将养的一缸金鱼分五次出售系统上一次卖出全部的一半加二分之一条第二次卖出余下的三分之一加三分之一条第三次卖出余下的四分之一加四分之一条第四次卖出余下的五分之一加五分之一条最后卖出余下的11条问原来的鱼缸中共有几条金鱼问题分析与算法设计题目中所有的鱼是分五次出售的每次卖出的策略相同第j次卖剩下的 j1 分之一再加1 j1 条第五次将第四次余下的11条全卖了假定第j次鱼的总数为X则第j次留下x- x1 j1当第四次出售完毕时应该剩下11条若X满足上述要求则X就是题目的解应当注意的是" x1 j1 "应满足整除条件试探X的初值可以从23开始试探的步长为2因为X的值一定为奇数程序说明与注释includeint mainint ijn 0x n为标志变量for i 23n 0i 2 控制试探的步长和过程for j 1x ij 4x 11j 完成出售四次的操作if x1 j1 0 若满足整除条件则进行实际的出售操作x- x1 j1else x 0break 否则停止计算过程if j 5x 11 若第四次余下11条则满足题意printf "There are d fishes at first\n"i 输出结果n 1 控制退出试探过程运行结果There are 59 fishes at first思考题日本著名数学游戏专家中村义作教授提出这样一个问题父亲将2520个桔子分给六个儿子分完后父亲说老大将分给你的桔子的18给老二老二拿到后连同原先的桔子分17给老三老三拿到后连同原先的桔子分16给老四老四拿到后连同原先的桔子分15给老五老五拿到后连同原先的桔子分14给老六老六拿到后连同原先的桔子分13给老大结果大家手中的桔子正好一样多问六兄弟原来手中各有多少桔子17平分七筐鱼甲乙丙三位鱼夫出海打鱼他们随船带了21只箩筐当晚返航时他们发现有七筐装满了鱼还有七筐装了半筐鱼另外七筐则是空的由于他们没有秤只好通过目测认为七个满筐鱼的重量是相等的7个半筐鱼的重量是相等的在不将鱼倒出来的前提下怎样将鱼和筐平分为三份问题分析与算法设计根据题意可以知道每个人应分得七个箩筐其中有35筐鱼采用一个33的数组a 来表示三个人分到的东西其中每个人对应数组a的一行数组的第0列放分到的鱼的整筐数数组的第1列放分到的半筐数数组的第2列放分到的空筐数由题目可以推出数组的每行或每列的元素之和都为7对数组的行来说满筐数加半筐数 35每个人所得的满筐数不能超过3筐每个人都必须至少有1 个半筐且半筐数一定为奇数对于找到的某种分鱼方案三个人谁拿哪一份都是相同的为了避免出现重复的分配方案可以规定第二个人的满筐数等于第一个人的满筐数第二个人的半筐数大于等于第一个人的半筐数程序说明与注释includeint a[3][3]countint mainint ijkmnflagprintf "It exists possible distribtion plans\n"for i 0i 3i 试探第一个人满筐a[0][0]的值满筐数不能 3a[0][0] ifor j ij 7-ij 3j 试探第二个人满筐a[1][0]的值满筐数不能 3a[1][0] jif a[2][0] 7-j-a[0][0] 3 continue 第三个人满筐数不能 3if a[2][0] a[1][0] break 要求后一个人分的满筐数前一个人以排除重复情况for k 1k 5k 2 试探半筐a[0][1]的值半筐数为奇数a[0][1] kfor m 1m 7-km 2 试探半筐a[1][1]的值半筐数为奇数a[1][1] ma[2][1] 7-k-mfor flag 1n 0flagn 3n判断每个人分到的鱼是 35筐flag为满足题意的标记变量if a[n][0]a[n][1] 7a[n][0]2a[n][1] 7a[n][2] 7-a[n][0]-a[n][1] 计算应得到的空筐数量else flag 0 不符合题意则置标记为0if flagprintf "Nod Full basket Semi--basket Empty\n"count for n 0n 3nprintf " fisher c d d d\n"Ana[n][0]a[n][1]a[n][2]运行结果It exists possible distribution plansNo1 Full basket Semi--basket Emptyfisher A 1 5 1fisher B 3 1 3fisher C 3 1 3No2 Full basket Semi--basket Emptyfisher A 2 3 2fisher B 2 3 2fisher C 3 1 3思考题晏会上数学家出了一道难题假定桌子上有三瓶啤酒癣瓶子中的酒分给几个人喝但喝各瓶酒的人数是不一样的不过其中有一个人喝了每一瓶中的酒且加起来刚好是一瓶请问喝这三瓶酒的各有多少人答案喝三瓶酒的人数分别是2人3人和6人18有限5位数个位数为6且能被3整除的五位数共有多少题目分析与算法设计根据题意可知满足条件的五位数的选择范围是100061001699996可设基础数i 1000通过计算i106即可得到欲选的数 i的变化范围是1000999 再判断该数能否被3整除程序说明与注释includeint mainlong int iint count 0 count统计满足条件的五位数的个数for i 1000i 9999iif i106 3 判断所选的数能否被3整除count 若满足条件则计数printf "count d\n"count运行结果count 2999思考题求100到1000之间有多少个其数字之和为5的整数答案104113122131140203212221230302311320401410500198除不尽的自然数一个自然数被8除余1所得的商被8除也余1再将第二次的商被8除后余7最后得到一个商为a又知这个自然数被17除余4所得的商被17除余15最后得到一个商是a的2倍求这个自然数问题分析与算法设计根据题意可设最后的商为i i从0开始取值用逆推法可以列出关系式i87 8 1 81 2i17 15 184再用试探法求出商i的值程序说明与注释includeint mainint ifor i 0i 试探商的值if i87 81 81 34i15 174逆推判断所取得的当前i值是否满足关系式若满足则输出结果printf "The required number is d\n" 34i15 174break 退出循环运行结果The required number is199320一个奇异的三位数一个自然数的七进制表达式是一个三位数而这个自然数的九进制表示也是一个三位数且这两个三位数的数码正好相反求这个三位数问题分析与算法设计根据题意可知七进制和九进制表示的这全自然数的每一位一定小于7可设其七进制数形式为kji ijk的取值分别为16 然后设其九进制表示形式为ijk 程序说明与注释includeint mainint ijkfor i 1i 7ifor j 0j 7jfor k 1k 7kif i99j9k ij7k77printf "The special number with 3 digits is"printf "ddd 7 ddd 9 d 10 \n"kjiijki99j9k运行结果The special number with 3 digits is503 7 305 9 248 10 214位反序数设N是一个四位数它的9倍恰好是其反序数求N反序数就是将整数的数字倒过来形成的整数例如1234的反序数是4321问题分析与算法设计可设整数N的千百十个位为ijkl其取值均为09则满足关系式i103j10210kl 9 l103k10210ji的ijkl即构成N程序说明与注释includeint mainint ifor i 1002i 1111i 穷举四位数可能的值if i101000i1010100i1001010i1000 i9判断反序数是否是原整数的9倍printf "The number satisfied stats condition is d\n"i若是则输出运行结果The number satisfied states condition is1089分类22求车速一辆以固定速度行驶的汽车司机在上午10点看到里程表上的读数是一个对称数即这个数从左向右读和从右向左读是完全一样的为95859两小时后里程表上出现了一个新的对称数问该车的速度是多少新的对称数是多少问题分析与算法设计根据题意设所求对称数为i其初值为95589对其依次递增取值将i值的每一位分解后与其对称位置上的数进行比较若每个对称位置上的数皆相等则可判定i即为所求的对称数程序说明与注释includeint mainint ta[5] 数组a存放分解的数字位long int kifor i 95860i 以95860为初值循环试探for t 0k 100000k 10t 从高到低分解所取i值的每位数字依次存放于a[0]a[5]中a[t] ik k10k 10if a[0] a[4] a[1] a[3]printf "The new symmetrical number kelometers isddddd\n"a[0]a[1]a[2]a[3]a[4]printf "The velocity of the car is 2f\n" i-95859 20break运行结果The new symmetrical number kelometers is95959The velocity of the car is5000思考题将一个数的数码倒过来所得到的新数叫原数的反序数如果一个数等于它的反序数则称它为对称数求不超过1993的最大的二进制的对称数23由两个平方三位数获得三个平方二位数已知两个平方三位数abc和xyz其中abcxyz未必是不同的而axbycz是三个平方二位数请编程求三位数abc和xyz问题分析与算法设计任取两个平方三位数n和n1将n从高向低分解为abc将n1从高到低分解为xyz 判断axbycz是否均为完全平方数程序说明与注释include。

C语言编程经典100例

C语言编程经典100例

C语言编程经典100例(四)【程序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“,s um);}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】题目:找到年龄最大的人,并输出。

C语言网络攻防实战案例分析

C语言网络攻防实战案例分析

C语言网络攻防实战案例分析在当今数字化时代,网络攻防已成为一个极其重要的领域。

作为一种常用的编程语言,C语言在网络攻防方面也扮演着重要的角色。

本文将以实战案例的形式,从攻击和防御两个角度,分析C语言在网络攻防中的应用。

1. 案例一:ARP欺骗攻击ARP(地址解析协议)欺骗攻击是一种常见的网络攻击手段。

攻击者通过伪造网络中某个主机的MAC地址来获得网络中其他主机的信息甚至控制权。

攻击者使用C语言编写的程序,通过发送ARP欺骗包来实施攻击。

通过构造伪造的ARP响应数据包,将目标主机的IP地址与攻击者的MAC地址进行绑定,从而将网络流量导向攻击者控制的主机。

在编写这类攻击程序时,C语言提供了对网络套接字的底层直接访问,使得程序更加高效和灵活。

2. 案例二:DDoS攻击防御DDoS(分布式拒绝服务)攻击是通过多台计算机向目标服务器发送海量的请求,造成目标服务器负载过高而瘫痪的攻击手段。

在防御这类攻击时,C语言也扮演着重要的角色。

防御DDoS攻击的一种常见方法是通过C语言编写的防火墙程序。

防火墙程序利用C语言的高效性和网络编程特性,对进入的网络流量进行过滤和分析,通过识别恶意请求并将其拦截,从而保护目标服务器免受攻击。

3. 案例三:缓冲区溢出攻击缓冲区溢出攻击是一种利用程序设计错误的漏洞,通过向缓冲区写入超过其容量的数据,导致程序崩溃或者执行非预期的操作的攻击手段。

C语言的特性使得它在缓冲区溢出攻击中成为攻击者的首选语言。

利用C语言编写的攻击程序,攻击者可以通过巧妙的输入控制数据,将恶意代码注入到程序中。

这类攻击对于软件开发者来说是一个巨大的挑战,需要在编写程序时遵循安全编程的最佳实践,如输入验证、边界检查等,以预防缓冲区溢出攻击。

总结:通过实际案例的分析,我们可以看到C语言在网络攻防方面的重要性和广泛应用。

无论是从攻击者的角度还是防御者的角度,C语言都提供了丰富的库和底层接口,使得编写高效、灵活的网络攻防程序成为可能。

c语言万能编程模板C语言程序设计50例经典收藏

c语言万能编程模板C语言程序设计50例经典收藏

c语言万能编程模板C语言程序设计50例经典收藏C语言万能编程模板:C语言程序设计50例经典收藏一、简介C语言是一种高效、通用的编程语言,被广泛应用于各种计算机平台上。

为了更好地学习和应用C语言,程序设计的模板是非常重要的。

本文将提供一套万能的C语言编程模板,并收藏了50个经典的C语言程序设计实例。

二、基本结构任何一个C语言程序都包含一些基本的结构,以下是一个基本的C语言程序框架:```c#include <stdio.h>int main() {// 在此处编写程序代码return 0;}```三、模板示例下面是一个使用C语言编写的经典示例,展示了如何使用模板来编程:```c#include <stdio.h>int main() {int num1, num2, sum;printf("请输入两个数字:");scanf("%d %d", &num1, &num2);sum = num1 + num2;printf("两个数字的和为:%d\n", sum);return 0;}```四、程序设计实例1. 逆序输出数字```c#include <stdio.h>int main() {int num, reverse = 0;printf("请输入一个数字:");scanf("%d", &num);while(num != 0) {int remainder = num % 10;reverse = reverse * 10 + remainder;num /= 10;}printf("逆序输出的数字为:%d\n", reverse); return 0;}```2. 判断素数```c#include <stdio.h>int isPrime(int num) {if(num < 2) {return 0;}for(int i = 2; i * i <= num; i++) {if(num % i == 0) {return 0;}}return 1;}int main() {int num;printf("请输入一个数字:");scanf("%d", &num);if(isPrime(num)) {printf("%d是素数\n", num); } else {printf("%d不是素数\n", num); }return 0;}```3. 字符串反转#include <stdio.h>#include <string.h>void reverseString(char str[]) {int length = strlen(str);char temp;for(int i = 0; i < length/2; i++) {temp = str[i];str[i] = str[length - i - 1];str[length - i - 1] = temp;}}int main() {char str[100];printf("请输入一个字符串:");scanf("%s", str);reverseString(str);printf("反转后的字符串为:%s\n", str); return 0;```五、总结本文提供了一套万能的C语言编程模板,并收藏了50个经典的C 语言程序设计实例,涵盖了C语言的各个方面,希望能对C语言学习者和应用者有所帮助。

C语言流程控制实战

C语言流程控制实战

C语言流程控制实战在C语言编程中,流程控制是至关重要的一部分,能够帮助程序员控制程序的执行顺序和逻辑流程。

本文将通过实战案例,展示C语言中常见的流程控制语句,并讨论它们在实际编程中的应用。

一、条件语句条件语句是根据条件的真假决定程序的执行路径,其中最常见的是if语句。

if语句的基本形式如下:```cif (条件){// 条件满足时执行的代码} else {// 条件不满足时执行的代码}```在实际编程中,我们经常需要根据不同的条件执行不同的代码逻辑。

例如,当某个数大于10时,输出"数值较大",否则输出"数值较小"。

我们可以通过以下代码实现:```c#include <stdio.h>int main() {int number = 15;if (number > 10) {printf("数值较大\n");} else {printf("数值较小\n");}return 0;}```以上代码中,我们使用if语句判断number是否大于10,并根据判断结果输出相应的结果。

二、循环语句循环语句是为了重复执行某段代码,以满足程序的需求。

在C语言中,常见的循环语句有while循环、do-while循环和for循环。

1. while循环while循环的基本语法如下:```cwhile (条件){// 循环体}```下面是一个实例,展示了如何使用while循环计算1到10的整数之和:```c#include <stdio.h>int main() {int sum = 0;int i = 1;while (i <= 10) {sum += i;i++;}printf("1到10的整数之和:%d\n", sum);return 0;}```以上代码中,我们使用while循环累加1到10的整数,并输出结果。

C语言编程经典100例

C语言编程经典100例

【程序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】题目:找到年龄最大的人,并输出。

C语言精彩编程百例

C语言精彩编程百例

C语言精彩编程百例第一篇基础知识篇实例1 数据类型转换实例2 转义字符实例3 关系和逻辑运算实例4 自增自减实例5 普通位运算实例6 位移运算实例7 字符译码实例8 指针操作符实例9 if判断语句实例10 else-if语句实例11 嵌套if语句实例12 switch语句实例13 for语句实例14 while语句实例15 do-while语句实例16 break和continue语句实例17 exit()语句实例18 综合实例实例19 一维数组实例20 二维数组实例21 字符数组实例22 数组初始化实例23 数组应用实例24 函数的值调用实例25 函数的引用调用实例26 数组函数的调用实例27 命令行变元实例28 函数的返回值实例29 函数的嵌套调用实例30 函数的递归调用实例31 局部和全局变量实例32 变量的存储类别实例33 内部和外部函数实例34 综合实例1实例35 综合实例2实例36 变量的指针实例37 一维数组指针实例38 二维数组指针实例39 字符串指针实例40 函数指针实例41 指针数组实例42 二维指针实例43 指针的初始化实例44 综合实例第二篇深入提高篇实例45 结构体变量实例46 结构体数组实例47 结构体指针变量实例48 结构体指针数组实例49 共用体变量实例50 枚举类型实例51 读写字符实例52 读写字符串实例53 格式化输出函数实例54 格式化输入函数实例55 打开和关闭文件实例56 fputc()和fgetc() 实例57 函数rewind()实例58 fread()和fwrite() 实例59 fprintf()和fscanf() 实例60 随机存取实例61 错误处理实例62 综合实例实例63 动态分配函数实例64 常用时间函数实例65 转换函数实例66 查找函数实例67 跳转函数实例68 排序函数实例69 伪随机数生成实例70 可变数目变元第三篇常用算法篇实例71 链表的建立实例72 链表的基本操作实例73 队列的应用实例74 堆栈的应用实例75 串的应用实例76 树的基本操作实例77 冒泡排序法实例78 堆排序实例79 归并排序实例80 磁盘文件排序实例81 顺序查找实例82 二分法查找实例83 树的动态查找实例84 二分法求解方程实例85 牛顿迭代法求解方程实例86 弦截法求解方程实例87 拉格朗日插值实例88 最小二乘法拟合实例89 辛普生数值积分实例90 改进欧拉法实例91 龙格-库塔法实例92 高斯消去法实例93 正定矩阵求逆第四篇综合应用篇实例94 用C语言实现遗传算法实例95 人工神经网络的C语言实现实例96 K_均值算法实例97 ISODATA算法实例98 快速傅立叶变换实例99 求解野人与传教士问题实例100 简单专家系统。

C语言程序设计100个简单的经典例子

C语言程序设计100个简单的经典例子

经典C语言程序设计100例1.数字排列2.奖金分配问题3.已知条件求解整数4.输入日期判断第几天5.输入整数进行排序6.用*号显示字母C的图案7.显示特殊图案8.打印九九口诀9.输出国际象棋棋盘10.打印楼梯并按条件打印笑脸11.经典兔子问题12.判断素数13.水仙花数问题14.正整数分解质因数15.学习成绩划分16.正整数求其最大公约数和最小公倍数17.统计英文字母/空格/数字个数18.求s=a+aa+aaa+aa...a的值19.求解"完数"20.球体自由落下物理问题21.猴子吃桃问题22.乒乓球比赛抽签问题23.打印菱形图案24.分数数列求和25.求1+2!+3!+...+20!的和26.利用递归方法求5!27.将输入字符以相反顺序打印28.岁数问题29.求解正整数位数30.判断回文数31.星期几猜测游戏32.改变文本颜色33.学习gotoxy()与clrscr()函数34.练习函数调用35.设置文本颜色36.求100之内的素数37.对10个数进行排序38.求3*3矩阵对角线元素之和39.数字插入数组重新排序40.将一个数组逆序输出41.static定义静态变量用法42.使用auto定义变量用法43.使用static的另一用法44.使用external的用法45.使用register定义变量方法46.宏#define命令练习(1)47.宏#define命令练习(2)48.宏#define命令练习(3)49.#if #ifdef和#ifndef的综合应用50.#include 的应用练习51.学习使用按位与&52.学习使用按位或|53.学习使用按位异或^54.取一个整数从右端开始的4~7位。

55.学习使用按位取反~56.用circle画圆形57.学用line画直线58.用rectangle画方形59.画图综合例子160.画图综合例子261.打印杨辉三角形62.学习putpixel画点63.画椭圆ellipse64.利用ellipse and rectangle画图65.画个最优美的图案66.输入3个数字按大小顺序输出67.输入数组交换元素重新输出68.多个整数后移位置问题69.圆圈报数问题70.计算一个字符串长度71.编写输入/输出函数72.创建链表73.反向输出链表74.连接两个链表75.算一道简单题目76.调用函数求1/2+1/4+...+1/n77.填空练习(指向指针的指针)78.找到年龄最大的人79.字符串排序80.海滩猴子分桃81.已知公式条件求数字82.八进制转换为十进制83.求0-7所能组成的奇数个数84.由两个素数之和表示的偶数85.判断一个素数能被几个9整除86.两个字符串连接程序87.结构体变量传递88.读取数字的整数值并打印出该值个数的*89.数据加密90.专升本一题91.时间函数举例192.时间函数举例293.时间函数举例394.一个猜数游戏95.家庭财务管理小程序96.计算字符串中子串出现的次数97.输入字符并保存到磁盘98.字符串转换成大写字母并输出保存99.文件操作应用1100.文件操作应用2--------------------------------------------------------------------------------c语言经典100题【实用】【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。

c语言实战:计算时间差

c语言实战:计算时间差

//把两个时间都转化为分钟表示 aM = aM + aH * 60;
bM = bM + bH * 60;
diff = bM - aM; diffH = diff / 60; diffM = diff % 60;
printf("the time difference is %dh:%dmin",diffH,diffM);
计算时间差有两种一种是把时间都转化为分钟数一种是把时间点数所以我们选择转化为分钟数来计算
c语 言 实 战 : 计 算 时 间 差
计算时间差有两种,一种是把时间都转化为分钟数,一种是把时间都转化为小时,后者是会用到除法所以不可避免产生浮点数,所以我们选 择转化为分钟数来计算。
//题目:给定两个时间点计算它们的时间差,比如,1:50 和3:21
//定义四个变量来保存输入的时间 //默认a时间小于b时间 int aH=0; int aM=0; int bH=0 ; int bM=0; int diff = 0; int diffH=0; int diffM = 0; scanf_s("%d %d",&aH,&aM); scanf_s("%d %d",&bH,&bM);
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实例68 EGA/VGA屏幕存储 187
实例69 按钮制作 190
实例70 三维视图制作 193
实例71 红旗图案制作 194
实例72 火焰动画制作 196
实例73 模拟水纹扩散 199
实例74 彩色的Photo Frame 201
实例75 火箭发射演示 203
第6部分 系统篇
实例51 简易漏洞扫描器 146
实例52 文件病毒检测程序 149
实例53 监测内存泄露与溢出 150
实例54 实现traceroute命令 152
实例55 实现ping程序功能 154
实例56 获取Linux本机IP地址 157
实例57 实现扩展内存的访问 161
实例58 随机加密程序 164
实例59 MD5加密程序 165
实例60 RSA加密实例 168
第5部分 图形篇
实例61 制作表格 172
实例62 用画线函数作出的图案 174
实例63 多样的椭圆 176
实例64 多变的立方体 177
实例65 简易时钟 178
实例66 跳动的小球 181
实例67 用柱状图表示学生成绩各分数段比率 183
实例76 恢复内存文本 208
实例77 挽救磁盘数据 210
实例78 建立和隐藏多个PRI DOS分区 213
实例79 简单的DOS下的中断服务程序 216
实例80 文件名分析程序 219
实例81 鼠标中断处理 222
实例82 实现磁盘数据的整体加密 224
实例83 揭开CMOS密码 227
实例9 模拟银行常用打印程序 22
实例10 使用一维数组统计选票 26
实例11 使用二维数组统计学生成绩 29
实例12 简单的计算器 32
实例13 时钟程序 35
实例14 华氏温度和摄氏温度的相互转换 38
实例15 SimpleDebug函数应用 40
第2部分 数值计算与数据结构篇
实例16 常用的几种排序方法 46
实例93 弹力球 252
实例94 俄罗斯方块 253
实例95 24点扑克牌游戏 257
实例96 贪吃蛇 260
实例97 潜水艇大战 262
实例98 机器人大战 265
实例99 图形模式下的搬运工 266
实例100 十全十美游戏 269
第8部分 综合篇
实例101 强大的通信录 274
实例35 格式化读写文件 105
实例36 成块读写操作 107
实例37 随机读写文件 108
实例38 文件的加密和解密 111
实例39 实现两个文件的连接 113
实例40 实现两个文件信息的合并 116
实例41 文件信息统计 118
实例42 文件分割实例 121
实例43 同时显示两个文件的内容 123
实例26 大整数阶乘新思路 82
实例27 银行事件驱动模拟程序 84
实例28 模拟迷宫探路 87
实例29 实现高随机度随机序列 89

实例31 菜单实现 96
实例32 窗口制作 97
实例33 模拟屏幕保护程序 100
实例34 文件读写基本操作 102
实例84 获取网卡信息 229
实例85 创建自己的设备 231
实例86 设置应用程序启动密码 233
实例87 获取系统配置信息 236
实例88 硬件检测 239
实例89 管道通信 241
实例90 程序自杀技术实现 244
第7部分 游戏篇
实例91 连续击键游戏 248
实例92 掷骰子游戏 250
第1部分 基础篇
实例1 一个价值“三天”的BUG 2
实例2 灵活使用递增(递减)操作符 5
实例3 算术运算符计算器 7
实例4 逻辑运算符计算器 9
实例5 IP地址解析 11
实例6 用if…else语句解决奖金发放问题 13
实例7 用for循环模拟自由落体 16
实例8 用while语句求n! 19
实例17 广度优先搜索及深度优先搜索 53
实例18 实现基本的串操作 59
实例19 计算各点到源点的最短距离 62
实例20 储油问题 65
实例21 中奖彩球问题 67
实例22 0-1背包问题 69
实例23 阶梯计数问题 72
实例24 二叉树算法集 74
实例25 模拟LRU页面置换算法 79
实例102 模拟Windows下UltraEdit程序 277
实例103 轻松实现个人理财 279
实例104 竞技比赛打分系统 281
实例105 火车订票系统 286
实例44 模拟Linux环境下的vi编辑器 124
实例45 文件操作综合应用——银行账户管理 128
第4部分 病毒与安全篇
实例46 实用内存清理程序 134
实例47 如何检测Sniffer 136
实例48 加密DOS批处理程序 139
实例49 使用栈实现密码设置 141
实例50 远程缓冲区溢出漏洞利用程序 144
相关文档
最新文档