提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
这一周儿
一、数据结构实验:简易表达式求值
用到栈的知识(C语言
1.思路分析
分析需要的函数:初始化栈;入栈;获取栈顶元素的值;判断是否为运算符;优先级比较;运算;出栈;
代码如下(示例):
void InitStack(Sqstack &s);//初始化栈
void Push(Sqstack &s, char ch);//入栈
char GetTop(Sqstack &s);//获取栈顶元素的值
int In(char ch, char operArr[10]);//判断是否为运算符
int Pop (Sqstack &s, char &x);//出栈
char Compare(char oper1, char oper2); //比较优先级
int Count(int x1, char op, int x2);//运算
int Cal();
2.如何实现
struct Sqstack {
int data[100];
int top; //创建栈结构体 (一个有顶部的数组
};
char opset[10] = {'+', '-', '*', '/', '(', ')', '#'};
//用来进行比较运算符优先级的矩阵,3代表'=',2代表'>',1代表'<',0代表不可比
int cmp[7][7] = {
{ 2, 2, 1, 1, 1, 2, 2 },
{ 2, 2, 1, 1, 1, 2, 2 },
{ 2, 2, 2, 2, 1, 2, 2 },
{ 2, 2, 2, 2, 1, 2, 2 },
{ 1, 1, 1, 1, 1, 3, 0 },
{ 2, 2, 2, 2, 0, 2, 2 },
{ 1, 1, 1, 1, 1, 0, 3 } };//创建一个二维数组
Sqstack Num;
Sqstack Oper; //命名
创建一维、二维数组。
二、重复了好多次冒泡排序
优化内层循环:
for (i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
before: j<n-1
after:j<n-i-1 减少遍历
非常简单的冒泡儿
#include <stdio.h>
int main()
{
int a[100];
int n,t,i,j;
scanf("%d",&n);
for (i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for (i=0;i<n-1;i++)//注意范围
{
for(j=0;j<n-i-1;j++)//注意范围
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(i=0;i<n;i++)
{
printf(" %d",a[i]);
}
}
转成冒泡倒叙(从大到小
if(a[j+1]>a[j])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
三、计算日期差几天(py
套用模板
import datetime
y1=int(input("please input year1:"))
m1=int(input("please input month1:"))
d1=int(input("please input date1:"))
y2=int(input("please input year2:"))
m2=int(input("please input month2:"))
d2=int(input("please input date2:"))
d1 = datetime.datetime(y1,m1,d1)
d2 = datetime.datetime(y2,m2,d2)
interval = d2 - d1
print(interval.days)
不套用模板
初步思路是写多个if else语句分情况写润平年,二月腊月再算日期。
…省略多个错误思路…
CSDN上找了个C的思路经过整理:
y1=int(input("please input year1:"))
m1=int(input("please input month1:"))
d1=int(input("please input date1:"))
y2=int(input("please input year2:"))
m2=int(input("please input month2:"))
d2=int(input("please input date2:"))
if ((y2%400==0) or (y2%4==0 and y2%100!=0)):
list = [ 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ]
i=m1
sum=0 //记得给sum一个初值
while i < m2:
sum=sum+list[i]
i+=1
else:
list = [ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ]
i=m1
sum=0
while i < m2:
sum=sum+list[i]
i+=1
if d1>d2:
sum=sum-(d1-d2)
else:
sum=sum+(d2-d1)
j=y1
q=0
while j < y2:
if ((j%400==0) or (j%4==0 and j%100!=0)):
q+=1
j+=1
y=(y2-y1)*365+q
sum=sum+y
print("%d年%d月%d日与%d年%d月%d日相差%d天" %(y1,m1,d1,y2,m2,d2,sum))
对于日的处理:eg 8.17 与 9.3 做减法 8.3与9.17做加法
四、F12
写英语iwrite试图F12破解复制限制,终于找到那行代码发现还是修改不了QAQ,强行从源代码里黏贴进去答案发现系统不给上传,那没事了。
- 对结构体
语句格式:
struct tag {
member-list
member-list
member-list
...
} variable-list ;
理解:
struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
} book;
2.复习数组
type arrayName [ arraySize ];
a[n] 错误 明确占用的地址量
int a[10];
不从零开始计下标就是铁憨憨
从具体数举例子写写画画更好写普适算法一点