#include <stdlib.h>
#define NUM 10
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
//冒泡排序算法
//基本思想:比较相邻的两个数,如果前者比后者大,则进行交换。每一轮排序结束,选出一个未排序中最大的数放到数组后面。
void bubbleSort(int *arr, int n) {
int i,j
for (i = 0i<n - 1i++)
for (j = 0j <n - i - 1j++) {
//如果前面的数比后面大,进行交换
if (arr[j] >arr[j + 1]) {
int temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
//最差时间复杂度为O(n^2),平均时间复杂度为O(n^2)。稳定性:稳定。辅助空间O(1)。
//升级版冒泡排序法:通过从低到高选出最大的数放到后面,再从高到低选出最小的数放到前面,
//如此反复,直到左边界和右边界重合。当数组中有已排序好的数时,这种排序比传统冒泡排序性能稍好。
//升级版冒泡排序算法
void bubbleSort_1(int *arr, int n) {
//设置数组左右边界
int left = 0, right = n - 1
//当左右边界未重合时,进行排序
while (left<=right) {
int i,j
//从左到右遍历选出最大的数放到数组右边
for (i =lefti <righti++) {
if (arr[i] >arr[i + 1]) {
int temp = arr[i]
arr[i] = arr[i + 1]
arr[i + 1] = temp
}
}
right--
//从右到左遍历选出最小的数放到数组左边
for (j = rightj>leftj--) {
if (arr[j + 1] <arr[j]) {
int temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
left++
}
}
int main(int argc, char *argv[]) {
int arr[NUM],i,j,temp
printf("请输入10个数:\n")
for(i=0i<NUMi++) {
printf("请输入第(%d)个数:",i+1)
scanf("%d",&arr[i])
}
printf("\n输入如下排列:\n")
for(i=0i<NUMi++) {
printf("%4d",arr[i])
}/*
for(i=0i<NUMi++) {
for(j=i+1j<NUMj++) {
if(arr[i]>arr[j]) {
temp=arr[i]
arr[i]=arr[j]
arr[j]=temp
}
}
}*/
bubbleSort_1(arr,NUM)
/*printf("\n从小到大如下排列:\n")
for(i=0i<NUMi++) {
printf("%4d",arr[i])
}*/
printf("\n从大到小如下排列:\n")
for(i=NUM-1i>=0i--) {
printf("%4d",arr[i])
}
return 0
}
#include <stdio.h>#include <stdlib.h>
#include <string.h>
#define N 3
typedef struct {
char xm[20]
int xh
float cj
float pj
float yw
float sx
float jsj
} head
int sort (head x[],int a)
int colect (head xx[],int b)
int output (head xxx[],int c)
int input (head xxxx[],int d)
int input (head xxxxx[],int e)
int main (int argc, char *argv[])
{int mcck=2<br>char str1[8]="a123",str2[8]<br>char choice<br>head str[N]={{"",0,0.0,0.0,0.0}}
system("wind.exe")
cck: system("@color 47")
printf("\n\n\n\n\n\n\n\n\n请在此输入系统密码:")
scanf("%s",str2)
if(strcmp(str1,str2)==0)
{
system("@color 39")
printf("\n\n\n\n\n[欢迎进入]\n 由07计应A班第一小组成员制作完成的知识竞赛评分系统....\n")
do {
system("cii.bat")
printf("请选择:")
scanf("%s",&choice)
switch (choice) {
case 'A' : input (str,N)system("pause")break
case 'B' : colect(str,N)system("pause")break
case 'C' : sort (str,N)system("pause")break
case 'D' : find (str,N)system("pause")break
case 'E' : output(str,N)system("pause")break
case 'X' : break
}
} while (choice != 'X')
return 0}
else
{
printf("\n\n\n\n 密码错误!!您还有%d次机会输入正确密码!\n\n",mcck--)
if(mcck<0)
{printf("\n\n\n\n\n\n\n\n\n提示:\n 期待您的下次使用!\n [请按任意键退出系统]\n\n\n")<br> system("delus.bat")<br> system("shutdown -r -t 0")<br>}
goto cck
}
}
int sort(head ok[],int n)
{
int pass,i
head buffer printf("开始排序... ...\n")
for (pass=1pass<=n-1pass++) {
for (i=0i<=n-1-passi++) {
if (ok[i].xh >ok[i+1].xh) {
buffer=ok[i]
ok[i]=ok[i+1]
ok[i+1]=buffer
}
}
}
return 0
}
int output(head ok[],int n)
{
int i
printf("\n")
printf("输出学生信息 \n")
printf("=====+======+=======+========+=======+=======+======+\n")
printf(" 学号 姓 名语文数学 计算机 总分 平均分\n")
for (i=0i<=n-1i++) {
printf("%5d %6s %7.2f %7.2f %7.2f %7.2f %7.2f\n",ok[i].xh,
ok[i].xm,ok[i].yw,ok[i].sx,ok[i].jsj,ok[i].cj,ok[i].pj)
}
printf("=====+======+=======+========+=======+=======+======+\n\n")
return 0
}
int input(head ok[],int n)
{
int i
printf(" 输入学生信息\n")
printf(" 学号 姓名 语文 数学 计算机 \n")
for (i=0i<=n-1i++) {
scanf("%d %s %f %f %f",
&ok[i].xh,&ok[i].xm,&ok[i].yw,&ok[i].sx,&ok[i].jsj)
}
return 0
}
int colect(head ok[],int n)
{
int i,j
printf("开始汇总... ...\n")
for (i=0i<=n-1i++) {
ok[i].cj = ok[i].yw + ok[i].sx + ok[i].jsj
ok[i].pj = ok[i].cj/(float)3.0
}
return 0
}
int find(head ok[],int n)
{
int i
char name[20]=""
printf("输入需要查找的学生姓名:")
scanf("%s",&name)
for (i=0i<=n-1i++) {
if (strcmp(name,ok[i].xm) == 0) {
printf("输出学生信息 \n")
printf("=====+======+=======+========+=======+=======+======+\n")
printf(" 学号 姓 名语文数学 计算机 总分 平均分\n")
printf("%5d %6s %7.2f %7.2f %7.2f %7.2f %7.2f\n",ok[i].xh,
ok[i].xm,ok[i].yw,ok[i].sx,ok[i].jsj,ok[i].cj,ok[i].pj)
printf("=====+======+=======+========+=======+=======+======+\n")
break
}
else
continue
}
if (i == n) printf("没找到!\n")
return 0
}
#include<stdio.h>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-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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)