求50行简单C语言程序代码,基础的就好

Python010

求50行简单C语言程序代码,基础的就好,第1张

#include <stdio.h>

#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 "stdafx.h"//vc++6.0加上这一行.

#include "stdio.h"

#define N 50

int main(void){

    FILE *fp

    double T[N], D[N]

    int i

    fp=fopen("F:\\data1.txt","r")

    for(i=0i<Ni++){

        fscanf(fp,"%lf%*c%lf",&T[i],&D[i])//告诉fscanf函数跳过两个数之间的空格

        printf("%f\t%f\n",T[i],D[i])//这里不能是T[0],D[0],且要把这两行{}起来

    }

    fclose(fp)

    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)  //该身份证号为15位或18位

{

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

{

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位身份证号

{

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

{

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{                                      //该身份证号非百岁

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

身份证的奥秘(10分)

题目内容:

18位身份证标准在国家质量技术监督局于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位置上的身份证号码数字值 

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位的身份证号升级办法:

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

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

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

yyyymmdd yymmdd 为出生年月日

xx顺号类编码

p性别

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

输入格式:

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

输出格式:

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

输入样例:

4

350622197904130331

11010519491231002X

110105491231002

110105491231996

输出样例:

Invalid

Valid

11010519491231002X

110105184912319965