目录
引言
我想把大学期间写的材料挑选一些发上来保存一下,这是本人大学期间做的一次实验作业。
一.实验目的:
- 掌握循环程序设计思路;
- 能熟练使用3种循环结构对问题进行求解;
- 掌握穷举法、递推法等在工程问题中的应用。
二、实验内容和步骤: |
1. 分析并修改下面程序错误,使之能够正常运行。
错误代码如下: 该程序用于求从1到100的整数和。
#include <stdio.h>
int main()
{
int i=1;
int sum=0;
while (i<=100);
{
sum+=i;
}
printf("sum=%d\n",sum);
return 0;
}
编译环境中正确代码、运行结果截图及错误原因分析如下:
/*分析并修改下面程序错误,使之能够正常运行。
该程序用于求从1到100的整数和。错误代码如下.*/
#include <stdio.h>
int main()
{
int i=1;
int sum=0;
while (i<=100)
{
sum+=i;
i++;
}
printf("sum=%d\n",sum);
return 0;
}
错误原因:
i的值没有递增,while语句后面没有分号。
2. 编写程序实现以下功能
(1)请用三种结构实现从1到20之间的偶数累加,奇数相乘,并将偶数累加的结果输出,奇数相乘的结果输出。
编译环境中正确代码、运行结果截图如下:
#include<stdio.h>
int main()
{
int sum1=0,sum2=1,i=0;
for(i=0;i<=20;i++)
{
if(i%2==0){
sum1+=i;
}
else{
sum2*=i;
}
}
printf("偶数相加和为:%d,奇数相乘积为:%d",sum1,sum2);
return 0;
}
(2)从键盘输入任意字符(直到输入字符q或Q时退出),分别统计输出一共有多少个数字,多少个小写字母,多少个大写字母及多少个除上述以外的其他字符的个数。(注意:这里最后一个q或Q也要计算在内!)
编译环境中正确代码、运行结果截图如下:
//题目3(3) 统计键盘输入的不同类型字符个数。
//请给出你的程序,并进行测评,注意所给的测试集。
#include<stdio.h>
int main()
{
int number=0,lowercase=0,capital=0,other=0;
char character;
while(1)
{
scanf("%c",&character);
if('a'<=character&&character<='z')
{
lowercase++;
}
else if('A'<=character&&character<='Z')
{
capital++;
}
else if('0'<=character&&character<='9')
{
number++;
}
else{
other++;
}
if(character=='q'||character=='Q')
{
break;
}
}
printf("%d %d %d %d",number,lowercase,capital,other);
return 0;
}
(3)要求按如下数字形状输出(循环嵌套)。
1
123
12345
1234567
编译环境中正确代码、运行结果截图如下:
/*
要求按如下数字形状输出,代码有错误,请修改正确。
1
123
12345
1234567
代码如下: */
#include<stdio.h>
int main()
{
int i, j;
for(i=1; i<=7; i=i+2)
{
for(j=1; j<=i; j++)
{
printf("%d",j);
}
printf("\n");
}
return 0;
}
(4)编写程序,打印99乘法表,输出样式如下(注意:其中的框线不需要打印出来)
编译环境中正确代码、运行结果截图如下:
/*题目4 编写程序,打印99乘法表。
请给出你的程序,并进行测评,注意下面所给的测试集。为方便看代码你在熟悉测试集以后可以删除下面的内容。
1X1=1
1X2=2 2X2=4
1X3=3 2X3=6 3X3=9
1X4=4 2X4=8 3X4=12 4X4=16
1X5=5 2X5=10 3X5=15 4X5=20 5X5=25
1X6=6 2X6=12 3X6=18 4X6=24 5X6=30 6X6=36
1X7=7 2X7=14 3X7=21 4X7=28 5X7=35 6X7=42 7X7=49
1X8=8 2X8=16 3X8=24 4X8=32 5X8=40 6X8=48 7X8=56 8X8=64
1X9=9 2X9=18 3X9=27 4X9=36 5X9=45 6X9=54 7X9=63 8X9=72 9X9=81
每个表达式之间是空英文的一格,乘号用的是大写英文字母X
*/
#include<stdio.h>
int main()
{
int i,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
{
printf("%dX%d=%d",j,i,i*j);
printf(" ");
}
printf("\n");
}
return 0;
}
(5)将一面额为10元倍数的整钱换成1元、2元和5元的零钱组合(每种面值都要有)。输入要换的面额(如10元),输出所有可能的换法数量(如2种)。
编译环境中正确代码、运行结果截图如下:
/*
题目5 将一面额为10元倍数的整钱(<=100元)换成1元、2元和5元的零钱组合(每种面值都要有)。输入要换的面额(如10元),输出所有可能的换法(分别输出所有5元、2元和1元的数量组合),以及换法的总数量 。
请给出你的程序,并进行测评,注意下面所给的测试集。
*/
#include<stdio.h>
int main()
{
int five=0,two=0,one=0,num=0,sum=0;
scanf("%d",&sum);
for(five=sum/5;five>=1;five--)
{
for(two=sum/2;two>=1;two--)
{
for(one=sum;one>=1;one--)
{
if((sum==5*five+2*two+one)&&(two!=0)&&(one!=0)&&(five!=0))
{
printf("%d %d %d\n",five,two,one);
num++;
}
}
}
}
printf("%d",num);
return 0;
}
三、实验小结
本次实验较为简单,基本没遇到什么问题,就是有时会审题错误。