高级语言程序设计第四次作业
高级语言程序设计第四次个人作业
- 作业课程:2025高级语言程序设计(福州大学)
- 作业要求:高级语言程序设计第四次个人作业
- 学号:052406103
- 姓名:叶银珍
作业内容
- 运行以下程序给出程序结果


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

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

- 设计一个程序,实现功能:逻辑表达式中的运算符,只有会影响表达式求值时,才会执行。
#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;
}

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

- 编程输入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;
}

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

- 设计一个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;
}

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

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


- 设计一个循环程序,再循环中用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;
}

- 设计一个程序求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;
}

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

程序NS流程图:

编写并运行书本第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;
}

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

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

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

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

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

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

编写并运行书本第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;
}

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

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

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

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

浙公网安备 33010602011771号