字符数组
7-1 字符串转换成十进制整数:
1. 本题PTA提交列表:
2. 设计思路:
- 1.count判断十六进制字符前是否有负号,i和k是循环控制变量;
- 2.flag判断负号是否在十六进制字符前flag=0,sum=0,y,sum用于累加16转10进制数;
- 3.a存储输入字符,b存储过滤后的16进制字符 char a[80],b[80];
- 4.while((a[i]=getchar())!='#')输入字符 i++;
- 5.a[i]='\0';//令结束符为空操作;
-
- for(i=0;a[i]!='\0';i++)if(flag0&&a[i]'-')判断负号是否在十六进制字符前count++;//是的话count++;
- 7.if(a[i]>='0'&&a[i]<='9'||a[i]>='A'&&a[i]<='F'||a[i]>='a'&&a[i]<='f')当满足此条件时,b[k]=a[i];k++;flag=1;b存储a[i],flag=1说明此时后若出现负号,无效
- 8.y=k-1;//为下面十六转十进制做准备
- 9.b[k]='\0';//令b最后一个值为空操作
- 10.for(i=0;b[i]!='\0';i++)
- 11.如果b为大写字母b[i]=b[i]-55; sum=sum+pow(16,y)*b[i];
- 12.如果b为小写字母b[i]=b[i]-87;sum=sum+pow(16,y)*b[i];
- 13.如果b为数字字符 sum=sum+pow(16,y)*(b[i]-'0');
- 14.y--;为下一次循环做准备
- 15.if(count!=0&&flag==1)说明a前有负号输出负号
- 16.printf("%d",sum);输出十进制数
3.代码截图:
![](http://images2017.cnblogs.cowhile(line[i]!='\0'){//当遇到'\0'退出循环 m/blog/1232310/201712/1232310-20171210194528630-1762255306.jpg)
4.本题调试过程碰到问题及PTA提交列表情况说明。
-
1.把y=k-1写成y=i-2,将y与k和i的关系混淆
-
2.把y=k-1;b[k]='\0';放到for(i=0;a[i]!='\0';i++)循环里,将其移出即可;
-
3.将flag==0写成flag=0;
-
4.把if(b[i]>='A'&&b[i]<='F')b[i]=b[i]-55;写成if(b[i]>='A'&&b[i]<='F')b[i]=b[i]-7,原因是把字符‘10’当成整数10来计算;
7-2 统计一行文本的单词个数:
1. 本题PTA提交列表:
2. 设计思路:
- 1.i=0,count=0,flag;count统计单词个数,i是循环控制变量;
-
- line[1500];储存输入字符
- 3.while((line[i]=getchar())!='\n')输入字符 i++;改变下标
- 4.line[i]='\0';让结束符变为空操作
- 5.重置i,为下一次循环做准备
- 6.while(line[i]!='\0')当遇到'\0'退出循环 ;
- 7.重置flag=0,使之可以不停判断是否进入以下循环
-
- while(line[i]!=' ')当遇到空格符结束循环flag=1;表示有进入此循环,而不是连续空格i++; 如果(line[i]=='\0')break;
-
- if(line[i]!='\0') i=i+1;进入空格后的下一个字符
- 10.当不是连续空格时,即flag==1,count加1
- 11.输出("%d",count);
3.代码截图:
4.本题调试过程碰到问题及PTA提交列表情况说明。
-
1.没有令i=0
-
2.i=i+1;表示进入空格后的下一个字符 中,没有加执行条件if(line[i]!='\0'),导致无法结束循环
-
3.定义line[80]太小,因为题目没有给出具体范围,所以定义为稍大一点的line[1500];这样PTA才让过;
7-4 查验身份证:
1. 本题PTA提交列表:
2. 设计思路:
3.代码截图:
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 1.没有将line4中的元素变成字符
- 2.line2中少写一个‘\0’;
- 3.忘加等号;
- 4.因为i值的改变会影响最后的大循环的i值,所以应用k来替代;
- 5.没有加换行符,影响输出;
- 6.少加一个条件flag1&&integer0;
- 7.将i改成k后,没有将i改成k;
四、本周学习总结(3分)
1.你学会了什么?
- 1.指针变量如何定义(设计代码可以用markdown代码符号渲染)?
整型变量:int *p,a[8];p=a;
字符型变量:char *p,a[8];p=a;
调用函数函数:
实参str(a,&n);
形参str(int *p,int *n )
2 指针加法运算运用在哪种情况,2个指针变量能否相加?
p++;(p)++;++*p;
两个指针不能相加;
3 指针不赋初值,直接使用,会出现什么情况,请用DEVC验证,并截图展示?
4 课堂派上关于分离浮点数的整数部分和小数部分那题,请用DEVC验证实现,并在此贴图展示,同时说明哪句是指针变量做函数形参,函数实参应该怎么表示。指针变量做函数形参有什么用处?
函数形参:intpart,y,fracpart;
函数实参:x,&intpart,&fracpart;
可以一次返回多个值;
5 请把课本的冒泡排序的函数改成指针变量做形参格式,并把代码写在底下,注意用markdown语法渲染。
#include<stdio.h>
void bubble(int *p,int n);
int main()
{
int n,a[8];
int i;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
bubble(a,n);
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
void bubble(int *p,int n){
int i,j,t;
for(i=1;i<n;i++)
for(j=0;j<n-i;j++)
if(*(p+j)>*(p+j+1))
{
t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
}
}
6 如何定义一个指针变量指向数组,如何用指针变量表示数组元素?
int xp,x[8];xp=x;其中*xp指向数组x;
7 如何定义字符指针指向字符串?指针指向字符串后,初始位置在哪里?
与指向数组相同,初始位置在数组首地址所在位置;
8 利用字符指针操作字符串,如设计函数实现字符串连接,请在此贴图展示代码。说明指针表示字符的方法好处是什么?
不用另外再设置一个新数组;
2.本周你不会内容有什么?
1 课堂派错题罗列及如何订正。
不会的还待解决;
3.数组上机考试小结
1 那题错了,请罗列?
2 错题如何订正,为什么错了?