辅修C 语言练习实验报告

 

辅修C 语言练习实验报告

 

一.题目分析

 

题目一

 

7-25 求幂之和(15 分)

 

本题要求编写程序,计算sum=2​1​​+2​2​​+2​3​​+⋯+2​n​​。可以调用pow函数求幂。

 

输入格式:

 

输入在一行中给出正整数n≤10)。

 

输出格式:

 

按照格式“result = 计算结果”输出。

 

  1. 本题pta提交列表:

 

 

 

  1. 设计思路(流程图)

 

 

 

 

 

 

最终程序如下:

 

#include<stdio.h>

 

#include<math.h>

 

int main(){

 

int i,n,result=0;

 

    scanf("%d",&n);

 

    for(i=1;i<=n;i++)

 

    result+=pow(2,i);

 

    printf("result = %d",result);

 

}

 

  1. 本题调试结果

 

 

 

本题在编程中算是十分简单的一题了,注意好细节便不会有什么太大的问题。因为使用到pow这个数学函数,所以头定义要加上 #include<math.h>

 

 

 

 

 

 

 

题目二

 

7-14 特殊a串数列求和(20 分)

 

给定两个均不超过9的正整数an,要求编写程序求a+aa+aaa++⋯+aaana)之和。

 

输入格式:

 

输入在一行中给出不超过9的正整数an

 

输出格式:

 

在一行中按照“s = 对应的和”的格式输出。

 

  1. 本题 pta提交列表:

 

 

 

  1. 设计思路(包括流程图)

最终程序如下

 

#include<stdio.h>

 

int main()  

 

{  

 

    int a,n;   

 

    int sum=0;  

 

    scanf("%d %d",&a,&n);

 

    int k=a;  

 

    for(int i=1;i<=n-1;i++)  

 

    {  

 

        a*=10;  

 

        a+=k;  

 

        sum+=a;  

 

    }  

 

  sum+=k;

 

  printf("s = %d",sum) ;

 

  

 

    return 0;  

 

}  

 

  1. 本题的调试结果为:

 

 

 

与样例结果一致

 

  1. 实验过程中遇到的问题以及解决方法

 

  这题难度较上一题难度稍大一点。但是由于程序写的较少,还比较生疏,造成了失误以至于浪费了很多时间来寻找错误。

 

在原本的程序中,我把 int k=a;放在了scanf("%d %d",&a,&n);前面,以至于运行结果严重出错,还一直苦思冥想找不到原因。后来两者顺序对调一下便没有什么问题了。

 

从这题 谨记!!!!数字的输入应先放在前面,后面的变量再调用这个数,否则程序会错的很离谱。

 

      

 

题目三:

 

7-3 统计字符(15 分)

 

本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。

 

输入格式:

 

输入为10个字符。最后一个回车表示输入结束,不算在内。

 

输出格式:

 

在一行内按照

 

letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数

 

的格式输出。

 

  1. 本题pta提交列表

 

 

 

2.设计思路(流程图)

 

 最终程序为:#include<stdio.h>

 

int main()

 

{

 

char en[10];

 

 

 

    int i,letter=0,blank=0,digit=0,other=0;

 

    for(i=0;i<10;i++)

 

    en[i]=getchar();

 

    for(i=0;i<10;i++){

 

    if((en[i]>='a'&&en[i]<='z')||(en[i]>='A'&&en[i]<='Z'))

 

    letter++;

 

    else if(en[i]== ' '||en[i]== '\n')

 

    blank++;

 

    else if(en[i]>= '0'&&en[i]<= '9')

 

    digit++;

 

    else

 

    other++;

 

 

 

}

 

    printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other);

 

}

 

  1. 本题调试结果:

 

 

 

与样例一致

 

  1. 题目分析

 

   本题难度一般,就是过程较为繁琐。

 

利用for 语句以及getchar 给字符型数组赋值,判断一个字符是数字、大写字母、小写字母或者其他主要依据于ASCII码值。只要记清楚每种字符类型对应的ASCII码值的范围,在利用if语句判断。问题不大。

 

 本题除了一些小细节,没有出现什么需要特别注意以及很难解决的问题。

 

 

 

 

 

 

 

二.同学代码互评(例7-20 同学:王纪聪)

 

  我的代码:

 

同学的代码:

 

 

 

代码互评:虽然两个同学的代码看起来有所差异,但实际上思路差不多一样。两个同学都采用了循环,唯一不同的是,我判断的是命题的真假。两个人的方法都很方便快捷。

 

 

 

三.总结

 

  1. 我学会了什么?

 

 

 

从以上三题中,我更加熟练的掌握了for 循环语句,if判断语句的应用 以及了解了数组的使用。更加清晰的记住了数字,大写字母,小写字母对应的ASCII值。以及十分值得记住的由第二个题目得知的——实验要先输入数,才能对数进行调用。

 

  1. 这些内容,还有那些不会?

 

数组的掌握可能还不够娴熟。基本知识都懂,在运用上面可能就存在比较大的问题。实验中使用到的参数类型大部分为整型,长整型、浮点型之类的接触较少。我会尽量多花时间,多练习,以便能够更加熟练的掌握知识点。

 

posted @ 2017-12-29 09:25  宇凡YF  阅读(4442)  评论(1编辑  收藏  举报