编写一个完整的c语言源程序

编写一个完整的c语言源程序,第1张

#include <stdioh>

#include <stringh>

#include <ctypeh>

#define MAXTYPE 4

enum { LOW, UP, DIGIT, OTHER };

int count[MAXTYPE];

float percent[MAXTYPE];

int CharTypeCount(char s)

{

unsigned char p;

int i;

int n;

memset(count, '\0', sizeof(count));

p = (unsigned char)s;

n = 0;

while (p) {

if (p>='a' && p<= 'z') {

count[LOW]++;

}

else if (p>='A' && p<= 'Z') {

count[UP]++;

}

else if (p>='0' && p<= '9') {

count[DIGIT]++;

}

else {

count[OTHER]++;

}

p++;

n++;

}

for (i=0; i<MAXTYPE; i++) {

percent[i] = (count[i]10)/n;

}

return n;

}

int main()

{

char s[1000];

int i;

int n;

while(gets(s) != NULL) {

n = CharTypeCount(s);

if (n <=0 ) {

printf("please input a string!\n");

continue;

}

printf("a-z: %d/%d %2f%%\n", count[LOW], n, percent[LOW]);

printf("A-Z: %d/%d %2f%%\n", count[UP], n, percent[UP]);

printf("0-9: %d/%d %2f%%\n", count[DIGIT], n, percent[DIGIT]);

printf("OTHER: %d/%d %2f%%\n", count[OTHER], n, percent[OTHER]);

}

return 0;

}

#include<stdioh>

int main(void)

{

char b[18][30] = { '\0' };

int a[18][30];

int i, j = 0, n;

int year, money, day;

int ki, kj;

int biaoji = 0;

int jiaoyanma;

scanf("%d", &n);

for (i = 0; i < n; i++)

{

for (j = 0; j < 29; j++)

{

b[i][j] = 12;

a[i][j] = 12;

}

}

for (i = 0; i < n; i++)

{

scanf_s("%s", b[i], 20);

}

for (kj = 0; kj < n; kj++)

{

if (b[kj][14] != 12 && b[kj][15] == 0 || b[kj][17] != 12 && b[kj][18] == 0)  //该身份z号为15位或18位

{

for (i = 0; i < n; i++)  //将读入的身份z字符转换成数字。

{

for (j = 0; j < 18; j++)

{

switch (b[i][j])

{

case '0':a[i][j] = 0; break;

case '1':a[i][j] = 1; break;

case '2':a[i][j] = 2; break;

case '3':a[i][j] = 3; break;

case '4':a[i][j] = 4; break;

case '5':a[i][j] = 5; break;

case '6':a[i][j] = 6; break;

case '7':a[i][j] = 7; break;

case '8':a[i][j] = 8; break;

case '9':a[i][j] = 9; break;

case 'X':a[i][j] = 10; break;

default:a[i][j] = 12; break;

}

}

}

if (a[kj][15] >= 10)    //恰好为15位身份z号

{

if (a[kj][12] == 9 && a[kj][13] == 9 && a[kj][14] > 5)  //判断该身份z是否百岁

{

for (ki = 0; ki < 6; ki++)   //输出前六位

{

printf("%d", a[kj][ki]);

}

printf("18");               //年的前两位数

for (ki = 6; ki < 15; ki++)  //输出后两位年、月日、顺序码

{

printf("%d", a[kj][ki]);

}

jiaoyanma = (a[kj][0]  7 + a[kj][1]  9 + a[kj][2]  10 + a[kj][3]  5 + a[kj][4]  8 + a[kj][5]  4 + 10 + a[kj][6]  6 + a[kj][7]  3 + a[kj][8]  7 + a[kj][9]  9 + a[kj][10]  10 + a[kj][11]  5 + a[kj][12]  8 + a[kj][13]  4 + a[kj][14]  2) % 11;

switch (jiaoyanma)

{

case 0:jiaoyanma = 1; break;

case 1:jiaoyanma = 0; break;

case 2:jiaoyanma = 10; break;

case 3:jiaoyanma = 9; break;

case 4:jiaoyanma = 8; break;

case 5:jiaoyanma = 7; break;

case 6:jiaoyanma = 6; break;

case 7:jiaoyanma = 5; break;

case 8:jiaoyanma = 4; break;

case 9:jiaoyanma = 3; break;

case 10:jiaoyanma = 2; break;

}

if (jiaoyanma == 10)

{

printf("X\n");

}

else{

printf("%d\n", jiaoyanma);

}

}

else{                                      //该身份z号非百岁

for (ki = 0; ki < 6; ki++)

{

printf("%d", a[kj][ki]);

}

printf("19");

for (ki = 6; ki < 15; ki++)

{

printf("%d", a[kj][ki]);

}

jiaoyanma = (a[kj][0]  7 + a[kj][1]  9 + a[kj][2]  10 + a[kj][3]  5 + a[kj][4]  8 + a[kj][5]  4 + 11 + a[kj][6]  6 + a[kj][7]  3 + a[kj][8]  7 + a[kj][9]  9 + a[kj][10]  10 + a[kj][11]  5 + a[kj][12]  8 + a[kj][13]  4 + a[kj][14]  2) % 11;

switch (jiaoyanma)

{

case 0:jiaoyanma = 1; break;

case 1:jiaoyanma = 0; break;

case 2:jiaoyanma = 10; break;

case 3:jiaoyanma = 9; break;

case 4:jiaoyanma = 8; break;

case 5:jiaoyanma = 7; break;

case 6:jiaoyanma = 6; break;

case 7:jiaoyanma = 5; break;

case 8:jiaoyanma = 4; break;

case 9:jiaoyanma = 3; break;

case 10:jiaoyanma = 2; break;

}

if (jiaoyanma == 10)

{

printf("X\n");

}

else{

printf("%d\n", jiaoyanma);

}

}

}

else{

year = a[kj][6]  1000 + a[kj][7]  100 + a[kj][8]  10 + a[kj][9];

money = a[kj][10]  10 + a[kj][11];

day = a[kj][12]  10 + a[kj][13];

jiaoyanma = (a[kj][0]  7 + a[kj][1]  9 + a[kj][2]  10 + a[kj][3]  5 + a[kj][4]  8 + a[kj][5]  4 + a[kj][6]  2 + a[kj][7] + a[kj][8]  6 + a[kj][9]  3 + a[kj][10]  7 + a[kj][11]  9 + a[kj][12]  10 + a[kj][13]  5 + a[kj][14]  8 + a[kj][15]  4 + a[kj][16]  2) % 11;

switch (jiaoyanma)

{

case 0:jiaoyanma = 1; break;

case 1:jiaoyanma = 0; break;

case 2:jiaoyanma = 10; break;

case 3:jiaoyanma = 9; break;

case 4:jiaoyanma = 8; break;

case 5:jiaoyanma = 7; break;

case 6:jiaoyanma = 6; break;

case 7:jiaoyanma = 5; break;

case 8:jiaoyanma = 4; break;

case 9:jiaoyanma = 3; break;

case 10:jiaoyanma = 2; break;

}

if (money > 12 || money < 1)

{

printf("Invalid\n");

biaoji++;

}

if (money == 1 || money == 3 || money == 5 || money == 7 || money == 8 || money == 10 || money == 12)

{

if (day<1 || day>31)

{

printf("Invalid\n");

biaoji++;

}

}

if (money == 4 || money == 6 || money == 9 || money == 11)

{

if (day<1 || day>30)

{

printf("Invalid\n");

biaoji++;

}

}

if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0 && money == 2)

{

if (day<1 || day>29)

{

printf("Invalid\n");

biaoji++;

}

}

if ((!(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)) && money == 2)

{

if (day<1 || day>29)

{

printf("Invalid\n");

biaoji++;

}

}

if (jiaoyanma != a[kj][17])

{

printf("Invalid\n");

biaoji++;

}

if (biaoji == 0)

{

printf("Valid\n");

}

biaoji = 0;

}

}

else{

printf("Invalid\n");

}

}

return 0;

}

下面是题目:

3

身份z的奥秘(10分)

题目内容:

18位身份z标准在国家质量技术监督局于1999年7月1日实施的

GB11643-1999《公民身份号码》中做了明确的规定。

GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称"社会保障号码"更名为"公民身份

号码",另外GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。GB11643-1999《公民身份号码》主要内容如

下:

一、范围

该标准规定了公民身份号码的编码对象、号码的结构和表现形式,使每个编码对象获得一个唯一的、不变的法定号码。

二、编码对象

公民身份号码的编码对象是具有中华人民共和国国籍的公民。

三、号码的结构和表示形式

1、号码的结构

公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

2、地址码

表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。

3、出生日期码

表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。

4、顺序码

表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。

5、校验码

(1)十七位数字本体码加权求和公式

S = Sum(Ai Wi), i = 0, , 16 ,先对前17位数字的权求和 

Ai: 表示第i位置上的身份z号码数字值 

Wi: 表示第i位置上的加权因子 

Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

(2)计算模

Y = mod(S, 11)

(3)通过模得到对应的校验码

Y: 0 1 2 3 4 5 6 7 8 9 10 

校验码: 1 0 X 9 8 7 6 5 4 3 2

四、举例如下:

北京市朝阳区: 11010519491231002X 

广东省汕头市: 440524188001010014

15位的身份z号升级办法:

15位的身份z号:dddddd yymmdd xx p

18位的身份z号:dddddd yyyymmdd xx p y

其中dddddd为地址码(省地县三级)

yyyymmdd yymmdd 为出生年月日

xx顺号类编码

p性别

15 位的 yy 年升为 18 位后,变成 19yy年,但对于百岁以上老人, 则为 18yy 年,此时,他们的最后三位顺序码为996, 997, 998 或 999 来标记。

输入格式:

输入n组身份z号码,第一行为个数,以后每行为身份z号码。

输出格式:

如果输入的身份z号码为15位,则将其升级为18位后显示输出;否则判断其是否为合法身份z号,并逐行输出。

输入样例:

4

350622197904130331

11010519491231002X

110105491231002

110105491231996

输出样例:

Invalid

Valid

11010519491231002X

110105184912319965

C语言写的21点程序!

#include <stdioh>

#include <stdlibh>

#include <timeh>

#define NULL 0

int compare(char sum1,char sum2)

{

if(sum1>=sum2)

return 1;

else

return 0;

}

int breakal(int sum)

{

if(sum>21)

return 0;

else

return 1;

}

char change(int card)

{

char ch,n,m,x;

switch(card)

{

case 1: ch='A';

break;

case 10:

{

n=1+int(rand()/(RAND_MAX+10));

if(n==1)

ch='K';

else

{

m=1+int(rand()/(RAND_MAX+10));

if(m==1)

ch='Q';

else

{

x=1+int(rand()/(RAND_MAX+10));

if(x==1)

ch='J';

}

}

break;

}

} //以上switch语句用于将数字转换成字符

return ch;

}

void game()

{

int i,k,n;

char host_ch,player_ch,host_card[15],player_card[15];

int host_sum=0,player_sum=0;

srand(time(NULL));

for(i=0;i<2;i++)

{

int (100rand()/(RAND_MAX+10));

player_card[i]=1+int (100rand()/(RAND_MAX+10));

player_ch=change(player_card[i]);

if(player_card[i]>1 && player_card[i]<10) //输出玩家抽到的牌的点数

printf("您抽到的第%d张牌是%d\n",i+1,player_card[i]);

else if(player_card[i]==10)

printf("您要到的第%d张牌是%c\n",i+1,player_ch);

else

printf("您要到的第%d张牌是A\n",i+1);

if(player_ch=='A') //询问判断玩家的A的点值为1或11

{

printf(" 您有一张A,您想要A作1还是11?\n");

printf(" 1 1\n" );

printf(" 2 11\n");

if(scanf("%d",&n) && n==1)

player_card[i]=1;

else

player_card[i]=11;

}

host_card[i]=1+int (100rand()/(RAND_MAX+10));

host_ch=change(host_card[i]);

if(host_ch=='A') //电脑自动判断庄家的A的点值为1或11

{

k=1+int(rand()/(RAND_MAX+10));

if(k==1)

host_card[i]=11;

else

host_card[i]=1;

}

player_sum+=player_card[i]; //分别对庄家和玩家的点数求和

host_sum+=host_card[i];

}

printf("您现在的总面值为%d\n",player_sum);//输出玩家的总面值

for(i=2;i<5;i++)

{

if(host_sum<18 && host_sum>0)//电脑自动判断庄家是否要牌

{

host_card[i]=1+int (100rand()/(RAND_MAX+10));

host_ch=change(host_card[i]);

if(host_ch=='A') //电脑自动判断庄家的A的点值为1或11

{

k=1+int(rand()/(RAND_MAX+10));

if(k==1)

host_card[i]=11;

else

host_card[i]=1;

}

host_sum+=host_card[i];

}

printf("您还要继续要牌吗?\n");

printf(" 1要\n");

printf(" 2不要\n");

scanf("%d",&k);

if(k==1)

{

{

player_card[i]=1+int (100rand()/(RAND_MAX+10));

player_ch=change(player_card[i]);

if(player_ch=='A') //询问判断玩家的A的点值为1或11

{

printf("您有一张A,您想要A作1还是11?\n");

printf(" 1 1\n" );

printf(" 2 11\n");

if(scanf("%d",&n) && n==1)

player_card[i]=1;

else

player_card[i]=11;

printf("您要到的第%d张牌是A\n",i+1);

}

else

printf("您要到的第%d张牌是%d\n",i+1,player_card[i]);

player_sum+=player_card[i];

if(i==4)

printf("您手中已有5张牌,一决胜负的时刻到啦!\n");

if(breakal(host_sum)==0)

{

if(breakal(player_sum)==0)

{

printf("庄家爆牌了,您也爆牌了!庄家的牌面值是%d,您的牌面值是%d\n",host_sum,player_sum);

printf("\nYou lose\n");

break;

}

}

else

if(breakal(player_sum)==0)

{

printf("您爆牌了!您的牌面值是%d\n \nYou lose\n",player_sum);

break;

}

}

if(breakal(host_sum)==0)

{

printf("庄家爆牌了!庄家的牌面值是%d\n",host_sum);

printf("\nCongratulations! YOu win!\n");

break;

}

}

else

{

printf("庄家的牌面值是%d,您的牌面值是%d\n",host_sum,player_sum);

if(compare(host_sum,player_sum)==1)

printf("\nYou lose\n");

else

printf("\nCongratulations! You win!\n");

break;

}

}

}

int main()

{

kaishi:

int n;

printf(" 欢迎进入21点游戏!\n");

printf(" \n");

printf(" 1开始游戏\n");

printf(" 2退出游戏\n");

printf(" \n");

if(scanf("%d",&n)&&n==1)

game();

else if(n==2)

{

printf(" \n");

printf(" 游戏结束!祝您愉快!\n");

printf("\n\n");

printf(" 再见!\n");

printf(" \n");

return 0;

}

goto kaishi;

}

#include "stdioh"

#include "ctypeh"

#include "malloch"

#include "stdlibh"

#define M 100

#define ZERO 0

#define SUCC 1

#define DEFT 0

#define MIN -1

#define MAX 2001

typedef int valuetype;

typedef struct Bnode

{

valuetype data;

int layer ;

struct Bnode Lson,Rson;

}Bnode,Bptr;

void writeT(Bptr root)

{

int first=0,last=1;

Bptr p,q[M];

if(root->data==MIN)p=root->Rson;

else p=root->Lson;

if(p==NULL)

{ printf(" 当前二叉树为空,没有结点。\n");return;}

printf(" 当前二叉树的结点为:\n");

printf(" 层号 当前结点 左儿子 右儿子\n");

p->layer=1;

q[0]=p;

while(first!=last)

{

p=q[first++];

printf("%6d%10d ",p->layer,p->data);

if(p->Lson==NULL)printf("%12c",'\040');

else

{

printf("%12d",p->Lson->data);

p->Lson->layer=p->layer+1;

q[last++]=p->Lson;

}

if(p->Rson!=NULL)

{

printf("%12d",p->Rson->data);

p->Rson->layer=p->layer+1;

q[last++]=p->Rson;

}

printf("\n");

}

}

void inorder(Bptr p)

{

if(!p)return;

inorder(p->Lson);

printf("%5d",p->data);

inorder(p->Rson);

}

void sortT(Bptr root)

{

if(root->data==MIN) inorder(root->Rson);

else inorder(root->Rson);

printf("\n");

}

Bptr search (valuetype x,Bptr p)

{

while (p!=NULL)

{

if(x==p->data)return p;

if(x<p->data) p=p->Lson;

else p=p->Rson;

}

return NULL;

}

void searchT(Bptr root)

{

int x;

printf("请输入要查找的结点值x>0,x=");

scanf("%d",&x);

if(search(x,root)==NULL)printf("数中没有%d!\n",x);

else printf("%d 已经找到!\n",x);

}

void insert(valuetype x,Bptr &root)

{

Bptr f,p;

f=NULL;p=root;

while(p!=NULL)

{

if(x<p->data)f=p,p=p->Lson;

else f=p,p=p->Rson;

}

p=new Bnode;

p->data=x;p->Lson=p->Rson=NULL;

if(f==NULL)root=p;

else

if(x<=f->data)f->Lson=p;

else f->Rson=p;

}

void insertT(Bptr p)

{

int x;

printf("请输入要插入的结点的值x>0,x=");

scanf("%d",&x);

insert(x,p);

printf("%d已经被插入了\n",x);

}

Bptr creatST()

{

Bptr root ;valuetype x;

root =NULL;

printf(" 构造初始检索树,请输入元素序列,元素个数不得超过%d,要求:\n",M);

printf("序列以%d或%d开始,以0结束,元素值均为小于%d的正整数\n",MIN,MAX,MAX);

scanf("%d",&x);

while(x!=ZERO)

{

insert(x,root);

scanf("%d",&x);

}

return root;

}

int deleteST(valuetype x,Bptr root)

{

Bptr f,p,s,r;

for (p=root;;)

{

if(p==NULL)return DEFT;

if (x==p->data)break;

if(x<p->data)

{

f=p;p=p->Rson;

}

else

{

f=p;p=p->Rson;

}

}

if (p->Rson==NULL)

{

if(p==f->Lson)

f->Lson=p->Rson;

else

f->Rson=p->Lson;

free (p);

return SUCC;

}

s=p->Lson;

if (s->Rson==NULL)

{

p->data=s->data;

p->Lson=s->Lson;

free (s);

return SUCC;

}

r=s->Rson;

while (r->Rson!=NULL)

{

s=r;

r=r->Rson;

}

p->data=r->data;

s->Rson=r->Lson;

free (r);

return SUCC;

}

void deleteT(Bptr root)

{

int x;

printf("请输入要删除的结点值x>0,x=");

scanf("%d",&x);

if(deleteST(x,root))

printf("%d 已经被删除!\n",x);

else

printf(" %d不在树中,无法删除!\n",x);

}

char getalpha()

{

char c;

while(1)

{

c=getchar();

if(isalpha(c))

return c;

}

}

void treeT(Bptr root)

{

char c;

printf(" 对检索树可以进行下列 *** 作:\n");

while (1)

{

printf("请输入 *** 作码:查找F/f 插入I/i 删除D/d 显示P/p 结点排序S/s 终止E/e\nC=");

c=getalpha();

switch(c)

{

case 'f':

case 'F': searchT(root);break;

case 'p':

case 'P': writeT(root);break;

case 'i':

case 'I': insertT(root);break;

case 'd':

case 'D': deleteT(root);break;

case 's':

case 'S': sortT(root);break;

case 'e':

case 'E': writeT(root);return;

default:printf("输入的 *** 作码不正确,请重新输入!\n");

continue;

}

}

}

void main()

{

Bptr root;

root=creatST();

treeT(root);

printf("程序结束,再见!\n");

}

以上就是关于编写一个完整的c语言源程序全部的内容,包括:编写一个完整的c语言源程序、求个50左右的C语言源程序、求C语言编程很长的程序100多行的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9992972.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存