(C语言)定义一个数组a[6],输入5个整型数据

定义一个数组a[6],输入5个整型数据,把它们排好序后输出,再输入一个整数num,将num插入到已排好序的数组中,并输出这个数组的所有数。

输入输出范例

图片说明

1个回答

如果问题得到解决,请点我回答左上角的采纳,谢谢

#include <stdio.h>

int main()
{
    int a[6];
    printf("请输入5个数:");
    for (int i = 0; i < 5; i++)
        scanf("%d", &a[i]);
    int num;
    printf("请输入num:");
    scanf("%d", &num);
    int n = 5;
    while (n != 6)
    {
        if (a[5] == num) n = 6;
        for (int i = 0; i < n - 1; i++)
            for (int j = 0; j < n - 1 - i; j++)
            {
                if (a[j] > a[j + 1])
                {
                    int t = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = t;
                }
            }
        a[5] = num;
    }
    for (int i = 0; i < 6; i++)
        printf("%d ", a[i]);
    return 0;
}
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复籽建: 将int i放在循环前面。vc++ 6.0比较老不支持这种写法,你自己修改下就可以了
9 个月之前 回复
ZSZJ97
籽建 感谢大神的帮助 不过运行出现报错 提示为::\Z\QQQ.CPP(28) : error C2374: 'i' : redefinition; multiple initialization D:\Z\QQQ.CPP(7) : see declaration of 'i' 执行 cl.exe 时出错.
9 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
基础C语言数据组问题前来膜拜各位大佬
定义一个整型数组a[10],输入10个任意大小的整数(占据a[0]~a[9]);找出其中的最小数并挖去该数(即剩下的数占据a[0]~a[8],再让a[9]=0);最后输出该数组的数据。 想了挺久的,写出判断大小后就没有头绪了。
C语言如何提取命令行输入的字符串中的整数,并传递到自定义函数?
比如 键盘输入: gcd(n,m) ⭐**在函数中提取m,n的值并计算结果? (因为有多个整形数值,并且有个','所以这种下面写法无法实现取值。。。。** ``` char str[80], digit[80]; char* ps; int i = 0; ps = str; while (*ps != '\0') { if (*ps >= '0' && *ps <= '9' || ps==',') { digit[i] = *ps; //找到数字,存放到数组digit里 i++; } ps++; //ps指针指向字符串下一个字符 } digit[i] = '\0'; //为了能用%s输出,digit在末尾要加一个结束字符'\0' printf("%s\n", digit); ```) `` ``` **如果要传递m,n,o,q多个整形数据呢? ** 以下是我代码的摘要 ``` int main(argc,argv[]) char* stdinin = NULL; stdinin = ufgets(stdin); //ufgets是自定义函数,类似于fgets //然后是一些判断是否输入为空等 if (strncmp(stdinin, "gcd", 3) == 0) gcd(m, n); //----函数----- void gcd(n, m) { 这里并不能直接使用stdinin } ```
刚刚初学C# 这几个问题有人能帮我解决一下吗 我想看看代码什么样子的
1.设半径r=1.5,圆柱高h=3,编写程序求园周长,圆面积,圆球表面积,圆球体积,圆柱体积.输出计算结果.圆周长:l=2*pi*r.圆面积:s=pi*r*r 球面积:s=4*pi*r*r 2.输入一个正整数,将该数的各位左右反转输出,即输入123,输出321。(使用while循环实现) 3.(如何在一行输出15个数并换行) 4.从键盘输入10个整型数据,输出10个数,并输出其平均值和最大值。 5.编写一个函数,求两数中的最小值,在主函数中输入这两个数,调用函数求出最小值,再求最小值的平方并输出 6.定义一个学生结构体,成员属性包含,姓名,性别和班级,使用结构体数组初始化3名学生,通过for循环输出学生全部信息.
C语言 求大神拯救
根据下列要求,完成程序 1从键盘输入一个三位数整数,并输出该整数,同时输出该三位整数的每一位数字 2写一个函数,判断该三位整数是否为水仙花数 3以该整数的三位数字作为一元二次方程的系数,求该一元二次方程的根 4定义该整形数组,包含十个数据,把该整数的三位数字。依次放入该数组的最前三位,并把数组内容补充完整。并对该数组进行排序,分别输出该数组排序前和排序后的顺序 5对4中做好的数组进行排序(算法不和4相同)输出。(限用指针实现)
C语言fopen打开文件失败
一个单链表创建学生信息的作业,要求要用文件的输入输出。 打全部路径会出现如图的错误。 打“C:\\\student_info.txt”也不行。 把文件移到project8的文件夹下面打“student_info.txt”也不行。 已确定文件在文件夹内是存在的。F11调试确定就是fopen那块儿出的问题 求问怎么改......崩溃 ![图片说明](https://img-ask.csdn.net/upload/201912/04/1575461393_230930.png) #define _CRT_SECURE_NO_DEPRECATE #include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int ElemType; typedef int Status; FILE *fp; /*①单链表数据结构定义*/ typedef struct { int num; //学号 //char name[20]; //姓名 //int sex; //性别 //int dorm; //宿舍 //int tel; //电话 }Student; //结点定义 typedef struct LNode { Student data; struct LNode *next; }LNode; //链表定义 typedef struct { LNode* head; //指向头结点的指针 int length; //链表长度 }LinkList; /*②单链表基本操作接口定义*/ //初始化链表:创建头结点,给L字段赋初值 //返回一个空的单链表 Status InitList(LinkList &L); //初始条件:线性表L已经初始化 //采用头插法创建一个单链表,元素类型为整形,输入-9999时结束 Status CreateFromHead(LinkList &L); //初始条件:线性表L已经初始化 //采用尾插法创建一个单链表,元素类型为整形,输入-9999时结束 Status CreateFromTail(LinkList &L); //初始条件:线性表L已经存在 //打印出所有元素 void PrintElem(LinkList L); //初始条件:线性表L已经存在 //查找第i个结点,若找到(1≤i≤n),则由e返回其值 Status GetElem_L(LinkList L, int i, ElemType &e); //初始条件:线性表L已经存在 //在单链线性表L的第i个元素之前插入元素e Status ListInsert_L(LinkList &L, int i, ElemType e); //初始条件:线性表L已经存在 //删除第i个元素,并由e返回其值 Status ListDelete_L(LinkList &L, int i, ElemType &e); int main() { LinkList L; InitList(L); CreateFromHead(L); PrintElem(L); system("pause"); } /*③部分单链表操作的实现函数*/ Status InitList(LinkList &L) //初始化链表 { L.head = (LNode*)malloc(sizeof(LNode)); if (!L.head)exit(OVERFLOW); L.length = 0; L.head->next = NULL; return OK; } //初始条件:线性表L已经初始化 //采用头插法创建一个单链表,元素类型为整形,输入-9999时结束 Status CreateFromHead(LinkList &L) { LNode *s; int flag = 1; int e; L.head = (LNode*)malloc(sizeof(LNode)); L.head->next = NULL; while (flag) { fp = fopen("C:\Users\解诗雨\source\student_info.txt", "r+"); if (fp==NULL) { printf("打不开\n"); return OK; } fscanf(fp,"%d", &e); if (e) { s = (LNode*)malloc(sizeof(LNode)); s->data.num = e; s->next = L.head->next; L.head->next = s; ++L.length; } else flag = 0; fclose(fp); } return OK; } //初始条件:线性表L已经存在 //打印出所有元素 void PrintElem(LinkList L) { LNode* p; p = L.head->next; printf("当前的结点数为:%d\n", L.length); while (p) { printf("%4d ", p->data.num); p = p->next; } printf("\n"); } 文本: ![图片说明](https://img-ask.csdn.net/upload/201912/04/1575462569_672809.png) 因为现在还在创建链表其他还没弄完...
C语言求解,简单问题求解
在C语言里,定义整型变量a可以使用语句: int a; 而定义一重指针变量p1指向a变量,即把a变量的地址储存在指针变量p1里,可以使用语句: int *p1; p1 = &a; 若要通过p1访问变量a,应该使用: *p1 定义二重变量p2指向p1指针,即把p1的地址存储在p2里,可以使用: int *p2; p2 = &p1; 由于p1之前已经指向a,因此通过p2可以访问到a变量,使用: **p2 以此类推...... 现在给出一个x重指针变量的定义,并假设之前已经定义过1重,2重,...,x-1重指针变量,而且已经将1重指针变量指向a变量,2重指针指向1重指针,...,x重指针指向x-1重指针。 问如何通过x重指针访问变量a? 输入 输入数据有多组,每组只描述x重指针变量的定义,定义格式为: intX Y; 其中X为若干个*,Y遵守C语言标识符命名规则。每行总长度不超过100个字符。 输入直到文件结束为止。 输出 每组输出一行,每行输出一串字符,表示如何通过定义的指针访问a变量,不留空格。 样例输入 int* p; int** prr; int**** yyy; 样例输出 *p **prr ****yyy 我的代码 #include<stdio.h> int main() { char str[101]; char* p; int i; while(scanf("%c",str)!=EOF) { for(i=1;*(str+i)=getchar(),str[i]!=';';i++); str[i]='\0'; for(i=0;*(str+i)!='*';i++); for(;*(str+i)=='*';i++) { putchar('*'); } for(;*(str+i)==' ';i++); printf("%s\n",str+i); } return 0; } 哪里错了
验证线性表及其上的基本操作。
要求 1、 定义单链表类及双向循环链表类。 2、 实现如下功能: 1 根据输入的测试数据(整型)按序从无到有创建一个单链表 L1。 比如,输入{9,2,5},单链表 L1 中结点顺序为,9->2->5 。 2 根据老师输入的测试数据(整型)创建一个非降序单链表 L2。比如, 输入{9,2,5},单链表 L2 中结点顺序为,2->5->9。 3 打印单链表 L2 中表头至表尾所有结点的数据域值,并输出单链表长度 以及这些结点数据域之和。 4 打印单链表 L1 中表尾至表头所有结点的数据域值,并输出最大值及最 小值。 5 由单链表 L1 生成一个双向循环链表 L3. 查找 L3 中任一结点,并输出从 该结点出发沿右指针域访问的线性表遍历序列。
C语言scanf附加格式*的含义?
scanf("%d*%d",&iNumber1,&iNumber2); /*输入整型数据*/这句是什么意思?怎么执行的? 完整程序如下: #include<stdio.h> int main() { long iLong; /*长整型变量*/ short iShort; /*短整型变量*/ int iNumber1=1; /*整型变量,为其赋值为1*/ int iNumber2=2; /*整型变量,为其赋值为2*/ char cChar[10]; /*定义字符数组变量*/ printf("请输入一个长整型变量数值\n"); /*输出信息提示*/ scanf("%ld",&iLong); /*输入长整型数据*/ printf("请输入一个短整型数值\n"); /*输出信息提示*/ scanf("%hd",&iShort); /*输入短整型数据*/ printf("请输入一个整数:\n"); /*输出信息提示*/ scanf("%d*%d",&iNumber1,&iNumber2); /*输入整型数据*/ printf("请输入一个字符串,但是输出时只能显示前三个字符\n"); /*输出信息提示*/ scanf("%3s",cChar); /*输入字符串*/ printf("长整型的数值为: %ld\n",iLong); /*显示长整型值*/ printf("短整型的数值为: %hd\n",iShort); /*显示短整型值*/ printf("整型数值1为: %d\n",iNumber1); /*显示整型iNumber1的值*/ printf("整型数值2为: %d\n",iNumber2); /*显示整型iNumber2的值*/ printf("输出字符串的前三位: %s\n",cChar); /*显示字符串*/ }
学习不久的c++,想要用类做这个作业,自己写的一部分,但总是出错,很苦恼,有没有大佬写出来参考一下。
本课程设计将通过设计和实现一个任务清单(To Do List)应用,对C语言程序设计课程中学习 的选择结构、循环结构、数组等知识点进行综合运用;同时通过该应用的开发,对C语言程序 的设计与开发过程等做简要介绍。 课程设计 前言 本课程设计将通过设计和实现一个任务清单(To Do List)应用,对C语言程序设计课程中学习 的选择结构、循环结构、数组等知识点进行综合运用;同时通过该应用的开发,对C语言程序 的设计与开发过程等做简要介绍。 背景 任务清单通过将待做事项变成可以具体执行的行动,从而帮助你更好的管理、安排和执行你的 生活。简单来说,使用任务清单,就是写下你需要做的一切。但是对于那些虚无缥缈的想法或 项目,要把它们拆解成可执行的行动。例如你要完成一个宣传“时间管理”的演讲,这个项目本 身不可执行,因为你需要前期的准备才能宣传。所以你要写“1.收集演讲内容”、“2.完成演讲稿 和PPT文件”和“3.选定地点和演讲时间”。 1.显示菜单 我们使用命令行界面与应用的使用者(以下简称“用户”)进行交互,当应用运行时,系统应显 示出菜单,同时等待用户的输入,用户输入相应的指令后,应用根据用户输入的指令,执行相 应的操作。例如一个简单的菜单如下: 请输⼊指令: 1 添加新任务 2 查看现有任务列表 0 退出程序 提示: 菜单显示可以通过循环方式显示,用户输入退出程序的指令后,跳出循环。 较好的实现方法是定义一个单独的函数例如menu( )实现显示菜单的功能,主函数里调 用menu( )函数显示菜单。 2.定义数据结构 一个任务应该至少包括任务标题,任务具体的描述,任务的截止日期,任务的完成状态等信 息,我们采用类定义任务,使用字符串定义任务标题和任务的描述,使用整型定义任务截 止日期的年、月和日以及任务的完成状态。 我们使用数组表示任务列表,系统初始运行时,数组为空,用户输入一个新任务时,则在数组 中插入相应的元素,假设用户输入的任务数量总数不会超过100。 3.任务输入 用户在菜单选择页面输入相应的指令(例如输入1)后,应用输出提示信息,提示用户依次输 入新任务的标题、描述、以及截止日期等信息,并保存用户输入的信息(将用户输入的信息保 存在数组中)。 提示: 可以使用全局变量记录用户已经输入的任务个数(即数组中已经有内容的元素个数)。 可以使用switch语句实现用户输入相应指令后,执行不同的操作(例如输入1后,提示 用户进行输入;输入0后,退出程序)。 较好的实现方式是定义一个单数的函数例如add_task( )实现用户输入任务的功能, menu( )函数中调用add_task( )。 4.显示任务列表 用户在菜单选择页面输入相应的指令后,应用输出现有任务列表。 提示: 输出时,应不仅输出数据信息(例如任务a等),还应输出这一列数据代表的含义(例 如任务标题等)。 较好的实现方式是定义一个单数的函数例如list_task( )实现显示任务列表的功能,menu( )函数中调list_task( )。 5.完成任务 用户在菜单选择页面输入相应的指令后,应用输出现有任务列表,应用输出提示信息提示用户 输入要完成的任务编号,应用将该任务的任务完成状态改为已完成。 提示: 任务的完成状态数据类型为整型,可以用不同的数字代表不同的任务完成状态。例如0 表示项目未完成,1表示项目已完成等。 较好的实现方式是定义一个单数的函数例如finish_task( )实现完成任务的功能,menu( ) 函数中调finish_task( )。 6.保存到文件 用户在菜单选择页面输入相应的指令后,应用将现有的项目列表的内容按照一定的格式输出到 文本文件(.txt)中。 以下是我自己写的一部分 // TO DO A LIST #include<iostream.h> #include<string.h> class Date //日期 { int year,month,day; public: Date(int i=2000,int j=1 ,int k=1) { year=i;month=j;day=k; } void Dprint() { cout<<"截止日期:"<<year<<"."<<month<<"."<<day; } }; class Time //时间 { int hour,min; public: Time(int i=0,int j=0) { hour=i;min=j; } void Tprint() { cout<<"截止时间:"<<hour<<":"<<min; } }; class List:public Date,public Time //继承日期和时间 { char List_name[100]; //任务标题 char List_dis[100]; //任务描述 public: List (int a,int b,int c,int d,int e,char *name,char *dis):Date(a,b,c),Time(d,e) { strcpy(List_name,name); strcpy(List_dis,dis); } List() { } void Lprint() { cout<<"任务标题:"<<List_name<<endl; cout<<"任务描述:"<<List_dis<<endl; } }; void menu() //菜单显示 { cout<<"按1添加新任务"<<'\n'<<"按2查看现有任务"<<'\n'; } List Add_task(List A) { int a,b,c,d,e; char name[100],dis[100]; cout<<"请输入任务名称"; cin>>name;cout<<endl; cout<<"请输入任务描述"; cin>>dis;cout<<endl; cout<<"请输入截止日期(格式为2000 1 1)"; cin>>a>>b>>c;cout<<endl; cout<<"请输入截止时间(格式为18 32)"; cin>>d>>e; return A(a,b,c,d,e,*name,*dis); } void Print(List A) { A.Dprint;cout<<endl; A.Tprint;cout<<endl; A.Lprint; } void main() { }
问下大神定时器T0中断导致串口通信无法正常进行的问题。
这是我的代码,将之烧入51单片机时,串口通信本来是让led显示,但是可能由于红外遥控的中断函数干扰了串口通信,导致红外遥控工作正常,串口通信无法进行,led无法显示。 #include<reg51.h> #include<intrins.h> #include"lcd.h" #include"temp.h" #define uint unsigned int #define uchar unsigned char sbit moto=P1^0; uchar CNCHAR[6] = "摄氏度"; void LcdDisplay(int); void UsartConfiguration(); /******************************************************************************* * 函数名 : main * 函数功能 : 主函数 * 输入 : 无 * 输出 : 无 *******************************************************************************/ void UsartConfiguration() { SCON=0X50; //设置为工作方式1 TMOD=0X20; //设置计数器工作方式2 PCON=0X80; //波特率加倍 TH1=0XF3; //计数器初始值设置,注意波特率是4800的 TL1=0XF3; //ES=1; //打开接收中断 //EA=1; //打开总中断 TR1=1; //打开计数器 } uchar time0; bit IRok;//33数据位处理完成标志位 bit handle_ok; uchar IRcode[4];//4个字节 uchar IRdata[33];//33位数据 void InitUART() //定时器初始化 { TMOD=0x02;//定时器重装初值 TH0=0; TL0=0; EA=1; EX0=1; TCON=0X01; ET0=1; TR0=1;//启动定时器 } void t0() interrupt 1 { time0++;//一次中断为277.76us } void int0() interrupt 0 { static uchar i; static bit flag; if(flag) { ES=0; if((time0<54)&&(time0>32)) i=0; IRdata[i]=time0; time0=0; i++; if(i==33) { i=0; IRok=1; } } else { time0=0; flag=1; } } void handle_data() { uchar i;//处理四个字节 uchar j;//处理八位 uchar k;//处理三十三个数据 k=1; for(i=0;i<4;i++) { for(j=0;j<8;j++) { if(IRdata[k]>5) IRcode[i]|=0x80; k++; if(j<7) IRcode[i]>>=1; } } handle_ok=1; } void work() { uchar j; j=0x01; switch (IRcode[2]) { case 0x0c:moto=0;break;//1 数字一按键停止(修改这里更改控制按键) case 0x18:moto=1;break;//2数字二按键启动 default:break; } } but() { while(1) { if(IRok) { handle_data(); IRok=0; } if(handle_ok)//如果处理完成处理遥控器相关程序 { work(); handle_ok=0; } } } void main() { InitUART(); UsartConfiguration(); LcdInit(); //初始化LCD1602 LcdWriteCom(0x88); //写地址 80表示初始地址 LcdWriteData('C'); while(1) { but(); LcdDisplay(Ds18b20ReadTemp()); } } /******************************************************************************* * 函数名 : LcdDisplay() * 函数功能 : LCD显示读取到的温度 * 输入 : v * 输出 : 无 *******************************************************************************/ void LcdDisplay(int temp) //lcd显示 { unsigned char i, datas[] = {0, 0, 0, 0, 0}; //定义数组 float tp; if(temp< 0) //当温度值为负数 { LcdWriteCom(0x80); //写地址 80表示初始地址 SBUF='-';//将接收到的数据放入到发送寄存器 while(!TI); //等待发送数据完成 TI=0; //清除发送完成标志位 LcdWriteData('-'); //显示负 //因为读取的温度是实际温度的补码,所以减1,再取反求出原码 temp=temp-1; temp=~temp; tp=temp; temp=tp*0.0625*100+0.5; //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点 //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就 //算由?.5,还是在小数点后面。 } else { LcdWriteCom(0x80); //写地址 80表示初始地址 LcdWriteData('+'); //显示正 SBUF='+';//将接收到的数据放入到发送寄存器 while(!TI); //等待发送数据完成 TI=0; //清除发送完成标志位 tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量 //如果温度是正的那么,那么正数的原码就是补码它本身 temp=tp*0.0625*100+0.5; //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点 //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就 //算加上0.5,还是在小数点后面。 } if(temp>=2900) { moto=1; //开启电机 } else { moto=0; //关闭电机 } datas[0] = temp / 10000; datas[1] = temp % 10000 / 1000; datas[2] = temp % 1000 / 100; datas[3] = temp % 100 / 10; datas[4] = temp % 10; LcdWriteCom(0x82); //写地址 80表示初始地址 LcdWriteData('0'+datas[0]); //百位 SBUF = '0'+datas[0];//将接收到的数据放入到发送寄存器 while (!TI) ; //等待发送数据完成 TI = 0; LcdWriteCom(0x83); //写地址 80表示初始地址 LcdWriteData('0'+datas[1]); //十位 SBUF = '0'+datas[1];//将接收到的数据放入到发送寄存器 while (!TI); //等待发送数据完成 TI = 0; LcdWriteCom(0x84); //写地址 80表示初始地址 LcdWriteData('0'+datas[2]); //个位 SBUF = '0'+datas[2];//将接收到的数据放入到发送寄存器 while (!TI); //等待发送数据完成 TI = 0; LcdWriteCom(0x85); //写地址 80表示初始地址 LcdWriteData('.'); //显示 ‘.’ SBUF = '.';//将接收到的数据放入到发送寄存器 while (!TI); //等待发送数据完成 TI = 0; LcdWriteCom(0x86); //写地址 80表示初始地址 LcdWriteData('0'+datas[3]); //显示小数点 SBUF = '0'+datas[3];//将接收到的数据放入到发送寄存器 while (!TI); //等待发送数据完成 TI = 0; LcdWriteCom(0x87); //写地址 80表示初始地址 LcdWriteData('0'+datas[4]); //显示小数点 SBUF = '0'+datas[4];//将接收到的数据放入到发送寄存器 while (!TI); //等待发送数据完成 TI = 0; for(i=0; i<6; i++) { SBUF = CNCHAR[i];//将接收到的数据放入到发送寄存器 while (!TI); //等待发送数据完成 TI = 0; } }
做了个简单c语言通讯录出现了问题
就是选择分类的时候本来0是返回上一项菜单的,结果变成新的一类 #include<stdio.h> /*标准输入输出函数库*/ #include<stdlib.h> /*标准函数库*/ #include<string.h> #include<conio.h> FILE *fp; struct Data { int fenlei; char name[10]; //姓名 char tel[15]; //电话 char age[8]; //年龄 char qq[10]; //QQ号 } ren[1000]; struct Data1 { struct Data data; struct Data1 *next; } *p,*p1,*p2; struct zhanghao { char username[20]; char password[10]; } zh,*zh1,*zh2; struct LNode { char clas[20]; int length; struct Data1 *next; } a[6]; int menu() //主菜单选择函数 { int c; //定义一个整型变量 do { system("cls"); //清屏 printf("\t*******通讯录*******\n"); printf("\t--------------------\n"); printf("\t 1、通讯信息显示 \n"); printf("\t 2、通讯信息保存 \n"); printf("\t 3、通讯信息删除 \n"); printf("\t 4、通讯信息修改 \n"); printf("\t 5、通讯信息增加 \n"); printf("\t 6、通讯信息查询 \n"); printf("\t 0. 退出 \n"); printf("\t--------------------\n"); printf("\t请您选择(0-6):"); scanf("%d",&c); } while(c>7&&c<0); return(c); } void openclass() { FILE *fp1; int i; if ((fp1=fopen("contact.dat","r"))==NULL) { printf("\n不存在分类类别"); if ((fp1=fopen("contact.dat","w"))==NULL) //不存在则进行创建 { printf("\n建立失败"); exit(0); } strcpy(a[1].clas,"1.家人亲戚"); //依次将下一条信息复制到上一条的位置 strcpy(a[2].clas,"2.朋友"); strcpy(a[3].clas,"3.同学"); strcpy(a[4].clas,"4.同事"); strcpy(a[5].clas,"5.陌生人"); strcpy(a[6].clas,"6.其他"); for (i=1; i<=6; i++) { if (fprintf(fp1,"%s\n",a[i].clas)==0) { printf("\n文件保存错误!\n"); } a[i].length=0; a[i].next=NULL; } } else { rewind(fp1); for (i=1; !feof(fp1) && fscanf(fp1,"%s\n",a[i].clas); i++)a[i].next=NULL; printf("\n类别文件导入成功\n"); } fclose(fp1); //printf("\n按任意键返回主菜单:"); // getch();//按任意键退出 return; } int select() { int c,i=1; do { printf("\n1.家人亲戚\n"); printf("2.朋友\n"); printf("3.同学\n"); printf("4.同事\n"); printf("5.陌生人\n"); printf("6.其他\n"); printf("0.返回主菜单\n"); printf("请您选择(0-6):"); scanf("%d",&c); if(c<0||c>6) printf("输入错误!请重新输入:\n"); } while(c<0||c>6); if (c==0)return; else return (c); } int checkUerValid(struct zhanghao *zh1)/*校验用户合法性*/ { FILE*fp; struct zhanghao zh[1],*zh2=zh; char *usr,*pwd; int check=0; usr=zh1->username; pwd=zh1->password; if((fp=fopen("user.dat","rb"))==NULL) { printf("File open error!\n"); exit(0); } rewind(fp); fread(zh2,sizeof(struct zhanghao),1,fp); if((strcmp(usr,zh2->username)==0)&&(strcmp(pwd,zh2->password)==0)) { check=1; } if(fclose(fp)) { printf("不能关闭文件!\n"); exit(0); } return check; } void Readfile() { int n,i; openclass(); if((fp=fopen("user.dat","rb"))!=NULL) { printf("通讯录文件已存在。\n"); rewind(fp); fread(&p2,sizeof(struct zhanghao),1,fp); printf("请输入用户名:"); scanf("%s",zh.username); printf("请输入密码:"); scanf("%s",zh.password); while(checkUerValid(&zh)!=1) { printf("密码错误,请重新输入:\n"); printf("请输入用户名:"); scanf("%s",zh.username); printf("请输入密码:"); scanf("%s",zh.password); } fclose(fp); } if((fp=fopen("catalog.dat","rb"))==NULL) { printf("\n通讯录文件不存在!"); if ((fp=fopen("catalog.dat","wb"))==NULL) //不存在则进行创建 { printf("\n建立失败"); exit(0); } else { if ((fp=fopen("user.dat","wb"))==NULL) //不存在则进行创建 { printf("\n建立失败"); exit(0); } else { printf("\n输入注册号(不大于8位数):"); struct zhanghao zh[1],*zh1=zh; scanf("%s",zh1->username); while(strlen(zh1->username)>=8) { printf("\n注册号输入错误!请重新输入:"); scanf("%s",zh1->username); } printf("\n输入注册号密码(不大于8位数):"); scanf("%s",zh1->password); while(strlen(zh1->password)>=8) { printf("\n注册号输入错误!请重新输入:"); scanf("%s",zh1->password); } fwrite(zh1,sizeof(struct zhanghao),1,fp); } fclose(fp); printf("\n通讯录文件已建立\n"); printf("\n按任意键进入主菜单"); getch(); return; } exit(0); //退出 } fseek(fp,0,2); //文件位置指针移动到文件末尾 if (ftell(fp)>0) //文件不为空,获取的是文件长度 { //rewind(fp); //文件位置指针移动到文件开始位置 fseek(fp,0,0); //文件位置指针移动到文件开始位置 for ( n=0; !feof(fp) && fread(&ren[n],sizeof(struct Data),1,fp); n++); //for(i=0;i<=n;i++)printf("%s",dat[i].name); for(i=0; i<=n; i++) { p1=a[ren[i].fenlei].next; p=(struct Data1*)malloc(sizeof(struct Data1)); p->data=ren[i]; p->next=NULL; if(a[ren[i].fenlei].next==NULL) { a[ren[i].fenlei].next=p; a[ren[i].fenlei].length++; } else { while(p1->next!=NULL)p1=p1->next; p1->next=p; a[ren[i].fenlei].length++; } } //从文件流中读取数据,以Data结构体接收读取的数据,并由n记录下文件中联系人个数 printf("\n文件导入成功\n"); printf("\n按任意键进入主菜单:"); getch(); return; } fclose(fp); printf("\n文件导入成功\n"); printf("\n文件中没有数据\n"); printf("\n按任意键进入主菜单:"); getch();//按任意键退出 return; } int input1(struct LNode a[],int n) { char s[10]; char ch,m; while(ch!='n'&&ch!='N') { p1=a[n].next; printf("添加新联系人\n"); printf("姓名:"); p=(struct Data1*)malloc(sizeof(struct Data1)); p->next=NULL; scanf("%s",s); if(p1!=NULL) { while((strcmp(p1->data.name,s)!=0)&&p1->next!=NULL) p1=p1->next; if(strcmp(p1->data.name,s) == 0) { printf("通讯录中已有此人!\n"); printf("是否继续添加?(Y/N)"); scanf("%s",&m); while(m!='n'&&m!='N'&&m!='y'&&m!='Y') { printf("\n输入错误!请重新输入:"); scanf("%s",&m); } if(m!='n'&&m!='N') { input1(a,n); } return 0; } if(p1->next==NULL) { printf("电话:"); scanf("%s",p->data.tel); printf("电子邮件:"); scanf("%s",p->data.age); printf("QQ号:"); scanf("%s",p->data.qq); strcpy(p->data.name,s); printf("类别:%d",n); p->data.fenlei=n; p1->next=p; a[n].length++; } } else { printf("电话:"); scanf("%s",p->data.tel); printf("电子邮件:"); scanf("%s",p->data.age); printf("QQ号:"); scanf("%s",p->data.qq); strcpy(p->data.name,s); printf("类别:%d",n); p->data.fenlei=n; a[n].next=p; a[n].length++; } printf("\n是否继续添加?(Y/N)"); scanf("%s",&ch); while(ch!='n'&&ch!='N'&&ch!='y'&&ch!='Y') { printf("\n输入错误!请重新输入:"); scanf("%s",&ch); } } printf("\n添加成功!\n"); printf("\n按任意键返回主菜单:"); getch(); return 0; } void print11(struct LNode a[],int n) { int l=1; if(a[n].length>0) { printf("共%d条记录\n",a[n].length); p1=p=a[n].next; while(p!=NULL) { printf("\n%d\n类别:",l++); printf("%d\n",p->data.fenlei); printf("姓名:"); printf("%s\n",p->data.name); printf("电话:"); printf("%s\n",p->data.tel); printf("电子邮件:"); printf("%s\n",p->data.age); printf("QQ:"); printf("%s\n",p->data.qq); p=p->next; } } else printf("\n名片数为0!\n"); printf("\n按任意键返回主菜单:"); getch(); return; } void allprint(struct LNode a[]) { int n,sum=0,l=0; for(n=1; n<7; n++) { sum=sum+a[n].length; } printf("\n一共%d记录",sum); for(n=1; n<7; n++) { if(a[n].length>0) { printf("\n类别%d共%d条记录\n",n,a[n].length); p1=p=a[n].next; while(p!=NULL) { printf("%d\n",p->data.fenlei); printf("姓名:"); printf("%s\n",p->data.name); printf("电话:"); printf("%s\n",p->data.tel); printf("电子邮件:"); printf("%s\n",p->data.age); printf("QQ:"); printf("%s\n",p->data.qq); p=p->next; } } else printf("\n名片数为0!\n"); printf("\n按任意键返回主菜单:"); getch(); return; } } void print111(struct LNode a[]) { int m,n; printf("\n请选择显示方式:\n"); printf("1--分类显示 \n"); printf("2--全部显示\n"); printf("0--返回菜单\n"); printf("请选择(0-2):"); scanf("%d",&m); while(m!=1&&m!=2&&m!=0) { printf("\n输入错误,请重新选择:"); scanf("%d",&m); } if(m==1) { printf("\n请输入要查询的分类"); n=select(); print11(a,n); } if(m==2) { allprint(a); } if(m==0) { return; } } void namefind(struct LNode a[],int n) { char s[20]; int i=0; char m; printf("\n请输入想查询的姓名:"); scanf("%s",s); p1=p=a[n].next; if(p1==NULL) { printf("\n通讯录中没有此人!\n"); return; } while(p->next!=NULL) { while(strstr(p->data.name,s)==NULL&&p->next!=NULL)p=p->next; if(strstr(p->data.name,s)!=NULL) { i++; printf("\n类别:"); printf("%d\n",p->data.fenlei); printf("姓名:"); printf("%s\n",p->data.name); printf("电话:"); printf("%s\n",p->data.tel); printf("电子邮件:"); printf("%s\n",p->data.age); printf("QQ:"); printf("%s\n",p->data.qq); } if((p->next==NULL)&&i==0) { printf("\n通讯录中没有此人!\n"); printf("\n是否继续查询?(Y/N)"); scanf("%s",&m); while(m!='n'&&m!='N'&&m!='y'&&m!='Y') { printf("\n输入错误!请重新输入:"); scanf("%c",&m); } if(m!='n'&&m!='N') { namefind(a,n); } return; } if(p->next==NULL) { printf("\n查询完成!\n"); printf("\n是否继续查询?(Y/N)"); scanf("%s",&m); while(m!='n'&&m!='N'&&m!='y'&&m!='Y') { printf("\n输入错误!请重新输入:"); scanf("%s",&m); } if(m!='n'&&m!='N') { namefind(a,n); } return; } else p=p->next; } if(strstr(p->data.name,s)!=NULL) { i++; printf("\n类别:"); printf("%d\n",p->data.fenlei); printf("姓名:"); printf("%s\n",p->data.name); printf("电话:"); printf("%s\n",p->data.tel); printf("电子邮件:"); printf("%s\n",p->data.age); printf("QQ:"); printf("%s\n",p->data.qq); } printf("\n查询完成!\n"); printf("\n是否继续查询?(Y/N)"); scanf("%s",&m); while(m!='n'&&m!='N'&&m!='y'&&m!='Y') { printf("\n输入错误!请重新输入:"); scanf("%s",&m); } if(m!='n'&&m!='N') { namefind(a,n); } return; } void onedelete1(struct LNode a[],int n) { char s[20],r; int i=0; printf("请输入想删除联系人的姓名:"); scanf("%s",s); p1=p=a[n].next; if(p1==NULL) { printf("\n通讯录中没有此人!\n"); return; } while(strcmp(p->data.name,s)!=0&&p->next!=NULL)p=p->next; if(strcmp(p->data.name,s) != 0) { printf("\n通讯录中没有此人!\n"); return; } if(strcmp(p->data.name,s) == 0) { printf("类别:"); printf("%d\n",p->data.fenlei); printf("姓名:"); printf("%s\n",p->data.name); printf("电话:"); printf("%s\n",p->data.tel); printf("电子邮件:"); printf("%s\n",p->data.age); printf("QQ:"); printf("%s\n",p->data.qq); } printf("确认删除?(Y/N):"); scanf("%s",&r); while(r!='n'&&r!='N'&&r!='y'&&r!='Y') { printf("\n输入错误!请重新输入:"); scanf("%s",&r); } if(r=='y'||r=='Y') { if(p1==p)a[n].next=p->next; else { while(p1->next!=p)p1=p1->next; p1->next=p->next; } free(p); a[n].length--; printf("\n已经成功删除!\n"); return; } } //全部删除函数 void alldelete1(struct LNode a[],int n) { char r; p1=p=a[n].next; printf("\n确认删除?(Y/N):"); scanf("%s",&r); while(r!='n'&&r!='N'&&r!='y'&&r!='Y') { printf("\n输入错误!请重新输入:"); scanf("%s",&r); } if(r=='y'||r=='Y') { if(p1==NULL) { printf("不存在名片!"); return; } while(p1->next!=NULL) { p=p1->next; p1->next=p->next; free(p); } a[n].next=NULL; a[n].length=0; printf("\n已经成功删除全类名片!\n"); return; } if(r=='n'||r=='N') { return; } } //选择删除联系人函数 void delete11(struct LNode a[],int n) { int m; printf("\n请选择删除方式:\n"); printf("1--单个删除 \n"); printf("2--全部删除\n"); printf("0--返回菜单\n"); printf("请选择(0-2):"); scanf("%d",&m); while(m!=1&&m!=2&&m!=0) { printf("\n输入错误,请重新选择:"); scanf("%d",&m); } if(m==1) { onedelete1(a,n); } if(m==2) { alldelete1(a,n); } if(m==0) { return; } } void Save() { FILE *fp; int i; if ((fp=fopen("catalog.dat","wb"))==NULL) { printf("\n文件打开失败"); } for (i=1; i<=6; i++) { p=a[i].next; while(p!=NULL) { if (fwrite(&(p->data),sizeof(struct Data),1,fp)==0) { printf("\n文件保存错误!\n"); } p=p->next; } } fclose(fp); printf("\n按任意键返回主菜单:"); getch();//按任意键退出 return; } void namechange(struct LNode a[],int n) { char s[20]; char m,ch; int i=0,k; p1=a[n].next; printf("\n请输入想修改的联系人的姓名:"); scanf("%s",s); if(p1==NULL) { printf("\n通讯录中没有此人!\n"); printf("\n是否继续修改?(Y/N)"); scanf("%s",&ch); while(ch!='n'&&ch!='N'&&ch!='y'&&ch!='Y') { printf("\n输入错误!请重新输入:"); scanf("%s",&ch); } if(ch!='n'&&ch!='N') { namechange(a,n); } return; } else { while((strcmp(p1->data.name,s)!=0)&&p1->next!=NULL) p1=p1->next; if(p1->next ==NULL&&strcmp(p1->data.name,s) != 0) { printf("\n通讯录中没有此人!\n"); printf("\n是否继续修改?(Y/N)"); scanf("%s",&ch); while(ch!='n'&&ch!='N'&&ch!='y'&&ch!='Y') { printf("\n输入错误!请重新输入:"); scanf("%s",&ch); } if(ch!='n'&&ch!='N') { namechange(a,n); } return; } } if(strcmp(p1->data.name,s) == 0) { printf("类别:"); printf("%d\n",p1->data.fenlei); printf("姓名:"); printf("%s\n",p1->data.name); printf("电话:"); printf("%s\n",p1->data.tel); printf("电子邮件:"); printf("%s\n",p1->data.age); printf("QQ:"); printf("%s\n",p1->data.qq); printf("\n1.修改姓名\n"); printf("2.修改电话\n"); printf("3.修改电子邮件\n"); printf("4.修改地址\n"); printf("5.修改QQ号\n"); printf("0.返回菜单\n"); printf("请您选择(0-5):"); scanf("%d",&k); while(k!=1&&k!=2&&k!=3&&k!=4&&k!=5&&k!=0) { printf("\n输入错误,请重新选择:"); scanf("%d",&k); } switch(k) { case 1: printf("\n请输入新的姓名:"); scanf("%s",p1->data.name); break; case 2: printf("\n请输入新的电话:"); scanf("%s",p1->data.tel); break; case 3: printf("\n请输入新的电子邮件:"); scanf("%s",p1->data.age); break; case 5: printf("\n请输入新的QQ号:"); scanf("%s",p1->data.qq); break; case 0: return; } printf("\n修改成功!\n"); printf("\n是否继续修改?(Y/N)"); scanf("%s",&m); while(m!='n'&&m!='N'&&m!='y'&&m!='Y') { printf("\n输入错误!请重新输入:"); scanf("%c",&m); } for(; m=='y'||m=='Y';) { printf("请您选择(0-5):"); scanf("%d",&k); while(k!=1&&k!=2&&k!=3&&k!=4&&k!=5&&k!=0) { printf("\n输入错误,请重新选择:"); scanf("%d",&k); } switch(k) { case 1: printf("\n请输入新的姓名:"); scanf("%s",p1->data.name); break; case 2: printf("\n请输入新的电话:"); scanf("%s",p1->data.tel); break; case 3: printf("\n请输入新的电子邮件:"); scanf("%s",p1->data.age); break; case 5: printf("\n请输入新的QQ号:"); scanf("%s",p1->data.qq); break; case 0: return; } printf("\n修改成功!\n"); printf("\n是否继续修改?(Y/N)"); scanf("%s",&m); while(m!='n'&&m!='N'&&m!='y'&&m!='Y') { printf("\n输入错误!请重新输入:"); scanf("%s",&m); } } if(m=='n'||m=='N'); return; } } int main() { int ads,asd; Readfile(); while(1) { switch(ads=menu()) { case 1: system("cls"); print111(a); break; case 2: system("cls"); Save(); break; case 3: system("cls"); asd=select(); delete11(a,asd); break; case 4: system("cls"); asd=select(); namechange(a,asd); break; case 5: system("cls"); asd=select(); input1(a,asd); break; case 6: system("cls"); asd=select(); namefind(a,asd); break; case 0: system("cls"); exit(0); default: ads=menu(); } } }
请问为什么输入14位的数字学号却显示10位乱组数字,改如何更改呢
//采用顺序线性表解决宿舍管理问题 (C语言) #include<stdio.h> #include<stdlib.h> #include<string.h> #define N 40 //线性表存储空间的初始分配量 #define increase 10 //线性表存储空间的分配量增量 int f,t=0; //定义全局变量 typedef struct { char name[20]; int num; //学号和房号都为整型 int room; }stu; stu stud; typedef struct { int length; //当前长度 stu *elem; //存储空间基址 int listsize; //当前分配的存储容量 }linklist; void init(linklist &l)//线性表初始化 { l.length=0; l.elem=(stu *)malloc(N*sizeof(stu )); l.listsize=N; } void menu()//操作菜单 { printf("\n"); printf(" ***************请按键选择操作****************\n"); printf("\n");printf("\n"); printf(" 1 按姓名排序 2 按学号排序\n"); printf("\n"); printf(" 3 按房号排序 4 按姓名查找\n"); printf("\n"); printf(" 5 按学号查找 6 按房号查找\n"); printf("\n"); printf(" 7 按学号插入 8 按学号删除\n"); printf("\n"); printf("\n"); printf("\n"); printf("\n"); printf("提示:当输入的数字键为0时,退出操作\n"); if(t==1) { printf("请输入数字键(1~8为操作键):");//1~8为有效数字操作键 scanf("%d",&f); if(f<0||f>9) { system("cls"); printf("\n"); printf("输入数字不对,请在原处重输!\n"); printf("\n"); menu(); } } } void disp() //返回主界面 { char c; fflush(stdin); printf("\n"); printf("请按任意键进入主界面:"); scanf("%c",&c); system("cls"); } void panduan3() //如果已无学生记录则返回主界面 { printf("\n"); printf("已无学生记录\n"); printf("\n"); disp(); menu(); } void shuru(linklist l) //输入学生的信息 { printf("请输入姓名:"); fflush(stdin); // 清空输入缓冲区,得到正确的输入数据 gets(stud.name); //输入一行字符串(姓名) printf("请输入学号:"); scanf("%d",&stud.num); printf("请输入房号:"); scanf("%d",&stud.room); } void create(linklist &l)//创建学生信息表 { if(l.length>=l.listsize) //判断学生的人数是否超过初值,如果超过,则重新分配 { stu *newbase; newbase=(stu*)realloc11111(l.elem,(N+increase)*sizeof(stu )); l.elem=newbase; l.listsize+=increase; } int i=2; char ch; printf("\n"); printf(" **************************开始创建线性表***************************\n");printf("\n"); printf("请输入第1个学生的信息\n"); shuru(l); //调用输入函数 ch=getchar(); strcpy111(l.elem[l.length].name,stud.name); l.elem[l.length].num=stud.num; l.elem[l.length].room=stud.room; l.length++; printf("\n"); printf("是否继续输入?<y/n>:"); scanf("%c",&ch); printf("\n");printf("\n"); while(ch=='y') { printf("请输入第%d个学生的信息\n",i); shuru(l); strcpy(l.elem[l.length].name,stud.name); l.elem[l.length].num=stud.num; l.elem[l.length].room=stud.room; l.length++; i++; ch=getchar(); printf("\n"); printf("是否继续输入?<y/n>:"); scanf("%c",&ch); printf("\n");printf("\n"); } if(ch=='n') system111("cls"); } void sort3(linklist &l)//按房号排序(采用冒泡排序) { int i,j; stu temp; for(i=0;i<l.length-1;i++) for(j=i+1;j<l.length;j++) if(l.elem[i].room>l.elem[j].room) { temp=l.elem[i]; l.elem[i]=l.elem[j]; l.elem[j]=temp; } } void sort2(linklist &l)//按学号排序(采用冒泡排序) { int i,j; stu temp; for(i=0;i<l.length-1;i++) for(j=i+1;j<l.length;j++) if(l.elem[i].num>l.elem[j].num) { temp=l.elem[i]; l.elem[i]=l.elem[j]; l.elem[j]=temp; } } void sort1(linklist &l)//按姓名排序(采用冒泡排序) { int i,j; stu temp; for(i=0;i<l.length-1;i++) for(j=i+1;j<l.length;j++) if(strcmp(l.elem[i].name,l.elem[j].name)>0) { temp=l.elem[i]; l.elem[i]=l.elem[j]; l.elem[j]=temp; } } void print1(linklist &l)//打印学生信息 { int i; printf("\n"); printf("姓名 学号 房号\n");printf("\n"); for(i=0;i<l.length;i++) printf("%-15s %-3d %5d\n",l.elem[i].name,l.elem[i].num,l.elem[i].room); } void print2(linklist &l,int mid) //打印查找到的学生信息 { printf("查找成功----->该学生信息为:\n"); printf("姓名 学号 房号\n");printf("\n"); printf("%-15s %-5d %-5d\n",l.elem[mid].name,l.elem[mid].num,l.elem[mid].room); } int panduan1(char ch) //判断是否继续查找 { scanf("%c",&ch); printf("是否继续查找?<y/n>:"); fflush(stdin); scanf("%c",&ch); if(ch=='y') { system("cls"); return(1); } else return 0; } int panduan2(char ch) //如果学生不存在,判断是否继续查找 { scanf("%c",&ch); printf("该学生不存在,是否继续查找?<y/n>:"); fflush(stdin); scanf("%c",&ch); if(ch=='y') { system("cls"); return(1); } else return 0; } void chazhao3(linklist &l)//按房号从小到大查找(采用二分查找) { if(l.length==0) panduan3(); //此函数功能为:返回主界面 else { int low=0,high=l.length,mid,flag=0;//flag作为标志符,为1则表示查找成功,否则没有所要查找的学生 int m; char ch; printf("\n");printf("\n"); printf("按房号查找----->请输入要查找的房号:"); scanf("%d",&m); printf("\n"); while(low<=high) { mid=(low+high)/2; if(m==l.elem[mid].room) { flag=1; break; } else if(m>l.elem[mid].room) low=mid+1; else high=mid-1; } if(flag==1) { print2(l,mid); if(panduan1(ch)) //调用判断函数1 chazhao3(l); else { system("cls"); menu(); } } else { if(panduan2(ch)) //调用判断函数2 chazhao3(l); else { system("cls"); menu(); } } } } void chazhao2(linklist &l)//按学号从小到大查找(采用二分查找) { if(l.length==0) panduan3(); else { int low=0,high=l.length,mid,flag=0; int n; char ch; printf("\n");printf("\n"); printf("按学号查找----->请输入要查找的学号:"); scanf("%d",&n); printf("\n"); while(low<=high) { mid=(low+high)/2; if(n==l.elem[mid].num) { flag=1; break; } else if(n>l.elem[mid].num) low=mid+1; else high=mid-1; } if(flag==1) { print2(l,mid); if(panduan1(ch)) chazhao2(l); else { system("cls"); menu(); } } else { if(panduan2(ch)) chazhao2(l); else { system("cls"); menu(); } } } } void chazhao1(linklist &l)//按姓名从小到大查找(采用二分查找) { if(l.length==0) panduan3(); else { int low=0,high=l.length,mid,flag=0; printf("\n");printf("\n"); printf("按姓名查找----->请输入要查找的姓名:"); char a[15],ch; scanf("%s",a); printf("\n"); while(low<=high) { mid=(low+high)/2; if(strcmp(a,l.elem[mid].name)==0) { flag=1; break; } else if(strcmp(a,l.elem[mid].name)>0) low=mid+1; else high=mid-1; } if(flag==1) { print2(l,mid); //打印查找到的学生的信息 if(panduan1(ch)) chazhao1(l); else { system("cls"); menu(); } } else { if(panduan2(ch)) chazhao1(l); else { system("cls"); menu(); } } } } void insert(linklist &l)//按学号从小到大插入该学生 { int i,j,k; char ch; printf("\n"); printf("插入的学生信息为:\n"); printf("姓名:"); fflush(stdin);// 清空输入缓冲区,得到正确的输入数据 gets(stud.name); printf("学号:"); scanf("%d",&stud.num); printf("房号:"); scanf("%d",&stud.room); if(l.length==0) { strcpy(l.elem[l.length].name,stud.name); l.elem[l.length].num=stud.num; l.elem[l.length].room=stud.room; } for(i=0;i<l.length;i++) { if(stud.num<l.elem[i].num) { k=i; for(j=l.length;j>k;j--) l.elem[j]=l.elem[j-1]; strcpy(l.elem[k].name,stud.name); l.elem[k].num=stud.num; l.elem[k].room=stud.room; break; } else { strcpy(l.elem[l.length].name,stud.name); l.elem[l.length].num=stud.num; l.elem[l.length].room=stud.room; } } l.length++; fflush(stdin); printf("\n"); printf("是否继续插入?<y/n>:"); scanf("%c",&ch); if(ch=='y') insert(l); else system("cls"); } void Delete(linklist &l)//按学号删除该学生 { int i,j,k=-1; char ch; printf("\n");printf("\n"); printf("请输入要删除学生的学号:"); scanf("%d",&stud.num); for(i=0;i<l.length;i++) { if(stud.num==l.elem[i].num) { printf("该学生的信息为:\n");printf("\n"); printf("%-15s %-3d %7d\n",l.elem[i].name,l.elem[i].num,l.elem[i].room); k=i; for(j=k;j<l.length-1;j++) l.elem[j]=l.elem[j+1]; printf("\n"); break; } } if(i>=l.length) printf("该学生不存在\n"); if(k>=0)l.length--; fflush(stdin); printf("\n"); printf("是否继续删除?<y/n>:"); scanf("%c",&ch); system("cls"); if(ch=='y') Delete(l); else system("cls"); } int main() //主函数 { linklist l; //定义线性表 l init(l); //调用初始化函数 char ch; system("color a"); printf("\n"); printf(" *************************欢迎进入宿舍管理查询系统*************************\n"); printf("\n"); printf("请按任意键开始操作:"); scanf("%c",&ch); system("cls");//将屏幕先前显示的内容清理掉 create(l); //调用线性表创建函数 system("cls"); t=1; menu(); //调用主菜单函数 while(f!=0) { system("cls"); switch(f) { case 1: sort1(l); //调用按姓名排序函数 printf("\n"); if(l.length==0) { printf("已无学生记录\n"); printf("\n"); disp(); menu(); } else { printf("按姓名排序:\n"); print1(l); disp(); //调用返回主界面 menu(); } break; case 2: sort2(l); //调用按学号排序函数 printf("\n"); if(l.length==0) { printf("已无学生记录\n"); printf("\n"); disp(); menu(); } else { printf("按学号排序:\n"); print1(l); disp(); menu(); }break; case 3: sort3(l); //调用按房号排序函数 printf("\n"); if(l.length==0) { printf("已无学生记录\n"); printf("\n"); disp(); menu(); } else { printf("按房号排序:\n"); print1(l); disp(); menu(); }break; case 4:sort1(l); //先调用按姓名排序函数进行排序 chazhao1(l); //再调用按姓名查找函数进行(二分)查找 break; case 5: sort2(l); //先调用按学号排序函数进行排序 chazhao2(l); //再调用按学号查找函数进行(二分)查找 break; case 6: sort3(l); //先调用按房号排序函数进行排序 chazhao3(l); //再调用按房号查找函数进行(二分)查找 break; case 7: sort2(l); //调用插入函数 insert(l); system("cls"); printf("显示插入后的学生信息:\n");print1(l); disp(); menu(); break; case 8: Delete(l); //调用删除函数 if(l.length==0) { printf("\n"); printf("学生记录已被删除完\n"); printf("\n"); disp(); menu(); } else { printf("显示删除后的学生信息:\n"); print1(l); disp(); menu(); } break; } }return 0; }
正在学51单片机,对串口通信SBUF数据传输方式不是很清楚。。
为了实现在串口调试助手上输入一个值(0~65535),接收处理后能够在动态数码管上显示。因为不清楚SBUF内的数据存储方式,所以无从下手,特来求解。网上已有的解释是SBUF每次只读一个字节,那么输入12345,它的读取方式是怎样的,希望大家能够给一些指导。 PS:重点是串口中断函数部分接收到的数据转变为整型数据类型的实现方法. 附上代码: ``` #include <reg51.h> typedef unsigned char u8; typedef unsigned int u16; u8 n=0; u8 disp[5]; u8 code smgduan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值,共阴 sbit LSA=P2^2; //定义“三”管脚 sbit LSB=P2^3; sbit LSC=P2^4; void delay(u16 i) //延时函数,i=1时,大约延时10us { while(i--); } void DigDisplay() //动态扫描,逐个显示 { u8 i; for(i=0;i<5;i++) { switch(i) //位选,选择点亮的数码管 { case(0): LSA=0;LSB=0;LSC=0; break;//显示第0位 case(1): LSA=1;LSB=0;LSC=0; break;//显示第1位 case(2): LSA=0;LSB=1;LSC=0; break;//显示第2位 case(3): LSA=1;LSB=1;LSC=0; break;//显示第3位 case(4): LSA=0;LSB=0;LSC=1; break;//显示第4位 } P0=disp[i];//发送段码 delay(100);//单次扫描间隔 P0=0x00;//消隐 } } void UsartInit() { SCON=0x50; //设置为工作方式1 TMOD=0x20; //设置计数器工作方式2 PCON=0x80; //波特率加倍 TH1=0xF4; //计数器初始值设置,波特率为4800 TL1=0xF4; ES=1; //打开接收中断 EA=1; //打开总中断 TR1=1; //打开计数器 } void datapros() { disp[0]=smgduan[n/10000]; //万位 disp[1]=smgduan[n%10000/1000]; //千位 disp[2]=smgduan[n%10000%1000/100]; //百位 disp[3]=smgduan[n%10000%1000%100/10]; //十位 disp[4]=smgduan[n%10000%1000%100%10]; //个位 } void main() { UsartInit(); //串口初始化 while(1) { datapros(); //数据处理函数 DigDisplay(); } } void Usart() interrupt 4 //接收停止位的中间时,由内部硬件使RI置1,进入中断 { n=SBUF; //存储接收到的数据 RI=0; //清除接收中断标志位 } ```
下面这段代码的执行流程有一处疑问,请各位看看
``` #include <stdio.h> #include<process.h> struct address_list /*定义结构体存储学生成绩信息*/ { char name[10]; char adr[20]; char tel[15]; } info[100]; void save(char *name, int n) /*自定义函数save*/ { FILE *fp; /*定义一个指向FILE类型结构体的指针变量*/ int i; if ((fp = fopen(name, "wb")) == NULL) /*以只写方式打开指定文件*/ { printf("cannot open file\n"); exit(0); } for (i = 0; i < n; i++) //将一组数据输出到fp所指的文件中 if (fwrite(&info[i], sizeof(struct address_list), 1, fp) != 1) printf("file write error\n"); /*如果写入文件不成功,则输出错误*/ fclose(fp); /*关闭文件*/ } void show(char *name, int n) /*自定义函数show*/ { int i; FILE *fp; /*定义一个指向FILE类型结构体的指针变量*/ if ((fp = fopen(name, "rb")) == NULL) /*以只读方式打开指定文件*/ { printf("cannot open file\n"); exit(0); } for (i = 0; i < n; i++) { fread(&info[i], sizeof(struct address_list), 1, fp); /*从fp所指向的文件读入数据存到数组score中*/ printf("%15s%20s%20s\n", info[i].name, info[i].adr,info[i].tel); } fclose(fp); /*以只写方式打开指定文件*/ } main() { int i, n; /*变量类型为基本整型*/ char filename[50]; /*数组为字符型*/ printf("有多少个学生?\n"); scanf("%d", &n); /*输入学生数*/ printf("请输入文件路径及名称:\n"); scanf("%s", filename); /*输入文件所在路径及名称*/ printf("请输入学生的姓名、地址、电话:\n"); for (i = 0; i < n; i++) /*输入学生成绩信息*/ { printf("NO%d\n", i + 1); scanf("%s%s%s", info[i].name, info[i].adr, info[i].tel); save(filename, n); /*调用函数save*/ } show(filename, n); /*调用函数show*/ return 0; } ``` 从main函数处开始执行,输入n=4(即4个学生),在输出“请输入学生的姓名、地址、电话”这句后,第一次进入for循环,此时从键盘上输入一个学生的全部信息后按Enter键,开始调用save函数,此时在save函数中进入for循环后n是4,执行 if (fwrite(&info[i], sizeof(struct address_list), 1, fp) != 1)这句后把info[0]的信息写入到文件中了对吧?接着save函数中for语句进入第二次循环,这个时候info[1]的值还没输入呢,再判断 if (fwrite(&info[i], sizeof(struct address_list), 1, fp) != 1)这句的判定不会出错吗?即使不出错,此时程序把谁写入了文件呢?如果打开文件看的话,其实文件中只有info[0]的信息,没有另外三个结构变量的信息啊?求解释
有关宿舍管理系统的一些问题
以下是宿舍管理系统的程序。请问一下如何更改能使学号这一成员允许输入的数字更多并成功输出。还有就是这个程序执行后有字体颜色,这是为什么,可以调整吗,如何调整。谢谢大佬 //采用顺序线性表解决宿舍管理问题 (C语言) #include<stdio.h> #include<stdlib.h> #include<string.h> #define N 40 //线性表存储空间的初始分配量 #define increase 10 //线性表存储空间的分配量增量 int f,t=0; //定义全局变量 typedef struct { char name[20]; int num; //学号和房号都为整型 int room; }stu; stu stud; typedef struct { int length; //当前长度 stu *elem; //存储空间基址 int listsize; //当前分配的存储容量 }linklist; void init(linklist &l)//线性表初始化 { l.length=0; l.elem=(stu *)malloc(N*sizeof(stu )); l.listsize=N; } void menu()//操作菜单 { printf("\n"); printf(" ***************请按键选择操作****************\n"); printf("\n");printf("\n"); printf(" 1 按姓名排序 2 按学号排序\n"); printf("\n"); printf(" 3 按房号排序 4 按姓名查找\n"); printf("\n"); printf(" 5 按学号查找 6 按房号查找\n"); printf("\n"); printf(" 7 按学号插入 8 按学号删除\n"); printf("\n"); printf("\n"); printf("\n"); printf("\n"); printf("提示:当输入的数字键为0时,退出操作\n"); if(t==1) { printf("请输入数字键(1~8为操作键):");//1~8为有效数字操作键 scanf("%d",&f); if(f<0||f>9) { system("cls"); printf("\n"); printf("输入数字不对,请在原处重输!\n"); printf("\n"); menu(); } } } void disp() //返回主界面 { char c; fflush(stdin); printf("\n"); printf("请按任意键进入主界面:"); scanf("%c",&c); system("cls"); } void panduan3() //如果已无学生记录则返回主界面 { printf("\n"); printf("已无学生记录\n"); printf("\n"); disp(); menu(); } void shuru(linklist l) //输入学生的信息 { printf("请输入姓名:"); fflush(stdin); // 清空输入缓冲区,得到正确的输入数据 gets(stud.name); //输入一行字符串(姓名) printf("请输入学号:"); scanf("%d",&stud.num); printf("请输入房号:"); scanf("%d",&stud.room); } void create(linklist &l)//创建学生信息表 { if(l.length>=l.listsize) //判断学生的人数是否超过初值,如果超过,则重新分配 { stu *newbase; newbase=(stu*)realloc(l.elem,(N+increase)*sizeof(stu )); l.elem=newbase; l.listsize+=increase; } int i=2; char ch; printf("\n"); printf(" **************************开始创建线性表***************************\n");printf("\n"); printf("请输入第1个学生的信息\n"); shuru(l); //调用输入函数 ch=getchar(); strcpy(l.elem[l.length].name,stud.name); l.elem[l.length].num=stud.num; l.elem[l.length].room=stud.room; l.length++; printf("\n"); printf("是否继续输入?<y/n>:"); scanf("%c",&ch); printf("\n");printf("\n"); while(ch=='y') { printf("请输入第%d个学生的信息\n",i); shuru(l); strcpy(l.elem[l.length].name,stud.name); l.elem[l.length].num=stud.num; l.elem[l.length].room=stud.room; l.length++; i++; ch=getchar(); printf("\n"); printf("是否继续输入?<y/n>:"); scanf("%c",&ch); printf("\n");printf("\n"); } if(ch=='n') system("cls"); } void sort3(linklist &l)//按房号排序(采用冒泡排序) { int i,j; stu temp; for(i=0;i<l.length-1;i++) for(j=i+1;j<l.length;j++) if(l.elem[i].room>l.elem[j].room) { temp=l.elem[i]; l.elem[i]=l.elem[j]; l.elem[j]=temp; } } void sort2(linklist &l)//按学号排序(采用冒泡排序) { int i,j; stu temp; for(i=0;i<l.length-1;i++) for(j=i+1;j<l.length;j++) if(l.elem[i].num>l.elem[j].num) { temp=l.elem[i]; l.elem[i]=l.elem[j]; l.elem[j]=temp; } } void sort1(linklist &l)//按姓名排序(采用冒泡排序) { int i,j; stu temp; for(i=0;i<l.length-1;i++) for(j=i+1;j<l.length;j++) if(strcmp(l.elem[i].name,l.elem[j].name)>0) { temp=l.elem[i]; l.elem[i]=l.elem[j]; l.elem[j]=temp; } } void print1(linklist &l)//打印学生信息 { int i; printf("\n"); printf("姓名 学号 房号\n");printf("\n"); for(i=0;i<l.length;i++) printf("%-15s %-3d %5d\n",l.elem[i].name,l.elem[i].num,l.elem[i].room); } void print2(linklist &l,int mid) //打印查找到的学生信息 { printf("查找成功----->该学生信息为:\n"); printf("姓名 学号 房号\n");printf("\n"); printf("%-15s %-5d %-5d\n",l.elem[mid].name,l.elem[mid].num,l.elem[mid].room); } int panduan1(char ch) //判断是否继续查找 { scanf("%c",&ch); printf("是否继续查找?<y/n>:"); fflush(stdin); scanf("%c",&ch); if(ch=='y') { system("cls"); return(1); } else return 0; } int panduan2(char ch) //如果学生不存在,判断是否继续查找 { scanf("%c",&ch); printf("该学生不存在,是否继续查找?<y/n>:"); fflush(stdin); scanf("%c",&ch); if(ch=='y') { system("cls"); return(1); } else return 0; } void chazhao3(linklist &l)//按房号从小到大查找(采用二分查找) { if(l.length==0) panduan3(); //此函数功能为:返回主界面 else { int low=0,high=l.length,mid,flag=0;//flag作为标志符,为1则表示查找成功,否则没有所要查找的学生 int m; char ch; printf("\n");printf("\n"); printf("按房号查找----->请输入要查找的房号:"); scanf("%d",&m); printf("\n"); while(low<=high) { mid=(low+high)/2; if(m==l.elem[mid].room) { flag=1; break; } else if(m>l.elem[mid].room) low=mid+1; else high=mid-1; } if(flag==1) { print2(l,mid); if(panduan1(ch)) //调用判断函数1 chazhao3(l); else { system("cls"); menu(); } } else { if(panduan2(ch)) //调用判断函数2 chazhao3(l); else { system("cls"); menu(); } } } } void chazhao2(linklist &l)//按学号从小到大查找(采用二分查找) { if(l.length==0) panduan3(); else { int low=0,high=l.length,mid,flag=0; int n; char ch; printf("\n");printf("\n"); printf("按学号查找----->请输入要查找的学号:"); scanf("%d",&n); printf("\n"); while(low<=high) { mid=(low+high)/2; if(n==l.elem[mid].num) { flag=1; break; } else if(n>l.elem[mid].num) low=mid+1; else high=mid-1; } if(flag==1) { print2(l,mid); if(panduan1(ch)) chazhao2(l); else { system("cls"); menu(); } } else { if(panduan2(ch)) chazhao2(l); else { system("cls"); menu(); } } } } void chazhao1(linklist &l)//按姓名从小到大查找(采用二分查找) { if(l.length==0) panduan3(); else { int low=0,high=l.length,mid,flag=0; printf("\n");printf("\n"); printf("按姓名查找----->请输入要查找的姓名:"); char a[15],ch; scanf("%s",a); printf("\n"); while(low<=high) { mid=(low+high)/2; if(strcmp(a,l.elem[mid].name)==0) { flag=1; break; } else if(strcmp(a,l.elem[mid].name)>0) low=mid+1; else high=mid-1; } if(flag==1) { print2(l,mid); //打印查找到的学生的信息 if(panduan1(ch)) chazhao1(l); else { system("cls"); menu(); } } else { if(panduan2(ch)) chazhao1(l); else { system("cls"); menu(); } } } } void insert(linklist &l)//按学号从小到大插入该学生 { int i,j,k; char ch; printf("\n"); printf("插入的学生信息为:\n"); printf("姓名:"); fflush(stdin);// 清空输入缓冲区,得到正确的输入数据 gets(stud.name); printf("学号:"); scanf("%d",&stud.num); printf("房号:"); scanf("%d",&stud.room); if(l.length==0) { strcpy(l.elem[l.length].name,stud.name); l.elem[l.length].num=stud.num; l.elem[l.length].room=stud.room; } for(i=0;i<l.length;i++) { if(stud.num<l.elem[i].num) { k=i; for(j=l.length;j>k;j--) l.elem[j]=l.elem[j-1]; strcpy(l.elem[k].name,stud.name); l.elem[k].num=stud.num; l.elem[k].room=stud.room; break; } else { strcpy(l.elem[l.length].name,stud.name); l.elem[l.length].num=stud.num; l.elem[l.length].room=stud.room; } } l.length++; fflush(stdin); printf("\n"); printf("是否继续插入?<y/n>:"); scanf("%c",&ch); if(ch=='y') insert(l); else system("cls"); } void Delete(linklist &l)//按学号删除该学生 { int i,j,k=-1; char ch; printf("\n");printf("\n"); printf("请输入要删除学生的学号:"); scanf("%d",&stud.num); for(i=0;i<l.length;i++) { if(stud.num==l.elem[i].num) { printf("该学生的信息为:\n");printf("\n"); printf("%-15s %-3d %7d\n",l.elem[i].name,l.elem[i].num,l.elem[i].room); k=i; for(j=k;j<l.length-1;j++) l.elem[j]=l.elem[j+1]; printf("\n"); break; } } if(i>=l.length) printf("该学生不存在\n"); if(k>=0)l.length--; fflush(stdin); printf("\n"); printf("是否继续删除?<y/n>:"); scanf("%c",&ch); system("cls"); if(ch=='y') Delete(l); else system("cls"); } int main() //主函数 { linklist l; //定义线性表 l init(l); //调用初始化函数 char ch; system("color a"); printf("\n"); printf(" *************************欢迎进入宿舍管理查询系统*************************\n"); printf("\n"); printf("请按任意键开始操作:"); scanf("%c",&ch); system("cls");//将屏幕先前显示的内容清理掉 create(l); //调用线性表创建函数 system("cls"); t=1; menu(); //调用主菜单函数 while(f!=0) { system("cls"); switch(f) { case 1: sort1(l); //调用按姓名排序函数 printf("\n"); if(l.length==0) { printf("已无学生记录\n"); printf("\n"); disp(); menu(); } else { printf("按姓名排序:\n"); print1(l); disp(); //调用返回主界面 menu(); } break; case 2: sort2(l); //调用按学号排序函数 printf("\n"); if(l.length==0) { printf("已无学生记录\n"); printf("\n"); disp(); menu(); } else { printf("按学号排序:\n"); print1(l); disp(); menu(); }break; case 3: sort3(l); //调用按房号排序函数 printf("\n"); if(l.length==0) { printf("已无学生记录\n"); printf("\n"); disp(); menu(); } else { printf("按房号排序:\n"); print1(l); disp(); menu(); }break; case 4:sort1(l); //先调用按姓名排序函数进行排序 chazhao1(l); //再调用按姓名查找函数进行(二分)查找 break; case 5: sort2(l); //先调用按学号排序函数进行排序 chazhao2(l); //再调用按学号查找函数进行(二分)查找 break; case 6: sort3(l); //先调用按房号排序函数进行排序 chazhao3(l); //再调用按房号查找函数进行(二分)查找 break; case 7: sort2(l); //调用插入函数 insert(l); system("cls"); printf("显示插入后的学生信息:\n");print1(l); disp(); menu(); break; case 8: Delete(l); //调用删除函数 if(l.length==0) { printf("\n"); printf("学生记录已被删除完\n"); printf("\n"); disp(); menu(); } else { printf("显示删除后的学生信息:\n"); print1(l); disp(); menu(); } break; } }return 0; }
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
花了20分钟,给女朋友们写了一个web版群聊程序
参考博客 [1]https://www.byteslounge.com/tutorials/java-ee-html5-websocket-example
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
这30个CSS选择器,你必须熟记(上)
关注前端达人,与你共同进步CSS的魅力就是让我们前端工程师像设计师一样进行网页的设计,我们能轻而易举的改变颜色、布局、制作出漂亮的影音效果等等,我们只需要改几行代码,不需...
国产开源API网关项目进入Apache孵化器:APISIX
点击蓝色“程序猿DD”关注我回复“资源”获取独家整理的学习资料!近日,又有一个开源项目加入了这个Java开源界大名鼎鼎的Apache基金会,开始进行孵化器。项目名称:AP...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
编写Spring MVC控制器的14个技巧
本期目录 1.使用@Controller构造型 2.实现控制器接口 3.扩展AbstractController类 4.为处理程序方法指定URL映射 5.为处理程序方法指定HTTP请求方法 6.将请求参数映射到处理程序方法 7.返回模型和视图 8.将对象放入模型 9.处理程序方法中的重定向 10.处理表格提交和表格验证 11.处理文件上传 12.在控制器中自动装配业务类 ...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
求小姐姐抠图竟遭白眼?痛定思痛,我决定用 Python 自力更生!
点击蓝色“Python空间”关注我丫加个“星标”,每天一起快乐的学习大家好,我是 Rocky0429,一个刚恰完午饭,正在用刷网页浪费生命的蒟蒻...一堆堆无聊八卦信息的网页内容慢慢使我的双眼模糊,一个哈欠打出了三斤老泪,就在此时我看到了一张图片:是谁!是谁把我女朋友的照片放出来的!awsl!太好看了叭...等等,那个背景上的一堆鬼画符是什么鬼?!真是看不下去!叔叔婶婶能忍,隔壁老王的三姨妈的四表...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
相关热词 c# 输入ip c# 乱码 报表 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件
立即提问