从键盘输入任意一个字符串和一个字符,要求从该字符串中删除所有该字符。

题目要求
Problem Description
从键盘输入任意一个字符串和一个字符,要求从该字符串中删除所有该字符。
Input
输入有多组测试数据。
每组两行,第一行是字符串(字符串至少还有一个字符,不多于100个),第二行是一个字符
Output
每组输出一行,删除了所有应删除字符后的字符串
Sample Input
ABCDE
E
ASD Dfg fhd
D
Sample Output
ABCD
AS fg fhd

我的代码:
#include
#include
void del_char(char *a,char ch)
{
int num=strlen(a);
char c,bb[num];
int i=0,j=0;
for(;i<strlen(a);i++)
{
if(a[i]!=ch)
{
bb[j]=a[i];
j++;
}
}
for(i=0;i<j;i++) putchar(bb[i]);
printf("\n");
}
int main()
{
char *a,aa[100],ch;
while(gets(aa))
{
fflush(stdin);
scanf("%c",&ch);
fflush(stdin);
a=aa;
del_char(a,ch);
}
return 0;
}

c
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
数组(C语言)。。。。。。。。。
利用单个字符输入/输出函数从键盘输入任意长度字符串,并逐一输出该字符串
C++:这段输入几个字符串的代码为什么运行的时候错了?
要求:输入不超过30个的任意长度的字符串(不包括中文),每个字符串从键盘输入并以回车作为结束。 我的代码如下: char *a[30]; int i, num; for (i = 0; i < 30; i++){ cin >> num; a[i] = new char[num]; cin.getline(a[i], num); } for (i = 0; i < 30; i++){ cout << a[i]; } 调试的时候系统没有报错,但运行的时候
希望在输入时不能用到fgets,我的代码有一点问题
题目描述 已知正整数n,n的范围是1—100。你要从键盘读入n个字符串,每个字符串的长度不确定,但是n个字符串的总长度不超过100000。你要利用字符指针数组将这n个字符串按照ASCII码顺序进行升序排序,然后再打印到屏幕上。字符串中可能包含ASCII码中的任意字符,每个字符串以换行符结束输入。 要求:不允许定义如char str[100][100000];这样的二维数组,因为会极大的浪费内存空间。你应定义char str[100000];这样的存储空间,将n个字符串连续的存储在一维字符空间内,然后将这n个字符串的起始位置保存在字符指针数组中,再进行排序操作。 输入与输出要求:输入一个正整数n,代表待排序字符串的个数,n不超过100,然后是n个字符串,每个字符串的长度不确定,但至少包含1个字符。n个字符串的总长度不会超过100000。输出排序后的n个字符串,每个字符串占一行。 程序运行效果: Sample 1: 4↙ Where there is hope ,there is a way.↙ Welcome Beijing.↙ Nice idea.↙ Have fun.↙ Have fun.↙ Nice idea.↙ Welcome Beijing.↙ Where there is hope ,there is a way.↙ #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char str[100000]; int n, i, j, k, len; scanf("%d", &n); getchar();//将回车键进行储存 char *substr[100];//n个字符数组指针 char *b; k=0;//k初始化 j=0;//j初始化 for(i=0;i<n;i++)//将全部字符串存入数组str[100000]中 ,第i行 { scanf("%c", &str[j]); substr[k]=&str[j];//将每行字符的开头字符存入第k个数组指针中 while(str[j]!='\n')//每一行的字符串是以回车键结束,遇到回车键即跳出循环,换下一行 { j++; scanf("%c", &str[j]); } k++;//进入下一个数组指针 getchar();//将换行键储存 } str[j]='\0'; i=0; for(i=0;i<n-1;i++)//运用冒泡排序将其从小到大重新排序 { for(j=0;j<n-1-i;j++) { if(strcmp(substr[j],substr[j+1])>1) { strcpy(b,substr[j]); strcpy(substr[j],substr[j+1]); strcpy(substr[j+1],b); } } } for(i=0;i<n;i++) { printf("%s", substr[i]); printf("\n"); } return 0; }
C:分离字符串子串问题
通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分隔。请编写一个程序,自动分离出各个子串,并使用’,’将其分隔,并且在最后也补充一个’,’并将子串存储。 如果输入“abc def gh i d”,结果将是abc,def,gh,i,d, ![图片说明](https://img-ask.csdn.net/upload/201609/06/1473134436_22835.png) 我写的代码只能识别一个空格,不能识别多个空格 ``` #include <stdio.h> #include <string.h> void DividString(const char *pInputStr, long lInputLen, char *pOutputStr); int main() { char str1[101], str2[101], len, i, j; gets(str1); len = strlen(str1); DividString(str1, len, str2); puts(str2); getchar(); return 0; } void DividString(const char *pInputStr, long lInputLen, char *pOutputStr) { int i; for (i = 0; i < lInputLen; i++) { if (pInputStr[i] != ' ') pOutputStr[i] = pInputStr[i]; else if (pInputStr[i] == ' '&&pInputStr[1 + i] != ' ') pOutputStr[i] = ','; else if (pInputStr[i] == ' '&&pInputStr[1 + i] == ' ') continue; } pOutputStr[i++] = ','; pOutputStr[i] = '\0'; } ```
编程问题 C C#语言 最好能给出代码,求大神!
1.从键盘接受两个任意正整数,要求第一个正整数必须小于第二个正整数,然后把这两个数范围内(包括这两个数)的所有偶数分解为两个素数之和,并输出每个偶数以及对应的两个素数。 2.编写程序,将输入的一行字符串加密。加密时,每个字符的ASCII码依次反复加上密码表4,9,6,2,5,7,3中对应的数字。 如果相加的结果超过字符Z的ASCII码122,则进行取模运算。加密与解密的顺序相反,要求编写加密和解密两个函数, 输出各个过程的结果。 如输入“The result of 3 and 2 is not 8”,应该r加5,u加4
easyX和vs打字游戏,为何第二关输入的字母显示是空格及如何按ese返回主菜单
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<graphics.h> //图形库 需要额外安装 #include <conio.h> #include <time.h> #include <windows.h> #include <string.h> #include <stdlib.h> #include <algorithm> #pragma comment(lib,"WinMM.Lib") #define _CRT_SECURE_NO_WARNINGS MOUSEMSG m; IMAGE background; IMAGE star[2]; int right = 0; int wrong = 0; char target; int x, y; struct letter//第一关字母结构体 { int x; int y; TCHAR target;//字符 }; struct letter array[5];//每次出现五个字母 struct TARGET//第二关单词结构体 { int x; int y; TCHAR str[20]; }; struct USERKEY//第二关保存用户输入得字母 { int x; int y; TCHAR str[20]; }userkey = { 100, 370, L" " }; void outtextxy_int(int x, int y, const char* format, int num)//输出整数 { char str[20] = " "; sprintf_s(str, format, num); outtextxy(x, y, TCHAR(str)); } void outtextxy_double(int x, int y, const char* format, double num)//输出浮点数 { char str[20] = " "; sprintf_s(str, format, num); outtextxy(x, y, TCHAR(str)); } void loadResource()//加载资源,把文字给图片 { loadimage(&background, L"键盘背景4.jpg", 1000, 650); loadimage(star + 0, L"星星掩码图.jpg", 80, 80); loadimage(star + 1, L"星星背景图.jpg", 80, 80); } //输出带星星的字母 void outtextimage(int x, int y, char target) { setbkmode(TRANSPARENT); putimage(x, y, star + 0, SRCAND); putimage(x, y, star + 1, SRCPAINT); settextstyle(25, 0, _T("宋体")); outtextxy(x + 35, y + 32, target); } //初始化五个坐标 void initArraychar(struct letter array[], int curPos) { //srand((unsigned int)time(NULL)); while (array[curPos].target == NULL || array[curPos].target == array[(curPos + 1) % 5].target || array[curPos].target == array[(curPos + 2) % 5].target || array[curPos].target == array[(curPos + 3) % 5].target || array[curPos].target == array[(curPos + 4) % 5].target) { array[curPos].target = rand() % 26 + 65; } while (array[curPos].x == array[(curPos + 1)].x || array[curPos].x == array[(curPos + 2)].x || array[curPos].x == array[(curPos + 3)].x || array[curPos].x == array[(curPos + 4)].x) { array[curPos].x = rand() % 800; } array[curPos].y = rand() % 80 - 100; } void Pause()//按空格键暂停 { IMAGE img; //准备图片 loadimage(&img, L"f.jpg", 1000, 650); //加载图片 L"背景.jpg"是图片的相对路径,也可以使用绝对路径 putimage(0, 0, &img); //在指定位置贴图 前面的(0,0)是坐标 后面的&img是要贴的图片 setfillcolor(COLORREF RGB(240, 230, 140)); fillrectangle(750, 130, 950, 190); fillrectangle(750, 210, 950, 270); TCHAR ch[] = _T("SNAP____"); settextstyle(35, 0, ch); settextcolor(COLORREF RGB(30, 144, 255)); TCHAR begin[] = _T("继续游戏"); TCHAR go[] = _T("返回主菜单"); setbkmode(TRANSPARENT); outtextxy(750 + 10, 130 + 10, begin); outtextxy(750 + 10, 210 + 10, go); MOUSEMSG m; while (1) { m = GetMouseMsg(); if (m.x >= 750 && m.x <= 930 && m.y >= 130 && m.y <= 190)//开始游戏 { setlinecolor(RED); rectangle(750, 130, 930, 190); if (m.uMsg == WM_LBUTTONDOWN) { break; } } else if (m.x >= 750 && m.x <= 930 && m.y >= 210 && m.y <= 270)//退出游戏 { setlinecolor(RED); rectangle(750, 210, 930, 270); if (m.uMsg == WM_LBUTTONDOWN) { exit(0); } } else { setlinecolor(WHITE); rectangle(750, 130, 930, 190); rectangle(750, 210, 930, 270); } } } //开始画键盘 void keyboard() { IMAGE img; //准备图片 loadimage(&img, L"键盘背景4.jpg", 1000, 650); //加载图片 L"背景.jpg"是图片的相对路径,也可以使用绝对路径 setbkmode(TRANSPARENT); putimage(0, 0, &img); //在指定位置贴图 前面的(0,0)是坐标 后面的&img是要贴的图片 int i, j, k, m, n; char one[] = { 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P' };//第一行 char two[] = { 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L' };//第二行 char three[] = { 'Z', 'X', 'C', 'V', 'B', 'N', 'M' }; char four[] = { '~', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+' }; char five[] = { '`', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=' }; char oneend[] = { '{', '}', '|' }; char oneend1[] = { '[', ']', '\\' }; char three1[] = { ':', '"' }; char three2[] = { ';', '\'' }; char h1[] = { '<', '>', '?' }; char h2[] = { ',', '.', '/' }; setcolor(WHITE); rectangle(220 - 100, 600 - 50 - 100, 290 - 100, 640 - 50 - 100); //Tab(220,550),(290,590) line(220 - 100, 600 - 150, 220 - 3 - 100, 603 - 150); line(220 - 3 - 100, 603 - 150, 220 - 100 - 3, 643 - 150); line(220 - 100, 640 - 150, 220 - 3 - 100, 643 - 150); line(290 - 100, 640 - 150, 293 - 100, 643 - 150); line(220 - 3 - 100, 643 - 150, 293 - 100, 643 - 150); line(290 - 100, 600 - 150, 293 - 100, 603 - 150); line(293 - 100, 603 - 150, 293 - 100, 643 - 150); TCHAR ch[] = _T("Arial"); settextstyle(20, 0, ch); TCHAR tab[] = _T("Tab"); outtextxy(230 - 100, 610 - 150, tab); rectangle(220 - 100, 650 - 150, 300 - 100, 690 - 150); //CapsLock (220,600),(300,640) line(220 - 100, 650 - 150, 220 - 3 - 100, 653 - 150); line(220 - 3 - 100, 653 - 150, 220 - 3 - 100, 693 - 150); line(220 - 100, 690 - 150, 220 - 3 - 100, 693 - 150); line(300 - 100, 690 - 150, 303 - 100, 693 - 150); line(220 - 3 - 100, 693 - 150, 303 - 100, 693 - 150); line(300 - 100, 650 - 150, 303 - 100, 653 - 150); line(303 - 100, 653 - 150, 303 - 100, 693 - 150); settextstyle(17, 0, ch); TCHAR CapsLock[] = _T("CapsLock"); outtextxy(230 - 100, 660 - 150, CapsLock); rectangle(870 - 100, 550 - 150, 940 - 100, 590 - 150); //Backspace (870,500),(940,540) line(870 - 100, 550 - 150, 870 - 3 - 100, 553 - 150); line(870 - 3 - 100, 553 - 150, 870 - 3 - 100, 593 - 150); line(870 - 100, 590 - 150, 870 - 3 - 100, 593 - 150); line(940 - 100, 590 - 150, 943 - 100, 593 - 150); line(870 - 3 - 100, 593 - 150, 943 - 100, 593 - 150); line(940 - 100, 550 - 150, 943 - 100, 553 - 150); line(943 - 100, 553 - 150, 943 - 100, 593 - 150); settextstyle(16, 0, ch); TCHAR Backspace[] = _T("Backspace"); outtextxy(875 - 100, 560 - 150, Backspace); rectangle(220 - 100, 700 - 150, 330 - 100, 740 - 150); //Shift (220,650),(330,690) line(220 - 100, 700 - 150, 220 - 100 - 3, 703 - 150); line(220 - 3 - 100, 703 - 150, 220 - 3 - 100, 743 - 150); line(220 - 100, 740 - 150, 220 - 3 - 100, 743 - 150); line(330 - 100, 740 - 150, 333 - 100, 743 - 150); line(220 - 3 - 100, 743 - 150, 333 - 100, 743 - 150); line(330 - 100, 700 - 150, 333 - 100, 703 - 150); line(333 - 100, 703 - 150, 333 - 100, 743 - 150); settextstyle(20, 0, ch); TCHAR Shift[] = _T("Shift"); outtextxy(230 - 100, 710 - 150, Shift); for (i = 220 - 100; i < 860 - 100; i = i + 50) // 键盘第零行13个键 { rectangle(i, 550 - 150, i + 40, 590 - 150); //键盘第一个字母坐标(220,500),(260,540) line(i, 550 - 150, i - 3, 553 - 150); line(i - 3, 553 - 150, i - 3, 593 - 150); line(i, 590 - 150, i - 3, 593 - 150); line(i + 40, 590 - 150, i + 43, 593 - 150); line(i - 3, 593 - 150, i + 43, 593 - 150); line(i + 40, 550 - 150, i + 43, 553 - 150); line(i + 43, 553 - 150, i + 43, 593 - 150); settextstyle(10, 0, ch); k = (i - 220 + 100) / 50; outtextxy(i + 5, 555 - 150, four[k]); settextstyle(16, 0, ch); outtextxy(i + 20, 570 - 150, five[k]); } for (i = 300 - 100; i < 800 - 100; i = i + 50) // 键盘第一行10个键 { rectangle(i, 600 - 150, i + 40, 640 - 150); //键盘第一个字母坐标(300,550),(340,590) line(i, 600 - 150, i - 3, 603 - 150); line(i - 3, 603 - 150, i - 3, 643 - 150); line(i, 640 - 150, i - 3, 643 - 150); line(i + 40, 640 - 150, i + 43, 643 - 150); line(i - 3, 643 - 150, i + 43, 643 - 150); line(i + 40, 600 - 150, i + 43, 603 - 150); line(i + 43, 603 - 150, i + 43, 643 - 150); TCHAR ch[] = _T("Arial"); settextstyle(20, 0, ch); k = (i - 300 + 100) / 50; outtextxy(i + 10, 610 - 150, one[k]); } for (i = 800 - 100; i < 940 - 100; i = i + 50) { rectangle(i, 600 - 150, i + 40, 640 - 150); //键盘第一个字母坐标(800,550),(850,590) line(i, 600 - 150, i - 3, 603 - 150); line(i - 3, 603 - 150, i - 3, 643 - 150); line(i, 640 - 150, i - 3, 643 - 150); line(i + 40, 640 - 150, i + 43, 643 - 150); line(i - 3, 643 - 150, i + 43, 643 - 150); line(i + 40, 600 - 150, i + 43, 603 - 150); line(i + 43, 603 - 150, i + 43, 643 - 150); settextstyle(15, 0, ch); k = (i - 800 + 100) / 50; outtextxy(i + 5, 605 - 150, oneend[k]); outtextxy(i + 20, 620 - 150, oneend1[k]); } for (j = 310 - 100; j < 760 - 100; j = j + 50) { rectangle(j, 650 - 150, j + 40, 690 - 150); //键盘第一个字母坐标(310,600),(350,640) line(j, 650 - 150, j - 3, 653 - 150); line(j - 3, 653 - 150, j - 3, 693 - 150); line(j, 690 - 150, j - 3, 693 - 150); line(j + 40, 690 - 150, j + 43, 693 - 150); line(j - 3, 693 - 150, j + 43, 693 - 150); line(j + 40, 650 - 150, j + 43, 653 - 150); line(j + 43, 653 - 150, j + 43, 693 - 150); TCHAR ch[] = _T("Arial"); settextstyle(20, 0, ch); k = (j - 310 + 100) / 50; outtextxy(j + 10, 660 - 150, two[k]); } for (j = 760 - 100; j < 850 - 100; j = j + 50) { // 310,600 350,640 rectangle(j, 650 - 150, j + 40, 690 - 150); //键盘第一个字母坐标(760,600),(800,640) line(j, 650 - 150, j - 3, 653 - 150); line(j - 3, 653 - 150, j - 3, 693 - 150); line(j, 690 - 150, j - 3, 693 - 150); line(j + 40, 690 - 150, j + 43, 693 - 150); line(j - 3, 693 - 150, j + 43, 693 - 150); line(j + 40, 650 - 150, j + 43, 653 - 150); line(j + 43, 653 - 150, j + 43, 693 - 150); settextstyle(20, 0, ch); k = (j - 760 + 100) / 50; outtextxy(j + 7, 655 - 150, three1[k]); outtextxy(j + 20, 669 - 150, three2[k]); } rectangle(860 - 100, 650 - 150, 940 - 100, 690 - 150); //Enter(860,600),(940,640) line(860 - 100, 650 - 150, 860 - 3 - 100, 653 - 150); line(860 - 3 - 100, 653 - 150, 860 - 3 - 100, 693 - 150); line(860 - 100, 690 - 150, 860 - 3 - 100, 693 - 150); line(940 - 100, 690 - 150, 943 - 100, 693 - 150); line(860 - 3 - 100, 693 - 150, 943 - 100, 693 - 150); line(940 - 100, 650 - 150, 943 - 100, 653 - 150); line(943 - 100, 653 - 150, 943 - 100, 693 - 150); settextstyle(20, 0, ch); TCHAR Enter[] = _T("Enter"); settextstyle(20, 0, ch); outtextxy(870 - 100, 660 - 150, Enter); for (m = 340 - 100; m < 690 - 100; m = m + 50) { rectangle(m, 700 - 150, m + 40, 740 - 150); //键盘第一个字母坐标(340,650),(380,690) line(m, 700 - 150, m - 3, 703 - 150); line(m - 3, 703 - 150, m - 3, 743 - 150); line(m, 740 - 150, m - 3, 743 - 150); line(m + 40, 740 - 150, m + 43, 743 - 150); line(m - 3, 743 - 150, m + 43, 743 - 150); line(m + 40, 700 - 150, m + 43, 703 - 150); line(m + 43, 703 - 150, m + 43, 743 - 150); TCHAR ch[] = _T("Arial"); settextstyle(20, 0, ch); k = (m - 310 + 100) / 50; outtextxy(m + 10, 710 - 150, three[k]); } for (m = 690 - 100; m < 830 - 100; m = m + 50) { rectangle(m, 700 - 150, m + 40, 740 - 150); //(690,650),(830,690) line(m, 700 - 150, m - 3, 703 - 150); line(m - 3, 703 - 150, m - 3, 743 - 150); line(m, 740 - 150, m - 3, 743 - 150); line(m + 40, 740 - 150, m + 43, 743 - 150); line(m - 3, 743 - 150, m + 43, 743 - 150); line(m + 40, 700 - 150, m + 43, 703 - 150); line(m + 43, 703 - 150, m + 43, 743 - 150); settextstyle(20, 0, ch); k = (m - 690 + 100) / 50; outtextxy(m + 5, 706 - 150, h1[k]); outtextxy(m + 23, 717 - 150, h2[k]); } rectangle(840 - 100, 700 - 150, 940 - 100, 740 - 150); // Shift(840,650),(940,690) line(840 - 100, 700 - 150, 840 - 3 - 100, 703 - 150); line(840 - 3 - 100, 703 - 150, 840 - 3 - 100, 743 - 150); line(840 - 100, 740 - 150, 840 - 3 - 100, 743 - 150); line(940 - 100, 740 - 150, 943 - 100, 743 - 150); line(840 - 3 - 100, 743 - 150, 943 - 100, 743 - 150); line(940 - 100, 700 - 150, 943 - 100, 703 - 150); line(943 - 100, 703 - 150, 943 - 100, 743 - 150); settextstyle(20, 0, ch); outtextxy(850 - 100, 710 - 150, Shift); rectangle(420 - 100, 700 - 100, 690 - 100, 740 - 100);//空格键 line(420 - 100, 700 - 100, 420 - 3 - 100, 700 + 3 - 100); line(420 - 3 - 100, 700 + 3 - 100, 420 - 3 - 100, 740 + 3 - 100); line(420 - 3 - 100, 740 + 3 - 100, 420 - 100, 740 - 100); line(420 - 3 - 100, 740 + 3 - 100, 690 + 3 - 100, 740 + 3 - 100); line(690 + 3 - 100, 740 + 3 - 100, 690 - 100, 740 - 100); line(690 - 100, 700 - 100, 690 + 3 - 100, 700 + 3 - 100); line(690 + 3 - 100, 700 + 3 - 100, 690 + 3 - 100, 740 + 3 - 100); for (m = 220 - 100; m < 420 - 100; m = m + 50)//空格键左边 { rectangle(m, 700 - 100, m + 40, 740 - 100);//ctrl line(m, 700 - 100, m - 3, 700 + 3 - 100); line(m - 3, 700 + 3 - 100, m - 3, 740 + 3 - 100); line(m - 3, 740 + 3 - 100, m, 740 - 100); line(m - 3, 740 + 3 - 100, m + 40 + 3, 740 + 3 - 100); line(m + 40, 740 - 100, m + 40 + 3, 743 - 100); line(m + 40, 700 - 100, m + 40 + 3, 703 - 100); line(m + 40 + 3, 703 - 100, m + 40 + 3, 743 - 100); } for (n = 700 - 100; n < 950 - 100; n = n + 50) { rectangle(n, 740 - 100, n + 40, 700 - 100);//右箭头键 line(n, 700 - 100, n - 3, 703 - 100); line(n - 3, 703 - 100, n - 3, 743 - 100); line(n - 3, 743 - 100, n + 40 + 3, 743 - 100); line(n - 3, 743 - 100, n, 740 - 100); line(n + 40, 700 - 100, n + 43, 703 - 100); line(n + 43, 703 - 100, n + 43, 743 - 100); line(n + 40, 740 - 100, n + 43, 743 - 100); } settextstyle(17, 0, ch); TCHAR Ctrl[] = _T("Ctrl"); TCHAR Fn[] = _T("Fn"); TCHAR Win[] = _T("Win"); TCHAR Alt[] = _T("Alt"); TCHAR Home[] = _T("Hom"); TCHAR End[] = _T("End"); TCHAR Up[] = _T("Up"); outtextxy(130, 610, Ctrl); outtextxy(180, 610, Fn); outtextxy(230, 610, Win); outtextxy(280, 610, Alt); outtextxy(810, 610, End); outtextxy(760, 610, Up); outtextxy(705, 610, Home); outtextxy(660, 610, Ctrl); outtextxy(610, 610, Alt); setfillcolor(COLORREF RGB(240, 230, 140)); fillrectangle(30, 30, 240, 80); TCHAR pause[] = _T("退出游戏请按Ese"); settextstyle(25, 0, _T("宋体")); setbkmode(TRANSPARENT); outtextxy(30,45, pause); //暂停判断 } //开始菜单 void beginning() { IMAGE img; //准备图片 loadimage(&img, L"欢迎界面3.jpg", 1000, 650); //加载图片 L"背景.jpg"是图片的相对路径,也可以使用绝对路径 putimage(0, 0, &img); //在指定位置贴图 前面的(0,0)是坐标 后面的&img是要贴的图片 //cleardevice(); setfillcolor(COLORREF RGB(240, 230, 140)); fillrectangle(750, 130, 930, 190); fillrectangle(750, 210, 930, 270); TCHAR ch[] = _T("SNAP____"); settextstyle(40, 0, ch); settextcolor(COLORREF RGB(30, 144, 255)); TCHAR begin[] = _T("开始游戏"); TCHAR go[] = _T("退出游戏"); setbkmode(TRANSPARENT); outtextxy(750 + 10, 130 + 10, begin); outtextxy(750 + 10, 210 + 10, go); } //开始菜单鼠标交互 void mouse() { initgraph(1000, 650); beginning(); MOUSEMSG m; while (1) { m = GetMouseMsg(); if (m.x >= 750 && m.x <= 930 && m.y >= 130 && m.y <= 190)//开始游戏 { setlinecolor(RED); rectangle(750, 130, 930, 190); if (m.uMsg == WM_LBUTTONDOWN) { break; } } else if (m.x >= 750 && m.x <= 930 && m.y >= 210 && m.y <= 270)//退出游戏 { setlinecolor(RED); rectangle(750, 210, 930, 270); if (m.uMsg == WM_LBUTTONDOWN) { exit(0); } } else { setlinecolor(WHITE); rectangle(750, 130, 930, 190); rectangle(750, 210, 930, 270); } } closegraph(); } //关卡设置 void level1() { mouse();//鼠标交会函数关闭了窗口 initgraph(1000, 650); IMAGE img; //准备图片 loadimage(&img, L"关卡选择.jpg", 1000, 650); //加载图片 L"背景.jpg"是图片的相对路径 putimage(0, 0, &img); //在指定位置贴图 前面的(0,0)是坐标 后面的&img是要贴的图片 setfillcolor(COLORREF RGB(255, 192, 203)); fillrectangle(365, 230, 675, 280); fillrectangle(365, 300, 675, 350); fillrectangle(365, 370, 675, 420); TCHAR ch[] = _T("SNAP____"); settextstyle(30, 0, ch); settextcolor(COLORREF RGB(30, 144, 255)); TCHAR first[] = _T("模式一:轻轻松松"); TCHAR second[] = _T("模式二:小菜一碟"); TCHAR go[] = _T("退出游戏"); setbkmode(TRANSPARENT); outtextxy(415 - 50 + 30, 230 + 10, first); outtextxy(415 - 50 + 30, 300 + 10, second); outtextxy(415 - 50 + 10 + 30 + 50, 370 + 10, go); MOUSEMSG m; while (1) { m = GetMouseMsg(); if (m.x >= 365 && m.x <= 675 && m.y >= 230 && m.y <= 280)//开始游戏 { setlinecolor(RED); rectangle(365, 230, 675, 280); if (m.uMsg == WM_LBUTTONDOWN) { break; } } else if (m.x >= 365 && m.x <= 675 && m.y >= 300 && m.y <= 350)//退出游戏 { setlinecolor(RED); rectangle(365, 300, 675, 350); if (m.uMsg == WM_LBUTTONDOWN) { break; } } else if (m.x >= 365 && m.x <= 675 && m.y >= 370 && m.y <= 420)//退出游戏 { setlinecolor(RED); rectangle(365, 370, 675, 420); if (m.uMsg == WM_LBUTTONDOWN) { exit(0); } } else { setlinecolor(WHITE); rectangle(365, 230, 675, 280); rectangle(365, 300, 675, 350); rectangle(365, 370, 675, 420); } } closegraph(); } //第一关游戏界面 void gamefirst() { char s[10] = { 0 }; char f[10] = { 0 }; int score = 0; int wrong = 0; //level();//也关闭了屏幕 initgraph(1000, 650); keyboard(); loadResource(); //outtextimage(200, 200, 'S'); for (int i = 0; i < 5; i++) { initArraychar(array, i); } initgraph(1000, 650);//要去掉吗? while (1)//文字下降 { BeginBatchDraw(); keyboard(); for (int i = 0; i < 5; i++) { array[i].y += 10; if (array[i].y >= 400) { initArraychar(array, i); score -= 10; wrong++; } } for (int i = 0; i < 5; i++) { outtextimage(array[i].x, array[i].y, array[i].target); } if (_kbhit()) { char userkey = _getch();//接收用户输入 for (int i = 0; i < 5; i++) { if (array[i].target == userkey || array[i].target == userkey - ('a' - 'A')) { score += 10; initArraychar(array, i); break; } } if (userkey == 27) { break; } } Sleep(100); EndBatchDraw(); } //closegraph(); //initgraph(1000, 650); beginning(); Sleep(100); } void highlight(char c)//高亮 { keyboard(); if (_kbhit()) { char c = _getch();//接收用户输入 fillrectangle(x, y, x + 40, y + 40); Sleep(20); clearrectangle(x, y, x + 40, y + 40); } if (c >= 'A' && c <= 'Z') { c = c + 32; if (c >= 'a' && c <= 'z') //若为小写 switch (c) { case 'q': { fillrectangle(200, 450, 200 + 40, 450 + 40); Sleep(20); clearrectangle(200, 450, 200 + 40, 450 + 40); break; } case 'w': { fillrectangle(250, 450, 250 + 40, 450 + 40); Sleep(20); clearrectangle(250, 450, 250 + 40, 450 + 40); break; } case 'e': { fillrectangle(300, 450, 300 + 40, 450 + 40); Sleep(20); clearrectangle(300, 450, 300 + 40, 450 + 40); break; } case 'r': { fillrectangle(350, 450, 350 + 40, 450 + 40); Sleep(20); clearrectangle(350, 450, 350 + 40, 450 + 40); break; }//x = 350; y = 450; break; case 't': { fillrectangle(400, 450, 400 + 40, 450 + 40); Sleep(20); clearrectangle(400, 450, 400 + 40, 450 + 40); break; }//x = 400; y = 450; break; case 'y': { fillrectangle(450, 450, 450 + 40, 450 + 40); Sleep(20); clearrectangle(450, 450, 450 + 40, 450 + 40); break; }//x = 450; y = 450; break; case 'u': { fillrectangle(500, 450, 500 + 40, 450 + 40); Sleep(20); clearrectangle(500, 450, 500 + 40, 450 + 40); break; }//x = 500; y = 450; break; case 'i': { fillrectangle(550, 450, 550 + 40, 450 + 40); Sleep(20); clearrectangle(550, 450, 550 + 40, 450 + 40); break; }//x = 550; y = 450; break; case 'o': { fillrectangle(600, 450, 600 + 40, 450 + 40); Sleep(20); clearrectangle(600, 450, 600 + 40, 450 + 40); break; }//x = 600; y = 450; break; case 'p': { fillrectangle(650, 450, 650 + 40, 450 + 40); Sleep(20); clearrectangle(650, 450, 650 + 40, 450 + 40); break; }//x = 650; y = 450; break; //case '[':x = 700; y = 450; break; //case '{':x = 700; y = 450; break; //case ']':x = 750; y = 450; break; //case '}':x = 750; y = 450; break; //case '|':x = 800; y = 450; break; //case 'Cap':x = 120; y = 500; break; case 'a': { fillrectangle(210, 500, 210 + 40, 500 + 40); Sleep(20); clearrectangle(210, 500, 210 + 40, 500 + 40); break; }//x = 210; y = 500; break; case 's': { fillrectangle(260, 500, 260 + 40, 500 + 40); Sleep(20); clearrectangle(260, 500, 260 + 40, 500 + 40); break; }//x = 260; y = 500; break; case 'd': { fillrectangle(310, 500, 310 + 40, 500 + 40); Sleep(20); clearrectangle(310, 500, 310 + 40, 500 + 40); break; }//x = 310; y = 500; break; case 'f': { fillrectangle(360, 500, 360 + 40, 500 + 40); Sleep(20); clearrectangle(360, 500, 360 + 40, 500 + 40); break; }//x = 360; y = 500; break; case 'g': { fillrectangle(410, 500, 410 + 40, 500 + 40); Sleep(20); clearrectangle(410, 500, 410 + 40, 500 + 40); break; }//x = 410; y = 500; break; case 'h': { fillrectangle(460, 500, 460 + 40, 500 + 40); Sleep(20); clearrectangle(460, 500, 460 + 40, 500 + 40); break; }//x = 460; y = 500; break; case 'j': { fillrectangle(510, 500, 510 + 40, 500 + 40); Sleep(20); clearrectangle(510, 500, 510 + 40, 500 + 40); break; }//x = 510; y = 500; break; case 'k': { fillrectangle(560, 500, 560 + 40, 500 + 40); Sleep(20); clearrectangle(560, 500, 560 + 40, 500 + 40); break; }//x = 560; y = 500; break; case 'l': { fillrectangle(610, 500, 610 + 40, 500 + 40); Sleep(20); clearrectangle(610, 500, 610 + 40, 500 + 40); break; }//x = 610; y = 500; break; case 'z': { fillrectangle(240, 550, 240 + 40, 550 + 40); Sleep(20); clearrectangle(240, 550, 240 + 40, 550 + 40); break; }//x = 240; y = 550; break; case 'x': { fillrectangle(290, 550, 290 + 40, 550 + 40); Sleep(20); clearrectangle(290, 550, 290 + 40, 550 + 40); break; }//x = 290; y = 550; break; case 'c': { fillrectangle(340, 550, 340 + 40, 550 + 40); Sleep(20); clearrectangle(340, 550, 340 + 40, 550 + 40); break; }//x = 340; y = 550; break; case 'v': { fillrectangle(390, 550, 390 + 40, 550 + 40); Sleep(20); clearrectangle(390, 550, 390 + 40, 550 + 40); break; }//x = 390; y = 550; break; case 'b': { fillrectangle(440, 550, 440 + 40, 550 + 40); Sleep(20); clearrectangle(440, 550, 440 + 40, 550 + 40); break; }//x = 440; y = 550; break; case 'n': { fillrectangle(490, 550, 490 + 40, 550 + 40); Sleep(20); clearrectangle(490, 550, 490 + 40, 550 + 40); break; }//x = 490; y = 550; break; case 'm': { fillrectangle(540, 550, 540 + 40, 550 + 40); Sleep(20); clearrectangle(540, 550, 540 + 40, 550 + 40); break; } } } } void InitTarget(TARGET words[], int n)//随机产生三个单词 { settextstyle(20, 0, L"宋体"); TCHAR str[30][30] = { L"main", L"include", L"if", L"switch", L"break", L"char", L"void", L"continue", L"for", L"while", L"do", L"int", L"unsigned", L"struct", L"static", L"malloc", L"free", L"else", L"float", L"double", L"short", L"return", L"getchar", L"gets", L"include", L"realloc", L"pointer", L"default", L"long" }; //随机产生 wcscpy(words[n].str, str[rand() % 29]); //判断重复 while (words[n].str == words[(n + 1) % 3].str || words[n].str == words[(n + 2) % 3].str) { wcscpy(words[n].str, str[rand() % 29]); } words[n].x = rand() % (900); words[n].y = -20; } //设置分数 void drawscore() { settextcolor(RED); settextstyle(30, 0, L"宋体"); outtextxy(800, 50,L"正确数:"); outtextxy_int(900, 50, "%d", right); outtextxy(800, 100, L"失误数:"); outtextxy_int(900, 150, "%d", wrong); outtextxy(800, 150, L"正确率:"); if (right + wrong == 0) { outtextxy_double(900, 250, "%.2lf%%", 0.00); } else { double sum = (right +wrong); outtextxy_double(900, 250, "%.2lf%%", right/sum*100); } } void gamesecond()//第二关天降单词 { initgraph(1000, 650); keyboard(); drawscore(); struct TARGET words[3]; for (int n = 0; n < 3; n++) { InitTarget(words, n); words[n].y = -15 - n * 30; } int i=0; while (1) { //cleardevice(); BeginBatchDraw(); keyboard(); drawscore(); int flagerror = 0; for (int n = 0; n < 3; n++) { words[n].y += 2; if (words[n].y > 400-30)//碰线处理 { InitTarget(words, n); } } for (int n = 0; n < 3; n++)//字母下落 { settextcolor(RED); settextstyle(30, 0, _T("宋体")); outtextxy(words[n].x, words[n].y, LPCTSTR(words[n].str)); words[n].y += 2; } if (_kbhit()) { //字符串变成字符处理 char target;//接受用户按键 if (target = _getch() != '\r') { userkey.str[i++] = target; highlight(target); } else { for (i = 0; i < 3; i++) { if (wcscmp(userkey.str, words[i].str) == 0) { InitTarget(words, i); right++; flagerror = 1; } } if (flagerror == 0) { wrong++; } i = 0;//易错,要重新初始化 userkey.x = 100; memset(userkey.str, 0, 20);//防止覆盖 } } outtextxy(userkey.x, userkey.y, userkey.str); Sleep(50); EndBatchDraw(); } } void level() { mouse();//鼠标交会函数关闭了窗口 initgraph(1000, 650); IMAGE img; //准备图片 loadimage(&img, L"关卡选择.jpg", 1000, 650); //加载图片 L"背景.jpg"是图片的相对路径 putimage(0, 0, &img); //在指定位置贴图 前面的(0,0)是坐标 后面的&img是要贴的图片 setfillcolor(COLORREF RGB(255, 192, 203)); fillrectangle(365, 230, 675, 280); fillrectangle(365, 300, 675, 350); fillrectangle(365, 370, 675, 420); TCHAR ch[] = _T("SNAP____"); settextstyle(30, 0, ch); settextcolor(COLORREF RGB(30, 144, 255)); TCHAR first[] = _T("模式一:轻轻松松"); TCHAR second[] = _T("模式二:小菜一碟"); TCHAR go[] = _T("退出游戏"); setbkmode(TRANSPARENT); outtextxy(415 - 50 + 30, 230 + 10, first); outtextxy(415 - 50 + 30, 300 + 10, second); outtextxy(415 - 50 + 10 + 30 + 50, 370 + 10, go); MOUSEMSG m; while (1) { m = GetMouseMsg(); if (m.x >= 365 && m.x <= 675 && m.y >= 230 && m.y <= 280)//模式一 { setlinecolor(RED); rectangle(365, 230, 675, 280); if (m.uMsg == WM_LBUTTONDOWN) { gamefirst(); } } else if (m.x >= 365 && m.x <= 675 && m.y >= 300 && m.y <= 350)//模式二 { setlinecolor(RED); rectangle(365, 300, 675, 350); if (m.uMsg == WM_LBUTTONDOWN) { //break; gamesecond(); } } else if (m.x >= 365 && m.x <= 675 && m.y >= 370 && m.y <= 420)//退出游戏 { setlinecolor(RED); rectangle(365, 370, 675, 420); if (m.uMsg == WM_LBUTTONDOWN) { exit(0); } } else { setlinecolor(WHITE); rectangle(365, 230, 675, 280); rectangle(365, 300, 675, 350); rectangle(365, 370, 675, 420); } } closegraph(); } //退出界面 void goodbye(time_t end, time_t start, int flag) { time_t timep; int i = end - start; char a[10] = { '\0' }; TCHAR s[100] = { 0 }; char ff[10] = { 0 }; TCHAR fff[100] = { 0 }; cleardevice(); setcolor(RED); IMAGE img; loadimage(&img, L"结束.jpg", 1000, 650); putimage(0, 0, &img); TCHAR style[] = _T("黑体"); settextstyle(40, 0, style); TCHAR ch[] = _T("游戏时间:"); outtextxy(104, 180, ch); TCHAR chf[] = _T("失败次数:"); outtextxy(654, 180, chf); sprintf_s(a, "%d", i); sprintf_s(ff, "%d", flag); #ifdef UNICODE MultiByteToWideChar(CP_ACP, 0, a, -1, s, 100); #else strcpy(a, s); #endif #ifdef UNICODE MultiByteToWideChar(CP_ACP, 0, ff, -1, fff, 100); #else strcpy(ff, fff); #endif outtextxy(200, 220, s); outtextxy(950, 220, fff); _getch(); } int main() { srand((unsigned)time(NULL)); initgraph(1000, 650);//新建窗口 setbkcolor(COLORREF RGB(255, 192, 203)); //cleardevice(); beginning(); level(); //gamefirst(); //keyboard(); //gamesecond(); drawscore(); _getch(); // 按任意键继续,千万不要删!!!!!!! closegraph(); // 关闭绘图窗口 return 0; } ``` ``` ``` ```
单链表实现的多项式加减法计算,输入的负号变成了正号,并且幂为负时显示错误,这个程序应该怎么改?
``` //vc6.0实现的C++版![图片说明](https://img-ask.csdn.net/upload/201907/23/1563861033_43306.png)![图片说明](https://img-ask.csdn.net/upload/201907/23/1563861045_50819.png) //功能:多项式的加减法操作 #include <iostream.h>//读入必须包含的头文件 #include <windows.h>//清屏和颜色设置需要 #include <string.h> #include <fstream.h> #include <iomanip.h> #include <math.h>//处理方幂运算 enum returninfo{success,wrong,fail,overflow,underflow,empty_error};//定义返回信息清单 const int Maxsize=26;//系统允许多项式的最大值 const int Number=40;//设置输入多项式时字符串长度最大限,也可以根据需求任意设置 int order;//设置多项式显示方式0代表降幂显示,1代表升幂显示 class node//定义一个node类,处理多项式中的<项>:如3x^(-2)、4x^3、6x或者常数5等等 { public: node(int initcoeff,int initindex,node *initnext=NULL);//系数、指数、后继结点 node(node *initnext=NULL);//后继结点函数重载:用于头结点 ~node(); int coeff;//系数 int index;//指数 node *next; }; node::node(int initcoeff,int initindex,node *initnext) { coeff=initcoeff; index=initindex; next=initnext; } node::node(node *initnext) { next=initnext; } node::~node() { } /* 定义一个线性表类linklist */ class linklist { public: linklist();//构造函数 ~linklist();//析构函数 void clearlist(void);//清除多项式 bool empty(void) const;//判断是否空链 node *headp;//多项式头结点 }; linklist::linklist()//构造函数 { headp = new node;//申请新结点,作为头结点 headp->next=NULL;//头结点的地址域预设为空地址 } linklist::~linklist()//析构函数 { clearlist();//删除所有数据,释放所有结点 delete headp;//把头结点也释放掉 } void linklist::clearlist(void)//清除多项式 { node *searchp=headp->next,*followp=headp;//初始化两个指针 while(searchp!=NULL) { followp=searchp; searchp=searchp->next; delete followp; } headp->next=NULL;//保留了最后一个结点,就是头结点,并且链域置为空 } bool linklist::empty(void) const//判断是否空链 { if(headp->next==NULL) return true; else return false; } /* 实现多项式加减法的类sequelist */ class sequelist//管理多项式 { public: sequelist(); ~sequelist(); returninfo inputdata(void);//从键盘输入多项式 returninfo deletdata(void);//清空多项式信息 returninfo calculate(void);//赋值计算 void addnode(int site,int icoeff,int iindex);//增加项 void display(char name);//显示某个多项式 void displayname(void);//显示系统中现存多项式的名称 void traveral(void);//遍历所有多项式 void deletepart(char idata);//清除单个多项式信息 void deletcomp(void);//清除全部多项式信息 bool findlist(char idata);//查找多项式(提供多项式名称) bool scanname(char idata);//判断多项式的名称是否合法 bool read();//读文件操作 bool write();//写文件操作 protected: linklist list[Maxsize]; }; sequelist::sequelist() { } sequelist::~sequelist() { } returninfo sequelist::deletdata(void)//清空多项式信息 { int choice,site; char ch,name; cout<<"1.清空系统全部多项式信息"<<endl; cout<<"2.清除某个指定多项式信息"<<endl; cout<<"3.退出清除信息"<<endl; cout<<"请选择:"; cin>>choice; if(choice==1||choice==2) { if(choice==1) { traveral(); cout<<endl<<"请问:您确定要清空全部多项式信息吗?(Y/y):"; cin>>ch; if(ch=='Y'||ch=='y') deletcomp(); else return fail; } else { cout<<"请输入你要清空的多项式的名称(提示:一个大写字母):"; cin>>name; site=int(name-'A'); if(list[site].empty()) return wrong; display(name); cout<<endl<<"请问:您确定要清除该多项式信息吗?(Y/y):"; cin>>ch; if(ch=='Y'||ch=='y') deletepart(name); else return fail; } return success; } else return fail; } returninfo sequelist::calculate(void)//赋值计算 { int site,x,flag=0; double result=0,value; char name,ch; node *searchp; cout<<"请输入需要赋值计算的多项式名称(提示:一个大写字母):"; cin>>name; site=int(name-'A'); if(list[site].empty()) return wrong; display(name); cout<<endl<<"请问:您确认要进行赋值计算吗?(Y/y):"; cin>>ch; if(ch=='Y'||ch=='y') { cout<<"请给出变量x的值(如果方幂过大x不宜取大值):x="; cin>>x; cout<<endl<<name<<"("<<x<<")="; searchp=list[site].headp->next; while(searchp!=NULL) { value=searchp->coeff*pow(x,searchp->index); result+=value; cout<<" "; if(value>=0) { if(flag!=0) cout<<"+"; } cout<<value; flag++; searchp=searchp->next; } cout<<endl<<" ="<<result<<endl<<endl; } else return fail; return success; } void sequelist::display(char name)//显示某个多项式 { cout<<name<<"(x)="; int site; site=int(name-'A'); node *searchp=list[site].headp->next; if(searchp->coeff==0) cout<<"0"; else if(searchp->coeff!=1&&searchp->coeff!=-1) { if(searchp->index==0) cout<<searchp->coeff; else if(searchp->index==1) cout<<searchp->coeff<<"x"; else if(searchp->index<0) cout<<searchp->coeff<<"x^("<<searchp->index<<")"; else cout<<searchp->coeff<<"x^"<<searchp->index; } else { if(searchp->index==0) cout<<searchp->coeff; else if(searchp->index==1) cout<<searchp->coeff<<"x"; else if(searchp->index<0) cout<<searchp->coeff<<"x^("<<searchp->index<<")"; else cout<<searchp->coeff<<"x^"<<searchp->index; } searchp=searchp->next; while(searchp!=NULL) { cout<<" "; if(searchp->coeff!=1&&searchp->coeff!=-1) { if(searchp->index==0) { if(searchp->coeff>0) cout<<"+"; cout<<searchp->coeff; } else if(searchp->index==1) { if(searchp->coeff>0) cout<<"+"; cout<<searchp->coeff<<"x"; } else if(searchp->index<0) { if(searchp->coeff>0) cout<<"+"; cout<<searchp->coeff<<"x^("<<searchp->index<<")"; } else { if(searchp->coeff>0) cout<<"+"; cout<<searchp->coeff<<"x^"<<searchp->index; } } else if(searchp->coeff==1) { if(searchp->index==0) cout<<"+1"; else if(searchp->index==1) cout<<"+x"; else if(searchp->index<0) cout<<"+x^("<<searchp->index<<")"; else cout<<"+x^"<<searchp->index; } else { if(searchp->index==0) cout<<"-1"; else if(searchp->index==1) cout<<"-x"; else if(searchp->index<0) cout<<"-x^("<<searchp->index<<")"; else cout<<"-x^"<<searchp->index; } searchp=searchp->next; } cout<<endl; } void sequelist::deletcomp(void)//清除全部多项式信息 { int i; char name; for(i=0;i<Maxsize;i++) { name=char(i+'A'); deletepart(name); } } void sequelist::deletepart(char idata)//清除单个多项式信息 { int site; site=int(idata-'A'); node *searchp=list[site].headp->next,*followp; while(searchp!=NULL) { followp=searchp; searchp=searchp->next; delete followp; } list[site].headp->next=NULL; } returninfo sequelist::inputdata(void)//从键盘输入多项式(重点,难点,关键) { char iname,idata[Number]; node *searchp,*followp; int flag=0;//标志项系数正负(flag==1表示负,flag==0表示正)A=3x^(-2)+4x^3-6x^(-3)+5 cout<<"请输入你要新建多项式的名称(提示:一个大写字母):"; cin>>iname; if(scanname(iname))//名称通过检验 { int site,icoeff=0,iindex=0,i=0,j=0,k=0; char data[20][20];//将输入的数据分项处理分成20块长度为20的项 site=int(iname-'A'); cout<<"请连续输入多项式不要有空格:"<<endl<<iname<<"(x)="; cin>>idata; //首先将第一项分开来处理 data[k][i]=idata[i]; while(idata[++i]!='+'&&idata[i]!='-'&&idata[i]!='\0') data[k][++j]=idata[i]; data[k][++j]='\n';//项的最后一位以'\n'结束 k++;//将项数加1, //从第二项开始往后的各项处理 for(;idata[i]!='\0';) { j=0;//j还原为0 data[k][0]=idata[i];//记录每一项的符号位 while(idata[++i]!='+'&&idata[i]!='-'&&idata[i]!='\0') { data[k][++j]=idata[i]; if(idata[++i]=='(')//指数为负的处理 { data[k][++j]=idata[i]; data[k][++j]=idata[++i];//将负号写入 i++; } i--; } data[k][++j]='\n';//项的最后一位以'\n'结束 k++;//继续写下一项 }//注意:此时的k后面会有用!!! //得到的data[20][20]为多项式的20个项 for(i=0;i<k;)//将每一项分为node格式,并将其挂链对应的多项式上面 { icoeff=0; iindex=0; j=0; if(data[i][0]=='-')//如果为负 { flag=1; j++; } else if(data[i][0]=='+')//如果为正 { flag=0; j++; } else flag=0;//这个是针对多项式的第一项为正的情况考虑的 //项系数的确定 while(data[i][j]>='0'&&data[i][j]<='9') { icoeff=icoeff*10+int(data[i][j]-'0'); j++; } if(icoeff==0) icoeff=1; if(icoeff==1) icoeff=0-icoeff;//如果系数为负,则加上负号 switch(data[i][j])//将data[i][j]分路: { case 'x'://此项为含x的项 if(data[i][++j]=='\n')//指数为1的情况 iindex=1; else { if(data[i][j]=='^')//后面紧接着是指数的情况(正和负) { if(data[i][++j]=='(')//指数为负的情况 { j++;//跳过负号 while(data[i][++j]>='0'&&data[i][j]<='9') iindex=iindex*10+int(data[i][j]-'0'); iindex=0-iindex; } else//指数为正的情况 { j--; while(data[i][++j]>='0'&&data[i][j]<='9') iindex=iindex*10+int(data[i][j]-'0'); } } else { deletepart(iname);//清空现场再返回错误信息 return wrong; } } //将项插入多项式中 addnode(site,icoeff,iindex); break; case '\n'://此项为常数项 iindex=0; addnode(site,icoeff,iindex); break; default://此项涉及到前面的多项式,如4A,5B,A*B等等 int site1,site2; site1=int(data[i][j]-'A'); if(site==site1||list[site1].empty())//如果为空 { deletepart(iname);//清空现场再返回错误信息 return wrong; } node *searchp1=list[site1].headp->next; if(data[i][++j]=='\n')//如4A,5B { while(searchp1!=NULL) { addnode(site,(searchp1->coeff)*icoeff,searchp1->index); searchp1=searchp1->next; } } else if(data[i][j]=='*')//如3A*B等等 { site2=int(data[i][++j]-'A'); if(site==site2||data[i][++j]!='\n') { deletepart(iname);//清空现场再返回错误信息 return wrong; } if(list[site2].empty())//如果为空 { deletepart(iname);//清空现场再返回错误信息 return empty_error; } node *searchp2=list[site2].headp->next; while(searchp2!=NULL) { searchp1=list[site1].headp->next; while(searchp1!=NULL) { addnode(site,(searchp1->coeff)*icoeff*(searchp2->coeff),(searchp1->index)+(searchp2->index)); searchp1=searchp1->next; } searchp2=searchp2->next; } } else { deletepart(iname);//清空现场再返回错误信息 return wrong; } break; } i++; } //到现在为止,多项式已经创建成功,下面进行系数项为0的清除工作 followp=list[site].headp; searchp=list[site].headp->next; while(searchp!=NULL) { if(searchp->coeff==0)//系数项为0的清除 { followp->next=searchp->next; delete searchp; searchp=followp; } followp=searchp; searchp=searchp->next; } if(list[site].headp->next==NULL)//多项式为0的情况 { searchp=new node(0,0);//附加一个0项 list[site].headp->next=searchp; searchp->next=NULL; } cout<<endl<<"新建多项式信息整理后如下:"<<endl; display(iname);//多项式显示 return success; } return fail; } void sequelist::displayname(void)//显示系统中现存多项式的名称 { int j=0; cout<<"系统当前存在多项式的名称有:"<<endl; for(int i=0;i<Maxsize;i++) { if(!list[i].empty()) { cout<<setw(4)<<char(i+'A'); j++; if((j+1)%8==0)//每行显示7个多项式名称 cout<<endl; } } cout<<endl<<"◇◇共"<<j<<"个多项式信息!"<<endl<<endl; } void sequelist::addnode(int site,int icoeff,int iindex)//增加项 { node *newnode,*searchp,*followp; if(list[site].empty())//如果为空 { newnode= new node(icoeff,iindex); list[site].headp->next=newnode; newnode->next=NULL; } else { followp=list[site].headp; searchp=list[site].headp->next; if(order==1)//降序显示 { while(searchp!=NULL&&searchp->index>iindex) { followp=searchp; searchp=searchp->next; } } else//升序显示 { while(searchp!=NULL&&searchp->index>iindex) { followp=searchp; searchp=searchp->next; } } if(searchp!=NULL&&searchp->index==iindex) { searchp->coeff+=icoeff;//同类项合并 } else//非同类项则按序插入 { newnode=new node(icoeff,iindex); newnode->next=searchp; followp->next=newnode; } } } void sequelist::traveral(void)//遍历所有多项式 { int j=0; for(int i=0;i<Maxsize;i++) { if(!list[i].empty()) { display(char(i+'A')); j++; } } cout<<"系统中现有多项式个数为:"<<j<<endl; } bool sequelist::findlist(char idata)//查找多项式(提供多项式名称) { int site; site=int(idata-'A'); if(list[site].empty()) return false; else { display(idata); return true; } } bool sequelist::scanname(char idata)//判断多项式的名称是否合法 { if(idata>='A'&&idata<='Z') { int site; site=int(idata-'A'); if(!list[site].empty()) { cout<<"对不起,多项式"<<idata<<"已经存在!"<<endl; display(idata); return false; } else { cout<<"恭喜!多项式名称通过检验!请继续..."<<endl; return true; } } cout<<"对不起,您输入的多项式名称格式不正确!"<<endl; return false; } /* 定义一个实现多项式功能的菜单处理类interfacebase */ class interfacebase { private: sequelist listonface; public: void clearscreen(void);//清屏 void showmenu(void);//显示菜单函数 int userchoice(void);//用户的选项 returninfo processmenu(int menuchoice);//菜单函数 }; void interfacebase::clearscreen(void) { system("cls"); } void interfacebase::showmenu(void) { cout<<"单链表实现多项式的功能菜单"<<endl; cout<<"=========================="<<endl; cout<<"1.输入多项式(从键盘输入)"<<endl; cout<<"2.显示多项式(遍历所有多项式)"<<endl; cout<<"3.清空多项式信息"<<endl; cout<<"4.赋值计算"<<endl; cout<<"5.显示某个多项式"<<endl; cout<<"6.显示系统中现存多项式的名称"<<endl; cout<<"7.查找多项式(提供多项式名称)"<<endl; cout<<"0.退出程序"<<endl; cout<<"=========================="<<endl; } int interfacebase::userchoice(void) { int menuchoice; cout<<"请输入您的选择:"; cin>>menuchoice; return menuchoice; } returninfo interfacebase::processmenu(int menuchoice) { int position,item,returnvalue; char name; switch(menuchoice)//根据用户的选择进行相应的操作 { case 1: returnvalue=listonface.inputdata(); if(returnvalue==fail) cout<<"对不起,您输入的多项式名称格式不正确!请按任意键继续..."<<endl; else if(returnvalue==wrong) cout<<"对不起,该项多项式错误(或者为空),已删除!请按任意键继续..."<<endl; else if(returnvalue==empty_error) cout<<"对不起,该项多项式为空!请按任意键继续..."<<endl; else cout<<"输入多项式操作成功!请按任意键继续..."<<endl; break; case 2: listonface.traveral(); cout<<"多项式遍历操作成功!请按任意键继续..."<<endl; break; case 3: returnvalue=listonface.deletdata(); if(returnvalue==fail) cout<<"操作取消!请按任意键继续..."<<endl; else if(returnvalue==wrong) cout<<"对不起,该项多项式为空!请按任意键继续..."<<endl; else cout<<"清除操作成功!请按任意键继续..."<<endl; break; case 4: returnvalue=listonface.calculate(); if(returnvalue==wrong) cout<<"对不起,该项多项式为空!请按任意键继续..."<<endl; else if(returnvalue==fail) cout<<"操作取消!请按任意键继续..."<<endl; else cout<<"赋值计算操作成功!请按任意键继续..."<<endl; break; case 5: cout<<"请输入要显示的多项式名称:"; cin>>name; listonface.display(name); cout<<"显示某个多项式操作成功!请按任意键继续..."<<endl; break; case 6: listonface.displayname(); cout<<"显示系统中现存多项式的名称操作成功!请按任意键继续..."<<endl; break; case 7: cout<<"请输入要查找的多项式名称:"; cin>>name; listonface.findlist(name); if(true) cout<<"查找多项式操作成功!请按任意键继续..."<<endl; else cout<<"该多项式为空(不存在)!请按任意键继续..."<<endl; break; case 0: exit(0); default: cout<<"对不起,您输入的功能编号有错!请重新输入!!!"<<endl; break; } return success; } /* 程序主入口 */ void main(void) { int menuchoice;//定义变量,菜单选单项的选择 interfacebase interfacenow; sequelist sequelistnow; system("color f0");//修改屏幕的背景色和字的颜色 interfacenow.clearscreen();//清屏 while(1)//永真循环 { interfacenow.showmenu();//显示菜单 menuchoice=interfacenow.userchoice();//获取用户的选择 interfacenow.processmenu(menuchoice);//处理用户的选择 system("pause");//暂停 interfacenow.clearscreen();//清屏 } }//主函数结束 ```
求各位大神帮忙做程序结构图(也就是模块间的关系)
求各位大神帮忙做程序结构图(也就是模块间的关系) #include <stdio.h> #include <conio.h> #include <windows.h> #include <stdlib.h> #include <string.h> FILE *fp=NULL;//文件指针 float LJE;//历史金额 int i=0;//变量 分级 int flag; //定义时间结构体,包括时分秒和10毫秒 struct tm //结构体 { int hours,minutes,seconds; //定义时,分,秒 int hscd; //毫秒 }time,tmp,total; //time用以计时显示,tmp用以存储上一阶段时间,total记总时间 int cnt; FILE* fout; //文件指针 //每次调用update函数,相当于时间过了10ms int Rigester();//登陆函数 void Login();//注册函数 void update(struct tm *t,int i) { (*t).hscd++; //10ms单位时间加1 cnt++; if ((*t).hscd==100) //计时满1s,进位 { (*t).hscd=0; (*t).seconds++; } if ((*t).seconds==60) //计时满一分,进位 { (*t).seconds=0; (*t).minutes++; } if ((*t).minutes==60) //计时满一小时,进位 { (*t).minutes=0; (*t).hours++; } if((*t).hours==24) //满24小时 复位 (*t).hours=0; Sleep(10); } void display(struct tm *t,int i) { //此处输出计时结果,\r为回车不换行,既一直在同一行更新时间 printf("%2d:",(*t).hours); //小时 printf("%2d:",(*t).minutes); //分钟 printf("%2d:",(*t).seconds); //秒 printf("%2d",(*t).hscd); //毫秒 printf("\t当前金额%0.1f元\r",(*t).minutes*0.1*i+i); //金额 } void time_init() //初始化时间 { time.hours=time.minutes=time.seconds=time.hscd=0; } void get_total() //时间换算 { total.hscd = cnt % 100; cnt /= 100; total.seconds = cnt % 60; cnt /= 60; total.minutes = cnt % 60; cnt /= 60; total.hours = cnt; } int main() { int a; char m; cnt = 0; time_init(); //初始化时间 fout = fopen("timeout.txt","r+"); system("color 4F"); if(fout==NULL) { fout=fopen("timeout.txt","w+"); } printf("欢迎使用停车计费系统\n"); printf("停车场采用不同车型不同单价计费\n"); printf("大车每分钟3元\n"); printf("中车每分钟2元\n"); printf("小车每分钟1元\n"); { int select; printf("1.登录 2.注册 0.退出 \n请选择"); scanf("%d",&select); switch (select) { case 0:printf("退出程序!");return 0; case 1: Rigester (); break; case 2: Login ();break; default: printf("输入错误,退出程序!\n");return 0; } } system("cls");//清屏 fp=fopen("users.txt","r+"); //打开文件 if(fp==NULL) { fp=fopen("users.txt","w+"); } fscanf(fp,"%f",&LJE); //将文件数据(剩余金额)赋予 LJE fclose(fp);//关闭文件 printf("剩余金额%0.1f元\n",LJE); printf("请选择车型\n"); printf("大车请按1\n"); printf("中车请按2\n"); printf("小车请按3\n"); scanf("%d",&a); //接收数据 switch(a)//进行判断 { case 1: i=3;break; case 2: i=2;break; case 3: i=1;break; } printf("按回车开始计时"); while(1) { m = getch(); if(m != '\r') //读入一个输入,如果是回车,那么跳出次循环 printf("输入错误,仅能输入回车键!\n"); else break; } //跳出循环 进行计时 printf("已经开始计时 \n"); while(1) { //此处检查是否有键盘输入 if(kbhit()/*监控键盘*/) { m=getch();//赋值 //如果等于回车,那么计时结束,跳出循环 if(m == '\r') break; //输入错误 else { printf("输入错误,仅支持输入回车键!\n"); } } update(&time,i); //更新计时器 函数 display(&time,i); //显示计时器时间 函数 } tmp = time; //输出最后一次即使结果,写入文件 fprintf(fout,"%d:%d:%d:%d\n",tmp.hours,tmp.minutes,tmp.seconds,tmp.hscd); get_total(); //计算总的时间,显示,并写入文件 LJE=LJE-(total.minutes*0.1*i+i);//当前剩余金额 printf("\n总时间:%2d:%2d:%2d:%2d::总金额%0.1f元 剩余金额%0.1f\n",total.hours,total.minutes,total.seconds,total.hscd,total.minutes*0.1*i+i,LJE); fprintf(fout,"统计时间:%2d:%2d:%2d:%2d::总金额%0.1f元::\n",total.hours,total.minutes,total.seconds,total.hscd,total.minutes*0.1*i+i); fp=fopen("users.txt","r+");//打开文件 fprintf(fp,"%0.1f",LJE);//记录数据(剩余金额) fclose(fp);//关闭文件 fclose(fout);//关闭文件 printf("已经保存到当前目录下的timeout.txt文件中按任意键结束!"); getch(); return 0; } int Rigester()//登陆 { FILE *fp=NULL; //文件指针 char str1[10],str2[20]; //字符串 用户名 密码 char name[10],password[10]; // 字符串 用户名 密码 int count=0,flag=0; //初始化 fp=fopen("table.txt","r");//打开文件 while(flag==0&&count<3) //判断 密码是否正确 且 输入次数是否大于3次 { printf("请输入用户名:"); scanf("%s",name); printf("请输入密码:"); scanf("%s",password); count++; //每输入一次密码和用户名 +1 rewind(fp);//文件指针指向文件头 while(!feof(fp))//判断 { fscanf(fp,"%s%s",str1,str2);//已注册的用户名和密码 if((strcmp(str1,name)==0)&&(strcmp(str2,password)==0))//与输入的用户名和密码进行比较 { flag=1;break;//相同 } } if(flag==0) printf("用户名或密码错误,请重新输入!\n"); } if (flag==1) printf("登录成功!\n"); else printf("输入超过3次,退出程序!\n"); fclose(fp); return flag;//返回flag值 进行判断 } void Login()//注册 { FILE *fp =NULL;//文件指针 char name [10],password[10]; fp=fopen("table.txt","a"); printf("请输入用户名:"); scanf("%s",name); printf("请输入密码"); scanf("%s",password); fprintf(fp,"%10s%10s",name,password); printf("注册成功\n"); fclose(fp); return; }
我用c++在做俄罗斯方块,但是出现了一个网上也没搜到的问题
为什么运行一段时间后,窗体就会变成白色了呢?这个问题我困扰了很久,不解决的话,下面我就难以实行其他功能了!我是个新手,请大家多多指教!有图有源码! #include "stdafx.h" #include "俄罗斯方块游戏2.h" #include <time.h> #define MAX_LOADSTRING 100 #define N 20 //小方块大小 HWND hWnd = NULL; #define W 600 //窗口大小 #define H 610 HGDIOBJ oldbrush; HBRUSH hb; int X1=10; int Y1=0; bool ShowTetris[30][30]={0}; class Tetris //“父类”组成大方块中的小方块 { public: POINT p[4]; public: virtual void one(HDC hdc,int x,int y){}; virtual void two(HDC hdc,int x,int y){}; virtual void three(HDC hdc,int x,int y){}; virtual void four(HDC hdc,int x,int y){}; void drawing(HDC hdc ,int x,int y); }; void Tetris::drawing(HDC hdc ,int x,int y) { POINT A[4]; for(int i=0;i<4;i++) { A[0].x = x+p[i].x*N; A[0].y = y+p[i].y*N; A[1].x = x + N+p[i].x*N; A[1].y = y+p[i].y*N; A[2].x = x + N+p[i].x*N; A[2].y = y + N+p[i].y*N; A[3].x = x+p[i].x*N; A[3].y = y + N+p[i].y*N; Polygon(hdc, A, 4); } } class T1:public Tetris //"田条" { public: void one(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,2,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=0,p[2].y=1; p[3].x=1,p[3].y=1; drawing(hdc,x,y); } void two(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,2,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=0,p[2].y=1; p[3].x=1,p[3].y=1; drawing(hdc,x,y); } void three(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,2,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=0,p[2].y=1; p[3].x=1,p[3].y=1; drawing(hdc,x,y); } void four(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,2,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=0,p[2].y=1; p[3].x=1,p[3].y=1; drawing(hdc,x,y); } };class T2:public Tetris //“竖条” { public: void one(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(52,52,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=0,p[1].y=1; p[2].x=0,p[2].y=2; p[3].x=0,p[3].y=3; drawing(hdc,x,y); } void two(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(52,52,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=2,p[2].y=0; p[3].x=3,p[3].y=0; drawing(hdc,x,y); } void three(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(52,52,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=0,p[1].y=1; p[2].x=0,p[2].y=2; p[3].x=0,p[3].y=3; drawing(hdc,x,y); } void four(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(52,52,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=2,p[2].y=0; p[3].x=3,p[3].y=0; drawing(hdc,x,y); } }; class T3:public Tetris //“T条” { public: void one(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(95,102,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=0,p[1].y=1; p[2].x=1,p[2].y=1; p[3].x=2,p[3].y=1; drawing(hdc,x,y); } void two(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(95,102,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=0,p[1].y=1; p[2].x=0,p[2].y=2; p[3].x=1,p[3].y=1; drawing(hdc,x,y); } void three(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(95,102,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=0,p[1].y=0; p[2].x=1,p[2].y=1; p[3].x=2,p[3].y=0; drawing(hdc,x,y); } void four(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(95,102,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=1,p[1].y=1; p[2].x=1,p[2].y=2; p[3].x=0,p[3].y=1; drawing(hdc,x,y); } }; class T4:public Tetris //“L形条第一种” { public: void one(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(200,82,150)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=0,p[1].y=1; p[2].x=0,p[2].y=2; p[3].x=1,p[3].y=0; drawing(hdc,x,y); } void two(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(200,82,150)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=2,p[2].y=0; p[3].x=2,p[3].y=1; drawing(hdc,x,y); } void three(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(200,82,150)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=1,p[1].y=1; p[2].x=1,p[2].y=2; p[3].x=0,p[3].y=2; drawing(hdc,x,y); } void four(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(200,82,150)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=0,p[1].y=1; p[2].x=1,p[2].y=1; p[3].x=2,p[3].y=1; drawing(hdc,x,y); } }; class T5:public Tetris //“L形条第二种” { public: void one(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(270,152,170)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=0,p[1].y=0; p[2].x=1,p[2].y=1; p[3].x=1,p[3].y=2; drawing(hdc,x,y); } void two(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(270,152,170)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=2,p[0].y=0; p[1].x=2,p[1].y=1; p[2].x=1,p[2].y=1; p[3].x=0,p[3].y=1; drawing(hdc,x,y); } void three(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(270,152,170)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=0,p[1].y=1; p[2].x=0,p[2].y=2; p[3].x=1,p[3].y=2; drawing(hdc,x,y); } void four(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(270,152,170)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=2,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=0,p[2].y=0; p[3].x=0,p[3].y=1; drawing(hdc,x,y); } }; class T6:public Tetris //“Z形条第一种” { public: void one(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,252,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=1,p[2].y=1; p[3].x=2,p[3].y=1; drawing(hdc,x,y); } void two(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,252,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=1,p[1].y=1; p[2].x=0,p[2].y=1; p[3].x=0,p[3].y=2; drawing(hdc,x,y); } void three(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,252,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=1,p[2].y=1; p[3].x=2,p[3].y=1; drawing(hdc,x,y); } void four(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,252,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=1,p[1].y=1; p[2].x=0,p[2].y=1; p[3].x=0,p[3].y=2; drawing(hdc,x,y); } }; class T7:public Tetris //“Z形条第二种” { public: void one(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(290,255,255)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=2,p[1].y=0; p[2].x=1,p[2].y=1; p[3].x=0,p[3].y=1; drawing(hdc,x,y); } void two(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(290,255,255)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=1; p[1].x=0,p[1].y=1; p[2].x=0,p[2].y=0; p[3].x=1,p[3].y=2; drawing(hdc,x,y); } void three(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(290,255,255)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=2,p[1].y=0; p[2].x=1,p[2].y=1; p[3].x=0,p[3].y=1; drawing(hdc,x,y); } void four(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(290,255,255)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=1; p[1].x=0,p[1].y=1; p[2].x=0,p[2].y=0; p[3].x=1,p[3].y=2; drawing(hdc,x,y); } }; T1 t1; T2 t2; T3 t3; T4 t4; T5 t5; T6 t6; T7 t7; Tetris *p=new Tetris; void ChooseTetris1(HDC hdc,int a) { switch(a) { case 0:p=new T1;break; case 1:p=new T2;break; case 2:p=new T3;break; case 3:p=new T4;break; case 4:p=new T5;break; case 5:p=new T6;break; case 6:p=new T7;break; default:break; } } void display(HDC hdc) { t1.one(hdc,500,10); t2.one(hdc,500,75); t3.one(hdc,500,180); t4.one(hdc,500,245); t5.one(hdc,500,325); t6.one(hdc,500,410); t7.one(hdc,500,480); } // 全局变量: HINSTANCE hInst; // 当前实例 TCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本 TCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名 // 此代码模块中包含的函数的前向声明: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); int R; int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // TODO: 在此放置代码。 MSG msg; HACCEL hAccelTable; R=rand()%7; // 初始化全局字符串 LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_MY2CPP, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); srand((unsigned)time(NULL)); // 执行应用程序初始化: if (!InitInstance (hInstance, nCmdShow)) { return FALSE; } hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY2CPP)); // 主消息循环: while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int) msg.wParam; } // // 函数: MyRegisterClass() // // 目的: 注册窗口类。 // // 注释: // // 仅当希望 // 此代码与添加到 Windows 95 中的“RegisterClassEx” // 函数之前的 Win32 系统兼容时,才需要此函数及其用法。调用此函数十分重要, // 这样应用程序就可以获得关联的 // “格式正确的”小图标。 // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MY2CPP)); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = MAKEINTRESOURCE(IDC_MY2CPP); wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); return RegisterClassEx(&wcex); } // // 函数: InitInstance(HINSTANCE, int) // // 目的: 保存实例句柄并创建主窗口 // // 注释: // // 在此函数中,我们在全局变量中保存实例句柄并 // 创建和显示主程序窗口。 // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd; hInst = hInstance; // 将实例句柄存储在全局变量中 hWnd = CreateWindow(szWindowClass, L"Tetris",WS_CAPTION|WS_SYSMENU, CW_USEDEFAULT,CW_USEDEFAULT, W,H, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } int a=0; int X[1000]; int Y[1000]; int JudgeTetris() { for(int i=0;i<4;i++) { if(p->p[i].y+Y1+1>=28) return 0; } for(int i=0;i<4;i++) { for(int j=0;j<a;j++) { if(p->p[i].y+Y1+1>=Y[j]&&p->p[i].x+X1==X[j]) { return 0; } } } return 1; } void StopTetris() { int x, y; for(int i=0;i<4;i++) { x=X1+p->p[i].x; y=Y1+p->p[i].y; // ShowTetris[x][y] = true; X[a]=x; Y[a]=y; ShowTetris[X[a]][Y[a]] = true; a++; } } void Down(HDC hdc,int n) { switch(n) { case 0: p->one(hdc,X1*N,Y1*N);break; case 1: p->two(hdc,X1*N,Y1*N);break; case 2: p->three(hdc,X1*N,Y1*N);break; case 3: p->four(hdc,X1*N,Y1*N);break; default:break; } if(JudgeTetris()) { Y1++; } else { StopTetris(); R=rand()%7; delete p; //到达低端时,随机选择一个数 ChooseTetris1(hdc,R); Y1=0; X1=10; } for (int i = 0; i < 30; i++) { for (int j = 0; j < 30; j++) { if (ShowTetris[i][j]) { hb=CreateSolidBrush(RGB(34,139,34)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); POINT a[4] = { i*N, j*N, (i + 1)*N, j*N, (i + 1)*N, (j + 1)*N, i*N, (j+1)*N }; Polygon(hdc, a, 4); } } } } void QuickDown(HDC hdc) { Y1+=1; InvalidateRect(hWnd,NULL,TRUE); } void GoLeft(HDC hdc) { if(X1<=0) { X1-=0; } else X1-=1; InvalidateRect(hWnd,NULL,TRUE); } int JR() //判断右边界 { for(int i=0;i<4;i++) { if(p->p[i].x+X1>=20) return 0; } return 1; } void GoRight(HDC hdc) { if(!JR()) { X1+=0; } else X1+=1; InvalidateRect(hWnd,NULL,TRUE); } int L=0; void Deforming(HDC hdc) { L+=1; L=L%4; InvalidateRect(hWnd,NULL,TRUE); } // 函数: WndProc(HWND, UINT, WPARAM, LPARAM) // // 目的: 处理主窗口的消息。 // // WM_COMMAND - 处理应用程序菜单 // WM_PAINT - 绘制主窗口 // WM_DESTROY - 发送退出消息并返回 // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; HGDIOBJ oldbrush; HBRUSH hb; RECT rect; srand((unsigned)time(NULL)); switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // 分析菜单选择: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_CREATE: SetTimer(hWnd,1,700,NULL); //函数反回值就是第一个参数值1,表示此定时器的ID号;第二个参数表示要等待700毫秒时间再重新处理一次。第三个参数在这种方法中一般用NULL。 case WM_TIMER: InvalidateRect(hWnd,NULL,TRUE); case WM_KEYDOWN: //键盘控制方块移动 hdc=GetDC(hWnd); switch((int)wParam) { case VK_DOWN: QuickDown(hdc);break; //加速下落 case VK_LEFT: GoLeft(hdc);break; //键盘左移 case VK_RIGHT: GoRight(hdc);break; //键盘右移 case VK_UP: Deforming(hdc);break; //变形 } ReleaseDC ( hWnd,hdc ); return 0; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); ChooseTetris1(hdc,R); hb=CreateSolidBrush(RGB(255,228,181));//hb=CreateSolidBrush(RGB(255,192,250)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); Rectangle(hdc,0,0,420,560); //游戏区域画刷 hb=CreateSolidBrush(RGB(176,224,230));//hb=CreateSolidBrush(RGB(255,192,250)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); Rectangle(hdc,420,0,600,560); //游戏区域画刷 display(hdc); Down(hdc,L); // TODO: 在此添加任意绘图代码... EndPaint(hWnd, &ps); break; case WM_DESTROY: KillTimer (hWnd, 1) ; PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } // “关于”框的消息处理程序。 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); switch (message) { case WM_INITDIALOG: return (INT_PTR)TRUE; case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam)); return (INT_PTR)TRUE; } break; }![图片](https://img-ask.csdn.net/upload/201605/23/1464003773_584645.jpg)![图片](https://img-ask.csdn.net/upload/201605/23/1464003943_873881.jpg)![图片](https://img-ask.csdn.net/upload/201605/23/1464004017_919643.jpg)
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
Java 14 都快来了,为什么还有这么多人固守Java 8?
从Java 9开始,Java版本的发布就让人眼花缭乱了。每隔6个月,都会冒出一个新版本出来,Java 10 , Java 11, Java 12, Java 13, 到2020年3月份,...
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
讲真,这两个IDE插件,可以让你写出质量杠杠的代码
周末躺在床上看《拯救大兵瑞恩》 周末在闲逛的时候,发现了两个优秀的 IDE 插件,据说可以提高代码的质量,我就安装了一下,试了试以后发现,确实很不错,就推荐给大家。 01、Alibaba Java 代码规范插件 《阿里巴巴 Java 开发手册》,相信大家都不会感到陌生,其 IDEA 插件的下载次数据说达到了 80 万次,我今天又贡献了一次。嘿嘿。 该项目的插件地址: https://github....
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
2020 年,大火的 Python 和 JavaScript 是否会被取而代之?
Python 和 JavaScript 是目前最火的两大编程语言,但是2020 年,什么编程语言将会取而代之呢? 作者 |Richard Kenneth Eng 译者 |明明如月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: Python 和 JavaScript 是目前最火的两大编程语言。然而,他们不可能永远屹立不倒。最终,必将像其他编程语言一...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
Idea 中最常用的10款插件(提高开发效率),一定要学会使用!
学习使用一些插件,可以提高开发效率。对于我们开发人员很有帮助。这篇博客介绍了开发中使用的插件。
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
为什么程序猿都不愿意去外包?
分享外包的组织架构,盈利模式,亲身经历,以及根据一些外包朋友的反馈,写了这篇文章 ,希望对正在找工作的老铁有所帮助
Java校招入职华为,半年后我跑路了
何来 我,一个双非本科弟弟,有幸在 19 届的秋招中得到前东家华为(以下简称 hw)的赏识,当时秋招签订就业协议,说是入了某 java bg,之后一系列组织架构调整原因等等让人无法理解的神操作,最终毕业前夕,被通知调往其他 bg 做嵌入式开发(纯 C 语言)。 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回,一时感到无力回天,只得默默接受。 毕业后,直接入职开始了嵌入式苦旅,由于从未...
世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?
点击上方蓝字设为星标下面开始今天的学习~今天分享四个代码量很少,但很牛逼很经典的算法或项目案例。1、no code 项目地址:https://github.com/kelseyhight...
​两年前不知如何编写代码的我,现在是一名人工智能工程师
全文共3526字,预计学习时长11分钟 图源:Unsplash 经常有小伙伴私信给小芯,我没有编程基础,不会写代码,如何进入AI行业呢?还能赶上AI浪潮吗? 任何时候努力都不算晚。 下面,小芯就给大家讲一个朋友的真实故事,希望能给那些处于迷茫与徘徊中的小伙伴们一丝启发。(下文以第一人称叙述) 图源:Unsplash 正如Elsa所说,职业转换是...
强烈推荐10本程序员必读的书
很遗憾,这个春节注定是刻骨铭心的,新型冠状病毒让每个人的神经都是紧绷的。那些处在武汉的白衣天使们,尤其值得我们的尊敬。而我们这些窝在家里的程序员,能不外出就不外出,就是对社会做出的最大的贡献。 有些读者私下问我,窝了几天,有点颓丧,能否推荐几本书在家里看看。我花了一天的时间,挑选了 10 本我最喜欢的书,你可以挑选感兴趣的来读一读。读书不仅可以平复恐惧的压力,还可以对未来充满希望,毕竟苦难终将会...
作为一个程序员,内存的这些硬核知识你必须懂!
我们之前讲过CPU,也说了CPU和内存的那点事儿,今天咱就再来说说有关内存,作为一个程序员,你必须要懂的哪那些硬核知识! 大白话聊一聊,很重要! 先来大白话的跟大家聊一聊,我们这里说的内存啊,其实就是说的我们电脑里面的内存条,所以嘞,内存就是内存条,数据要放在这上面才能被cpu读取从而做运算,还有硬盘,就是电脑中的C盘啥的,一个程序需要运行的话需要向内存申请一块独立的内存空间,这个程序本身是存放在...
非典逼出了淘宝和京东,新冠病毒能够逼出什么?
loonggg读完需要5分钟速读仅需 2 分钟大家好,我是你们的校长。我知道大家在家里都憋坏了,大家可能相对于封闭在家里“坐月子”,更希望能够早日上班。今天我带着大家换个思路来聊一个问题...
立即提问