本文整理自博主学校大一(2021级)C/C++专业课的课程实验报告,适合学弟妹或C语言初学者入门C语言学习、练习。
编译器:gcc 10.3.0
----
注:
1.虽然课程名为C++程序设计,但实际上当时校内该课的内容大部分其实都是C语言,C++的元素最多可能只是体现在输入输出。
2.博主当时给出的实验代码可能并不是最优解,这里只是整理并未重编,因此各位前来学习的小伙伴们注意辨别。
目录
一、实验目的
二、实验内容
1、输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。
2、任意输入若干个数,判断这些数是否是素数,若是则输出这个数。
3、输入一个n,表示下面两个菱形图形(实心和空心)的行数(或者一半行数,如下图为n=3),利用循环语句实现输出。
实心菱形
空心菱形
三、实验总结
一、实验目的
- 熟悉掌握用while语句,do-while语句和for语句实现循环的方法。
- 掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。
- 掌握二重循环的执行过程。
- 进一步学习调试程序。
二、实验内容
1、输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。
源代码:
#include<iostream>
using namespace std;
int main()
{
char c;
int letters=0;
int numbers=0;
int space=0;
int others=0;
// 输入一行字符,
cout << "please input some characters:>" << endl;
c=getchar();
// 分别统计出其中和 其它字符的个数。
while(c != '\n'){
if((c>='a' && c<='z') || (c>='A' && c<='Z')){
letters++;//英文字母
}else if(c>='0' && c<='9'){
numbers++;//数字
}else if(c==' '){
space++;//空格
}else{
others++;
}
c=getchar();
}
cout << "letters: "<< letters << endl;
cout << "numbers: "<< numbers << endl;
cout << "space: "<< space << endl;
cout << "others: "<< others << endl;
// 输入一个字符,
// 如果是换行
// 不干了
// 否则计数英文字母,计数空格,计数数字,计数其他字符
// 输入一个字符,
// 如果是换行
// 不干了
// 否则计数英文字母,计数空格,计数数字,计数其他字符
// 输入一个字符,
// 如果是换行
// 不干了
// 否则计数英文字母,计数空格,计数数字,计数其他字符
return 0;
}
运行结果:
2、任意输入若干个数,判断这些数是否是素数,若是则输出这个数。
说明:
1)一行输出5个数
2)循环语句不限
源代码:
#include<stdio.h>
int main()
{
// 任意输入若干个数,
// 判断这些数是否是素数,
// 若是
// 则输出这个数.一行输出5个数
int a[100];
int num=0;
int i=0;
char b;
// 输入一个数
do {
scanf("%d%c",&a[i],&b);
i++;
}while(b != 10); //输入若干个数直到换行结束
// 素数判断
for(int j=0;j<i;j++){
if(a[j]>1){
int end = a[j]/2;
int k;
for(k=2;k<=end;k++){
if(a[j]%k==0)
{
break;
}
}
if(k>end){
printf("%d",a[j]);
num++;
if(num%5==0){
printf("\n");
}
else{
printf(" ");
}
}
}else{
printf("error");
}
}
// if(a[i]是素数)
// cout
// if(这个素数的num%5==0)
// \n
// else
// cout space
return 0;
}
3、输入一个n,表示下面两个菱形图形(实心和空心)的行数(或者一半行数,如下图为n=3),利用循环语句实现输出。
说明:此题相当于两个题,要打印出两个图。
提示:第一个菱形分析*号个数和规律;第二题分析*出现位置及变化规律。
⭐思路详解传送门:循环嵌套思路详解 | 一个“在盒子里过家家”的算法 -- 以冒泡排序与打印菱形为例_c++循环嵌套经典案例分析-CSDN博客
实心菱形
源代码:
#include<iostream>
using namespace std;
int main()
{
// i是行数
// n=5的时候
// 第1行 2个空格 1个*
// 第2行 1个空格 3个*
// 第3行 0个空格 5个*
//
// 第i行 n+1-i个空格 2*i-1个*
int input_line;
int i,j,k; //遍历用的变量
cout << "please input a number:> "<< endl << endl;
cin >> input_line;
// n是行数的一半 n+1是中间行
int n = (input_line-1)/2;
// 输出上半段
for(i=1; i<=n+1; i++){
//一行里面 先输出n+1-i个空格
for(j=1;j<=n+1-i;j++){
cout << " ";
}
//再输出2*i-1个*
for(k=1;k<=2*i-1;k++){
cout << "*";
}
//再换行
cout << endl;
}
// 输出下半段-- 和上面完全一样,就是行数要少一行
for(i=n;i>=1;i--){
//先输出n+1-i 个空格
for(j=1;j<=n+1-i;j++){
cout << " ";
}
//再输出2*i-1个*
for(k=1;k<=2*i-1;k++){
cout << "*";
}
cout << endl;
}
return 0;
}
运行结果:
空心菱形
源代码:
#include <iostream>
using namespace std;
int main()
{
// i是行数
// n是中间行
int i,j,n,input;
cout << "please input a number:> "<< endl << endl;
cin>>input;
n = input/2;
//第一行 n个空格 1个*
for(i=1;i<=n;i++){
cout<<" ";
}
cout<<"*"<<endl;
//2到n行
for(i=1; i<=n; i++){
//一行里面先输出n-i个空格
for(j=1; j<=n-i; j++){
cout<<" ";
}
//然后输出1个*
for(j=1; j<=2; j++){
cout<<"*";
for(j=1; j<=2*i-1; j++)//*+空格+*的长度
{
cout<<" ";
}
cout<<"*";
}
cout<<endl;
}
//下半部分
for(i=n-1; i>=1; i--){
for(j=1; j<=n-i; j++){
cout<<" ";
}
for(j=1; j<=2; j++){
cout<<"*";
for(j=1; j<=2*i-1; j++){
cout<<" ";
}
cout<<"*";
}
cout<<endl;
}
//最后一行 和第一行一样
for(i=1;i<=n;i++)
cout<<" ";
cout<<"*"<<endl;
return 0;
}
运行结果:
三、实验总结
- 1、增加了while语句do-while语句和for语句使用的熟练度。基本能够根据需求判断循环的使用情况以及三种不同循环语句的选择。
- 2、掌握在程序设计中用循环的方法实现一些常用算法。可以初步地读懂代码以及运用。
- 3、掌握了二重循环的执行过程,以及进一步学习了程序调试。