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