使用OPENSSL编写服务器和客户端代码实例

使用OPENSSL编写服务器和客户端代码实例
使用OPENSSL编写服务器和客户端代码实例

使用OPENSSL编写服务器和客户端代码实例使用相同的ca生成两个证书,一个是server.cer,一个是client.cer,注意生成server.cer的时候必须指明证书可以用于服务端的。

服务器代码:

1.#include "openssl/bio.h"

2.#include "openssl/ssl.h"

3.#include "openssl/err.h"

4.

5.#include

6.

7.#define EXIT_IF_TRUE(x) if (x) \

8. do { \

9. fprintf(stderr, "Check '%s' is true\n", #x); \

10. ERR_print_errors_fp(stderr); \

11. exit(2); \

12. }while(0)

13.

14.int main(int argc, char **argv)

15.{

16. SSL_CTX *ctx;

17. SSL *ssl;

18. X509 *client_cert;

19.

20. char szBuffer[1024];

21. int nLen;

22.

23. struct sockaddr_in addr;

24. int len;

25. int nListenFd, nAcceptFd;

26.

27.// 初始化

28. cutil_init();

29. cutil_log_set_level(LOG_ALL);

30. cutil_log_set_stderr(1);

31. SSLeay_add_ssl_algorithms();

32. OpenSSL_add_all_algorithms();

33. SSL_load_error_strings();

34. ERR_load_BIO_strings();

35.

36.// 我们使用SSL V3,V2

37. EXIT_IF_TRUE((ctx = SSL_CTX_new (SSLv23_method())) == NULL);

38.

39.// 要求校验对方证书

40. SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL);

41.

42.// 加载CA的证书

43. EXIT_IF_TRUE (!SSL_CTX_load_verify_locations(ctx, "cacert.cer", NULL));

44.

45.// 加载自己的证书

46. EXIT_IF_TRUE (SSL_CTX_use_certificate_file(ctx, "server.cer", SSL_FILETYPE_PEM

) <= 0) ;

47.

48.// 加载自己的私钥

49. EXIT_IF_TRUE (SSL_CTX_use_PrivateKey_file(ctx, "server.key", SSL_FILETYPE_PEM)

<= 0) ;

50.

51.// 判定私钥是否正确

52. EXIT_IF_TRUE (!SSL_CTX_check_private_key(ctx));

53.

54.// 创建并等待连接

55. nListenFd = cutil_socket_new(SOCK_STREAM);

56. cutil_socket_bind(nListenFd, NULL, 8812, 1);

57.

58. memset(&addr, 0, sizeof(addr));

59. len = sizeof(addr);

60. nAcceptFd = accept(nListenFd, (struct sockaddr *)&addr, (size_t *)&len);

61. cutil_log_debug("Accept a connect from [%s:%d]\n",

62. inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));

63.

64.// 将连接付给SSL

65. EXIT_IF_TRUE( (ssl = SSL_new (ctx)) == NULL);

66. SSL_set_fd (ssl, nAcceptFd);

67. EXIT_IF_TRUE( SSL_accept (ssl) != 1);

68.

69.// 进行操作

70. memset(szBuffer, 0, sizeof(szBuffer));

71. nLen = SSL_read(ssl,szBuffer, sizeof(szBuffer));

72. fprintf(stderr, "Get Len %d %s ok\n", nLen, szBuffer);

73. strcat(szBuffer, " this is from server");

74. SSL_write(ssl, szBuffer, strlen(szBuffer));

75.

76.// 释放资源

77. SSL_free (ssl);

78. SSL_CTX_free (ctx);

79. close(nAcceptFd);

80.}

客户端代码

1.#include "openssl/bio.h"

2.#include "openssl/ssl.h"

3.#include "openssl/err.h"

4.

5.#include

6.

7.#define EXIT_IF_TRUE(x) if (x) \

8. do { \

9. fprintf(stderr, "Check '%s' is true\n", #x); \

10. ERR_print_errors_fp(stderr); \

11. exit(2); \

12. }while(0)

13.

14.int main(int argc, char **argv)

15.{

16. SSL_METHOD *meth;

17. SSL_CTX *ctx;

18. SSL *ssl;

19.

20. int nFd;

21. int nLen;

22. char szBuffer[1024];

23.

24.// 初始化

25. cutil_init();

26. cutil_log_set_level(LOG_ALL);

27. cutil_log_set_stderr(1);

28. SSLeay_add_ssl_algorithms();

29. OpenSSL_add_all_algorithms();

30. SSL_load_error_strings();

31. ERR_load_BIO_strings();

32.

33.// 我们使用SSL V3,V2

34. EXIT_IF_TRUE((ctx = SSL_CTX_new (SSLv23_method())) == NULL);

35.

36.// 要求校验对方证书

37. SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL);

38.

39.// 加载CA的证书

40. EXIT_IF_TRUE (!SSL_CTX_load_verify_locations(ctx, "cacert.cer", NULL));

41.

42.// 加载自己的证书

43. EXIT_IF_TRUE (SSL_CTX_use_certificate_file(ctx, "client.cer", SSL_FILETYPE_PEM

) <= 0) ;

44.

45.// 加载自己的私钥

46. EXIT_IF_TRUE (SSL_CTX_use_PrivateKey_file(ctx, "client.key", SSL_FILETYPE_PEM)

<= 0) ;

47.

48.// 判定私钥是否正确

49. EXIT_IF_TRUE (!SSL_CTX_check_private_key(ctx));

50.

51.// 创建连接

52. nFd = cutil_socket_new(SOCK_STREAM);

53. if(cutil_socket_connect(nFd, "127.0.0.1", 8812, 30) < 0)

54. {

55. cutil_log_error("连接服务器失败\n");

56. return -1;

57. }

58.

59.// 将连接付给SSL

60. EXIT_IF_TRUE( (ssl = SSL_new (ctx)) == NULL);

61. SSL_set_fd (ssl, nFd);

62. EXIT_IF_TRUE( SSL_connect (ssl) != 1);

63.

64.// 进行操作

65. sprintf(szBuffer, "this is from client %d", getpid());

66. SSL_write(ssl, szBuffer, strlen(szBuffer));

67.

68.// 释放资源

69. memset(szBuffer, 0, sizeof(szBuffer));

70. nLen = SSL_read(ssl,szBuffer, sizeof(szBuffer));

71. fprintf(stderr, "Get Len %d %s ok\n", nLen, szBuffer);

72.

73. SSL_free (ssl);

74. SSL_CTX_free (ctx);

75. close(nFd);

76.}

C语言程序设计 入门源代码代码集合

#include <> void print_star(void) { printf("*****************\n"); } void print_welcome(void) { printf("C language,welcome!\n"); } void main() { print_star(); print_welcome(); print_star(); getchar(); } 演示2 #include "" int sum(int i,int j) { return(i + j); } void main() { int n1,n2; printf("input 2 numbers:\n"); scanf("%d%d",&n1,&n2); printf("the sum = %d\n",sum(n1,n2)); getchar(); } 演示3 #include "" int maxnum(int,int,int); main() { int a,b,c; printf("Please enter 3 numbers:\n"); scanf("%d,%d,%d",&a,&b,&c); printf("Maxnum is %d\n",maxnum(a,b,c));

} int maxnum(int x,int y,int z) { int max=x; if(y>max) max = y; if(z>max) max = z; return max; } 演示4 #include <> int s1(int n) { int j,s; s=0; for(j=1;j<=n;j++) s=s+j; return s; } int sum(int n) { int i,s=0; for(i=1;i<=n;i++) s=s+s1(i); return s; } void main() { int n; printf("n:"); scanf("%d",&n); printf("s=%d\n",sum(n)); } 演示5

C语言入门-基本运算源代码

一、一到一百求和 #include main() { inti,sum; for(i=1,sum=0;i<=100;sum+=i++); printf("1+2+……+100=%d",sum); } 如果求偶数和,则变成:for(i=2,sum=0;I<=100;sum=sum+i,i+=2); 已知循环次数有for循环比较方便,循环次数未知用do while或while比较方便。 二、计算三角形面积 #include #include main() { float a,b,c,s,area; printf("请输入三角形的三边:\n"); scanf("%f%f%f",&a,&b,&c); while(c>a+b||a>c+b||b>a+c) { printf("所输入数据组不成三角形\n"); printf("请再次输入三角形的三边:\n"); scanf("%f%f%f",&a,&b,&c); } { s=(a+b+c)/2.; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("a=%5.2f,b=%5.2f,c=%5.2f,s=%7.2f \n",a,b,c,s); printf("area=%7.2f\n",area); } } 三、解一元二次方程 #include #include main() { float a,b,c,dt,p,q,x1,x2; printf("请以此输入一元二次方程系数a,b,c\n"); scanf("%f%f%f",&a,&b,&c); dt=b*b-4*a*c; if(dt>=0) { p=-b/(2*a); q=sqrt(dt)/(2*a); x1=p+q; x2=p-q; printf("\nx1=%5.2f\nx2=%5.2f\n",x1,x2); } else printf("方程无解"); } 四一箭穿心图案 main() { printf("\n"); printf(" * * * *\n"); printf(" * * * *\n"); printf(" * * *\n"); printf(" >>>------I LOVE YOU !------->\n"); printf(" * *\n"); printf(" * *\n"); printf(" * *\n"); printf(" * *\n"); printf(" *\n"); } 五、得出字符ASCII码 #include main() {char c; printf("请输入一个字符:\n"); scanf("%c",&c); printf("字符是:%c,它的ASCII码是:%d\n",c,c); 六、破解密码 #include #define PASSWORD 154533 main() { inti; for (i=1;i<=999999;i++) {

c实例源代码

【实例1-1】 using System; using System、Collections、Generic; using System、Text; namespace _ { class Program { static void Main(string[] args) { System、Console、Wriine("恭喜您,学会了C#编程!"); System、Console、ReadLine(); } } } 【实例1-2】 private void Form1_Load(object sender, EventArgs e) { this、Text="这就是一窗口!"; Label lbShow = new Label(); lbShow、Location = new Point(40,50); lbShow、AutoSize = true; lbShow、Text = "恭喜您学会编程了!"; this、Controls、Add(lbShow); int[] x, y; x = new int[5] { 1,2,3,4,5}; y = new int[5]; y = x; foreach (int a in y) { lbShow、Text += a、ToString(); } this、Controls、Add(lbShow); } 【实例2-1】 using System; using System、Windows、Forms; namespace TestEnum { public partial class TestEnum : Form { //Visual Studio 、Net自动生成得构造函数,后文示例将全部省略 public TestEnum() { Initializeponent(); } enum MyEnum { a = 101, b, c, d = 201, e, f }; //声明枚举型 private void TestEnum_Load(object sender, EventArgs e) { MyEnum x = MyEnum、f; //使用枚举型 MyEnum y = (MyEnum)202; string result ="枚举数x得值为"; result += (int)x; //将x转换为整数 result += "\n枚举数y代表枚举元素" + y; lblShow、Text = result; } }

完整word版整理C语言入门经典案例及源代码

精品文档 循环控制输出图案 【程序1】 题目:输出9*9口诀。 1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。 2.程序源代码: #include stdio.h main() { int i,j,result; printf(\ ); 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(\ );/*每一行后换行*/ } } 【程序2】 题目:要求输出国际象棋棋盘。 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(\ ); } } ============================================================== 【程序3】

题目:打印楼梯,同时在楼梯上方打印两个笑脸。 1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。 2.程序源代码: #include stdio.h 精品文档. 精品文档 main() { int i,j; printf(\\1\n);/*输出两个笑脸*/ for(i=1;i<11;i++) { for(j=1;j<=i;j++) printf(%c%c,219,219); printf(\ ); } } 【程序4】 题目:打印出如下图案(菱形) * *** ****** ******** ****** *** * 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(\ ); } for(i=0;i<=2;i++) {

纯C语言写的一个小型游戏源代码

/* A simple game*/ /*CopyRight: Guanlin*/ #include #include #include #include #include #include struct object_fix { char name[20]; char id[5]; char desc[500]; char action[30]; char im[5]; }; struct object_move { char name[20]; char id[5]; char desc[500]; int loc; int pwr; int strg; char im[5]; }; struct rover {

char name[20]; char id[5]; char desc[500]; int pwr; int strg; int location[2]; char im[5]; }; struct map /* this is the map structure*/ { char data[20]; char add_data[20]; int amount; int x; /* this were the successor keeps it's x & y values*/ int y; }; struct location /*this structure is for the successor lister*/ { float height; char obj; }; void stats_update(int selected, struct rover *p_rover) { switch (selected) { case 1: if(p_rover->pwr < 7) printf("\n\nYou do not have enough power to perform this action!\n\n"); else

c编程实例100例

【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。 2.程序源代码:main(){int i,j,k;printf("\n"... 经典c程序100例2010-03-20 15:47 | (分类:默认分类) 【程序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万元的部分,可可提 成%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 2.程序源代码: main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*;bonus2=bonus1+100000*; bonus4=bonus2+200000*; bonus6=bonus4+200000*; bonus10=bonus6+400000*;

c++编程实例100例

输入一个整数将各位征税反转后输出 #include using namespace std; int main() { int n,right_digit,newnum=0; cout<<"Enter the number:"; cin>>n; cout<<"the number in revers srder is:"; do{ right_digit=n%10; cout< using namespace std; int main() { int i=1,sum=0; while (i<=10) { sum+=i; i++; } cout<<"sunm="< using namespace std; int main() { int i=1,sum=0; do { sum+=i; i++; } while (i<=10);

cout<<"sum="< using namespace std; int main() { long int i; int bouns1,bouns2,bouns4,bouns6,bouns10,bouns; scanf("%d",&i);//%ld表示这个数据的类型是long int 长整形 //&i 表示i的地址,及输出的是i的值bouns1=100000*0.1; bouns2=bouns1+10000090.75; bouns4=bouns2+200000*0.5; bouns6=bouns4+200000*0.3; bouns10=bouns6+400000*0.15; if(i<=100000) bouns=i*0.1; else if(i<=200000) bouns=bouns1+(i-100000)*0.075; else if(i<=400000) bouns=bouns2+(i-200000)*0.05; else if(i<=600000) bouns=bouns4+(i-400000)*0.03; else if(i<=10000000) bouns=bouns6+(i-600000)*0.15; else bouns=bouns10+(i-1000000)*0.01; printf("bouns=%d",bouns);//输出一个数据a为整形数据。 } 星期 int day; cout<<"输入数:"; cin>>day; switch (day) { case 0: cout<<"sunday"<

递归算法实例C源码

玩转算法与数据结构之递归算法 —HIT2000鲁天伟 递归算法在数据结构的树,图程序中都有应用。那么什么是递归算法呢。其实就是函数的自我调用。循环的在作一件事,把一个问题分成了可以重复的子问题去处理。递归这个词有两层含义,即递去和归来。递去,就是函数一层一层的在调用自己,我们在这里定义调用自己的函数为父函数,被调用的是子函数。父与子是个相对概念(参照二叉树中父结点与子结点来理解)。递去,何时结束呢,是要设定一个结束条件。那么这种结束条件的设置,第一种是设全局变量,全局变量随着每次自我调用在变化,当全局变量达到指定值或是全局变量参与的计算达到某个指定的值时结束。第二种是形参变量在被调用时达到指定值或形参参与的计算达到某个值时结束。第三种是当不满足自我调用条件时结束。这三种结束条件结合程序的需要可以组合使用。归来是指调用到某一次时,子程序执行结束了,子函数一层一层的把程序的执行权返还给自己的父函数,父函数执行所调用子函数的下一条命令。简单的递归,是一个函数体中调用自己一次,复杂的是在函数体中调用自己多次。 举一个字符串逆序输出的简单递归调用的例子如下图。 图表 1 递归函数调用

1、字符串逆序输出问题:将一个长为4的字符串逆序输出。代码如下: #include #define MAXSIZE 4 char data[MAXSIZE]; Rverse(int n){ if(n=3,F(1)=1,F(2)=1 代码如下: #include int Fib(int N){ if(N<=1) return N; else return Fib(N-1)+Fib(N-2); }

最新(整理)c语言入门经典案例及源代码.word版本

循环控制输出图案 【程序1】 题目:输出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");/*每一行后换行*/ } } 【程序2】 题目:要求输出国际象棋棋盘。 1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。 2.程序源代码: #include "stdio.h"

{ 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"); } } ============================================================== 【程序3】 题目:打印楼梯,同时在楼梯上方打印两个笑脸。 1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。 2.程序源代码: #include "stdio.h" main() { int i,j; printf("\1\1\n");/*输出两个笑脸*/ for(i=1;i<11;i++)

搜索算法实例C源码

玩转算法与数据结构之搜索算法 —HIT2000鲁天伟 搜索算法,是在计算机存储的数据中,如何高效的找到所需要的数据。下面我们要给出的就是搜索常用算法实例,供大家学习使用。 搜索算法如下: 线性搜索:整型数组int data[n],要搜索的数据是key。从左起第1个数据开始向右逐个比对,找到则返回位置值,查找游标(数组位置标识变量)越界则表示没有这个数据。线性搜索代码如下: int linerSearch(int* data,int key,int len){ int index=0; int counter=0; for(index=0;indexkey, right=mid-1;如果data[mid]right, 此时表示数组中没有key数据。 折半搜索代码如下: int zeBan(int*data,int key,int left,int right){ int middle; int position=-1; if(left<=right){ middle=(left+right)/2; if(key==data[middle]){ position=middle; printf("Found it,position in array is %d\n",position); } else{ if(key

C语言编程源代码23

} } ===================================== ========================= 【程序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","sis ter"}; char**q; int k; for(k=0;k<5;k++) {;/*这里填写什么语句*/ printf("%s\n",*q); } } ===================================== ========================= 【程序78】 题目:找到年龄最大的人,并输出。请找出程序中有什么问题。 1.程序分析: 2.程序源代码: #define N4

c程序实例

C++程序设计实例 【例3.12】用下面公式求π的近似值。π/4≈1-1/3+1/5-1/7+…直到最后一项的绝对值小于10-7为止。根据给定的算法很容易编写程序如下: .#includ e .#includ e .#includ e .using namespace std; .int main() .{ .int s=1; .d oubl e n=1,t=1,pi=0; .whil e((fabs(t))>1e-7) .{ .pi=pi+t; .n=n+2; .s=-s; .t=s/n; .} .pi=pi*4; .cout<<"pi="<

.#include .#include .using namespace std; .int main( ) .{ .long f1,f2; .int i; .f1=f2=1; .for(i=1;i<=20;i++) .{ .cout< .#include .#include .using namespace std; .int main( ) .{ .int m,k,i,n=0; .bool prime;//定义布尔变量prime .for(m=101;m<=200;m=m+2) //判别m是否为素数,m由101变化到200,增量为2 .{ .prime=true;//循环开始时设prime为真,即先认为m为素数 .k=int(sqrt(m)); //用k代表根号m的整数部分 .for(i=2;i<=k;i++) //此循环作用是将m被2~根号m除,检查是否能整除 .if(m%i==0) //如果能整除,表示m不是素数

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.画图综合例子2 61.打印杨辉三角形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.时间函数举例2 93.时间函数举例3 94.一个猜数游戏95.家庭财务管理小程序96.计算字符串中子串出现的次数 97.输入字符并保存到磁盘98.字符串转换成大写字母并输出保存99.文件操作应用1 100.文件操作应用2 -------------------------------------------------------------------------------- c语言经典100题【实用】

-经典C语言源代码

经典C语言源代码 1、(1)某年某月某日是星期几 #include int main() { int year, month, day; while (scanf_s("%d%d%d", &year, &month, &day) != EOF) { if (month == 1 || month == 2)//判断month是否为1或2 { year--; month += 12; } int c = year / 100; int y = year - c * 100; int week = (c / 4) - 2 * c + (y + y / 4) + (13 * (month + 1) / 5) + day - 1; while (week<0) { week += 7; } week %= 7; switch (week) { case 1:printf("Monday\n"); break;

case 2:printf("Tuesday\n"); break; case 3:printf("Wednesday\n"); break; case 4:printf("Thursday\n"); break; case 5:printf("Friday\n"); break; case 6:printf("Saturday\n"); break; case 0:printf("Sunday\n"); break; } } return 0; } 1、(2)某年某月某日是第几天(一维数组) #include "stdio.h" void main() { int i, flag, year, month, day, dayth; int month_day[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; printf("请输入年/月/日:\n"); scanf_s("%d/%d/%d", &year, &month, &day); dayth = day; flag = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0); if (flag) month_day[2] = 29;

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;

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)

最新C语言源代码

剪刀石头布源代码 #include #include main() { int d,x; { printf("请输入:1是剪刀,2是石头,3是布"); scanf("%d",&d); x=rand()%3; if(d==x) printf("双方平局"); else if((d==1&&x==2)||(d==2&&x==3)||(d==3&&x==1)) printf("你赢了"); else printf("电脑赢了"); } }

简单计算器 #include main() { int a,b,d=0; char c; while(d==0) { printf("请开始计算,请输入需要运算的数字和运算法则,数字符号数字:"); scanf("%d%c%d",&a,&c,&b); switch(c) { case'+': printf("%d+%d=%d\n",a,b,a+b); break; case'-': printf("%d-%d=%d\n",a,b,a-b); break; case'*': printf("%d*%d=%d\n",a,b,a*b); break; case'/': if(0==b) printf("除法被除数不能为零!\n") ; else printf("%d/%d=%d\n",a,b,a/b); break; } } }

加油站加油问题 #include int main() { double a = 3.25, b = 3.00, c= 2.75; double d = 0.05, e = 0.10, m; int x,y,z; printf("请输入您要的加油量:"); scanf("%d",&x); printf("请输入您要的汽油种类,1-a型汽油售价3.25元/千克,2-b型汽油售价3.00元/千克,3-c型汽油售价2.75元/千克:"); scanf("%d",&y); printf("请输入您要的服务类型,1-自己加服务优惠0.05,2-协助加服务优惠0.10:"); scanf("%d",&z); switch(y) { case 1: y = a;break; case 2: y = b;break; case 3: y = c;break; } if(z == 1) m = (1 - d) * y * x; else if(z == 2) m = (1 - e) * y * x; printf("您需要支付:%f 元,谢谢惠顾,欢迎下次再来",m); return 0; }

C程序开发经典实例

【程序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】

相关主题
相关文档
最新文档