南京邮电大学使用计算机求解问题实验二(选择与循环结构编程练习)

文章目录

一、 实验目的和要求

(1)能正确选择使用if语句和switch语句实现选择结构的程序设计。

(2)正确使用while、for、do...while语句实现循环结构的程序设计。

(3)会利用循环嵌套实现较复杂的程序控制,理解循环嵌套程序的执行过程和条件的变化。

(4)利用调试器跟踪、调试程序,会设置断点、单步跟踪,查看相应的变量或表达式的值,帮助理解循环、选择结构程序执行过程并能查找、修改逻辑错误。

二、实验环境(实验设备)

硬件:微型计算机

在线平台:PTA

自备软件:VS / VS Code / Dev-C++ / 等

三、实验原理及内容

实验内容:实验二的题目选自实验指导书的实验3和实验4。

补充说明:先在自己电脑完成程序,自行准备多组数据进行运行测试,可使用调试工具;将已完成的代码复制到PTA平台相对于的实验作业集进行在线测评。

实验题目(1):编写程序exp2_1.c,计算三角形面积和周长。

根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:

,其中s=(a+b+c)/2。

输入格式:输入为3个正整数,分别代表三角形的3条边a、b、c。

输出格式:如果输入的边能构成一个三角形,则在一行内,按照 area = 面积; perimeter = 周长 的格式输出,保留两位小数。否则,输出 These sides do not correspond to a valid triangle

实验解答:

① 源程序代码如下:

c 复制代码
#include <stdio.h>
#include <math.h>
int main(){
    int a,b,c,temp;
    double area,s,perimeter;
    scanf("%d%d%d",&a,&b,&c);
    if(a>b){
        temp=a;
        a=b;
		b=temp;
    }if(b>c){
        temp=b;
        b=c;
		c=temp;
    }if(a>c){
        temp=a;
        a=c;
		c=temp;
    }
    if(a+b>c){
        s=(a+b+c)/2.0;
        area=sqrt(s*(s-a)*(s-b)*(s-c));
        perimeter=a+b+c;
        printf("area = %.2f; perimeter = %.2f",area,perimeter);
    }else{
        printf("These sides do not correspond to a valid triangle");
    }
	return 0;
}

② 程序运行结果截图:

实验题目(2):编写程序exp2_2.c,统计输入信息中各种字符的个数。

输入n个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。

输入格式:输入在第一行中给出正整数n,第二行输入n个字符,最后一个回车表示输入结束,不算在内。

输出格式:在一行内按照 letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数 的格式输出。请注意,等号的左右各有一个空格,逗号后有一个空格。

本程序易错点提示:

首先读取整数n,会有一个回车留在输入缓冲区,按题意接下来读取n个字符,是不包括这个回车的,所以,程序应该:

1-读取整数n

2-清除输入缓冲区:getchar()

3-循环N次,每次读取一个字符,然后进行判断统计

实验解答:

① 源程序代码如下:

c 复制代码
#include <stdio.h>
int main(void)
{
   int N, letter = 0, digit = 0, other = 0, blank = 0, i;
   char ch;
   scanf("%d", &N);
   getchar();
   for(i = 0; i < N; i++){
	   ch =  getchar();
	   if((ch >= 'a'&&ch <= 'z')||(ch >= 'A'&&ch <= 'Z')){
		   letter++;
	   }else if(ch >= '0'&&ch <= '9'){
		   digit++;
	   }else if(ch == ' '||ch == '\n'){
           blank++;
       }else{
		   other++;
	   }
   }
   printf("letter = %d, blank = %d, digit = %d, other = %d", letter, blank, digit, other);

   return 0;
}

② 程序运行结果截图:

实验题目(3):编写程序exp2_3.c,求e的近似值。

自然常数 e 可以用级数 1 + 1/1! + 1/2! + ⋯ + 1/n! + ⋯ 来近似计算。输入一个非负整数 n,求该级数的前 n+1 项和。

输入格式:输入一个非负整数 n。

输出格式:输出结果保留小数点后八位。

实验解答:

① 源程序代码如下:

c 复制代码
#include <stdio.h>
int main(){
    int n,i;
    double term = 1,sum = 1;
    scanf("%d",&n);
    for(i = 1;i <= n;i++){
        term = term/i;
        sum = sum+term;
    }
    printf("%.8f",sum);
    return 0;
}

② 程序运行结果截图:

实验题目(4):编写程序exp2_4.c,输出n行由大写字母A开始构成的三角形字符阵列。

输入格式:输入一个正整数n(1≤n<7)。

输出格式:输出n行由大写字母A开始构成的三角形字符阵列,其中每个字母后面都有一个空格。

实验解答:

① 源程序代码如下:

c 复制代码
#include <stdio.h>
int main(){
    int n,i,j;
    int ch = 'A';
	scanf("%d",&n);
    for(i = 0;i < n;i++){
        for(j =  0;j < n - i;j++){
            printf("%c ",ch++);
        }
        printf("\n");
    }
    return 0;
}

② 程序运行结果截图:

实验题目(5):编写程序exp2_5.c,验证"哥德巴赫猜想"。

任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。

输入格式:输入一个(2, 2 000 000 000]范围内的偶数n。

输出格式:在一行中按照格式"n = p + q"输出n的素数分解,其中p ≤ q均为素数。这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。

实验解答:

① 源程序代码如下:

c 复制代码
#include <stdio.h>
#include <math.h>
int isprime(int a){
    int flag,i,limit;
    if(a <= 1){
        flag = 0;
    }else if(a == 2){
        flag = 1;
    }else{
        flag = 1;
        limit = sqrt(a) + 1;
        for(i = 2;i <= limit;i++){
            if(a%i ==0){
            flag = 0;
            break;
            }
        }
    }
    return flag;
}
int main(){
    int N,p,q;
    scanf("%d",&N);
    for(p = 2;p <= N; p++){
        q = N - p;
        if(isprime(p)&&isprime(q)){
            printf("%d = %d + %d\n",N,p,q);
            break;
        }
    }
    return 0;
}

② 程序运行结果截图:

相关推荐
凌~风1 个月前
数据库原理实验报告:在ider里搭建mysql数据库
数据库·mysql·实验报告
hour_go2 个月前
Linux Shell 实验一:数据采集与脚本调试错误总结
linux·笔记·bash·shell·实验报告·错误排查
万能小锦鲤3 个月前
《计算机网络安全》实验报告一 现代网络安全挑战 拒绝服务与分布式拒绝服务攻击的演变与防御策略(3)
实验报告·文档资源·计算机网络安全
万能小锦鲤3 个月前
《计算机网络安全》实验报告一 现代网络安全挑战 拒绝服务与分布式拒绝服务攻击的演变与防御策略(2)
实验报告·文档资源·计算机网络安全
万能小锦鲤3 个月前
《计算机网络安全》实验报告一 现代网络安全挑战 拒绝服务与分布式拒绝服务攻击的演变与防御策略(1)
ddos·dos·实验报告·文档资源·计算机网络安全
万能小锦鲤4 个月前
《软件工程导论》实验报告五 设计建模工具的使用(一)类图
软件工程·类图·实验报告·boardmix·文档资源
万能小锦鲤4 个月前
《软件工程导论》实验报告一 软件工程文档
软件工程·软件工程导论·实验报告·软件工程文档
万能小锦鲤4 个月前
《软件测试与质量控制》实验报告三 系统功能测试
功能测试·禅道·实验报告·文档资源·软件测试与质量控制
万能小锦鲤4 个月前
《软件测试与质量控制》实验报告二 单元测试
junit·eclipse·单元测试·测试用例·实验报告·软件测试与质量控制