图月志 2017-12-10

定义i,flag=1,z,m[11],a[19] 输入次数n for i=1 to n+1 gets(a) 加权求和在取余计算z switch(z) 对应查看a[17]与校验码是否一致 若不一致,flag=0,输出错误身份证 若flag=1,则说明全对




1.对一个汉字占两个字节没理解。存储一个汉字需要两个字节,而char类型是一个字节,所以一个中文字占用2个字节来存储及输出。

本想通过调试看变量,但发现调试看不出毛病在哪里。再浏览了一遍发现自己只在定义时保证了储存空间足够,而在对新诗赋值时却没有意识到要两个字节来表示一个汉字。
pome_[2*i]=pome[i][0];//对新诗赋值 pome_[2*i+1]=pome[i][1];
2.忽略了字符数组结束标志

pome_[2*i]='\0';//标志结束

定义i,num=0,a[80]
输入字符串,接收到\n以\0结尾
for i=0 to a[i]='\0'
if a[i]是大写字母
if a[i]不是A,E,I,O,U num++
输出num
没什么大问题,题目没看清



int *p1 *p2; p1=&a; p2=p1;
指针+常数=常数*指针所指类型大小
指针相当于一个地址,两个指针求和无意义。
#include<Stdio.h>
void splitfloat (float x, int *intpart,float *fracpart);
int main()
{
float x,fracpart;//定义拆分数,小数
int intpart;//定义整数
scanf("%f",&x);//输入拆分数
splitfloat (x,&intpart,&fracpart);//调用函数
printf("该实数的整数部分为:%d\n",intpart);//输出
printf("该实数的小数部分为:%f\n",fracpart);
return 0;
}
void splitfloat (float x, int *intpart,float *fracpart)
{
float k;
k=x-(int)x;
*intpart=(int)x;
*fracpart=k;
}
void splitfloat (float x, int *intpart,float *fracpart)这句是指针变量做函数形参,函数实参为地址(指针变量)。
void bubble (int *p ,int n)
{
int i,j,t;
for(i=0;i<n;i++)
for(j=0;j<n-i;j++)
{
if(*p>*(p+1))
{
t=*p;
*p=*(p+1);
*(p+1)=t;
}
}
for(i=0;i<n;i++)
printf("%d",*(p+i));
}int a[],*p; p=a<=>p=&a[0];//指针变量指向数组第一个元素的地址 a[99]<=>*(p+99)<=>p[99]//三者等价
char *sp="point";
指针会指向该字符串的首字符
void line(char *p1, char *p2)
{
while(*p1)
{
p1++;
}
while(*p2)
{
*p1 = *p2;
p1++;
p2++;
}
*p1='\0';
}

前两个函数题没做出来,刚开始看第一题没什么思路,就开始倒着写,等写到倒数第2题那个输出字符间字符子串时,一直卡在那里,后来打算先放下继续做,等做到函数题时时间已经没剩下多少了。