当前位置:首页 » 编程语言 » c语言第2周项目代码
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言第2周项目代码

发布时间: 2022-08-20 17:59:52

㈠ 一看c语言写的项目代码,很多头文件里的内容都没见过,不知咋回事,是不是一些编译器内核如下

\ 这个是用在宏定义里的
因为宏定义是只对同一行后面的进行定义,如果定义的内容太长,一行放不下,就用这个符号表示下一行继续,下一行也是要定义的内容

㈡ 求C语言代码

#include "stdio.h"
#include "conio.h"
#include "string.h"
#include "stdlib.h"
#define CMD_START printf("\n\n######### Start a command #########\n");
/* 用来标记一个命令执行的开始 */
#define CMD_END printf( "\n######### End a command #########\n\n");
/* 用来标记一个命令执行的结束
,这两个语句是为了提供更好的用户界面而写的 */
#define DATA_FILE "data.dat"
/* 这是 数据文件名 */
#define TEMP_FILE "temp.dat"
/* 这是一个临时的文件的名字,在删除记录的函数中使用的,
详细内容参考 Delete() 函数 */
typedef struct tagStudent
{
char ID[30]; /* 学号 */
char Name[30]; /* 姓名 */
char Class[255]; /* 班级 */
char Sex; /* 性别 ,值为 F 或 f 或 M 或 m */
int Math; /* 数学成绩 */
int English; /* 英语成绩 */
int Compute; /* 计算机成绩 */
int Philosophy; /* 哲学成绩 */
int PE; /* 体育成绩 */
} Student;
/* 这是学生信息结构体 */
int ShowMenu(); /* 在屏幕上打印 主菜单

的函数,它的返回值为 所选
菜单的 项目编号 */
int ReadData(FILE *, Student *); /* 从一个
打开的数据文件中读取
记录的函数,错误返回 0 */
int WriteData(FILE *, Student *); /* 向一个数据文件中 写入
记录的函数,错误返回 0 */
void Output_Rec(Student *); /* 在屏幕上 打印 一条记录 */
void Input_Rec(Student *); /* 让用户输入 记录的 各个项目的
值,在添加记录时用到了 */
void CopyRec(Student *, Student *); /* 复制一条记录 到
另一个记录中 */
/* 题目中要求的函数 */
void Print(); /* 实现查看数据文件内容的函数 */
void Add(); /* 添加记录的函数 */
void Delete(); /* 删除记录的函数 */
void Statistics(); /* 对数据进行统计分析的函数 */
void Find(int); /* 实现查找功能的函数,参数决定
是按 ID 查找 还是按 Name 查找 */
int quit; /* 一个全局变量,在下面的 main()
函数中,用来决定何时退出主循环
*/
main()
{
int cmd; /* 用户所选的 菜单 项目 的标号 */
quit = 0; /* 初始化 为 不退出 */
/* 这是程序的主循环,每次都将 主菜单打印出来,
供用户选择相应的 序号 来执行相应的功能 */
while (!quit)
{
cmd = ShowMenu(); /* 显示
主菜单,并返回用户所选择的
菜单项 的 编号 */
CMD_START /* 在屏幕上打印一行分隔符,告诉用户这是一个子功能的开始
*/
switch (cmd) /* 用多项分支 根据 用户的选择
调用 相应的函数 */
{
case 1:
Print();
break; /* 用户选择 1 号菜单,程序执行
查看的数据文件的函数 */
case 2:
Add();
break; /* 用户选择 2 号菜单,程序执行
添加记录的函数 */
case 3:
Delete();
break; /* 用户选择 3 号菜单,程序执行
删除记录的函数 */
case 4:
Statistics();
break; /* 用户选择 4 号菜单,程序执行
统计数据的函数 */
case 5:
Find(5);
break; /* Find_ID ,5 号菜单执行 按
ID(学号)查找的功能 */
case 6:
Find(6);
break; /* Find_Name,6 号菜单执行 按
Name(姓名)查找的功能 */
case 7:
quit = 1; /* 用户选择了退出菜单 */
printf
(" Thank you for your using .\n\n Happy everyday !!\n\n Bye Bye ....\n");
break;
default:
printf(" Please Input a number between\t1\tto\t7.\n");
/* 用户所输入的 序号不在所处理的范围内 */
}
CMD_END /* 打印一行分隔符,告诉用户
他所选择的菜单的功能已经执行完毕
*/
if (quit != 1) /* 检查用户是否 要求 退出 */
{
printf(" Press any key to Return Main Menu ....\n");
getch(); /* 用 一个 无回显 的 字符输入函数
来实现暂停执行,按 任意键
继续的功能 */
}
}
}

int ShowMenu()
{
int cmd = 0; /* 保存用户的选择 */
/* 定义 程序所支持的菜单项目 */
char Menu_SeeData[] = "\t1 .\tView the Records in the data file\n"; /* 查看数据文件
*/
char Menu_Add[] = "\t2 .\tAdd New Record\n"; /* 添加记录 */
char Menu_Delete[] = "\t3 .\tDelete an old Record\n"; /* 删除记录 */
char Menu_Statistics[] = "\t4 .\tMake a Statistics\n"; /* 统计分析 */
char Menu_Find_ID[] = "\t5 .\tFind a Record from the ID\n"; /* 按
学号(ID)
查找 */
char Menu_Find_Name[] = "\t6 .\tFind a Record from the Name\n"; /* 按
姓名(Name)
查找 */
char Menu_Quit[] = "\t7 .\tQuit\n"; /* 退出 */
/* 在屏幕上打印 主菜单 */
printf("\n\n############ Main Menu ###############\n");
printf("##############################################\n\n");
printf(Menu_SeeData);
printf(Menu_Add);
printf(Menu_Delete);
printf(Menu_Statistics);
printf(Menu_Find_ID);
printf(Menu_Find_Name);
printf(Menu_Quit);
printf("\n##############################################");
printf("\n\n Input the index of your choice : ");
scanf("%d", &cmd); /* 接受用户 选择 */
printf("\n");
return cmd; /* 返回用户的输入,交给主循环处理
*/
}

void Print() /* 打印 数据文件的 记录内容 */
{
FILE *fp = NULL; /* 文件指针 */
Student rec; /* 存放从文件中读取的记录 */
int i = 0; /* 实现 计数 和 分屏打印的功能 */
fp = fopen(DATA_FILE, "rb"); /* 以 二进制读 方式
打开数据文件 */
if (fp == NULL) /* 打开文件出错 */
{
printf(" Can not open the data file : %s\n", DATA_FILE);
return;
}
while (ReadData(fp, &rec)) /* ReadData()
函数出错或到文件末尾时返回
0,可以做循环条件 */
{
Output_Rec(&rec); /* 正确读取,将记录输出 */
printf(" ------------------------------------------");
/* 打印一行分隔符,营造好的用户界面 */
i ; /* 计数器 加一 */
if (i % 4 == 0) /* 显示 4 个暂停一下 */
{
printf("\n Press any key to continue ... \n");
getch();
}
}
printf("\n The current data file have\t%d\trecord .\n", i);
fclose(fp); /* 关闭文件 */
}

void Add() /* 添加记录 */
{
Student rec;
FILE *fp = NULL;
Input_Rec(&rec); /* 让用户输入新记录的各项内容 */
fp = fopen(DATA_FILE, "ab"); /* 以 添加 方式打开数据文件 */
if (fp == NULL)
{
printf(" Can not open the data file to write into ... \n");
return;
}
if (WriteData(fp, &rec) == 1) /* 将 新记录 写入文件,并检查
是否正确写入 */
printf("\n\n Add New Record Success \n\n");
else
printf("\n\n Failed to Write New Record into the data file \n");
fclose(fp);
}

void Delete() /* 删除记录 */
{
Student rec;
FILE *fpr, *fpw; /* 两个文件指针,分别用于 读 和
写 */
char buf[30]; /* 接受 用户输入的 ID 缓冲区 */
char cmd[255]; /* 执行的系统命令 */
int del_count; /* 实际 删除的 记录数目 */
del_count = 0;
printf("\n Please type the ID of the record you want me to delete .");
printf("\n The ID : "); /* 提示用户 输入 */
scanf("%s", buf);
fpr = fopen(DATA_FILE, "rb"); /* 从
原来的记录文件中读取数据,跳过将要删除的记录
*/
if (fpr == NULL)
{
printf(" Can not open the data file to read record ... \n");
return;
}
fpw = fopen(TEMP_FILE, "wb"); /* 打开一个 临时文件
保存不删除的记录 */
if (fpw == NULL)
{
printf(" Can not open the data file to write into ... \n");
return;
}
while (ReadData(fpr, &rec)) /* 读取 要保留的记录 */
{
if (strcmp(rec.ID, buf) != 0)
{
WriteData(fpw, &rec); /* 写入临时文件 ,然后删除
原数据文件,
再将临时文件该名为原数据文件的名字
*/
}
else
{
del_count ; /* 跳过的记录数目,即删除的数目 */
}
}
fclose(fpr);
fclose(fpw);
strcpy(cmd, "del "); /* 构造命令串,用 system() 函数执行
*/
strcat(cmd, DATA_FILE);
system(cmd);
rename(TEMP_FILE, DATA_FILE); /* 直接调用 C
语言的改名函数将临时文件改名为数据文件的名字
*/
printf("\n I have delete\t%d\trecord .\n", del_count);
}

void Statistics() /* 统计分析函数 */
{
int i50, i60, i70, i80, i90; /* 平均分小于60
,60-69,70-79,80-89,>=90
的分数段的学生数目 */
float avg; /* 平均分 */
int sum, sum_high, sum_low; /* 总分,总分最高分,总分最低分 */
Student stu_high, stu_low; /* 总分最高和最低 学生的信息 */
Student stu_math_high, stu_english_high; /* 各科
最高分的学生记录副本
*/
Student stu_compute_high, stu_philosophy_high, stu_PE_high;
Student stu_math_low, stu_english_low; /* 各科最低的学生记录副本
*/
Student stu_compute_low, stu_philosophy_low, stu_PE_low;
FILE *fp;
Student rec;
int count; /* 一个计数器,用于判断是否第一次读取数据
*/
count = sum = sum_high = sum_low = i50 = i60 = i60 = i70 = i80 = i90 = 0;
fp = NULL; /* 对 数据初始化 */
fp = fopen(DATA_FILE, "rb");
if (fp == NULL)
{
printf("\nCan not open the data file to read ...\n");
return;
}
while (ReadData(fp, &rec)) /* 读取数据 */
{
count ; /* 计数器 加一 */
sum = rec.Math rec.English rec.Compute rec.PE rec.Philosophy; /* 求和
*/
/* average */
avg = ((float)sum) / 5; /* 平均分 */
/* 下面对各个分数段进行统计 */
if (avg < 60)
i50 ;
else if (avg < 70)
i60 ;
else if (avg < 80)
i70 ;
else if (avg < 90)
i80 ;
else
i90 ;
/* highest and loeest */
if (count <= 1) /* 第一次读取,执行初始化,不进行比较
*/
{
sum_high = sum_low = sum;
CopyRec(&stu_high, &rec);
CopyRec(&stu_low, &rec);
}
else
{
if (sum > sum_high)
{
sum_high = sum; /* 得到最高总分 */
CopyRec(&stu_high, &rec); /* 保存总分最高的学生的信息
*/
}
if (sum < sum_low)
{
sum_low = sum; /* 得到最低分 */
CopyRec(&stu_low, &rec); /* 保存总分最低的学生的信息
*/
}
}
/* subject highest and low */
if (count == 1) /* 同上面一样,执行初始化 */
{
CopyRec(&stu_math_high, &rec);
CopyRec(&stu_english_high, &rec);
CopyRec(&stu_compute_high, &rec);
CopyRec(&stu_philosophy_high, &rec);
CopyRec(&stu_PE_high, &rec);
CopyRec(&stu_math_low, &rec);
CopyRec(&stu_english_low, &rec);
CopyRec(&stu_compute_low, &rec);
CopyRec(&stu_philosophy_low, &rec);
CopyRec(&stu_PE_low, &rec);
}
else
{
/* High */
/* 保存各科的最高分的学生的信息 */
if (rec.Math > stu_math_high.Math)
CopyRec(&stu_math_high, &rec);
if (rec.English > stu_english_high.English)
CopyRec(&stu_english_high, &rec);
if (rec.Compute > stu_compute_high.Compute)
CopyRec(&stu_compute_high, &rec);
if (rec.Philosophy > stu_philosophy_high.Philosophy)
CopyRec(&stu_philosophy_high, &rec);
if (rec.PE > stu_PE_high.PE)
CopyRec(&stu_PE_high, &rec);
/* low */
/* 保存各科的最低分的学生的信息 */
if (rec.Math < stu_math_low.Math)
CopyRec(&stu_math_low, &rec);
if (rec.English < stu_english_low.English)
CopyRec(&stu_english_low, &rec);
if (rec.Compute < stu_compute_low.Compute)
CopyRec(&stu_compute_low, &rec);
if (rec.Philosophy < stu_philosophy_low.Philosophy)
CopyRec(&stu_philosophy_low, &rec);
if (rec.PE < stu_PE_low.PE)
CopyRec(&stu_PE_low, &rec);
}
} /* While End */
if (count < 1)
{
printf("\n There is no record in the data file .\n");
}
else
{
/* average */
/* 输出平均分的分段统计信息 */
printf("\n The count in each segment :\n");
printf("\t < 60\t:\t%d\n", i50);
printf("\t60 - 69\t:\t%d\n", i60);
printf("\t70 - 79\t:\t%d\n", i70);
printf("\t80 - 90\t:\t%d\n", i80);
printf("\t >= 90\t:\t%d\n", i90);
printf(" ------------------------------------------");
getch();
/* highest and loeest */
/* 输出总分最高的学生的信息 */
printf("\n The Highest Mark Student:\n");
printf(" The Mark is : %d\n", sum_high);
printf(" The student is :\n");
Output_Rec(&stu_high);
/* 输出总分最高的学生的信息 */
printf("\n The Lowest Mark Student:\n");
printf(" The Mark is : %d\n", sum_low);
printf(" The student is :\n");
Output_Rec(&stu_low);
printf(" ------------------------------------------\n");
getch();
/* subject highest and low */
/* 输出各科最高和最低分的统计信息 */
printf(" The Highest\tMath :\n");
Output_Rec(&stu_math_high);
printf(" The Lowest Math :\n");
Output_Rec(&stu_math_low);
printf(" ------------------------------------------\n");
getch(); /* 暂停 ,按任意键继续 */
printf(" The Highest English :\n");
Output_Rec(&stu_english_high);
printf(" The Lowest English :\n");
Output_Rec(&stu_english_low);
printf(" ------------------------------------------\n");
getch();
printf(" The Highest Compute :\n");
Output_Rec(&stu_compute_high);
printf(" The Lowest Compute :\n");
Output_Rec(&stu_compute_low);
printf(" ------------------------------------------\n");
getch();
printf(" The Highest Philosophy :\n");
Output_Rec(&stu_philosophy_high);
printf(" The Lowest Philosophy :\n");
Output_Rec(&stu_philosophy_low);
printf(" ------------------------------------------\n");
getch();
printf(" The Highest PE :\n");
Output_Rec(&stu_PE_high);
printf(" The Lowest PE :\n");
Output_Rec(&stu_PE_low);
printf(" ------------------------------------------\n");
}
fclose(fp);
}

void Find(int isFind_From_ID) /* 查找函数 */
{
char buf[30]; /* 接受用户输入的条件的缓冲区 */
Student rec;
int find_count; /* 查找到的记录数目 */
FILE *fp;
find_count = 0;
fp = fopen(DATA_FILE, "rb");
if (fp == NULL)
{
printf("\n Can not open the data file to search ...\n");
return;
}
switch (isFind_From_ID)
{
case 5: /* ID,按 学号查找 */
printf("\n Please Input the ID : ");
scanf("%s", buf); /* 提示用户输入 */
while (ReadData(fp, &rec)) /* 读取数据 */
{
if (strcmp(rec.ID, buf) == 0) /* 比较 */
{
find_count ;
Output_Rec(&rec); /* 输出符合条件的记录 */
printf(" ------------------------------------------\n");
}
}
break;
case 6: /* Name ,按 姓名 查找 */
printf("\n Please Input the Name : ");
scanf("%s", buf);
while (ReadData(fp, &rec))
{
if (strcmp(rec.Name, buf) == 0)
{
find_count ;
Output_Rec(&rec);
printf(" ------------------------------------------\n");
}
}
break;
default:
printf(" \nPlease type right index ...\n"); /* 处理isFind_From_ID既不是5也不是6的情况
*/
}
if (find_count > 0) /* 输出找到的记录数目 */
{
printf("\n Have find out\t%d\trecord\n", find_count);
}
else
{
printf
("\n I'm very sorry .\n I failed to find out the one you want .\n");
printf("\n I suggest that you change some other key words .\n");
}
fclose(fp);
}

int ReadData(FILE * fp, Student * Dest_Rec) /* 读取数据记录 */
{
int r;
if ((fp == NULL) || (Dest_Rec == NULL))
return 0; /* ERROR */
r = fread(Dest_Rec, sizeof(Student), 1, fp);
if (r != 1)
return 0;
return 1;
}

int WriteData(FILE * fp, Student * Src_Rec) /* 写入数据记录 */
{
int r;
if ((fp == NULL) || (Src_Rec == NULL))
return 0; /* ERROR */
r = fwrite(Src_Rec, sizeof(Student), 1, fp);
if (r != 1)
return 0;
return 1;
}

void Output_Rec(Student * stu) /* 在屏幕上输出 一个学生的信息 */
{
printf("\n");
printf(" Name : %s", stu->Name);
printf("\t\tSex : ");
if (stu->Sex == 'M' || stu->Sex == 'm')
printf("Male");
else
printf("Female");
printf("\n ID : %s\t\tClass : %s\n", stu->ID, stu->Class);
printf("Math = %d\tEnglish = %d\tCompute = %d\n", stu->Math, stu->English,
stu->Compute);
printf("Philosophy = %d\t\tPE = %d\n", stu->Philosophy, stu->PE);
printf("\n");
}

void Input_Rec(Student * stu) /* 让用户输入 一个学生的各项信息
*/
{
if (stu == NULL)
return;
printf("\n Name = ");
scanf("%s", stu->Name);
/* 下面这段代码实现只能输入 F ,f ,M ,m 的功能 */
printf("\tSex = (F|M) ");
while (1)
{
stu->Sex = getch(); /* 无回显输入 */
if (stu->Sex == 'F' || stu->Sex == 'f' || stu->Sex == 'M'
|| stu->Sex == 'm')
{
printf("%c", stu->Sex); /* 将用户输入的字符输出,模拟正常输入数据时的回显
*/
break;
}
}
/* 下面 给出提示,让用户输入结构体的各项内容 */
printf("\n ID = ");
scanf("%s", stu->ID);
printf("\n Class = ");
scanf("%s", stu->Class);
printf("\n Math = ");
scanf("%d", &(stu->Math));
printf("\n English = ");
scanf("%d", &(stu->English));
printf("\n Compute = ");
scanf("%d", &(stu->Compute));
printf("\n Philosophy = ");
scanf("%d", &(stu->Philosophy));
printf("\n PE = ");
scanf("%d", &(stu->PE));
printf("\n");
}

/* 因为结构体不能直接用 等号(=)赋值,写一个赋值函数 */
void CopyRec(Student * dest_stu, Student * src_stu)
{
/* 复制 源记录 的各项到 目标记录 */
strcpy(dest_stu->Name, src_stu->Name);
strcpy(dest_stu->ID, src_stu->ID);
strcpy(dest_stu->Class, src_stu->Class);
dest_stu->Sex = src_stu->Sex;
dest_stu->Math = src_stu->Math;
dest_stu->English = src_stu->English;
dest_stu->Compute = src_stu->Compute;
dest_stu->Philosophy = src_stu->Philosophy;
dest_stu->PE = src_stu->PE;
}

/*
题目分析 及 算法设计 :
题目中的各个功能都是相对独立的,所以我将各项功能以
带 编号 的菜单形式组织在屏幕上,用户通过 输入 编号
执行相应的功能。显示菜单的代码处于一个循环之中,当执行完一个子功能后,就又回到循环,显示主菜单,直到用户选择
退出 菜单。 这种操作方式比其它机制(如:主程序
程序参数)更简捷,不必每次用不同的参数重新运行程序,以实现相应的功能。
1. 查看文件记录内容的实现: 用循环读取文件内容,然后显示在屏幕上。
因为我们的数据是以结构体的形式存放在文件中的,所以
代码中用了块读取和块写入函数。 在循环中设置计数器来统计记录的个数。 2.
添加记录的实现:
让用户根据屏幕提示输入数据,完成对学生信息结构体各项的赋值,待取得足够数据后,将数据文件以“追加”方式打开,执行块写入,将整个结构体写入文件。
3. 删除记录的实现:
学号(ID)一般不会重复,所以我在程序中让用户输入想要删除的记录的学号(ID),然后在文件中查找,如果不是用户想要删除的记录(即ID不同),就保存在一个临时的文件中,这样,就将想要删除的记录与其它记录分离开了,最后,删除原来的数据文件,将临时文件的名字改为
原来数据文件的名字。 4. 统计功能的实现:
统计功能模块分为三个小模块:平均分的分数段统计,总分的最高和最低分统计,各科的最高和最低分统计。但我并不想分别来写,因为它们都要对所有记录进行扫描,而它们又互不干扰,所以我把它们组织在一个循环中,各自都有自己的计算代码和变量,所以这个
函数 中的局部变量 很多。 5. 查找功能的实现: 题目要求两种查找方式:按 学号(ID) , 按 姓名(Name)。 两者是独立的,所以我用了一个参数 isFind_From_ID
来表明是哪种查找方式,进而在在程序内部由一个 switch() 选择分支转向不同的代码段去执行。
具体的查找就是比较相应的项目是否与用户输入的一样,若一样就输出到屏幕。 */

㈢ 求一份C语言小项目的代码,要求150行以上,很急!

我给个我写的吧,不过不完全符合要求。子函数只有7个,但有两个宏,其中一个可以换成函数。其实如果把测试改成自动的,可以超过10个,你可以自己改一改。

项目名称:UTF8StringEscaper。在Github上可以搜到,不过其实只是个单文件的小程序。代码参考了leptjson。

项目概述:此程序可以将输入的UTF8文本进行转义,例如如果手动输入 1 2 这四个字符,可以输出 1(换行)2。

采用的C语言技术,这怎么好写呢?:注释、转义序列、预处理器、指针、inline

/*测试用例:
hello,world

u4F60u597D u4E16u754C
uD869uDEA5
你好//win下失败

uqweru1234
u0068uqwer
auDFFFa
auD800a
ym
uD800u0068
uD800uqwer
*/

#include<assert.h>
#include<stdbool.h>
#include<stdio.h>
#include<stdlib.h>

#ifdefined__clang__&&!(definedWIN32||definedlinux||definenix)
#defineWIN32
#endif

#definemovenext(ch,p)(ch=*p++)
voidParse(constchar*p);
intParseUnicode(constchar**pp);
intParseHex(constchar*num);
(unsignedshorthigh,unsignedshortlow);
voidEncodeUTF8(unsignedcodePoint);

intmain(void)
{
#ifdefWIN32
system("chcp65001");
#endif

charinput[BUFSIZ];
printf(" ¥>");
while(gets(input)!=NULL)//读到EOF时返回NULL
{
Parse(input);
printf(" ¥>");
}

return0;
}

#defineHandleEscape(ch,escaped)
casech:
putchar(escaped);
break
voidParse(constchar*p)
{
charch;
while(movenext(ch,p)!='')
{
switch(ch)
{
case'\'://需要转义
switch(movenext(ch,p))
{
HandleEscape('"','"');
HandleEscape('\','\');
HandleEscape('b','');
HandleEscape('f','f');
HandleEscape('n',' ');
HandleEscape('r',' ');
HandleEscape('t',' ');
//case'/'://斜杠的转义是可选的

case'u':
{
intcodePoint=ParseUnicode(&p);
if(codePoint==-1)//ParseHex失败
{
printf(" Error!");
return;
}
EncodeUTF8(codePoint);
break;
}
default://不支持的转义
//putchar('\');
putchar(ch);
break;
}
break;
default://无需转义
putchar(ch);
break;
}
}
}

(unsignedshortsurrogate){returnsurrogate>=0xD800&&surrogate<=0xDBFF;}
(unsignedshortsurrogate){returnsurrogate>=0xDC00&&surrogate<=0xDFFF;}
intParseUnicode(constchar**pp)
{
constchar*p=*pp;
inthigh=ParseHex(p);//跳过字符u
unsignedcodePoint;
if(high==-1)//解析失败
return-1;

//解析成功
p+=4;//移过xxxx
codePoint=high;

if(IsHighSurrogate(high)&&(*p)=='\'&&(*(p+1))=='u')//解析低代理项
{
intlow=ParseHex(p+2);//移过u
if(IsLowSurrogate(low))//ParseHex失败或不是低代理项时仍编码当前码点,其余的留给下一轮解析
{
p+=6;//移过uxxxx
codePoint=GetCodePointFromSurrogatePare(high,low);
}
}

*pp=p;
returncodePoint;
}

intParseHex(constchar*num)//解析uxxxx中的4个16进制字符
{
inthex=0;//本来用ushort即可,但出错时需要返回-1

for(inti=0;i<4;i++)//只解析xxxx
{
charch=*num++;
hex<<=4;
if(ch>='0'&&ch<='9')
hex|=ch-'0';
elseif(ch>='A'&&ch<='F')
hex|=ch-'A'+10;
elseif(ch>='a'&&ch<='f')
hex|=ch-'a'+10;
else
return-1;//非16进制字符
}
returnhex;
}

(constunsignedshorthigh,constunsignedshortlow)
{
return0x10000+(high-0xD800)*0x400+(low-0xDC00);
}

voidEncodeUTF8(constunsignedcodePoint)
{
if(codePoint<=0x007F)
putchar((char)(codePoint));
elseif(codePoint<=0x07FF)
{
putchar((char)(0xC0|((codePoint>>6)&0xFF)));
putchar((char)(0x80|(codePoint&0x3F)));
}
elseif(codePoint<=0xFFFF)
{
putchar((char)(0xE0|((codePoint>>12)&0xFF)));
putchar((char)(0x80|((codePoint>>6)&0x3F)));
putchar((char)(0x80|(codePoint&0x3F)));
}
elseif(codePoint<=0x10FFFF)
{
putchar((char)(0xF0|((codePoint>>18)&0xFF)));
putchar((char)(0x80|((codePoint>>12)&0x3F)));
putchar((char)(0x80|((codePoint>>6)&0x3F)));
putchar((char)(0x80|(codePoint&0x3F)));
}
else
assert(0);//不可能发生
}

㈣ 校历 C语言代码

二、 课程设计的主要内容
根据输入的开学和放假日期,为每学期生成相应的校历,并提供各学期的校历查询显示功能。
(1)输入数据
学年度: 2007-2008
学期: 2
开学日期: 2008-02-18
放假日期: 2008-07-05

(2)输出数据
2007--2008 学年度 第 2 学期
--------------------------------------------------------------------------------------------------
月份 周次 一 二 三 四 五 六 日
--------------------------------------------------------------------------------------------------
二月 一 上课 19 20 21 22 23 24
--------------------------------------------------------------------------------------------------
二月 二 25 26 27 28 29 1 2
--------------------------------------------------------------------------------------------------
三月 三 3 4 5 6 7 8 9
--------------------------------------------------------------------------------------------------
三月 四 10 11 12 13 14 15 16
--------------------------------------------------------------------------------------------------
三月 五 17 18 19 20 21 22 23
--------------------------------------------------------------------------------------------------
三月 六 24 25 26 27 28 29 30
--------------------------------------------------------------------------------------------------
四月 七 31 1 2 3 4 5 6
--------------------------------------------------------------------------------------------------
四月 八 7 8 9 10 11 12 13
--------------------------------------------------------------------------------------------------
四月 九 14 15 16 17 18 19 20
--------------------------------------------------------------------------------------------------
四月 十 21 22 23 24 25 26 27
--------------------------------------------------------------------------------------------------
五月 十一 28 29 30 五一 2 3 4
--------------------------------------------------------------------------------------------------
五月 十二 5 6 7 8 9 10 11
--------------------------------------------------------------------------------------------------
五月 十三 12 13 14 15 16 17 18
--------------------------------------------------------------------------------------------------
五月 十四 19 20 21 22 23 24 25
--------------------------------------------------------------------------------------------------
五月 十五 26 27 28 29 30 31 1
--------------------------------------------------------------------------------------------------
六月 十六 2 3 4 5 6 7 8
--------------------------------------------------------------------------------------------------
六月 十七 9 10 11 12 13 14 15
--------------------------------------------------------------------------------------------------
六月 十八 16 17 18 19 20 21 22
--------------------------------------------------------------------------------------------------
六月 十九 复考 24 25 26 27 28 29
--------------------------------------------------------------------------------------------------
七月 二十 30 1 2 3 4 暑假
--------------------------------------------------------------------------------------------------

要求:
(1)界面布局美观
(2)节假日的计算和输出
(3)闰年计算
(4)年月日与周日的对应计算
(5)年月日与周次的对应计算
(6)周次与月份的对应计算
(7)校历按文件保存
提示:
(1) 使用字符串、数组、文件
(2) 内存数据处理与界面输出分离

——————————题目应该是这个————

㈤ 求C语言130行左右代码的小项目入门级就行

//////洗牌-发牌////////
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
structPOKER
{
intnum;//A:1,J:11,Q:12,K:13小王:14大王:15
intcolor;//黑1,红2,梅3,方4
}s[54];

voidoutput(intmode,intnum)//mode为0时表示显示整副牌,为1时表示发牌
{//mode为1时:num的值表示每位玩家发多少张牌
if(mode==1&&(num<1||num>13))
{
printf(" 设置每位玩家的牌数出错!");
return;
}
inti,player_count=1;
for(i=0;i<54;i++)
{
if(mode==1)
{
if(i%num==0)
{
if(player_count>4)
{
return;
}
printf(" 玩家%d:",player_count);
player_count++;
}
}
if(s[i].num==14)
{
putchar(1);
}
elseif(s[i].num==15)
{
putchar(2);
}
else
{
switch(s[i].num)
{
case1:putchar('A');break;
case11:putchar('J');break;
case12:putchar('Q');break;
case13:putchar('K');break;
default:printf("%d",s[i].num);
}
switch(s[i].color)
{
case1: putchar(6);break;
case2:putchar(3);break;
case3:putchar(5);break;
case4:putchar(4);break;
default:printf("");
}
}
printf("");
}
}

voidxipai()
{
inti,num,color;
memset(s,0,sizeof(structPOKER)*54);
intcount=0;
while(count<54)
{
num=rand()%15+1;
color=rand()%4+1;
intflag_skip=0;
for(i=0;i<54;i++)
{
if((s[i].num==num&&s[i].color==color)||(s[i].num==14&&num==14)||(s[i].num==15&&num==15))
{
flag_skip=1;
break;
}
}
if(flag_skip==1)
{
continue;
}
while(1)
{
i=rand()%54;
if(s[i].num==0)
{
s[i].num=num;
s[i].color=color;
count++;
break;
}
else
{
continue;
}
}
}
}

intmain()
{
intc,num=13;
srand((unsigned)time(0));
xipai();
while(1)
{
printf(" 已洗好,请选择:(1:全部显示2:发牌3:洗牌)");
fflush(stdin);
scanf("%d",&c);
if(c==1)
{
output(0,0);
}
elseif(c==3)
{
xipai();
}
elseif(c==2)
{
printf(" 每位发几张:(1--13)");
while(1)
{
fflush(stdin);
scanf("%d",&num);
if(num>0&&num<14)
{
break;
}
else
{
printf(" 输入错误,请重新输入 每位发几张:(1--13)");
}
}
output(1,num);
}
}
return0;
}

㈥ c语言的代码,帮我完善一下

int getWeekDay(int,int,int);/*判断是周几*/
int getMonthDays(int,int);/*判断某年某月有几天*/
void printMonthCalender(int,int);/*输出某年某月的日历*/
int isLeapYear(int);/*判断是否是闰年*/

main()
{
int year;
int month;
int startDay,monthDays;

printf("input the year(YYYY):");
scanf("%d",&year);

for(month=1;month<=12;month++){
startDay=getWeekDay(year,month,1); /*计算出该月第一天是星期几。返回值为0~6,分别代表周日,周一~周六*/
monthDays=getMonthDays(year,month); /*计算出该月共有几天*/
printf("\t\t\t%d-%d\n",year, month);
printMonthCalender(startDay,monthDays);
}
system("pause");
}

/*输入年月日,判断是星期几。
输出:0:表示周日,1:表示周一,2:周二,。。。6:周六*/
int getWeekDay(int year,int month,int day)
{
int days1;/*从0001年到year-1年共有几天*/
int days2; /*从year年初到month-1月共有几天*/
long int totalDays; /*从0000年到year年month月1号共有几天*/
int i;

/*计算从0001年到year-1年年底共有几天:days1。能被400整除的年数为: (year-1)%400)
关键在于如何表示出能被4整除但是不能被100整除的年数。
设 0001年到year-1年年底 能被4整除的年数为x (x=(year-1)%4)
0001年到year-1年年底 能被4整除但是不能被100整除的年数为 y,
0001年到year-1年年底 能被4整除也能被100整除的年数为 z(z=(year-1)%100,因为能被100整除则肯定能被4整除)
则 y=x-z= (year-1)%4- (year-1)%100
故0001到year-1年内闰年总年数为:(year-1)%400)+(year-1)%4- (year-1)%100 */
days1= (year-1)*365+(year-1)/400+(year-1)/4-(year-1)/100; ; /*从0001年到year-1年的日子总数*/

/*计算从year年初到month-1月共有几天:days2*/
days2=0;
for(i=1;i<=month-1;i++)
days2+=getMonthDays(year,i); /*第二次用到该函数*/

/*计算总天数*/
totalDays=days1+days2+day;

return (totalDays%7);/*公元第一天是周一*/
}

/*判断指定的某年某月的天数*/
int getMonthDays(int year,int month)
{
int days;
switch(month){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
days=31;break;
case 2:
if (isLeapYear(year))
days=29;/*闰年*/
else
days=28;
break;
case 4:case 6:case 9:case 11:
days=30;break;
}
return days;
}

/*函数功能:检测是否闰年。
入参:year。要检测的年;
返回值:0:不是闰年;1:是闰年*/
int isLeapYear(int year)
{
return(year%4==0 && year%100!=0 || year%400==0);
}

void printMonthCalender(int startDay,int days)
{
int i;
int count;/*控制换行*/

/*打印表头*/
printf("Sun.\tMon.\tTue.\tWed.\tThu.\tFri.\tSat.\n");

/*打印前面空格*/
for(i=1;i<=startDay;i++)
printf("\t");

count= startDay;/*已经打印了startDay个空格*/
for(i=1;i<=days;i++){
printf("%d\t",i);
count++;
if(count%7==0)
printf("\n");
}
printf("\n\n");
}

㈦ 求C语言编程代码及注释。。。

扫雷游戏(c语言版)已经编译运行确认了:#include#include#include#defineLEFTPRESS0xff01#defineLEFTCLICK0xff10#defineLEFTDRAG0xff19#defineMOUSEMOVE0xff08struct{intnum;/*格子当前处于什么状态,1有雷,0已经显示过数字或者空白格子*/introundnum;/*统计格子周围有多少雷*/intflag;/*右键按下显示红旗的标志,0没有红旗标志,1有红旗标志*/}Mine[10][10];intgameAGAIN=0;/*是否重来的变量*/intgamePLAY=0;/*是否是第一次玩游戏的标志*/intmineNUM;/*统计处理过的格子数*/charrandmineNUM[3];/*显示数字的字符串*/intKeystate;intMouseExist;intMouseButton;intMouseX;intMouseY;voidInit(void);/*图形驱动*/voidMouseOn(void);/*鼠标光标显示*/voidMouseOff(void);/*鼠标光标隐藏*/voidMouseSetXY(int,int);/*设置当前位置*/intLeftPress(void);/*左键按下*/intRightPress(void);/*鼠标右键按下*/voidMouseGetXY(void);/*得到当前位置*/voidControl(void);/*游戏开始,重新,关闭*/voidGameBegain(void);/*游戏开始画面*/voidDrawSmile(void);/*画笑脸*/voidDrawRedflag(int,int);/*显示红旗*/voidDrawEmpty(int,int,int,int);/*两种空格子的显示*/voidGameOver(void);/*游戏结束*/voidGameWin(void);/*显示胜利*/intMineStatistics(int,int);/*统计每个格子周围的雷数*/intShowWhite(int,int);/*显示无雷区的空白部分*/voidGamePlay(void);/*游戏过程*/voidClose(void);/*图形关闭*/voidmain(void){Init();Control();Close();}voidInit(void)/*图形开始*/{intgd=DETECT,gm;initgraph(&gd,&gm,"c:\\tc");}voidClose(void)/*图形关闭*/{closegraph();}voidMouseOn(void)/*鼠标光标显示*/{_AX=0x01;geninterrupt(0x33);}voidMouseOff(void)/*鼠标光标隐藏*/{_AX=0x02;geninterrupt(0x33);}voidMouseSetXY(intx,inty)/*设置当前位置*/{_CX=x;_DX=y;_AX=0x04;geninterrupt(0x33);}intLeftPress(void)/*鼠标左键按下*/{_AX=0x03;geninterrupt(0x33);return(_BX&1);}intRightPress(void)/*鼠标右键按下*/{_AX=0x03;geninterrupt(0x33);return(_BX&2);}voidMouseGetXY(void)/*得到当前位置*/{_AX=0x03;geninterrupt(0x33);MouseX=_CX;MouseY=_DX;}voidControl(void)/*游戏开始,重新,关闭*/{intgameFLAG=1;/*游戏失败后判断是否重新开始的标志*/while(1){if(gameFLAG)/*游戏失败后没判断出重新开始或者退出游戏的话就继续判断*/{GameBegain();/*游戏初始画面*/GamePlay();/*具体游戏*/if(gameAGAIN==1)/*游戏中重新开始*/{gameAGAIN=0;continue;}}MouseOn();gameFLAG=0;if(LeftPress())/*判断是否重新开始*/{MouseGetXY();if(MouseX>280&&MouseX65&&MouseY280&&MouseX65&&MouseY190&&MouseX90&&MouseY190&&MouseX90&&MouseY<290)/*当前鼠标位置在格子范围内*/{j=(MouseX-190)/20;/*x坐标*/i=(MouseY-90)/20;/*y坐标*/MouseOff();if(Mine[i][j].flag==0&&Mine[i][j].num!=0)/*本来没红旗现在显示红旗*/{DrawRedflag(i,j);Mine[i][j].flag=1;}elseif(Mine[i][j].flag==1)/*有红旗标志再按右键就红旗消失*/{DrawEmpty(i,j,0,8);Mine[i][j].flag=0;}}MouseOn();sleep(1);}}}

㈧ 跪求数据结构课程设计(C语言版)代码,感激不尽

《数据结构课程精讲教案合集-复旦大学(共计1061页).pdf 》网络网盘免费资源下载

链接: https://pan..com/s/15uwjtHgKKzZdheWFQC21pQ

?pwd=abzc 提取码: abzc

㈨ 求简单C语言程序代码!

输入2个正整数m和n,求其最大公约数和最小公倍数

#include

#include

int main()

int m,n,p,q,s,r;

printf("请输入两个正整数;m,n ");

scanf("%d,%d",&m,&n);

#include<stdio.h>

main()

int a,b,t=0;

scanf("%d %d",&a,&b);

if (a<b)

printf("%d %d %d %d %d",(a+b),(a-b),(a/b),(a*b),(a%b));

}

主要特点

C语言是一种结构化语言,它有着清晰的层次,可按照模块的方式对程序进行编写,十分有利于程序的调试,且c语言的处理和表现能力都非常的强大,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接操作,因此既能够用于开发系统程序,也可用于开发应用软件。

以上内容参考:网络-c语言