2022-2023-1 20221320 《计算机基础与程序设计》第十三周学习总结

学期(2022-2023-1) 学号(20221320) 《计算机基础与程序设计》第十二周学习总结

作业信息

各项要求 具体内容
<班级的链接> 2022-2023-1-计算机基础与程序设计
<作业要求的链接> 2022-2023-1计算机基础与程序设计第十二周作业
作业的目标 1.学习目标: 无
作业的目标 2.学习任务:加入云班课,参考本周学习资源、《C语言程序设计》第12章并完成云班课测试
作业的目标 3.参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题“学年 学号 《计算机基础与程序设计》第十三周学习总结”,博客(随笔)要通过作业提交,截至时间本周日 23:59。
作业正文

教材学习内容总结

第十二章主要讲了结构体与数据结构的基础,分别细讲了结构体的定义,结构体数组的定义和初始化,结构体指针的定义和初始化,向函数传递结构体,共用体,枚举数据类型,动态数据结构——单项列表

教材学习中的问题和解决过程

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef int ElemType;
//定义单链表结构
typedef struct Node
{
    ElemType data;//数据域
    struct Node *next;//指针域,指向下一节点
} LinkList;
//函数声明(若未声明,可能会有警告甚至错误)
LinkList *initList(LinkList *L);
LinkList *createList(int len);
int insertLinkList(LinkList *L, int pos, ElemType e);
int deleteLinkList(LinkList *L, int pos, ElemType *e);
void reverseLinkList(LinkList *L);
int seachLinkList(LinkList *L, ElemType e);
int getLen(LinkList *L);
int isEmpty(LinkList *L);
void printLinkList(LinkList *L);
int main()
{
    LinkList *L;
    ElemType e;
    int len, pos;
    printf("创建元素个数:");
    scanf("%d", &len);
    printf("\n请输入:");
    L = createList(len);
    printf("当前链表所有元素:");
    printLinkList(L);
    printf("\n插入位置和插入值(中间用空格隔开):");
    scanf("%d%d",&pos, &e);
    insertLinkList(L, pos, e);
    printf("\n插入元素后链表所有元素:");
    printLinkList(L);
    printf("\n请输入删除元素位置:");
    scanf("%d",&pos);
    deleteLinkList(L, pos, &e);
    printf("\n元素%d已删除", e);
    printf("\n删除后链表所有元素:");
    printLinkList(L);
    printf("\n请输入查找元素:");
    scanf("%d",&e);
    if(seachLinkList(L, e) != -1)
    {
        printf("\n%d位于:%d",e, seachLinkList(L, e));
    }
    else printf("\n%d未找到",e);
    reverseLinkList(L);
    printf("\n转置后链表所有元素:");
    printLinkList(L);
    return 0;
}

//初始化,创建头结点
LinkList *initList(LinkList *L)
{
    L = (LinkList *) malloc(sizeof(LinkList));//为头结点分配空间
    L->next = NULL;//头结点指针域置空
    return L;
}
//创建指定个数的单链表
LinkList *createList(int len)
{
    int i;
    ElemType e;
    LinkList *L = initList(L), *r, *n;//分别定义头指针、尾指针、新指针
    r = L;//尾指针初始化为头指针
    for(i = 0;i < len;i ++)
    {
        scanf("%d", &e);
        n = (LinkList *) malloc(sizeof(LinkList));//申请空间
        n->data = e;
        n->next = NULL;//新指针指针域置空
        r->next = n;//将新指针链入单链表末尾
        r = r->next;//尾指针往后移
    }
    return L;
}
//将元素插入指定位置
int insertLinkList(LinkList *L, int pos, ElemType e)
{
    if(pos < 1 || pos > getLen(L)+1) return 0;//插入位置错误
    LinkList *r = L, *n;
    n = (LinkList *) malloc(sizeof(LinkList));
    n->data = e;
    n->next = NULL;
    while(--pos > 0)
    {
        r = r->next;//将尾指针移动到插入位置
    }
    n->next = r->next;//先把新指针(插入值)链入尾指针后一个节点
    r->next = n;//再把新指针(插入值)链入尾指针之后
    return 1;
}
//将指定位置元素删除
int deleteLinkList(LinkList *L, int pos, ElemType *e)
{
    if(pos < 1 || pos > getLen(L)) return 0;//删除位置错误
    LinkList *r = L, *d;
    while(--pos > 0)
    {
        r = r->next;//将尾指针移动到删除位置
    }
    d = r->next;//删除元素节点
    *e = d->data;//保存删除元素值
    r->next = d->next;//将尾指针跳过删除节点链入下一个节点
    free(d);//释放删除节点
    return 1;
}
//转置单链表:采用头插法
void reverseLinkList(LinkList *L)
{
    LinkList *r, *p, *q;//定义尾指针(紧贴头指针)、欲插入指针、遍历指针
    r = L->next;//尾指针紧贴头指针
    p = q = r->next;//从第二个元素开始
    r->next = NULL;//尾指针置空
    while(q)//q相当于q != NULL
    {
        q = q->next;//遍历指针后移
        p->next = r;//欲插入指针链入尾指针之前
        L->next = p;//欲插入指针链入头指针之后
        r = p;//尾指针向前移
        p = q;//欲插入指针与遍历指针同步
    }
}
//查找指定元素,返回指定元素位序
int seachLinkList(LinkList *L, ElemType e)
{
    if(isEmpty(L)) return -1;
    int pos = 1;//位序从1开始、下标从零开始
    LinkList *r = L->next;
    while(r)
    {
        if(r->data == e) return pos;//找到指定元素,返回位序
        r = r->next;//尾指针后移
        pos ++;
    }
    return -1;//遍历完成仍未找到返回-1
}
int getLen(LinkList *L)
{
    if(L->next == NULL) return 0;//头指针指针域为空,说明单链表不含任何元素
    int len = 0;
    LinkList *r = L->next;
    while(r)
    {
        r = r->next;//尾指针后移
        len++;
    }
    return len;
}
int isEmpty(LinkList *L)
{
    return !L->next;//L->next == NULL亦可
}
void printLinkList(LinkList *L)
{
    LinkList *p;
    p = L->next;
    while(p)
    {
        printf("%d ",p->data);
        p = p->next;
    }
}




代码调试中的问题和解决过程

  • 问题1:
    编写一个使用指针的C函数,交换数组a和数组b的对应元素。
    int a[5]={1,2,3,4,5};
    int b[5]={10,20,30,40,50};
    **输出格式要求:"a[%d]=%2d, " "b[%d]=%2d, "
    程序运行示例如下:
    a[0]=10, a[1]=20, a[2]=30, a[3]=40, a[4]=50, b[0]= 1, b[1]= 2, b[2]= 3, b[3]= 4, b[4]= 5,
    我的程序:
#include <stdio.h>
#include <stdlib.h>
void C(int *pa,int *pb);
int main()
{
    int a[5]={1,2,3,4,5},b[5]={10,20,30,40,50};
    int i;
    int *pa=a;
    int *pb=b;
    C(pa,pb);
    for(i=0;i<5;i++)
    {
        printf("a[%d]=%2d,",i,a[i]);
    }
    for(i=0;i<5;i++)
    {
        printf("b[%d]=%2d,",i,b[i]);
    }
    return 0;
}

void C(int *pa,int *pb)
{
    int *temp,n;
    do
    {
        n++;
        pa++;
        pb++;
        temp=pa;
        pb=pa;
        pa=temp;
    }while(n<5);
}

错误的运行结果

  • 问题1解决方案:
    法一:
#include<stdio.h>
void change(int* a, int* b,int n);
int main()
{
    int a[5] = { 1,2,3,4,5 };
    int b[5] = { 10,20,30,40,50 };
    int i;
    change(a, b, 5);
    for (i = 0; i < 5; i++)
    {
        printf("a[%d]=%2d, ", i, *(a + i));
    }
    for (i = 0; i < 5; i++)
    {
        printf("b[%d]=%2d, ", i, *(b + i));
    }
}

void change(int* a, int* b, int n)
{
    int temp,i;
    for (i = 0; i < n; i++)
    {
        temp = *(a + i);
        *(a + i) = *(b + i);
        *(b + i) = temp;
    }
}


法二:

#include <stdio.h>
#include <stdlib.h>
void C(int *pa,int *pb);
int main()
{
    int a[5]={1,2,3,4,5},b[5]={10,20,30,40,50};
    int i;
    int *pa=a;
    int *pb=b;
    C(pa,pb);
    for(i=0;i<5;i++)
    {
        printf("a[%d]=%2d,",i,*(pa+i));
    }
    for(i=0;i<5;i++)
    {
        printf("b[%d]=%2d,",i,*(pb+i));
    }
    return 0;
}

void C(int *pa,int *pb)
{
    int temp,n=0;
    do
    {
        n++;
        temp=*pa;
        *pa=*pb;
        *pb=temp;
        pa++;
        pb++;
    }while(n<5);
}

关于问题的分析:

  • 问题二:

涉及到数学上的积分问题,不会做o(╥﹏╥)o

  • 问题二解决方案:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
float Fun1(float x);
float Fun2(float x);
float Integral(float (*f)(float), float a, float b);
 
int main()
{
   float y1,y2;
   y1=Integral(Fun1,0.0,1.0);
   y2=Integral(Fun2,0.0,3.0);
   printf("y1=%f\ny2=%f\n",y1,y2);
}
 
float Fun1(float x)
{
    return 1+x*x;
}
 
float Fun2(float x)
{
    return x/(1+x*x);
}
 
float Integral(float (*f)(float), float a, float b)
{
    int i,n=100;
    float s=0,h=0;
    h=(b-a)/n;
    s=((*f)(a)+(*f)(b))/2;
    for(i=1;i<n;i++)
    {
        s+=(*f)(a+i*h);
    }
    return s*h;
}

思路分析:

  • 问题3:

  • 问题3解决方案:

#include <stdio.h>
#include <stdlib.h>
int main() {
	int year,yearDay;
	int pMonth;
	int pDay;
	scanf("%d %d",&year,&yearDay);
	MonthDay(year,yearDay,&pMonth,&pDay);
	printf("%d %d",pMonth,pDay);
	return 0;
}
void MonthDay(int year, int yearDay, int *pMonth, int *pDay){
	int run;
	int B=31,L=30;
	if(year%100==0&&year%400==0){
		run=29;
	}
	else if(year%100!=0&&year%4==0){
		run=29;
	}
	else{
		run=28;
	}
	if(yearDay<=B){
		*pMonth=1;
		*pDay=yearDay;
	}
	else if(yearDay>B&&yearDay<=B+run){
		*pMonth=2;
		*pDay=yearDay-B;
	}
	else if(yearDay>B+run&&yearDay<=2*B+run){
		*pMonth=3;
		*pDay=yearDay-B-run;
	}
	else if(yearDay>2*B+run&&yearDay<=2*B+L+run){
		*pMonth=4;
		*pDay=yearDay-(2*B+run);
	}
	else if(yearDay>2*B+L+run&&yearDay<=3*B+L+run){
		*pMonth=5;
		*pDay=yearDay-(2*B+L+run);
	}
	else if(yearDay>3*B+L+run&&yearDay<=3*B+2*L+run){
		*pMonth=6;
		*pDay=yearDay-(3*B+L+run);
    }
	else if(yearDay>3*B+2*L+run&&yearDay<=4*B+2*L+run){
		*pMonth=7;
		*pDay=yearDay-(3*B+2*L+run);
	}
	else if(yearDay>4*B+2*L+run&&yearDay<=5*B+2*L+run){
		*pMonth=8;
		*pDay=yearDay-(4*B+2*L+run);
	}
	else if(yearDay>5*B+2*L+run&&yearDay<=5*B+3*L+run){
		*pMonth=9;
		*pDay=yearDay-(5*B+2*L+run);
	}
	else if(yearDay>5*B+3*L+run&&yearDay<=6*B+3*L+run){
		*pMonth=10;
		*pDay=yearDay-(5*B+3*L+run);
	}
	else if(yearDay>6*B+3*L+run&&yearDay<=6*B+4*L+run){
		*pMonth=11;
		*pDay=yearDay-(6*B+3*L+run);
	}
	else if(yearDay>6*B+4*L+run&&yearDay<=7*B+4*L+run){
		*pMonth=12;
		*pDay=yearDay-(6*B+4*L+run);
	}
	else{
		printf("error");
	}
}
  • 问题4:
    从键盘输入一个字符串a,将字符串a复制到字符串b中,再输出字符串b,即编程实现字符串处理函数strcpy()的功能,但要求不能使用字符串处理函数strcpy()。
    **输入提示信息:"Input a string:"
    **输入格式要求:用gets()输入字符串
    **输出格式要求:"The copy is:"
    程序的运行示例如下:
    Input a string:Hello China
    The copy is:Hello China
#include<stdio.h>
void Mystrcpy(char b[],char a[]);
int main()
{
    char a[100],b[100];
    printf("Input a string:");
    gets(a);
    Mystrcpy(b,a);
    printf("The copy is:%s",b);
    return 0;
}

void Mystrcpy(char b[],char a[])
{
    char *pa=a,*pb=b;
    while(*pa!='/0')
    {
        *pb=*pa;
        pa++;
        pb++;
    }
    *pb='/0';
}

  • 问题4解决方案:
#include<stdio.h>
#include<string.h>
void mystrcpy(char a[],char b[])
{
    int i = 0;
    while(b[i] != '\0')
    {
        a[i] = b[i];
        i++;
    }
    a[i] = '\0';
}
int main(void)
{
    char a[80],b[80];
    printf("Input a string:");
    gets(a);
    mystrcpy(b,a);
    printf("The copy is:");
    puts(b);
    return 0;
}
  • 问题5:
    用字符指针作函数参数编程实现字符串逆序存放功能。
    输入提示信息:"Input a string:"
    输入字符串用gets()
    输出提示信息:"Inversed results:%s\n"
    我的错误代码:
#include<stdio.h>
#include<string.h>
void Inverse(char *pstr);
int main()
{
    char str[100];
    char *pstr=str;
    printf("Input a string:");
    gets(str);
    Inverse(pstr);
    printf("Inversed results:%s\n",str);
}

void Inverse(char *pstr)
{
    int n,i;
    n=strlen(pstr);
    char temp;
    char *ppstr=pstr;
    while(*ppstr!='\0')
    {
        ppstr++;
    }
    for(i=0;i<n/2;i++)
    {
        temp=*pstr;
        *pstr=*ppstr;
        *ppstr=temp;
    }
}

  • 问题5解决方案:
#include<stdio.h>
#include<string.h>

//写一个函数,可以逆序一个字符串的内容。

void reverse(char* arr)
{
	int len = strlen(arr);
	char* left = arr;
	char* right = arr + len - 1;

	while(left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
	
}

int main()
{
	char arr[100] = { 0 };
	//scanf("%s", arr);//遇到空格就不再继续往下读了
	gets(arr);//读取一行 有空格也读
	reverse(arr);
	printf("%s\n", arr);
	return 0;
}

  • 问题6:
    按如下函数原型编写程序,用字符数组作函数参数编程实现字符串逆序存放功能。
    void Inverse(char str[], char ptr[]);
    输入提示信息:"Input a string:"
    输入字符串用gets()
    输出提示信息:"Inversed results:%s\n"
    我的错误代码:
#include<stdio.h>
#include<string.h>
void Inverse(char str[], char ptr[]);
int main()
{
    char str[100], ptr[100];
    printf("Input a string:");
    gets(str);
    Inverse(str, ptr);
    printf("Inversed results:%s\n", ptr);
    return 0;
}

void Inverse(char str[], char ptr[])
{
    int n = strlen(str), i = 0;
    int j = n;
    while (str[i] != '\0')
    {
        ptr[j] = str[i];
        i++;
        j--;
    }
    ptr[n + 1] = '\0';
}

  • 问题6解决方案:
#include <stdio.h>
#include<string.h>
#define N 10
 
void Inverse(char str[], char ptr[])
{
    int i;
    int len = strlen(str);
    for(i = 0; str[i] != '\0'; i++)
    {
        ptr[i] = str[len - i - 1];
    }
    ptr[i] = '\0';
}
int main()
{
    char str[N], ptr[N];
    printf("Input a string:");
    gets(str);
    Inverse(str, ptr);
    printf("Inversed results:%s\n", ptr);
    return 0;
}
  • 问题7:
    输入一行字符(第一个字符有可能是空格),用函数编程统计其中有多少单词。假设单词之间以空格分开。要求如下:
    (1)在主函数中从键盘输入字符串,字符串的最大长度为80个字符
    调用CountWords函数,并统计字符串中的单词个数。
    (2)在子函数CountWords中统计字符串中的单词个数。函数原型为:
    int CountWords(char str[]);
    (3)**输入提示信息:"Input a string:"
    **输出提示信息和格式:"Numbers of words = %d\n"
    **用gets()输入字符串
    注:不能使用指针、结构体、共用体、文件、goto、枚举类型进行编程。
    我的错误代码:
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int CountWords(char str[]);
int main()
{
    char str[80];
    int num;
    printf("Input a string:");
    gets(str);
    num=CountWords(str);
    printf("Numbers of words = %d\n",num);
    return 0;
}

int CountWords(char str[])
{
    int i,counter;
    if(str[0]!=32)
    {
    counter=1;
    for(i=0;str[i]!='\0';i++)
    {
        if(str[i]==32)
        {
            counter++;
        }

    }
    }
    else
    {
        counter=0;
        for(i=0;str[i]!='\0';i++)
    {
        if(str[i]==32)
        {
            counter++;
        }

    }
    }
    return counter;
}

错误原因截图:

没有办法解决单词中间有很多空格的计单词数量的问题

  • 问题7解决方案:
#include <stdio.h>
#include <string.h>
 
int CountWords(char str[]);
 
int main()
{
    int n;
    char s[80];
    printf("Input a string:");
    gets(s);
    n=CountWords(s);
    printf("Numbers of words = %d\n",n);
}
 
int CountWords(char str[])
{
    int  i, num;
    num = (str[0] != ' ') ? 1 : 0;//1
    for (i = 1; str[i] != '\0'; i++)//1
    {
        if (str[i] != ' ' && str[i - 1] == ' ')//巧妙地解决了单词中间有很多个空格的问题。
        {
            num++;//1
        }
    }
    return num;
}
  • 问题8:
    从键盘输入n个整数,用函数编程实现最大值和最小值的交换,并打印结果。
    要求:数据的输入、输出在主函数中完成;最大值和最小值的交换在子函数中完成。
    函数原型如下:
    int MySwap(int s[], int n) 或
    int MySwap(int *s, int n)
    **输入格式要求:"%d"
    提示信息:"Input n(n<=10):" "Input %d numbers:\n"
    **输出结果格式要求:"%5d"
    提示信息:"Exchange results:\n"
    程序运行示例如下:
    Input n(n<=10):7
    Input 7 numbers:
    4 7 99 5 4 -1 8
    Exchange results:
    4 7 -1 5 4 99 8

错误截图:

我的错误代码:

#include<stdio.h>
int MySwap(int s[],int n);
int main()
{
    int n,s[10];
    printf("Input n(n<=10):");
    scanf("%d",&n);
    printf("Input %d numbers:\n",n);
    int i;
    for(i=0;i<n;i++)
    {
        scanf("%d",&s[i]);
    }
    MySwap(s,n);
    printf("Exchange results:\n");
    for(i=0;i<n;i++)
    {
        printf("%5d",s[i]);
    }
    return 0;
}

int MySwap(int s[],int n)
{
    int i,j,temp;
    int max=s[0],min=s[0],pmax=0,pmin=0;
    for(i=0;i<n;i++)
    {
        if(max<s[i])
        {
            max=s[i];
            pmax=i;

        }
    }
    for(j=0;j<n;j++)
    {
        if(min>s[i])
        {
            min=s[i];
            pmin=i;
        }
    }
    temp=s[pmin];
    s[pmin]=s[pmax];
    s[pmax]=temp;
    return 0;
}

  • 问题8解决方案:
#include<stdio.h>
#define N 10
void PrintData(int a[], int n);
void  MaxMinExchang(int a[], int n);
void ReadData(int a[], int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
}
main(void)
{
    int n;
    int a[N];
    printf("Input n(n<=10):\n");
    scanf("%d",&n);
    printf("Input %d numbers:\n",n);
    ReadData(a,n);
    MaxMinExchang(a,n);
    printf("Exchange results:\n");
    PrintData(a,n);
}
void  MaxMinExchang(int a[], int n)
{
    int max=0,min=0,temp,j,x;
    for(j=1;j<n;j++)
    {
        if(a[j]>a[max])
        max=j;
    }
    for(x=1;x<n;x++)
    {
        if(a[x]<a[min])
        min=x;
    }
    temp=a[max];
    a[max]=a[min];
    a[min]=temp;
}
void PrintData(int a[], int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%5d",a[i]);
    }
}
  • 问题9:
    按如下函数原型,用二维数组作为函数参数,编程计算并输出n×n阶矩阵的转置矩阵。
    其中,n由用户从键盘输入。已知n值不超过10。
    void Transpose(int a[][N], int n);
    void InputMatrix(int a[][N], int n);
    void PrintMatrix(int a[][N], int n);
    **输入提示信息要求:"Input n:\n" "Input %d*%d matrix:\n"
    **输入格式:"%d"
    **输出提示信息:"The transposed matrix is:\n"
    **输出要求:"%d\t"
    输出矩阵时,每输出一行就换行
    注:不能使用指针、结构体、共用体、文件、goto、枚举类型进行编程。
    我的错误代码:
#include<stdio.h>
#define N 10
void Transpose(int a[][N], int n);
void InputMatrix(int a[][N], int n);
void PrintMatrix(int a[][N], int n);
int main()
{
    int matrix[10][10],n;
    printf("Input n:\n");
    scanf("%d",&n);
    InputMatrix(matrix,n);
    Transpose(matrix,n);
    PrintMatrix(matrix,n);
}

void Transpose(int a[][N], int n)
{
    int i,j,b[n][n];
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            a[i][j]=b[i][j];
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            a[j][i]=b[i][j];
        }
    }
}

void InputMatrix(int a[][N], int n)
{
    int i,j;
    printf("Input %d*%d matrix:\n",n,n);
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
}

void PrintMatrix(int a[][N], int n)
{
    int i,j;
    printf("The transposed matrix is:\n");
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("%d\t",a[i][j]);
        }
        printf("\n");
    }
}

  • 问题9解决方案:
 
#include <stdio.h>
#define N 10
void Transpose(int a[][N], int n);
void InputMatrix(int a[][N], int n);
void PrintMatrix(int a[][N], int n);
main() 
{                      
int s[N][N], n;
printf("Input n:\n");
scanf("%d", &n);
InputMatrix(s, n);//1
Transpose(s, n);//1
printf("The transposed matrix is:\n");
PrintMatrix(s, n);//1
}                      
void Transpose(int a[][N], int n) 
{                      
int i, j, temp;
for (i = 0; i < n; i++) //1
{                      
    for (j = i; j < n; j++)//1 
    {                      
        temp = a[i][j];//1
        a[i][j] = a[j][i];//1
        a[j][i] = temp;//1
    }
}
}                      
void InputMatrix(int a[][N], int n) {                      
int i, j;
printf("Input %d*%d matrix:\n", n, n);
for (i = 0; i < n; i++) //1
{                      
    for (j = 0; j < n; j++)//1 
    {                      
        scanf("%d", &a[i][j]);//1
    }
}
}                      
void PrintMatrix(int a[][N], int n) 
{                      
int i, j;
for (i = 0; i < n; i++) //1
{                      
    for (j = 0; j < n; j++) //1
    {                      
        printf("%d\t", a[i][j]);//1
    }
    printf("\n");//1
}
}

  • 问题10:
    用字符指针作函数参数编程实现在字符串每个字符间插入一个空格的功能。
    **输入提示信息:"Input a string:"
    **输入格式要求:"%s"
    **输出格式要求:"Insert results:%s\n"
    程序运行示例1如下:
    Input a string:Howareyou
    Insert results:H o w a r e y o u
#include<stdio.h>
#include<string.h>
int main()
{
    char str[100],copy[200];
    printf("Input a string:");
    gets(str);
    int i,num;
    num=strlen(str);
    for(i=0;i<num;i++)
    {
        copy[2*i+1]=str[i];
        copy[2*i+2]=' ';
    }
    copy[2*i+2]='\0';
    printf("Insert results:%s\n",copy);
}

  • 问题10解决方案:
#include <stdio.h>
#include <stdlib.h>
#define N 100
 
void EmbedSpace(char *str);
int main()
{
    char str[N];
    printf("please input string: ");
    gets(str);
    printf("output string: ");
    EmbedSpace(str);
    return 0;
}
 
 
void EmbedSpace(char *str)
{
    char temp[N];
    int i,j;
    for(i = 0,j = 0 ; *(str+i) != '\0'; i++ ,j++)
    {
            if(*(str+i) != ' ' && *(str+i+1) != ' ')
            {
                *(temp+j) = *(str+i);
                j++ ;
                *(temp+j)  = ' ';
 
            }
            if(*(str+i) != ' ' && *(str+i+1) == ' ')
            {
                *(temp+j)  = *(str+i);
                j++;
                i++;
               *(temp+j)  = *(str+i);
            }
    }
    *(temp+j)  = '\0';
    puts(temp);
}

上周考试错题总结

上周没有考试

其他(感悟、思考等)

学习进度条

博客量(新增/累计) 代码行数(新增/累计) 学习时间(新增/累计) 重要成长
目标 70 3000 300
第一周 2/2 0 10/10 开始学习写博客
第二周 1/3 300/300 20/30 学习如何自主预习,初识信息安全专业
第三周 6/9 250/550 20/50 各种进制表数方法
第四周 1/10 50/600 15/65 逻辑电路
第五周 3/13 100/700 10/75 博客排版和编辑走上正轨
第六周 1/14 100/800 10/85 解决问题的Polya新思想 ,选择结构
第七周 1/15 300/1100 20/105 抽象数据类型,循环结构
第八周 2/17 150/1250 20/125 函数的定义,不同范型的编程语言
第九周 1/18 300/1550 20/145 数组,函数,操作系统,文件系统和目录
第十周 1/18 300/1850 10/155 二维数组
第十一周 1/19 500/2350 10/165 指针
第十二周 1/20 300/2650 10/175 字符串,字符数组
第十三周 1/21 700/3350 20/195 结构体与链表
posted @ 2022-11-27 15:31  20221320冯泰瑞  阅读(55)  评论(0编辑  收藏  举报