精华内容
下载资源
问答
  • 教学项目二十 JavaScript分支与循环程序设计 ;教学过程 新课 ? 一函数定义语句 1? function 函数名形参表 { . . (函数执行部分) } ? 2? return 格式: return 表达式 返回函数的值 ;二Javascript两分支语句;三...
  • 超星高级语言程序设计实验作业 实验02 分支与循环程序设计 注:以下内容仅供交流,代码都是本人自己写的,还请同学们先自己编写再进行交流。

    超星高级语言程序设计实验作业

    实验02 分支与循环程序设计(三)

    注:以下内容仅供交流,代码都是本人自己写的,还请同学们先自己编写再进行交流。

    11.勒让德多项式

    题目描述:编一个程序,输入x、n,计算勒让德(Legendre)多项式的第 n 项。

    在这里插入图片描述
    输入:一个浮点数和一个整数,分别对应x和n(0<=n<=20)。
    输出:一个浮点数,即勒让德多项式第n项的值,注意小数点后保留到第2位。
    样例1:
    输入:3.4 2
    输出:16.84
    样例2:
    输入:3.4 10
    输出:30143685.82
    样例3:
    输入:3.4 21
    输出:23525972077722828.00

    #include<stdio.h>
    double lr(int n, double x) {
    	double p=0, p1, p2;
    	int k;
    	if (n == 0) p = 1;
    	else if (n == 1) p=x;
    	else{
    		p2 = x; p1 = 1;
    		for (k = 2; k <= n; k++){
    			p = ((2 * k - 1) / (double)k) * x * p2 - ((k - 1) / (double)k) * p1;
    			p1 = p2;
    			p2 = p;
    		}
    	}
    	return p;
    }
    int main() {
    	double x,sum=0;
    	int n;
    	scanf_s("%lf %d", &x, &n);
    	sum = lr(n, x);
    	printf("%.2lf", sum);
    	return 0;
    }
    

    这道题MOOC上也有,但是它们不一样😭
    有很多小伙伴 (包括我) 在这道题上卡了很长时间,用头发😅总结出来超星上大部分的浮点型都是用double类型用float精度不够最后几位会不一样😱
    这道题代码可以用来过OJ但是最后一个样例结果不太一样。😣还要修改

    12.数字金字塔

    题目描述:编程序,制打印如下所示的n行数字金字塔(n由用户从键盘输入)。

    在这里插入图片描述

    1 2 3 4 5 6 7 8 9 0 9 8 7 6 5 4 3 2 1
    输入:一个正整数 n (≤10).
    输出:如上所示的类似数字金字塔。输出由数字 0~9构成的n行数字三角矩阵:其中第一行有1个数,第二行有3个数,依次类推,每个数字占用2位英文字符宽度,宽度不足2位的的在数字左侧补空格;整个数字三角阵,除必要的空格、数字、回车换行符,无多余字符。
    样例1:
    输入:1
    输出:
    1
    样例2:
    输入:3
    输出:
    1
    1 2 1
    1 2 3 2 1

    #include<stdio.h>
    int outl(int n) {
    	int i;
    	for ( i = 1; i < n; i++){
    		printf("%2d", i);
    	}
    	if (n == 10) printf(" 0");
    	else printf("%2d",n);
    	for (i=i-1; i >0; i--){
    		printf("%2d", i);
    	}
    	return 0;
    }
    int kongg(int n,int i) {
    	int k;
    	for ( k=1;k  <= (n-i) ; k++){
    		printf("  ");
    	}
    	return 0;
    }
    int main() {
    	int n,i;
    	int out;
    	scanf_s("%d", &n);
    	for ( i = 1; i <=n; i++){
    		out = kongg(n, i);
    		out = outl(i);
    		if (i < n) printf("\n");
    	}
    	return 0;
    }
    

    题目要求是最中间的列对齐。

    13.计算 e^x

    题目描述:请计算上述序列前100项的和
    GJBook3-04-02.jpg

    输入:一个浮点数,对应x值。
    输出:一个浮点数,即e^x的近似值,小数点后保留到第2位。
    注:本题不允许使用math.h头文件和相关的pow和exp等函数。
    样例1:
    输入:0
    输出:1.00
    样例2:
    输入:4.3
    输出:73.70

    #include<stdio.h>
    float gx(float x, int n) {
    	int i; float sum=1;
    	for ( i = 1; i <= n; i++){
    		sum = sum * x / i;
    	}
    	return sum;
    }
    int main() {
    	float x,m=0,out=0;
    	scanf_s("%f", &x);
    	for (size_t i = 0; i <= 100; i++){
    		m = gx(x, i);
    		out = out + m;
    	}
    	printf("%.2f", out);
    	return 0;
    }
    

    唯一要注意的就是不能用math.h

    14.公式累乘

    题目描述:用如下的展开式计算当n为某给定值时,圆周率π的值。

    GJBook3-04-0102.jpg

    输入:一个正整数n (n<100000)
    输出:一个浮点数,保留小数点后10位。
    样例1:
    输入:1000
    输出:3.1408077460
    样例2:
    输入:10000
    输出:3.1415141187

    #include<stdio.h>
    double gx(double i) {
    	double jieg;
    	jieg = 4 * i * i / (2 * i - 1) / (2 * i + 1);
    	return jieg;
    }
    int main() {
    	int n,i;
    	double sum;
    	scanf_s("%d", &n);
    	sum = 2;
    	for ( i = 1; i <= n; i++){
    		sum = sum * gx(i);
    }
    	printf("%.10lf", sum);
    	return 0;
    }
    

    15.公式累加

    题目描述:用如下的展开式计算当n为某给定值时,sh(x)的值。
    Exp02-Enhance03.jpg
    编写程序,对上面的公式读入x,输出序列的和直到尾项 小于10^-5。
    输入:一个浮点数作为x的值
    输出:一个浮点数,保留小数点后6位。
    样例1:
    输入:1
    输出:1.175198
    样例2:
    输入:1.5
    输出:2.129277

    #include<stdio.h>
    #include<math.h>
    double fm( double x, double n) {
    	double sum=1; 
    	int i;
    	for (i=1;i<=2*n+1; i++){
    		sum = sum * x / i;
    	}
    	return sum;
    }
    int main() {
    	double out, m;
    	double x;
    	int i = 1;
    	scanf_s("%lf", &x);
    	out = 0; m = x;
    	for (i = 1;fabs(m)>=1e-5; i++){
    		out = out + m;
    		m = fm(x, i);
    }
    printf("%.6lf", out);
    return 0;
    }
    

    这道题啊,卡了一个星期测试的时候结果跟给的样例一样,但是提交后是有两个通过三个不通过,我想了一个星期都没事想出来,最后问了老师
    我 犯 了 个 低 级 的 错 误

    for (i = 1;fabs(m)>=1e-5; i++)
    

    这句中是判断最后一项是否小于10^-5,应该写成1e-5结果我写成10e-5了😭,还有最后一项的值m可能小于0,因此要写绝对值
    希望年轻人耗子尾汁,不要犯我这样的错误。😬

    展开全文
  • 1、掌握程序设计中的3种基本结构(顺序结构、选择程序、循环程序)。 2、熟练使用汇编语言的指令:数据传送类指令、数据运算类指令、逻辑判断类指令转移指令、循环指令等。 3、初步了解系统功能调用的使用方法,尝试...

    一、实验目的

    1、掌握程序设计中的3种基本结构(顺序结构、选择程序、循环程序)。
    2、熟练使用汇编语言的指令:数据传送类指令、数据运算类指令、逻辑判断类指令与转移指令、循环指令等。
    3、初步了解系统功能调用的使用方法,尝试使用01H号功能调用进行字符输入的方法及使用02H号功能调用进行字符输出(显示)的方法。

    二、实验环境与设备

    计算机一台,并且安装Windows操作系统和macro assembler 5.0以上版本的系统软件。

    三、预备知识

    1、掌握汇编语言程序的上机步骤
    2、掌握DEBUG的使用方法
    3、掌握汇编语言的指令:
    ( 1 )数据传送类指令。
    ( 2 )数据运算类指令。
    ( 3 )逻辑判断类指令。
    ( 4 )与转移指令。
    ( 5 )循环指令等。

    四、程序说明

    1.计算1+2+3+…+10,将结果显示在屏幕上。
    2.利用01H号功能调用输入10个一位数字,并将其由ASCII码转换为二进制数,依此保存到变量BUF的10个字节中,变量BUF的形式为BUF DB 10 DUP(?)。编程求出这10个数中的最大数和最小数,将最大数存入MAX单元、最小数存入MIN单元,并将其在屏幕上显示出来。
    3.对于第2题,怎样修改程序可以同时实现将10个数字的累加功能。(选作)
    4.对于第2题,若要求输入的是两位数,又该怎么办?(选作)

    五、程序代码

    程序一

    CODE SEGMENT
    MAIN PROC FAR
    	ASSUME CS:CODE
    START:
    		PUSH DS
    		XOR AX,AX
    		PUSH AX
    		MOV BX,10	;1-10
    		MOV CX,10	;循环次数
    NEXT:	ADD AX,BX	;累加
    		DEC BX		;数字递减
    		LOOP NEXT
    PRINT:	
    		MOV BL,10
    		DIV BL		;除以10
    		ADD AL,30H	;十六进制表示的ASCII码值
    		MOV CH,AH	
    		MOV DL,AL	;输出高位数
    		MOV AH,2
    		INT 21H
    		ADD CH,30H
    		MOV DL,CH	;输出低位数
    		MOV AH,2
    		INT 21H
    		RET
    MAIN ENDP
    CODE ENDS
    	END START
    
    

    程序二

    DATA SEGMENT
    	BUF DB 10 DUP(?)
    	MAX DB ?
    	MIN DB ?
    	Str1 DB 0DH,0AH,'Please input:','$'
    	Str2 DB 0DH,0AH,'MAX:','$'
    	Str3 DB 0DH,0AH,'MIN:','$'
    DATA ENDS
    CODE SEGMENT
    MAIN PROC FAR
    	ASSUME CS:CODE,DS:DATA
    START:
    		PUSH DS
    		XOR AX,AX
    		PUSH AX
    		MOV AX,DATA
    		MOV DS,AX
    		MOV CX,10		;十次输入
    		MOV BX,0
    		MOV SI,0
    INPUT:	
    		LEA DX,Str1		;输出提示
    		MOV AH,09
    		INT 21H
    		MOV AH,01H		;输入
    		INT 21H
    		SUB AL,30H
    		MOV BUF[SI],AL
    		INC SI			;位移+1
    		LOOP INPUT		;循环输入
    		MOV CX,9		;比较9次
    		MOV SI,0		;位移初始为0
    		MOV AL,BUF[SI]	;AL存放最大值
    		MOV BL,AL		;BL存放最小值
    NEXT:	INC SI
    		MOV DL,BUF[SI]
    		CMP DL,AL		
    		JL LESS			;小于当前最大值跳转
    		MOV AL,DL		;改变最大值
    		JMP MORE
    LESS:	CMP BL,DL
    		JL MORE			;大于当前最小值跳转
    		MOV BL,DL		;改变最小值
    MORE:	LOOP NEXT		;循环比较
    		MOV MAX,AL		;存储到对应单元
    		MOV MIN,BL
    		LEA DX,Str2
    		MOV AH,09
    		INT 21H
    		MOV DL,MAX		;输出最大值
    		ADD DL,30H
    		MOV AH,02H
    		INT 21H
    
    		LEA DX,Str3
    		MOV AH,09
    		INT 21H
    		MOV DL,MIN 		;输出最小值
    		ADD DL,30H
    		MOV AH,02H
    		INT 21H
    		RET
    MAIN ENDP
    CODE ENDS
    	END START
    
    

    程序三

    DATA SEGMENT
    	BUF DB 10 DUP(?)
    	MAX DB ?
    	MIN DB ?
    	SUM DB 0
    	Str1 DB 0DH,0AH,'Please input:','$'
    	Str2 DB 0DH,0AH,'MAX:','$'
    	Str3 DB 0DH,0AH,'MIN:','$'
    	Str4 DB 0DH,0AH,'SUM:','$'
    DATA ENDS
    CODE SEGMENT
    MAIN PROC FAR
    	ASSUME CS:CODE,DS:DATA
    START:
    		PUSH DS
    		XOR AX,AX
    		PUSH AX
    		MOV AX,DATA
    		MOV DS,AX
    		MOV CX,10		;十次输入
    		MOV BL,0
    		MOV SI,0
    INPUT:	
    		LEA DX,Str1		;输出提示
    		MOV AH,09
    		INT 21H
    		MOV AH,01H		;输入
    		INT 21H
    		SUB AL,30H
    		MOV BUF[SI],AL
    		INC SI			;位移+1
    		LOOP INPUT
    		MOV CX,9
    		MOV SI,0
    		MOV AL,BUF[SI]	;AL存放最大值
    		MOV BL,AL		;BL存放最小值
    NEXT:	INC SI
    		MOV DL,BUF[SI]
    		CMP DL,AL
    		JL LESS			;小于当前最大值跳转
    		MOV AL,DL		;改变最大值
    		JMP MORE
    LESS:	CMP BL,DL		
    		JL MORE			;大于当前最小值跳转
    		MOV BL,DL		;改变最小值
    MORE:	LOOP NEXT
    		MOV MAX,AL
    		MOV MIN,BL
    
    		MOV SI,0
    		MOV CX,10
    		MOV BL,0
    AA:		
    		ADD BL,BUF[SI]	;计算累加和
    		INC SI			;位移+1
    		LOOP AA
    
    		LEA DX,Str2
    		MOV AH,09
    		INT 21H
    		MOV DL,MAX		;输出最大值
    		ADD DL,30H
    		MOV AH,02H
    		INT 21H
    
    		LEA DX,Str3
    		MOV AH,09
    		INT 21H
    		MOV DL,MIN 		;输出最小值
    		ADD DL,30H
    		MOV AH,02H
    		INT 21H
    
    		LEA DX,Str4
    		MOV AH,09
    		INT 21H
    		MOV AL,BL 	
    		MOV AH,0		;AH置0,使用CBW也可
    		MOV BL,10
    		DIV BL		
    		ADD AL,30H	
    		MOV CH,AH
    		MOV DL,AL		;输出和
    		MOV AH,2
    		INT 21H
    		ADD CH,30H
    		MOV DL,CH
    		MOV AH,2
    		INT 21H
    		RET
    MAIN ENDP
    CODE ENDS
    	END START
    
    
    

    程序四

    DATA SEGMENT
    	BUF DB 10 DUP(?)
    	MAX DB ?
    	MIN DB ?
    	Str1 DB 0DH,0AH,'Please input:','$'
    	Str2 DB 0DH,0AH,'MAX:','$'
    	Str3 DB 0DH,0AH,'MIN:','$'
    DATA ENDS
    CODE SEGMENT
    MAIN PROC FAR
    	ASSUME CS:CODE,DS:DATA
    START:
    		PUSH DS
    		XOR AX,AX
    		PUSH AX
    		MOV AX,DATA
    		MOV DS,AX
    		MOV CX,10
    		MOV BX,0
    		MOV SI,0
    INPUT:	
    		LEA DX,Str1
    		MOV AH,09
    		INT 21H
    		MOV AH,01H		;输入
    		INT 21H
    		SUB AL,30H		;ASCII转换十六进制
    		MOV AH,0
    		MOV BL,10
    		MUL BL			;×10
    		MOV DL,AL
    		MOV AH,01H
    		INT 21H
    		SUB AL,30H
    		MOV AH,0
    		ADD AL,DL		;相加
    		MOV BUF[SI],AL
    		INC SI
    		LOOP INPUT		;循环输入
    		MOV CX,9
    		MOV SI,0
    		MOV AL,BUF[SI]	;AL存放最大值
    		MOV BL,AL		;BL存放最小值
    NEXT:	
    		INC SI
    		MOV DL,BUF[SI]
    		CMP DL,AL
    		JL LOOP1		;小于当前最大值跳转
    		MOV AL,DL		;改变最大值
    LOOP1:	
    		CMP BL,DL		
    		JL LOOP2		;大于当前最小值跳转
    		MOV BL,DL		;改变最小值
    LOOP2:
    		LOOP NEXT
    		MOV MAX,AL
    		MOV MIN,BL
    PRINTMAX:	
    		LEA DX,Str2
    		MOV AH,09
    		INT 21H
    		MOV AX,0
    		MOV AL,MAX		;输出最大值
    		MOV BL,10
    		DIV BL
    		ADD AL,30H		;转换为ASCII码
    		MOV DL,AL
    		MOV CH,AH
    		MOV AH,02H
    		INT 21H
    		ADD CH,30H
    		MOV DL,CH
    		MOV AH,02H
    		INT 21H
    PRINTMIN:
    		LEA DX,Str3
    		MOV AH,09
    		INT 21H
    		MOV AX,0
    		MOV AL,MIN 		;输出最小值
    		MOV BL,10
    		DIV BL
    		ADD AL,30H
    		MOV DL,AL
    		MOV CH,AH
    		MOV AH,02H
    		INT 21H
    		ADD CH,30H
    		MOV DL,CH
    		MOV AH,02H
    		INT 21H
    		RET
    MAIN ENDP
    CODE ENDS
    	END START
    
    

    六 、实验结果

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 分支程序(if then) 例 双字长数存放于dx和ax寄存器(高位于dx),求该数的绝对值(用16位指令) 算法分析:判断数正负,正数(首位为0),不需处理,负数(首位为1),对该数求补,即反码加一 code segment ...

    单分支程序(if then)

    双字长数存放于dx和ax寄存器(高位于dx),求该数的绝对值(用16位指令)
    算法分析:判断数正负,正数(首位为0),不需处理,负数(首位为1),对该数求补,即反码加一

    code segment
    assume cs:code
    start:
    test dx,8000h  //测试数的正负
    jz exit       //不为负数则退出
    not ax
    not dx
    add ax,1
    adc dx,0
    exit:
    mov ah,4ch
    int 21h
    code ends
    end start
    

    复合分支程序

    从键盘输入一位十六进制数,将其转换为十进制数显示输出
    算法分析:
    输入为数字(30h~39h),直接输出
    为大写字母A~F(41h~46h)时,可减11h
    a~f时(61h~66h),可减去31h得到30h~35h(0~5的ascii码),再输出2位十进制数字,
    其他输入为非法输入,退出程序

    code segment
    assume cs:code
    start:mov ah,1 //键盘输入
    int 21h
    cmp al,30h
    jl exit
    cmp al,39h
    jle dig //输入为0~9
    cmp al,41h
    jl exit //非法输入
    cmp al,46h
    jle print //输入为A~F
    cmp al,61h
    jl exit //非法输入
    cmp al,66h
    jg exit //非法输入
    sub al,31h
    jmp out1 //输入为小写a~f
    print:sub al,11h
    out1:mov dl,31h //输出字符1
    mov ah,2
    push ax //暂存ax
    int 21h //int指令改写ax
    pop ax //恢复ax
    dig:mov dl,al //输出个位
    mov ah,2
    int 21h
    exit:mov ah,4ch
    int 21h
    code ends
    end start
    

    多分支程序
    采用分支向量表法,int 21h指令就是根据中断类型号21h*4得84h直接到84h内存中的向量表取出中断向量(即系统子程序的首地址),来执行一段程序,我们把各分支地址集中存放于分支向量表中,根据分支号快速进入分支

    根据键盘输入的一位数字1~4,使程序转移到4个不同的分支中去,以显示键盘输入的数字
    算法分析:建立一个分支向量表branch,集中存放4个分支的偏移地址,因偏移地址为16位,所以每两个字节存放一个偏移地址,据输入的数字指向分支向量表,从表中取出对应分支的偏移地址,用jmp branch[bx]指令间接寻址方式转向对应分支

    code segment
    assume cs:code,ds:code
    start:mov ax,code //ds=cs
    mov ds,ax
    mov ah,7 //键盘输入无回显
    int 21h
    cmp al,31h
    jl exit //非法输入
    cmp al,34h 
    jg exit //非法输入
    mov dl,al //放入dl,待显示
    mov bl,al
    sub bl,31h //转换ascii码为数值
    shl bl,1 //(bl)*2,指向分支向量表中某地址
    mov bh,0
    jmp branch[bx] //转向分支
    rl:mov ah,2
    int 21h //显示键盘输入的数字
    jmp exit
    r2:mov ah,2
    int 21h
    jmp exit
    r3:mov ah,2
    int 21h
    jmp exit
    r4:mov ah,2
    int 21h
    jmp exit
    exit:mov ah,4ch
    int 21h
    branch dw r1
    dw r2
    dw r3
    dw r4
    code ends
    end start
    

    循环程序设计
    循环有两种结构,do while和do null
    do while先判断条件,再执行循环,do null先循环一遍再判断要不要下次循环

    把bx寄存器中的二进制用16进制数格式显示输出
    算法分析:
    bx寄存器每4位表示一位16进制数位,从左到右循环移位,每移四位,就把要显示的4位二进制位移到最右边。取出最右边的4位,加上30h,转换成8位ascii字符码。因显示输出的十六进制是数字(30h~39h)和A~F(41h~46h),所以8位二进制大于39h时,应再加上7,程序采用计数循环,计数值为4

    code segment
    assume cs:code
    start: mov cx,4
    shift:rol bx,1 //连续循环左移4位
    rol bx,1
    rol bx,1
    rol bx,1
    mov al,bl
    and al,bl
    and al,0fh //取最右四位
    add al,30h //转为ascii
    cmp al,39h
    jle dig  //是0~9则转dig
    add al,7  //是A~F
    dig:mov dl,al
    mov ah,2
    int 21h
    loop shift
    mov ah,4ch
    int 21h
    code ends
    end start  //该程序因未对bx赋值,初值可能为0,需在调试状态下先设置bx的值再运行
    


    从键盘输入一个四位的十六进制数(其中字母大写),并将其转换为二进制数显示输出
    算法分析:该程序需要两段循环,第一个循环接收键盘输入的16进制数,30h~39h时减30h,输入为41h~46h时,减37h,应把四次的输入拼装成四位16进制数存放在bx寄存器,第二个循环利用16次位移从左到右显示bx寄存器中的二进制数

    code segment
    assume cs:code
    start:mov bx,0 //初始化
    mov ch,4
    mov cl,4
    inchar:mov ah,1 //键盘输入
    int 21h
    cmp al,30h
    jl exit //非法输入
    cmp al,39h
    jle dig //输入数字0~9
    cmp al,41h
    jl exit
    cmp al,46h
    jg exit //非法输入
    sub al,37h //输入A~F
    jmp ks4
    dig:sub al,30h
    ks4:shl bx,cl
    add bl,al
    dec ch
    jnz inchar
    mov ah,2
    mov dl,10 //输出换行
    int 21h
    mov cx,16  //循环计数初值
    ks1:shl bx,1 //左移一位
    jnc k30 //是0则转k30
    mov dl,31h
    jmp outb
    k30:mov dl,30h
    outb:mov ah,2
    int 21h
    loop ks1
    exit:mov ah,4ch
    int 21h
    code ends
    end start
    

    条件循环程序
    循环体有分支时,依据标志位判断,标志位为1表示执行a操作,为0表示执行b操作等,把这种标志字称为逻辑尺

    先从键盘输入8位二进制数作为逻辑尺,再从键盘输入一个英文字母,根据逻辑尺当前的最高位标志显示输出该英文字母的相邻字符,标志位为0则显示前趋字符,标志位为1则显示其后继字符,显示相邻字符后,逻辑尺循环左移一位再接收下一个英文字母的输入,并依据逻辑尺显示相邻字符,直到回车键结束程序
    算法分析:8位二进制数的输入构成一个8次循环,把输入整合到
    8位寄存器bl中。键盘输入一个英文字母后依据逻辑尺最高标志位显示相邻字符,把最高位移到cf位,以cf位决定显示,构成一个条件循环,以回车键退出循环

    code segment
    assume cs:code
    start:mov bx,0
    mov cx,8
    inlog:mov ah,1
    int 21h
    cmp al,30h
    jb exit //非法输入
    cmp al,31h
    ja exit //非法输入
    sub al,31h
    shl bl,1
    add bl,al
    loop inlog
    mov ah,2
    mov dl,10 //输出换行
    int 21h
    inchr:mov ah,1
    int 21h
    cmp al,13
    je exit
    mov dl,al
    rol bl,1
    jnc k30 //是0则转为k30
    inc dl
    jmp putc
    k30:dec dl
    putc:mov ah,2
    int 21h
    jmp inchr
    exit:mov ah,4ch
    int 21h
    code ends
    end start
    
    展开全文
  • 超星高级语言程序设计实验作业 实验02 分支与循环程序设计 注:以下内容仅供交流,代码都是本人自己写的,还请同学们先自己编写再进行交流。

    超星高级语言程序设计实验作业

    实验02 分支与循环程序设计(一)

    注:以下内容仅供交流,代码都是本人自己写的,还请同学们先自己编写再进行交流。
    另:本人写代码用的是Visual Studio 2019,有些地方可能在其他编译器上无法运行。

    1.递增排序

    题目描述:任意三个实数a、b、c,按照从小到大的顺序输出。
    输入:输入三个实数(测试数据均只有一位小数)。
    输出:按照从小到大顺序输出之前输入的三个实数,以一个西文空格间隔,且每个实数小数点后保留1位。
    样例:
    输入:2.3 5.6 1.2
    输出:1.2 2.3 5.6

    #include<stdio.h>
    
    int main() {
    
    	float a, b, c, t;
    
    	scanf_s("%f%f%f", &a, &b, &c);
    
    	if (a > b) { t = a; a = b; b = t; }
    
    	if (a > c) { t = a; a = c; c = t; }
    
    	if (b > c) { t = b; b = c; c = t; }
    
    	printf("%.1f %.1f %.1f", a, b, c);
    	return 0;
    
    }
    

    2.括号统计

    题目描述:编程序,判断给定以字符‘@’结束的字符序列中‘(’与‘)’、‘[’与‘]’、‘{’与‘}’的个数是否相等。
    输入:输入一串以字符‘@’结束的字符序列,其间可能含有若干空白字符。
    输出:个数不相等的括号(按花括号、方括号、圆括号的顺序),如果没有不等则输出NULL。
    样例1:
    输入:{a+bc+(d/e-f]}}@
    输出:{}
    样例2:
    输入:{a + b
    c+(d/e-f]}@
    输出:

    #include<stdio.h>
    
    int main() {
    	char x=0;	
    	int a=0, b=0, c=0, d=0, e=0, f=0;	
    	for (;x!='@';)	{
    		 scanf_s("%c", &x);
    		 switch (x){
    			case'(':a++; break;
    			case')':b++; break;
    			case'[':c++; break;
    			case']':d++; break;
    			case'{':e++; break;
    			case'}':f++; break;
    			default:break;
    		}
    	}
    	
    	if (e != f) printf("{}"); 
    	
    	if (c != d) printf("[]");
    	
    	if (a != b) printf("()");
    	
    	if (a==b&&c==d&&e==f){
    		printf("NULL");
    	}
    	return 0;
    }
    

    注意:要求输出顺序是花括号(“{}”)方括号(“[]”)圆括号(“()”)

    代码挺复杂的,应该还可以优化🙄
    请大佬指点😁

    3.数字求和

    题目描述:给定一个正整数a,以及另外的5个正整数,问题是:这5个整数中,可以被a整除的整数和是多少?
    输入:输入一行只包括6个小于100的正整数,其中第一个正整数是a,输入保证a不为零。
    输出:输出一行,给出一个正整数,是5个数中可以被a整除的所有整数的和。
    样例1:
    输入:10 10 20 30 40 11
    输出:100
    样例2:
    输入:11 10 20 30 40 12
    输出:0

    #include<stdio.h>
    
    int main() {
    
    int a, s[5],i;
    
    int sum=0;
    
    scanf_s("%d", &a);
    
    for ( i = 0; i < 5; i++)
    
    {
    
    scanf_s("%d", &s[i]);
    
    }
    
    for ( i = 0; i < 5; i++)
    
    {
    
    if (s[i] % a == 0) sum = sum + s[i];
    
    }
    
    printf("%d", sum);
    
    return 0;
    
    }
    

    4.养老金

    题目描述:某一国家养老金发放的原则是:
    (1)男人(假设用数字1表示)超过65岁每周给50元钱,如果超过70岁每周再加20元钱。
    (2)女人(假设用数字2表示)超过60岁每周给45元钱,如果超过65岁每周再加25元钱。
    编程序,读入一个人的性别和年龄,输出他每周可领养老金数额。如果一个人还没到拿取养老金的年龄,那么就输出一个适合的信息。
    输入:输入一行包括2个整数,分别对应性别和年龄,输入保证性别年龄输入都为合理整数。
    输出:如果达到领取养老金年龄,就请输出每周应得养老金数额;否则输出NULL。
    样例1:
    输入:1 75
    输出:70
    样例2:
    输入:2 63
    输出:45

    #include<stdio.h>
    
    int main() {
    
    int wm, age,money;
    
    scanf_s("%d%d", &wm, &age);
    
    if (wm==1)
    
    {
    
    	if (age>65)money = 50;
    	
    	if (age>70)money = money + 20;
    	
    	if (age <= 65)    printf("NULL");
    	
    	else printf("%d", money);
    
    }
    
    if (wm == 2)
    
    {
    
    	if (age > 60)money = 45;
    	
    	if (age > 65)money = money + 25;
    	
    	if (age <= 60)printf("NULL");
    	
    	else printf("%d", money);
    
    }
    
    return 0;
    
    }
    

    自己写的😅算法不太好,有没有大佬指点一下

    5.嵌套函数

    题目描述:编写程序,当x=1.0、2.0、…、20.0时,计算如下函数到5层嵌套。F(x)=1+1/(1+1/(1+1/(1+1/(1+1/x))))
    输入:一个浮点数表示x的值,输入保证x不为零。
    输出:一个浮点数F(x)的值,保留小数点后3位。
    样例:
    1
    1.625

    #include<stdio.h>
    
    int main() {
    
    int i;
    
    float x, sum;
    
    scanf_s("%f", &x);
    
    sum = x;
    
    for ( i = 1; i <= 5; i++)
    
    {
    
    sum = (1 + 1 / sum);
    
    }
    
    printf("%.3f", sum);
    
    return 0;
    
    }
    

    第二次作业一共有15道题一道比一道难😱
    分成了三部分发🙄

    展开全文
  • 超星高级语言程序设计实验作业 实验02 分支与循环程序设计 注:以下内容仅供交流,代码都是本人自己写的,还请同学们先自己编写再进行交流。
  • 1、掌握程序设计中的3种基本结构(顺序结构、选择程序、循环程序)。 2、熟练使用汇编语言的指令:数据传送类指令、数据运算类指令、逻辑判断类指令转移指令、循环指令等。 3、初步了解系统功能调用的使用方法,...
  • 1、掌握程序设计中的3种基本结构(顺序结构、选择程序、循环程序)。 2、熟练使用汇编语言的指令:数据传送类指令、数据运算类指令、逻辑判断类指令转移指令、循环指令等。 3、初步了解系统功能调用的使用方法,...
  • 吉林大学超星MOOC高级语言程序设计 实验00 熟悉开发环境(2020级) 以下代码均由自己本人编写,欢迎交流和指出错误 1 题目编号:Exp02-Basic01,GJBook3-03-03 题目名称:递增排序 题目描述:任意三个实数a、b、c...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 571
精华内容 228
关键字:

分支与循环程序设计