高级语言程序设计课程第四次个人作业

前置说明

  1. 这个作业属于 2026 级高级语言程序设计课程 : https://edu.cnblogs.com/campus/fzu/2026gjyycxsj
  2. 这个作业的要求:https://edu.cnblogs.com/campus/fzu/2026gjyycxsj/homework/16750
  3. 学号:0102600227
  4. 姓名:傅铄城

补充上一次作业的运算优先级说明

优先级 运算符 名称 含义 / 作用
高 () 函数调用 / 括号 改变运算顺序;调用函数
[] 下标 数组取元素:a[i]
++ 自增 变量加 1(前置先加后用,后置先用后加)
-- 自减 变量减 1(同理)
! 逻辑非 真变假、假变真:!0 为 1
~ 按位取反 0 变 1、1 变 0(二进制位)
-(一元) 负号 取相反数:-5
*(一元) 解引用 通过指针取它指向的值:*p
&(一元) 取地址 取变量的地址:&a
sizeof 求大小 返回类型/变量占的字节数:sizeof(int)
* / % 乘、除、取模 5/2=2,5%2=1(取余数)
+ -(二元) 加、减 普通四则运算
<< >> 左移、右移 二进制位整体左/右移:1<<3 得 8
< <= > >= 关系比较 结果为 1(真)或 0(假)
== != 等于、不等于 判断是否相等,结果 1 或 0
&(二元) 按位与 对应位都为 1 才为 1
^ 按位异或 对应位不同为 1(同 0 异 1)
| 按位或 对应位有 1 就为 1
&& 逻辑与 两边都真才真;左边为假右边不算(短路)
|| 逻辑或 有一边真就真;左边为真右边不算(短路)
?: 条件运算符 条件 ? 值1 : 值2,唯一三目运算符
= += -= 等 赋值 把右边赋给左边;a+=b 即 a=a+b
低 , 逗号 顺序求值,整个式子的值取最后一个

本次作业内容

程序改错或运行输出

  1. #include<stdio.h>
    int main(void) // 对用户输入的整数求和
    {  long num;    long sum = 0L;      int status;
    	printf("Please enter an integer to be summed ");
    	printf("(press 'q' to quit): ");
    	status = scanf("%ld", &num);//scanf的返回值是成功读入的变量的个数 
    	while (status == 1)  // == means "is equal to"   
    	{   sum = sum + num; //这是一个累加器 
    		printf("Please enter next integer (press 'q' to quit): ");
    		status = scanf("%ld", &num); //重新判断输入是否有效 
    	}
    	printf("Those integers' sum to %ld.\n", sum);
    	return 0;
    }
    

    终端情况: image

  2. #include <math.h>
    #include <stdio.h>
    int main(void)
    {   const double ANSWER = 3.14159; // const 表示一个只读常量
    	double response;
    	printf("What is the value of pi?\n");
    	scanf("%lf", &response);
    	while (fabs(response - ANSWER) > 0.0001) //判断误差是否于可接受范围
    	{  printf("Try again!\n");
    		scanf("%lf", &response);
    	}
    	printf("Close enough!\n");
    	 return 0;
    }
    

    终端情况:image

程序自主设计

  1. while 与 do ... while.
    #include<bits/stdc++.h>
    using namepace std;
    int main(){
    double i=1.0,ans=0,pi;
    int f=1;
    while(1.0/i>=0.0001){
    ans+=1.0*f/i;
    f=-f;
    i+=2;
    }
    pi=4.0*ans;
    cout<<pi<<endl;
    return 0;
    }
    
    而另一种形式:
    #include<stdio.h>
    int main(void){
    double i=1.0,ans=0,pi;
    int f=1;
    do{
    ans+=1.0*f/i;
    f=-f;
    i+=2;
    }while(1.0/i>=0.0001)
    pi=4.0*ans;
    printf("%lf\n",pi);
    return 0;
    }
    
    -区别在于 do-while 结构会先运行一次内部代码 终端页面如下: image
  2. 设计一个程序,实现功能:逻辑表达式中的运算符,只有会影响表达式求值时,才会执行。
#include<stdio.h>
#include<stdbool.h>
int main(void){
	int a=1,b=0,c,d;
	bool t,f;
	t=a>=b;
	if(t || b++) c=5*a;
	else b=t;
	f= b && c++;
	d= (a++) + (f++);
	printf("a=%d b=%d c=%d d=%d\nt=%d f=%d",a,b,c,d,t,f);
	return 0;
}
  • 终端界面 image
  1. 用for循环输出六行,第一行有FEDCBA,第二行是FEDCB,第三行是FEDC....,以此类推。
#include<stdio.h>
#include<string.h
int main(void){
	char c[]="ABCDEF";
	for(int i=0;i<strlen(c);i++){
		for(int j=strlen(c);j>0;j--){
			printf("%c",c[j-i]);
		}
		printf("\n");
	}
	return 0;
}

终端结果:image
4. 编程输入n, 计算s=1+(1+2)+(1+2+3)+…+(1+2+3+4+…n)。、

#include<stdio.h>
int main(void){
	int n,ans=0;
	scanf("%d",&n);
	int a[100];
	for(int i=1;i<=n;i++){
		a[i]=i*(i+1)/2;
	}
	for(int i=1;i<=n;i++){
		ans+=a[i];
	}
	printf("%d",ans);
	return 0;
}

终端结果: image
5. 用for循环给一组整型类型的数组进行赋值,输出,以及求和,数组长度为8。

#include <stdio.h>

int main() {
    int a[8], sum = 0;

    for (int i = 0; i < 8; i++) {
        a[i] = i + 1;
        sum += a[i];
    }

    printf("数组: ");
    for (int i = 0; i < 8; i++) printf("%d ", a[i]);
    printf("\n所有元素的和为: %d\n", sum);

    return 0;
}
  1. 设计一个if和else的多分支程序(分支数目大于3),该多分支程序再用switch语句进行改写,同时设计一个使用条件运算符(?:)的双分支语句。
#include <stdio.h>
//本程序设计为成绩的等级划分
int main() {
    int score;
    printf("输入成绩: ");
    scanf("%d", &score);

    // if-else 
    char grade;
    if (score >= 90) grade = 'A';
    else if (score >= 80) grade = 'B';
    else if (score >= 70) grade = 'C';
    else if (score >= 60) grade = 'D';
    else grade = 'E';
    printf("if-else 计算的等级: %c\n", grade);

    // switch 
    switch (score / 10) {
        case 10: case 9: grade = 'A'; break;
        case 8:  grade = 'B'; break;
        case 7:  grade = 'C'; break;
        case 6:  grade = 'D'; break;
        default: grade = 'E'; break;
    }
    printf("switch 计算的等级: %c\n", grade);

    printf("是否及格: %s\n", score >= 60 ? "是" : "否");

    return 0;
}
  1. 设计一个循环程序,再循环中用break和continue语句,实现不同的程序效果,给出结果并讨论。
#include <stdio.h>

int main() {
    // break:立即退出当前层循环且不再循环
    printf("break 的示例:\n");
    for (int i = 1; i <= 20; i++) {
        if (i % 7 == 0) {
            printf("找到 %d,退出循环\n", i);
            break;
        }
        printf("%d ", i);
    }
    printf("\n\n");

    // continue:跳过当前循环,开启一次新循环
    printf("continue 的示例:\n");
    for (int i = 1; i <= 10; i++) {
        if (i % 3 == 0) {
            continue;
        }
        printf("%d ", i);
    }
    printf("\n");

    return 0;
}
  1. 设计一个程序求100~200间的全部素数,给出算法思想、传统流程图、程序NS流程图。
#include <stdio.h>

int main() {
    printf("100~200 之间的素数:\n");

    for (int n = 100; n <= 200; n++) {
        int isPrime = 1;
        for (int i = 2; i * i <= n; i++) {
            if (n % i == 0) {
                isPrime = 0;
                break;
            }
        }
        if (isPrime) printf("%d ", n);
    }

    printf("\n");
    return 0;
}

关于流程图(由自己描述,用 AI 生图)
8_传统流程图
8_NS流程图

  1. 书本第 6 章 6.16 编程练习题目中的第 1,5,7,10,13,16,18 题 & 书本第 7 章7.12 编程练习题目中的第 1,2,4~5,7 题
posted @ 2026-11-09 14:55  小树0512  阅读(6)  评论(0)    收藏  举报