字符数组

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';//令结束符为空操作;
    1. 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是循环控制变量;
    1. line[1500];储存输入字符
  • 3.while((line[i]=getchar())!='\n')输入字符 i++;改变下标
  • 4.line[i]='\0';让结束符变为空操作
  • 5.重置i,为下一次循环做准备
  • 6.while(line[i]!='\0')当遇到'\0'退出循环 ;
  • 7.重置flag=0,使之可以不停判断是否进入以下循环
    1. while(line[i]!=' ')当遇到空格符结束循环flag=1;表示有进入此循环,而不是连续空格i++; 如果(line[i]=='\0')break;
    1. 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 错题如何订正,为什么错了?

posted @ 2017-12-10 22:04  哟呵~  阅读(310)  评论(2编辑  收藏  举报