C语言博客作业--字符数组

一、PTA实验作业

题目1:字符串转换成十进制整数

1. 本题PTA提交列表

2. 设计思路

定义变量i,j,flag控制正负,number
定义字符型数组six,ch
输入ch
for    i=0    to    ch[i]!='\0'
if    ch[i]为十六进制字符
    six[j]=ch[i];j++
if    six数组的第一个字符为负号
    flag=-1;
for    i=0    to    six[i]!='\0'
    if    six[i]为0到9之间
        number=number*16+six[i]-'0';
    if    six[i]为A到F
        number=number*16+six[i]-'A'+10;
    if    six[i]为a到f
        number=number*16+six[i]-'a'+10;
输出flag*number

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明

提交时显示负号无效,我返回去看了一下自己的代码,发现自己写的代码有问题,应该是所提取出的十六进制前有负号才算负数,所以把代码改成当j0&&ch[i]'-'时为负数。

题目2:Jack cheng的烦恼2

1. 本题PTA提交列表

2. 设计思路

定义变量n,i,count1=0,count2=0用来计数
定义字符型变量ch
for    i=1    to    n
    ch=getchar();
    if    ch为(
    count1++;
    if    ch为)且count1!=0
    count1--;
    if    ch为{
    count2++;
    if    ch为}且count2!=0
    count2--;
if    count1==0&&count2==0//全匹配完时
    输出True
否则
    输出False

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明

用字符数组时总是出现段错误,后来干脆不用数组了,就答案正确了。

题目3:人以类聚

1. 本题PTA提交列表

2. 设计思路

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明

提交时部分正确,回头看才发现没有喜欢的同学时没有输出Lonely Xiao Ming,粗心了。

二、截图本周题目集的PTA最后排名

PTA排名

三、同学代码结对互评

1.互评同学名称

周炳辉

2.我的代码、互评同学代码截图


3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。

周炳辉的代码一看起来就比我的代码要简洁,我在代码中运用了指针的知识,通过与结束符的结合运用实现倒叙;而周炳辉的代码则是通过对空格有无的判断,在程序中也没有像我那么多的输出语句,所以说我更喜欢周炳辉的代码,比较简洁。

四、本周学习总结

1.你学会了什么?

1.1指针变量如何定义(设计代码可以用markdown代码符号渲染)?

类型名    *指针变量名

1.2 指针加法运算运用在哪种情况,2个指针变量能否相加?

指针加法运算可以运用在对数组进行赋值,也可用在循环的控制;
2个指针变量不能相加,因为相加没有意义。

1.3 指针不赋初值,直接使用,会出现什么情况,请用DEVC验证,并截图展示?

1.4 课堂派上关于分离浮点数的整数部分和小数部分那题,请用DEVC验证实现,并在此贴图展示,同时说明哪句是指针变量做函数形参,函数实参应该怎么表示。指针变量做函数形参有什么用处?


指针变量做函数形参:void splitfloat(float x,int *intpart,float *fracpart)
实参传地址,用地址表示:splitfloat(x,&intpart,&fracpart);
指针变量做函数形参可以返回多个结果

1.5 请把课本的冒泡排序的函数改成指针变量做形参格式,并把代码写在底下,注意用markdown语法渲染。

#include<stdio.h>
void bubble(int *a,int n);
int main()
{
	int n,a[8];
	int i;
	printf("Enter n(n<=8):");
	scanf("%d",&n);
	printf("Enter a[%d]:",n);
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	bubble(a,n);
	printf("After sorted,a[%d]=",n);
	for(i=0;i<n;i++)
		printf("%3d",a[i]);
	return 0;
} 
void bubble(int *a,int n){
	int i,j,t;
	for(i=1;i<n;i++)
		for(j=0;j<n-i;j++)
			if(a[j]>a[j+1]){
				t=a[j];a[j]=a[j+1];a[j+1]=t;
			}
}

1.6 如何定义一个指针变量指向数组,如何用指针变量表示数组元素?

如何定义:

int *p,a[10];
p=a;

如何用:

*(p+i)

1.7 如何定义字符指针指向字符串?指针指向字符串后,初始位置在哪里?

如何定义:

char *p="string";

初始位置在首字符的地址

1.8 利用字符指针操作字符串,如设计函数实现字符串连接,请在此贴图展示代码。说明指针表示字符的方法好处是什么?

#include<stdio.h>
void fun(char *str1,char *str2);
int main() 
{
	char str1[100],str2[100];
	gets(str1);
	gets(str2);
	fun(str1,str2);
	printf("%s\n",str1);
	return 0;
}
void fun(char *str1,char *str2)
{
	int i,count=0;
	for(i=0;str1[i]!='\0';i++){
		count++;
	}
	for(i=0;str2[i]!='\0';i++){
		str1[count]=str2[i];
		count++;
	}
	str1[count]='\0';
}

好处是效率更高,能够通过在函数里直接对数组进行操作,改变其中的值,更为方便。

2.本周你不会内容有什么?

课堂派错题罗列及如何订正


这道题当时没怎么理解题目的意思;a为指针常量,一旦定义就是确定的了,不能改变它的值。

这道题当时做的时候太粗心了,看到D就选了,P+8表示的是地址,*(P+8)才表示的是它的值。

3.数组上机考试小结

3.1 那题错了,请罗列?

3.2 错题如何订正,为什么错了?

#include<stdio.h>
void  trans_array(int a[][10],int n);
void  sort_array(int a[][10],int n);
int main()
{	
    int i,j;
    int n;
    int a[10][10];
    scanf("%d",&n);
    for(i=0;i<n;i++)
      for(j=0;j<n;j++) scanf("%d",&a[i][j]);  //输入矩阵 
    trans_array(a,n);
    sort_array(a,n);
    for(i=0;i<n;i++){ //输出矩阵 
      for(j=0;j<n;j++) 
	    if(j==0) printf("%d",a[i][j]);
	    else  printf("% d",a[i][j]);
	    printf("\n");
	  } 		
   	return 0;
}
void  trans_array(int a[][10],int n){
	int i,j,temp;
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			if(i<=j){
				temp=a[i][j];
				a[i][j]=a[j][i];
				a[j][i]=temp;
			}
		}
	}
}
void  sort_array(int a[][10],int n){
	int i,j,temp,k;
	for(j=0;j<n;j++){
		for(i=1;i<n;i++){
			for(k=0;k<n-i;k++)
			if(a[k][j]>a[k+1][j]){
				temp=a[k][j];
				a[k][j]=a[k+1][j];
				a[k+1][j]=temp;
			}
		}
	}
}

这道题我想了很久都没想出来,可能是当时想着快点做完,所以有点急了,连冒泡排序都写错了,还有一方面就是我对于冒泡排序看来还是不熟悉,要不然就不会出现这种低级错误,所以以后要把一些经典的方法记熟。

posted @ 2017-12-10 19:46  久念  阅读(341)  评论(8编辑  收藏  举报