• 第五周编程总结



    7-1 统计一行文本的单词个数 (15 分)
    本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。

    输入格式:
    输入给出一行字符。

    输出格式:
    在一行中输出单词个数。

    输入样例:
    Let's go to room 209.
    输出样例:
    5
    实验代码:

    #include<stdio.h>
    #include<string.h>
    int main(void)
    {
    char ch[1000];
    int num,i,j;
    char c;
    gets(ch);
    j=0;
    for(i=0;(c=ch[i])!='';i++)
    {
        if(c==' ') 
        {
            j=0;
        }
        else if(j==0)
        {
            j=1;
            num++; 
        } 
        } 
        printf("%d",num);
        return 0;
    }
    

    实验思路:用两变量分别表示单词数和表示该字符是否是单词,对是否是空格进行判断累加统计结果。
    思维导图:
    实验所遇问题:老师提供了另一种思路,自己写的时候,首先不太明白字符函数的定义符,比如说用gets()输入字符串,还有不明白用什么确定带 ' 字符算一个单词(这是最主要的问题)然后看老师的思维导图和代码解决了这些问题。
    实验结果截图:
    预习题的选择题:1.2-1
    下列语句定义 x 为指向 int 类型变量 a 的指针,正确的是()。 (2分)

    int a, *x = a;
    int a, *x = &a;
    int *x = &a, a;
    int a, x = a;
    确定指针的定义方法。

    2-2
    int *p 的含义是 (2分)

    p是一个指针, 用来存放一个整型数
    p是一个指针, 用来存放一个整型数据在内存中的地址
    p是一个整型变量
    以上都不对
    所关知识:int p; //首先从P 处开始,先与结合,所以说明P 是一个指针,然后再与int 结合,说明指针所指向的内容的类型为int 型.所以P是一个返回整型数据的指针
    2-3
    如果有定义:int m, n = 5, *p = &m; 与m = n 等价的语句是 () 。 (1分)

    m = *p;
    *p = *&n;
    m = &n;
    m = **p;
    作者: 张泳
    单位: 浙江大学城市学院
    2-4
    变量的指针,其含义是指该变量的( 地址)。 (1分)


    地址

    一个标志

    2-5
    有如下程序段

    int p,a=10,b=1;
    p=&a; a=
    p + b;
    执行该程序段后,a的值是 (2分)

    12
    11
    10
    编译出错
    作者: 李廷元
    单位: 中国民用航空飞行学院
    2-6
    对于下列程序,正确的是() 。 (2分)

    void f(int *p)
    {
    *p = 5;
    }
    int main(void)
    {
    int a, *p;

      a = 10;
      p = &a;
      f(p);
      printf(“%d”, (*p)++);
    
      return 0;
    

    }
    5
    6
    10
    11
    作者: 张泳
    单位: 浙江大学城市学院
    2-7
    执行如下程序段,打印输出的内容是: (2分)

    #include <stdio.h>
    void fun (int c, int *d) {
               c++;
              (*d)++;
    }
     int main ( ){
    int a=5, b=9;
    fun(a, &b);
    printf("%d, %d", a, b);
    return 0;
    }
    

    5, 9
    6, 10
    5, 10
    6, 9
    有关知识:指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区 指针的类型:
    (1)intptr;//指针的类型是int
    (2)charptr;//指针的类型是char
    (3)intptr;//指针的类型是int
    (4)int(ptr)[3];//指针的类型是int()[3]
    (5)int(ptr)[4];//指针的类型是int()[4]
    指针的值----或者叫指针所指向的内存区或地址 /强制类型转换并不会改变a 的类型 &是取地址运算符,是间接运算符。
    &a 的运算结果是一个指针,指针的类型是a 的类型加个
    ,指针所指向的类型是a 的类型,指针所指向的地址嘛,那就是a 的地址。
    p 的运算结果就五花八门了。总之p 的结果是p 所指向的东西,这个东西有这些特点:它的类型是p 指向的类型,它所占用的地址是p所指向的地址。
    7-1 英文单词排序 (25 分)
    本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。

    输入格式:
    输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。

    输出格式:
    输出为排序后的结果,每个单词后面都额外输出一个空格。

    输入样例:
    blue
    red
    yellow
    green
    purple

    输出样例:
    red blue green yellow purple
    实验代码:

    #include<stdio.h>
    #include<string.h>
    int main (void){
    char a[21][20],b[20],c[20];
    int i,j,q=0;
    while(1){
    scanf("%s",c);
    if(c[0]=='#'){
    	break;
    }
    else{
    	strcpy(a[q],c);
    	q++;
    }
    }
    for(i=0;i<q-1;i++)
      for(j=0;j<q-1-i;j++){
      	if(strlen (a[j])>strlen(a[j+1])){
           strcpy(b,a[j]);
               strcpy(a[j],a[j+1]);
               strcpy(a[j+1],b);
    
    	  }  	
      }
    for(i=0;i<q;i++){
    	printf("%s ",a[i]);
    	}
        return 0;
    }
    

    实验思路:先对c[0]=='#'这种情况进行判断,然后运用冒泡法思维进行排序(需要运用字符中的一些函数名)如strcpy函数名---进行字符串的复制;strlen计算字符的长度(不包括‘'),最后用个循环对结果进行输出。不过此代码有借鉴情况原代码地址:matthew_Leung https://blog.csdn.net/mathew_leung/article/details/80382098。
    思维导图:
    实验所遇问题:首先没法在第一次运行代码时只能输入一个单词;后来经过调试发现是因为最初的scanf没有写在while之中,
    后来遇到的问题是运用数组定值来进行冒泡法排序时char类型的字符没法给数组赋值,哪怕用两个变量分别给定记录j和j+1字符串的长度也没用,然后在书p348将字符串操作函数仔细的看了之后,改用直接定义三个char类型的数组,数组的赋值运用strcpy进行字符串的赋值(复制)。同时自己打的时候虽然考虑到了第一个字符即为#的情况但没有在前面加上while循环,所以一直不得头绪,在借鉴了他人博客后才理解并解决这个问题。还有一些在写代码中的编译错误就太多了。
    实验结果截图:
    挑战题:
    实验代码:

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    int main (void){
    FILE*fp;
    char a[21][20],b[20],c[20];
    int i,j,q=0;
        if((fp=fopen("F:\xiesimin\123.txt","a+"))==NULL)
    {
    	printf("File open erorr!
    ");
    	exit(0);
    }
    	while(1){
        fscanf(fp,"%s",c[20]);
    if(c[0]=='39'){
    	break;
    }else{
    	strcpy(a[q],c);
    	q++;
    }
    for(i=0;i<q-1;i++){
      for(j=0;j<q-1-i;j++){
      	if(strlen (a[j])>strlen(a[j+1])){
      		       strcpy(b,a[j]);
               strcpy(a[j],a[j+1]);
               strcpy(a[j+1],b);
    
    	  }
      	}
      }
    for(i=0;i<q;i++){
    		printf("%s ",a[i]);
    		fprintf(fp,"%s 
    ",a[i]);
    }
    return 0;
        }	
    }
    

    实验思路用文件“a+”进行读取写入就好。
    实验结果截图:

    结对编程的感悟:结对编程能让我们相互讨论,然后也更容易发现代码中的错误,也让编程比较轻松些。
    !

    学习感悟:编写代码实在是需要静下心来慢慢想,不能过于急躁和求快;最好先在纸上将流程图大概画出来。

  • 相关阅读:
    DataGridView在vb.net中的操作技巧
    0、(空字串)、Null、Empty、与Nothing的区别
    System.Timers.Timer与System.Windows.Forms.Timer 区别
    C#判断常见类型格式是否正确的类
    C#对系统注册表操作的类
    Socket基础知识分享
    怎样才能充分利用SQL索引
    通过建立Socket连接来快速判断数据库连接是否正确
    C#中各种数据类型转换的方法的类
    VB.Net C#代码转换工具
  • 原文地址:https://www.cnblogs.com/fengmixinluo/p/10618220.html
Copyright © 2020-2023  润新知