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

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

作业内容

  • 运行以下程序给出程序结果

屏幕截图 2025-11-09 195943

屏幕截图 2025-11-09 200211

  • 用while和do while分别设计程序实现:用公式π/4=1-1/3+1/5-1/7+1/9+...求π的近似值,直到某一项的绝对值小于10-4为止,对两个程序的不同之处进行讨论
//while实现,先判断后执行
 #include <math.h>
#include <stdio.h>
int main(void)
{   
    double sum=0,temp=1,i=1;
    while (fabs(1/temp) >=0.0001)
    {  sum+=i/temp;
       i=-i;
       temp+=2;
    }
    printf("π= %f\n",sum*4);
     return 0;
}

屏幕截图 2025-11-09 211854

//do while实现,先执行后判断
 #include <math.h>
#include <stdio.h>
int main(void)
{   
    double sum=0,temp=1,i=1;   
    do{sum+=i/temp;
       i=-i;
       temp=temp+2;
	}
    while (fabs(1/temp) >=0.0001);
    printf("π= %f\n",sum*4);
     return 0;

}

屏幕截图 2025-11-09 211714

  • 设计一个程序,实现功能:逻辑表达式中的运算符,只有会影响表达式求值时,才会执行。
#include <stdio.h>
int main(void)
{   
             
    //逻辑与&& (a为真,b的运算可能影响表达式的值,b执行)
    int a=0,b=1;
    printf("a&&(b++)=%d  a=%d b=%d \n",a&&(b++),a,b);   
	a = 1;b=1;   
    printf("a&&(b++)=%d  a=%d b=%d\n",a&&(b++),a,b);  
    //逻辑或|| (a为假,b的运算可能影响表达式的值,b执行) 
    a = 0;b=1;  
    printf("a||(b++)=%d  a=%d b=%d \n",a||(b++),a,b);  
	 a = 1;b=1;   
    printf("a||(b++)=%d  a=%d b=%d\n",a||(b++),a,b);   
   
    return 0;
}

屏幕截图 2025-11-10 182506

  • 用for循环输出六行,第一行有FEDCBA,第二行是FEDCB,第三行是FEDC....,以此类推。
#include <stdio.h>
int main(void)
{   char A[7]="FEDCBA";
    for(int i=0;i<6;i++){
        printf("%s\n",A);
        A[5-i]='\0';
	}
     return 0;
}

屏幕截图 2025-11-09 213523

  • 编程输入n, 计算s=1+(1+2)+(1+2+3)+…+(1+2+3+4+…n)。
#include <stdio.h>
int main(void)
{   int s=0,sum=0,n;
    printf("请输入n: ");
	scanf("%d",&n);
    for(int i=1;i<=n;i++){
    	sum+=i;
    	s+=sum;
	}
	printf("s = %d",s);
     return 0;
}

屏幕截图 2025-11-09 213959

  • 用for循环给一组整型类型的数组进行赋值,输出,以及求和,数组长度为8。
#include <stdio.h>
int main(void)
{   int s[8],sum=0;
    for(int i=0;i<8;i++){
    	printf("请输入第%d个整数:",i+1);
		scanf("%d",&s[i]); 
		sum+=s[i];
	}
	for(int i=0;i<8;i++){
    	printf("%d ",s[i]);
	}
	printf("\nsum=%d",sum);
     return 0;
}

屏幕截图 2025-11-09 214549

  • 设计一个if和else的多分支程序(分支数目大于3),该多分支程序再用switch语句进行改写,同时设计一个使用条件运算符(?:)的双分支语句。
    1.if和else的多分支程序
//if和else的多分支程序
//为成绩分组
#include <stdio.h>

int main() {
    int score;
    printf("请输入成绩(0-100):");
    scanf("%d", &score);
    if (score >= 90 && score <= 100) {
        printf("优秀\n");
    } 
	else if (score >= 70 && score < 90) {
        printf("良好\n");
    } 
    else if (score >= 60 && score < 70) {
        printf("及格\n");
    }
	 else  if(score>=0&&score<60) {
        printf("不及格\n");
    } 
     else{printf("输入错误!\n");
    }
    return 0;
}

屏幕截图 2025-11-10 151525

2.switch语句进行改写

// switch 语句改写
#include <stdio.h>
int main() {
    int score;
    printf("请输入成绩(0-100):");
    scanf("%d", &score);
    switch (score / 10) {
        case 10:
        case 9:
            printf("优秀\n");
            break;
        case 8:case 7:
            printf("良好\n");
            break;
    
        case 6:
            printf("及格\n");
            break;
        case 5: case 4: case 3: case 2: case 1: case 0:
            printf("不及格\n");
            break;
        default:
            printf("输入错误!\n");
    }
    
    return 0;
}

屏幕截图 2025-11-10 152018
3.条件运算符(?:)的双分支语句

// 条件运算符实现双分支
//打印小写字母
#include <stdio.h>
int main(){
	char ch;
	scanf("%c",&ch);
	ch=(ch>='A'&&ch<='Z')?(ch+32):ch;
	printf("%c",ch);
}

屏幕截图 2025-11-10 151326

屏幕截图 2025-11-10 151307

  • 设计一个循环程序,再循环中用break和continue语句,实现不同的程序效果,给出结果并讨论。
//输出小于等于7的奇数 
#include <stdio.h>

int main() {
    int i=0;
    while(1) {
        if (i % 2 == 0) {
           i++; continue;  //遇到偶数跳过 
        }
        if (i > 7) {
            break;  //大于7当前while循环结束
        }
        printf("%d ", i++);
    }
    
    return 0;
}

屏幕截图 2025-11-10 152748

  • 设计一个程序求100~200间的全部素数,给出算法思想、传统流程图、程序NS流程图。
#include <stdio.h>
#include <math.h>
int judge(int n){
	for(int i=3;i<sqrt(n);i++){
		if(n%i==0){return 0;}
	}
	return 1;
}
int main(void)
{   int i=101,n=0;
    while(i<200){
    	if(judge(i)){printf("%d ",i);n++;}
		if(n>10){printf("\n");n=0;	}
		i+=2;
	}	
    return 0;
}

屏幕截图 2025-11-09 221002
算法思想:
1.在101-199之间遍历奇数(偶数明显被2整除不为素数)
2.自定义函数judge用于判断x是否为素数,是就输出
3.judge中在3-根号x间循环,查找x是否可以被其中一个数整除,若是则返回假,否则返回真

流程图:

屏幕截图 2025-11-10 190656

程序NS流程图:

屏幕截图 2025-11-10 191834

编写并运行书本第6章6.16编程练习题目中的第1,5,7,10,13,16,18题。

  • 第1题:编写一个程序,创建一个包含26个元素的数组,并在其中存储26个小写字母,然后打印数组的所有内容。
#include <stdio.h>
int main(void)
{   char a[27];
    for(int i=0;i<26;i++){
    	a[i]=i+97;
	}
	for(int i=0;i<26;i++){
		printf("%c ",a[i]);
		if(i==12){printf("\n");	}
	}
    return 0;
}

屏幕截图 2025-11-09 224740

  • 第5题:编写一个程序,提示用户输入大写字母。使用嵌套循环以下面的金字塔型的格式打印字母
            A
          ABA
        ABCBA
    打印这样的图形,要根据用户输入的字母来决定。例如,上面的图形是在用户输入C后的打印结果。
#include <stdio.h>
int main(void)
{   char x;
    printf("请输入一个大写字母:");
	scanf("%c",&x); 
	int D=x-'A',d=x-'A';
    while(d>=0){
    	printf("%*c",d+1,'A');
    	for(int i=0;i<D-d;i++){
    		printf("%c",'A'+i+1);
		}
    	for(int i=0;i<D-d;i++){
    		printf("%c",x-d-i-1);
		}
		printf("\n");
		d--;
	}
    return 0;

}

屏幕截图 2025-11-09 233432

  • 第7题:编写一个程序把一个单词读入一个字符数组中,然后倒序打印这个单词。
#include <stdio.h>
#include<string.h>
int main(void)
{   char x[100];
    printf("请输入一个单词:");
	scanf("%s",&x); 
    for(int i=0;i<strlen(x);i++){
    	printf("%c",x[strlen(x)-i-1]);
	}
    return 0;

}

屏幕截图 2025-11-09 233946

  • 第10题:编写一个程序, 要求用户输入一个上限整数和一个下限整数,计算从上限到下限范围内所有整数的平方和,并显示计算结果。然后程序继续提示用户输入上限和下限整数,并显示结果,直到用户输入的上限整数等于或小于下限整数为止。程序的运行示例如下:
    Enter lower and upper integer limits: 5 9
    The sums of the squares from 25 to 81 is 255
    Enter next set of limits: 3 25
    The sums of the squares from 9 to 625 is 5520
    Enter next set of limits: 5 5
    Done
#include <stdio.h>
int main(void)
{   int x1,x2,sum=0;
    printf("Enter lower and upper integer limits:");
	scanf("%d %d",&x1,&x2); 
	while(x1<x2){
		sum=0;
	    for(int i=x1;i<=x2;i++ ){
	    	sum+=i*i;
		}	
		printf("The sums of the squares from %d to %d is %d\n",x1*x1,x2*x2,sum);
		printf("Enter next set of limits:");
	    scanf("%d %d",&x1,&x2); 
	}
    printf("Done");
    return 0;
}

屏幕截图 2025-11-09 234838

  • 第13题:编写一个程序,创建一个包含8个元素的int类型数组,分别把数组元素设置为2的前8次幂。使用for循环设置数组元素的值,使用do while 循环显示数组元素的值。
#include <stdio.h>
int main(void)
{   int x[8];
    x[0]=1;
    for(int i=1;i<8;i++){
    	x[i]=x[i-1]*2;
	}
	int i=0;
	do{
		printf("%d ",x[i++]);
	}
	while(i<8);
    return 0;
}

屏幕截图 2025-11-09 235245

  • 第16题:Daphne以10%的单利息投资了100美元(也就是说,每年投资获利相当于原始投资的10%)。Deinde以5%的复合利息投资了100美元(也就是说,利息是当前余额的5%,包含之前的利息)。编写一个程序,计算需要多少年Deirdre的投资额才会超过Daphne,并显示那时两人的投资额
#include<stdio.h>

int main(void)
{   int year=0;
    int sum1=100,sum2=100;
	while(sum1>=sum2){
		sum1+=100*0.1;
		sum2+=sum2*0.05;
		year++;
	}
	printf("过%d年后会超过,此时Daphne的投资额为:%d,Deirdre的投资额为:%d",year,sum1,sum2);
    return 0;

}


屏幕截图 2025-11-10 000104

  • 第18题: Rabnud博士加入了一个社交圈。起初他有5个朋友。他注意到他的朋友数量以下面的方式增长。第1周少了1个朋友,剩下的朋友数量翻倍;第2周少了2个朋友,剩下的朋友数量翻倍。一般而言,第N周少了N个朋友,剩下的朋友数量翻倍。编写一个程序,计算并显示Rabnud博士每周的朋友数量。该程序一直运行,直到超过邓巴数(Dunbar's number)。邓巴数是粗略估算一个人在社交圈中有稳定关系的成员的最大值,该值大约是150。
#include<stdio.h>

int main(void)
{   int sum=5,week=0;
    
	while(sum<150){
		week++;
		sum=(sum-week)*2;
		printf("第%d周朋友数:%d\n",week,sum);
	}
	printf("第%d周朋友数:%d 超过了邓巴数",week,sum);
    return 0;

}

屏幕截图 2025-11-10 000654

编写并运行书本第7章7.12编程练习题目中的第1,2,4~5,7题。

  • 第1题:编写一个程序读取输入,读到#字符停止,然后报告读取的空格数、换行符数和所有其他字符的数量
#include <stdio.h>

int main(void)
{
    int ch;             
    int space = 0;    
    int newline = 0;   
    int other = 0;      
    printf("请输入字符(以#结束):\n");
    while ((ch = getchar()) != '#')
    {
        if (ch == ' ')        
            space++;
        else if (ch == '\n')    
            newline++;
        else                    
            other++;
    }
    printf("\n统计结果:\n");
    printf("空格数:%d\n", space);
    printf("换行符数:%d\n", newline);
    printf("其他字符数:%d\n", other);
    
    return 0;
}

屏幕截图 2025-11-10 140012

  • 第2题:写一个程序读取输入,读到#字符停止。程序要打印每个输入的字符以及对应的ASCII码(十进制)。每行打印8个“字符-ASCII码”组合
#include <stdio.h>
#define MAX_CHARS 1000  
int main(void)
{
    char chars[MAX_CHARS];     
    int count = 0;            
    char ch;
    printf("请输入字符(以#结束):\n");
    while ((ch = getchar()) != '#' && count < MAX_CHARS - 1)
    {
        chars[count] = ch;
        count++;
    }
    printf("\n字符-ASCII码对应表:\n");
    for (int i = 0; i < count; i++)
    {
        if (chars[i] == '\n')  
        { printf("\\n - %-3d   ", chars[i]);	}
        else if (chars[i] == ' ')
           {	printf("' ' - %-3d   ", chars[i]);} 
        else if (chars[i] == '\t')
           {printf("\\t - %-3d   ", chars[i]);	}
        else
           {
		printf("%c - %-3d   ", chars[i], chars[i]);	} 
        if ((i + 1) % 8 == 0)
           {printf("\n");
			} 
    }
    if (count % 8 != 0)
     {printf("\n"); 
		}      
    return 0;
}

屏幕截图 2025-11-10 142323

  • 第4题:用if else语句编写一个程序读取输入,读到#停止。用感叹号替换句号, 用两个感叹号替换原来的感叹号,最后报告进行了多少次替换
#include <stdio.h> 
int main(void)
{   
    int change = 0;            
    char ch;
    printf("请输入字符(以#结束):\n");
    while ((ch = getchar()) != '#' )
    {
        if(ch=='.'||ch=='!'){
        	change++;
		}
    }
    printf("替换了%d次\n",change);
    return 0;
}

屏幕截图 2025-11-10 143056

  • 第5题:用switch重写第四题
#include <stdio.h>
int main(void)
{   
    int change = 0;            
    char ch;
    printf("请输入字符(以#结束):\n");
    while ((ch = getchar()) != '#' )
    {
        switch(ch){
        	case'.':change++;break;
        	case'!':change++;break;
        	default:break;
		}
        
    }
    printf("替换了%d次\n",change);
    return 0;
}

屏幕截图 2025-11-10 143739

  • 第7题:编写一个程序,提示用户输入一周工作的小时数,然后打印工资总额、税金和净收入
    a.基本工资=10.00美元/小时
    b.加班(超过40小时)=1.5倍时间
    c.税率:前300美元为15%;续150美元为20%;余下的为25%
#include <stdio.h>
#define basepay 10.00 
#define overtime 40
#define overrate 1.5
#define taxes1 300
#define taxesrate1 0.15
#define taxes2 150
#define taxesrate2 0.2
#define taxesrate3 0.25

int main(void)
{   
    int time;            
    double wage,taxes,income;
    printf("请输入一周工作的小时数:");
    scanf("%d",&time);
    if(time>overtime){
    	wage=((time-overtime)*overrate+overtime)*basepay;
	}
	else{
		wage=time*basepay;
	}
	
	if(wage<=taxes1){
		taxes=wage*taxesrate1;
	}
	else if(wage<=taxes2+taxes1){
		taxes=taxes1*taxesrate1+(wage-taxes1)*taxesrate2;
	}
	else{
		taxes=taxes1*taxesrate1+taxes2*taxesrate2+(wage-taxes2)*taxesrate3;
	}
	income=wage-taxes;
    printf("工资总额:%f美元\n",wage);
    printf("税金:%f美元\n",taxes);
    printf("净收入:%f美元\n",income);
    return 0;
}

屏幕截图 2025-11-10 145831

posted @ 2025-11-10 19:26  叶银珍  阅读(0)  评论(0)    收藏  举报