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

文章目录

一、 实验目的和要求

(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;
}

② 程序运行结果截图:

相关推荐
凌~风18 天前
004-计算机接口实验报告之8254定时计数器!
实验报告·计算机接口·8254定时计数器
亦是远方20 天前
南京邮电大学使用计算机求解问题实验一(C语言简单编程练习)
c语言·开发语言·实验报告·南京邮电大学
凌~风2 个月前
数据库原理实验报告:在ider里搭建mysql数据库
数据库·mysql·实验报告
hour_go2 个月前
Linux Shell 实验一:数据采集与脚本调试错误总结
linux·笔记·bash·shell·实验报告·错误排查
万能小锦鲤4 个月前
《计算机网络安全》实验报告一 现代网络安全挑战 拒绝服务与分布式拒绝服务攻击的演变与防御策略(3)
实验报告·文档资源·计算机网络安全
万能小锦鲤4 个月前
《计算机网络安全》实验报告一 现代网络安全挑战 拒绝服务与分布式拒绝服务攻击的演变与防御策略(2)
实验报告·文档资源·计算机网络安全
万能小锦鲤4 个月前
《计算机网络安全》实验报告一 现代网络安全挑战 拒绝服务与分布式拒绝服务攻击的演变与防御策略(1)
ddos·dos·实验报告·文档资源·计算机网络安全
万能小锦鲤4 个月前
《软件工程导论》实验报告五 设计建模工具的使用(一)类图
软件工程·类图·实验报告·boardmix·文档资源
万能小锦鲤4 个月前
《软件工程导论》实验报告一 软件工程文档
软件工程·软件工程导论·实验报告·软件工程文档