#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多行的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)