精华内容
下载资源
问答
  • 循环次数已知  循环次数未知 (2) 按照下列要求,编写相应程序段。 1) 起始地址为 string 的主存单元中存放一个字符串(长度大于 6),把 该字符串中的第 1 个和第 6 个字符(字节量)传送给 DX 寄存器; 2...
  • 要求编写一个程序,统计所有C语言源程序中,下列系统函数的被调用次数。 printf open close read write fork signal 统计结果输出到myresult.txt文件按中,格式如下: printf 49 open 13 close 13 read 24 write 16....

    Linux作业-------有一个文件夹,下面有许多个C语言源程序。要求编写一个程序,统计所有C语言源程序中,下列系统函数的被调用次数。

    printf open close read write fork signal
    统计结果输出到myresult.txt文件按中,格式如下:
    printf 49
    open 13
    close 13
    read 24
    write 16
    fork 8
    signal 0

    介绍

    1.主程序用来将九个.c文件中的内容统计到一个data.txt中,对八个.c文件生成一个子程序,读者可自行查看main.c源码及注释以了解细节,main.c make运行后可生成两个.txt文件,data.txt用来存储所有.c文件的文本信息,方便处理,myresult.txt用来显示最终统计结果,在main.c中主要需解决的问题是必须先创建好data.txt,这样才可重复调用rop()函数来实现每个文本的写入其中逻辑关系读者可自行查看上述main.c主函数的for循环内语句。
    2. data.txt完成后再用shell编程进行结果输入到myresult.txt中,需用在输入语句sh shel,运行shel,shel中用echo的打印内容输出重定向到myresult.txt中,其中用强大的grep文本处理,-c表示仅列出包含模式的行数,由于需统计的函数均单处一行,所以此方法可行,同样输出重定向到myresult.txt中。
    3. 在虚拟机中进行。

    主程序—main.c

    #include <stdio.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <string.h>
    #include <sys/wait.h>
    
    
    void op(int fd,char s[]){
        fd=open(s,O_RDWR,0644);
        char buf[1024];
    
        int fd0;
        fd0=open("data.txt",O_CREAT | O_RDWR,0644);
        int flag;
        while(flag = read(fd,buf,strlen(buf)))
            write(fd0,buf,flag);		//将s[]读到的内容写入data.txt
        close(fd);
        close(fd0);
    }	//创建data.txt用已存储.c文件内代码
    
    void rop(int fd,int j,char s[]){
        fd=open(s,O_RDWR,0644);
        char buf[1024];
    
        int fd0;
        fd0=open("data.txt",O_CREAT | O_RDWR,0644);
        int flag;
        while(flag = read(fd,buf,strlen(buf)))
            write(fd0,buf,flag);
        close(fd);
        close(fd0);
    }	//与上个函数类似,主要不同是加了j参数,用来实现lseek()指示写的位置
    
    char *a[9]={"main1.c","a.c","b.c","d.c","func1.c","func2.c","mycopy.c","read.c","write.c"};
           //需要统计的.c文件名数组,用来传递name
    int main(){
        int fd;
        pid_t pid;
        int i;
        int j=0;
        for(i=1;i<9;++i){
            sleep(1);		
            j += 1024;	//每次写入位置需要变化
            if((pid=fork())==0){
                
                break;
            }
        }
        if(pid==0){
            printf("son%d\n",i);	//指示生成几个子进程
            if(i==1)
                op(fd,a[i]);
            else
                rop(fd,j,a[i]);
        }else{
            op(fd,a[0]);
                
        }
        fd=open("myresult.txt",O_CREAT | O_RDWR,0644);		//生成myresult.txt用来存储最终结果
        close(fd);
        return 0;
    }
    
    

    一个简单的makefile

    a: main.o
    gcc main.o -o a

    main.o: main.c
    gcc main.c -c

    clean:
    rm *.o a *.txt

    运用shell编程及grep处理文本

    #!/bin/sh
      
    echo "printf    \c ">>myresult.txt
    grep -c "printf" data.txt>>myresult.txt
    echo "open      \c">>myresult.txt
    grep -c "open" data.txt>>myresult.txt
    echo "close      \c">>myresult.txt
    grep -c "close" data.txt>>myresult.txt
    echo "read      \c">>myresult.txt
    grep -c "read" data.txt>>myresult.txt
    echo "write      \c">>myresult.txt
    grep -c "write" data.txt>>myresult.txt
    echo "fork      \c">>myresult.txt
    grep -c "fork" data.txt>>myresult.txt
    echo "signal      \c">>myresult.txt
    grep -c "signal" data.txt>>myresult.txt
    echo "pthread      \c">>myresult.txt
    grep -c "pthread" data.txt>>myresult.txt
    echo "scanf      \c">>myresult.txt
    grep -c "scanf" data.txt>>myresult.txt
    
    展开全文
  • 将一张100元的钞票换成1元、5元和10元的钞票,每种钞票至少一张,编写程序输出所有的换法,循环次数需要尽可能地少。 看到这个题就是个水题,但是最后这一句话把难度加大了一点点,虽然还是有点低。但是看别人写完...

    将一张100元的钞票换成1元、5元和10元的钞票,每种钞票至少一张,编写程序输出所有的换法,循环次数需要尽可能地少。

    有题目不会写就留言,我写博客
    看到这个题就是个水题,但是最后这一句话把难度加大了一点点,虽然还是有点低。但是看别人写完,循环次数几百的几千的都有,我算了一下我的,没超过100,如果有大佬比我的还少,请评论(那个直接输出9*9=81种就不要评论了),直接输出的就不要bb了。。。。
    ok,接下来看代码吧,代码还是比较容易看懂的

    
    public class nxbhd
    {
    	public static void main(String[] args)
    	{
    		int c=0;
    		int money=100-10-5-1-4;//最后减4,是因为4元只能用1元才可以换
    		for (int i = 0; i <= 8; i++)
    		{
    			for(int j=(8-i)*2; j >=0 ;j--){
    				System.out.println("10元的"+(i+1)+"张+5元的"+(j+1)+"张+1元的"+(80-i*10-j*5+5)+"张");
    				c++;
    			}
    		}
    		System.out.println("一共有"+c+"种");
    	}
    }
    

    在这里插入图片描述
    输出有点多,如果你只需要结果的话,自己删一下for循环里面的输出,只保留c++就可以了。

    展开全文
  • 第六章 循环控制;6.1 概 述;6.1 goto语句以及用goto语句构成循环;sum=0+1 sum=1+2=3 sum=3+3=6 sum=6+4 sum=4950+100=5050;3.说明 ;例:分析下面程序的运行结果 ;...例:分析下列程序段的循环次数#include "stdio.h" void
  • 实验三 循环结构程序设计

    千次阅读 2018-11-06 21:38:44
    实验三 循环结构程序设计 一、实验目的 1.熟练掌握三种循环语句的应用。 2. 熟练掌握循环结构的嵌套。 3. 掌握break和continue语句的使用。 4. 练习调试与修改程序。...1.[目的]掌握循环次数已知的循...

    实验三 循环结构程序设计
    一、实验目的
    1.熟练掌握三种循环语句的应用。
    2. 熟练掌握循环结构的嵌套。
    3. 掌握break和continue语句的使用。
    4. 练习调试与修改程序。
    5. 掌握一组数据求和、求平均值、求最大值最小值的计算方法。
    6.掌握循环次数已知、未知的处理方法(精度的控制、结束标志的使用等)
    7.掌握简单图形的打印输出处理。
    二、实验内容
    1.[目的]掌握循环次数已知的循环控制处理方法。
    [题目内容]编写一个程序,其功能为:计算并输出1~10的平方值。
    [输入]无
    [输出]如下形式
    1 squared is 1
    2 squared is 4
    3 squared is 9
    4 squared is 16
    5 squared is 25
    6 squared is 36
    7 squared is 49
    8 squared is 64
    9 squared is 81
    10 squared is 100
    [提示]使用三种循环语句均可。
    #include “stdio.h”
    int main( )
    {
    int i;
    for(i=1; i<=10; i++)
    {
    printf("\n %d squared is %d",i,i*i);
    }
    printf("\n");
    return 0;
    }

    2.[目的]掌握循环次数已知的循环控制处理方法。
    [题目内容]编写一个程序,其功能为:计算并输出 。
    [输入]键盘输入x值
    [输出]计算结果
    [提示]使用三种循环语句均可。
    #include “stdio.h”
    int main()
    {
    int n,x,sum=0;
    printf(“请输入x:”);
    scanf("%d",&x);
    for(n=1; n<=100; n++)
    {
    sum=sum+x*x;
    }
    printf(“sum=%d\n”,sum);
    return 0;
    }

    如果程序功能为:计算并输出 ,要求从键盘输入n、x值,程序应如何修改?
    修改
    #include “stdio.h”
    int main()
    {
    int i,n,x,sum=0;
    printf(“请输入x:”);
    scanf("%d%d",&n,&x);
    for(i=1; i<=n; i++)
    {
    sum=sum+x*x;
    }
    printf(“sum=%d\n”,sum);
    return 0;
    }

    3.[目的]掌握循环次数已知的循环控制处理方法。
    [题目内容]编写一个程序,其功能为:求1-100之间的奇数之和。
    [输入]无
    [输出]计算结果
    [提示]使用三种循环语句均可。(分栏中任选一栏)

    #include “stdio.h”
    int main()
    {
    int i=1,sum=0;
    for(i=1; i<=100; i=i+2)
    {
    sum=sum+i;
    }
    printf(“sum=%d\n”,sum);
    return 0;
    }

    #include “stdio.h”
    int main()
    {
    int i=1,sum=0;
    while(i<100)
    {
    sum+=i;
    i+=2;
    }
    printf(“sum=%d\n”,sum);
    return 0;
    }

    #include “stdio.h”
    int main()
    {
    int i=1,sum=0;
    do
    {
    sum+=i;
    i+=2;
    } while(i<100)
    printf(“sum=%d\n”,sum);
    return 0;
    }

    4.[目的]掌握循环次数已知的循环控制处理方法。
    [题目内容]编写一个程序,其功能为:输出100以内能被7整除的数。
    [输入]无
    [输出]判断结果
    [提示]使用三种循环语句均可。
    #include “stdio.h”
    int main()
    {
    int i,sum=0;
    for(i=1; i<=100; i++)
    {
    if(i%7==0) printf("%d\t",i);
    }
    return 0;
    }

    三、课后作业(写在实验报告中)
    1.[目的]掌握循环次数已知的循环控制处理方法。
    [题目内容]编写一个程序,其功能为:计算并输出一年12个月的总降雨量和平均降雨量。
    [输入]12个月的降雨量
    [输出]总降雨量和平均降雨量
    [提示]使用for循环语句,和值、平均值变量采用双精度类型,和值初值设为零。
    #include “stdio.h”
    int main()
    {
    int i;
    double x,sum=0,ave;
    for(i=1; i<=12; i++)
    {
    printf(“请输入%d月的降雨量:”,i);
    scanf("%lf",&x);
    sum=sum+x;
    }
    ave=sum/12;
    printf(“sum=%lf\tave=%lf\n”,sum,ave);
    return 0;
    }

    2.[目的]掌握循环次数已知的循环控制处理方法。
    [题目内容]编写一个程序,其功能为:在0°到90°之间每隔5°输出一行数据,打印一个表。每行中包括5个项目:角度数,以及它所对应的正弦、余弦、正切、余切函数值。
    [输入]无
    [输出]如下表格

    [提示]使用for循环语句和if语句,注意0°、90°时的正切和余切的处理。
    #include “stdio.h”
    #include “math.h”
    #define PI 3.1415926
    int main()
    {
    int i;
    double ih;
    printf(“角度数 正弦 余弦 正切 余切\n”);
    for(i=0; i<=90; i=i+5)
    {
    ih=i*PI/180;
    if(i0)
    {
    printf("%d\t%lf\t%lf\t%lf\t%c\n",i,sin(ih),cos(ih),sin(ih)/cos(ih),’-’);
    }
    else if(i
    90)
    {
    printf("%d\t%lf\t%lf\t%c \t%lf\n",i,sin(ih),cos(ih),’-’,cos(ih)/sin(ih));
    }
    else
    {
    printf("%d\t%lf\t%lf\t%lf\t%lf\t\n",i,sin(ih),cos(ih), sin(ih)/cos(ih),cos(ih)/sin(ih));
    }
    }
    return 0;
    }

    3.[目的]掌握循环次数已知的循环控制处理方法。
    [题目内容]编写一个程序,其功能为:输入10个字符,输出各个字符的ASCII编码。
    [输入] 10个字符
    [输出] 各个字符的ASCII编码
    [提示]使用for循环语句,字符的输入不需要分隔符,可以连续输入10个字符。
    #include “stdio.h”
    int main()
    {
    int i;
    char ch;
    for(i=1; i<=10; i++)
    {
    printf(“请输入一个字符:”);
    scanf("%c",&ch);
    printf("\n%c %d\n",ch,ch);
    }
    return 0;
    }

    需要注意的是如果输入一个字符回车,则计算机认为你输入了两个字符,其中一个为回车符。

    4.[目的]掌握循环次数未知的循环控制处理方法。
    [题目内容]编写一个程序,其功能为:计算一批货物的总值,输入货物单价和数量。事先不知道需要统计的货物有多少种。
    [输入] 货物单价和数量
    [输出] 货物的总值
    [提示]使用while循环语句或do…while语句,设计一个特殊值作为循环结束的标志,例如,单价值为零。
    #include “stdio.h”
    int main()
    {
    double price,num,sum=0;
    printf(“请输入货物单价和数量:”);
    scanf("%lf%lf",&price,&num);
    while(price!=0)
    {
    sum=sum+price*num;
    printf(“请输入货物单价和数量:”);
    scanf("%lf%lf",&price,&num);
    }
    printf(“sum=%lf\n”,sum);
    return 0;
    }

    5.[目的]掌握递推法的处理方法。
    [题目内容]编写一个程序,其功能为:输出fibnocci数列的前20项,每行输出5个。说明:fibnocci数列的前两项均为1,以后各项等于其前两项之和。
    [输入] 无
    [输出] fibnocci数列的前20项
    [提示]使用for循环语句以及递推算法,fibnocci数列的前两项均为1,以后各项等于其前两项之和。
    #include “stdio.h”
    int main( )
    {
    int i,f1,f2,f3,n;
    f1=1;
    f2=1;
    printf("\n%8d%8d",f1,f2);
    n=2;
    for(i=1; i<=18; i++)
    {
    if(n%5==0)
    {
    printf("\n");
    }
    f3=f1+f2;
    printf("%8d",f3);
    n++;
    f1=f2;
    f2=f3;
    }
    printf("\n");
    return 0;
    }

    6.[目的]掌握递推法的处理方法。
    [题目内容]编写一个程序,利用递推法计算下列公式:

    要求精确到10-6。
    [输入] 无
    [输出] 计算结果
    [提示]使用do…while循环语句以及递推算法,当计算到n项时, ,当计算到n+1项时, 。
    计算到yn+1-yn= ≤10-6为止。
    #include “stdio.h”
    int main( )
    {
    int n=1,m;
    double y1,y=1;
    do
    {
    m=n*(n+1);
    y1=1.0/m;
    y=y+y1;
    n++;
    }
    while(y1>=10e-6);
    printf(“y=%lf\n”,y);
    return 0;
    }

    7.[目的]掌握递推法的处理方法。
    [题目内容]求和值Sn=a+aa+aaa+……+aaaa…aa(n位)。如n=5,a=3,则是求S5=3+33+333+3333+33333。编写程序对于任意输入的a和n,求Sn。
    [输入] a和n
    [输出] Sn
    [提示]使用for循环语句以及递推算法。可设定一个变量m,m的初值为a,将m的值加到初值为0的变量S中;下一个要加的值可如下计算:m=m10+a,共加n次。
    #include <stdio.h>
    int main()
    {
    int a,n,i;
    long term,sum;
    printf(“请输入a,n:”);
    scanf("%d,%d",&a,&n);
    term=a;
    sum=a;
    for(i=2; i<=n; i=i+1)
    {
    term=term
    10+a;
    sum=sum+term;
    }
    printf(“sum=%ld\n”,sum);
    return 0;
    }

    8.[目的]掌握递推法的处理方法。
    [题目内容]编写一个程序,求1+2!+3!+…+20!的和。
    [输入] 无
    [输出] 1+2!+3!+…+20!的和
    [提示]使用for循环语句以及递推算法。关键语句long term=1,sum=0;term=term*i ; sum=sum+term;

    #include <stdio.h>
    int main()
    {
    long long term=1,sum=0,i;
    for(i=1; i<=20; i++)
    {
    term=term*i;
    sum=sum+term;
    }
    printf("%lld\n",sum);
    return 0;
    }

    注意:本程序在VC6下编译不了,用codeblocks编译。

    9.[目的]掌握穷举法的处理方法。
    [题目内容]编写一个程序,判断一个整数是否素数。
    [输入] 无
    [输出] 是否素数的信息
    [提示]使用for循环语句以及穷举算法。利用素数的定义。
    #include “stdio.h”
    int main( )
    {
    int x,i;
    printf(“请输入一个整数:”);
    scanf("%d",&x);
    for(i=2; i<x; i++)
    {
    if(x%i==0)
    {
    printf("\n%d不是素数。\n",x);
    break;
    }
    }
    if(i>=x)
    {
    printf("\n%d是素数。\n",x);
    }
    return 0;
    }

    10.[目的]掌握穷举法的处理方法。
    [题目内容]编写一个程序,输出99乘法口诀表。
    [输入] 无
    [输出] 9
    9乘法口诀表。
    [提示]使用for循环语句以及穷举算法。算法提示:分行与列考虑,共9行9列,外循环控制行,内循环控制列。
    方阵
    #include <stdio.h>
    int main()
    {
    int i,j;
    for(i=1; i<=9; i++)
    {
    for(j=1; j<=9; j++)
    {
    printf("%2d*%2d=%2d “,i,j,i*j);
    }
    printf(”\n");
    }
    return 0;
    }

    斜三角
    #include <stdio.h>
    int main()
    {
    int i,j;
    for(i=1; i<=9; i++)
    {
    for(j=1; j<=i; j++)
    {
    printf("%2d*%2d=%2d “,i,j,i*j);
    }
    printf(”\n");
    }
    return 0;
    }

    11.[目的]掌握穷举法的处理方法。
    [题目内容]编写一个程序,打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数。
    [输入] 无
    [输出] 所有的“水仙花数”
    [提示]使用for循环语句以及穷举算法。算法提示:
    ①利用单层for循环控制对100—999之间的数,每个数分解出个位,十位,百位。
    ②使用3重for循环,循环变量分别取值为1-9,0-9,0-9。
    #include <stdio.h>
    int main()
    {
    int i,a,b,c;
    for (i=100; i<=999; i++)
    {
    a=i/100;
    b=i%100/10;
    c=i%10;
    if(aaa+bbb+ccc==i)
    {
    printf("%d\n",i);
    }
    }
    return 0;
    }

    #include <stdio.h>
    int main()
    {
    int i,j,k;
    for (i=1; i<=9; i++)
    {
    for(j=0; j<=9; j++)
    {
    for(k=0; k<=9; k++)
    {
    if(i100+j10+k==iii+jjj+kkk)
    {
    printf("%d\n",i100+j10+k);
    }
    }
    }
    }
    return 0;
    }

    12.[目的]掌握图形输出的处理方法。
    [题目内容]一个电子器件的可靠性由下面等式给定:可靠性(r)=e-t,其中,为器件每小时的失效率,t为运行时间(以小时为单位)。编写一个程序,画出一个图形,用来确定在0到3000小时内不同运行时间的可靠性。失效率为0.001。
    [输入] n=3000,lamda=0.001
    [输出] 图形
    [提示]使用for循环语句,算法提示:t的值由for语句按步长为150生成 for(t=0;t<=3000;t=t+150),语句R=(int)(50r+0.5)中的整数50是一个放大因子,用来把r转换为一个较大的数值,该数值用于描述曲线(r的值总是小于)。
    #include <stdio.h>
    #include <math.h>
    int main()
    {
    double r,lamda;
    int i,t,n,R;
    printf(“请输入器件的每小时失效率:”);
    scanf("%lf",&lamda);
    printf(“请输入最大时间:”);
    scanf("%d",&n);
    for(i=0; i<=27; i++)
    {
    printf("–");
    }
    printf("\n");
    for(t=0; t<=n; t=t+150)
    {
    r=exp(-lamda
    t);
    R=(int)(50r+0.5);
    printf("|");
    for(i=1; i<=R; i++)
    {
    printf("
    ");
    }
    printf("\n");
    }
    for(i=1; i<3; i++)
    {
    printf("|\n");
    }
    return 0;
    }

    13.[目的]运用已学知识解决实际问题。
    [题目内容]某物品的现值(通常称为帐面价格)由以下等式给出
    P=c(1-d)n
    其中: c=原始价值,d=年折旧率 ,n=已使用年限 P=经过y年后的现值。如果把P看作是该物品经使用年限后的报废价值,编写一个程序,给定原始价值、折旧率、报废价值,计算出可使用的年限。
    [输入] 原始价值、折旧率、报废价值
    [输出] 可使用的年限
    [提示]使用for循环语句、break语句。
    #include <stdio.h>
    #include <math.h>
    int main()
    {
    double c,d,p,p1;
    int n;
    printf(“请输入原始价值、折旧率、报废价值:”);
    scanf("%lf%lf%lf",&c,&d,&p);
    p1=c;
    for(n=0; n<=100000; n++)
    {
    p1=p1*(1-d);
    if(p>p1) break;
    }
    printf(“可使用年限是:%d\n”,n-1);
    return 0;
    }

    展开全文
  • 2014秋C++ 第9周项目 循环程序设计

    千次阅读 2014-10-20 09:13:53
    阅读程序 程序分析题,阅读下列程序,写出程序的运行结果,建议在上机时进行验证(云学堂将给出代码,直接复制到C4droid或CodeBlocks中运行即可),如果与自己的预期有出入,尤其注意对照找出问题。

    课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。


    阅读程序

      程序分析题,阅读下列程序,写出程序的运行结果,建议在上机时进行验证(云学堂将给出代码,直接复制到C4droidCodeBlocks中运行即可),如果与自己的预期有出入,尤其注意对照找出问题。

      读这些小程序,可以见识不少处理技巧。读程序,也是一种非常非常重要的学习方式,应该给予重视!


    1. 

    #include<iostream>
    using namespace std;
    int main()
    {
    	char c1,c2;
    	for(c1='0',c2='9';c1<c2;c1++,c2--)
    		cout<<c1<<c2;
    	cout<<endl;
    	return 0;     
    }

    2

    #include<iostream>
    using namespace std;
    int main( )
    {
        int x=0;
        while(x<=5)
        {
            cout<<"B";
            x+=2;
        }
        return 0;
    }


    3

    #include<iostream>
    using namespace std;
    int main ( )
    {
    	int  i , j, s=0;
    	for (i=1; i<=4; i++)
    	{
    		for( j=1; j<=i; j++)
    			s=s+1;
    	}
    	cout<<"s="<<s<<endl;
    	return  0;
    }

    4 . 

    #include<iostream>
    using namespace std;
    int  main()  
    {
    	int number=7239,digit;
    	do
    	{
    		digit=number%10;
    		number=number/10;
    		cout<<digit;
    	} while(number>0);
    	cout<<endl;
    	return 0;
    }

    5.

    #include <iostream>
    #include <windows.h>    //使用Sleep()函数必须包含windows.h,这种方法只适用于windows
    using namespace std;
    int main( )
    {
        int i;
        for(i=1; i<=10; i++)
        {
            Sleep(200);   //等待200毫秒
            cout<<"■";
        }
        cout<<endl;
        return 0;
    }

    说明:在Linux下,有sleep函数,但头文件不是windows.h(请自行查阅资料)。这个程序不能在C4droid下运行,因为C4droid基于安卓平台,底层是Linux


    6.

    #include <iostream>
    #include <windows.h>
    using namespace std;
    int main( )
    {
        int i;
        cout<<"安装进度:"<<0<<'%';
        for(i=1; i<100; i++)
        {
            Sleep(100);
            if(i<=10)
                cout<<"\b\b";
            else
                cout<<"\b\b\b";
            cout<<i<<'%';
        }
            cout<<"\b\b\bdone!"<<endl;
        return 0;
    }

    重要技能体验

      单步执行,是程序运行的另外一种形式,是对程序进行调试的时候使用的一种非常非常非常有用的的手段。请用CodeBlocks的单步执行方式,运行上面阅读程序部分的24,对程序进行单步执行,并观察变量的值的变化。请选取其中的一个程序发表博文,截屏中能够看到代码、当前观察变量的值以及输出窗口中的中间结果。

      单步执行的指导文档和视频,请到云学堂第5讲和第6讲的材料中找。

    C++课程新玩法

      完成本周实践项目的过程中,请思考用刚刚学过的知识,能解决什么样的有应用价值的问题,或者完成什么好玩的事情。将你的想法写成一个编程题目,并写出参考解答(自己解答不了的,也可以只写个思路,让兄弟们补充),通过你的博客、我们的QQ群分享。

      如果你将题目和参考解答发给老贺(sxhelijian@163.com),你编制的题目将有机会成为我们的学期中间的练习题,甚至是期末考试的题目!期待好题,期待原创!

    上机实践项目

    【项目1:利用循环求和】求1000以内所有偶数的和

    要求:请编出3个程序来,分别用三种循环语句完成,注意体会各种循环语句的执行过程及语法特点。


    【项目2:分数的累加】编程序,输出1/3-3/5+5/7-7/9+19/21的结果

    提示:关注效率,要求用单重循环完成,累加项目一正一负交替,不能用pow(-1,i)pow()C++中求幂的函数,但效率低)。处理一正一负交替的技巧是:专门设置一个变量s表示累加项的符号,初值为1,每次循环乘以-1,从而在+1-1之间交替变化,再将待加项与s相乘后再相加。


    【项目3:输出星号图】自选下面的几个图案,编程序输出(自选两个完成,其他的想想思路即可)。

       

    【项目4:乘法口诀表】编程序,输出一个乘法口诀表,形如

     

    提示:一共要输出9行,每一行……


    【项目5:程序填充题】在程序中横线上填上恰当的成分,使完成题目要求的功能:

    1.输出1000以内能被3整除且个位数为6的所有整数。

    #include <iostream>
    using namespace std;
    int main()
    {
        int  i, j;
        for (i=0;_________; i++)         // (1)
        {  
            j=i*10+6;
            if (j%3==0)
                 ____________;    // (2)
        }
        cout<<endl;
        return 0;     
    }

    2 .输入 10 个整数,找出最大数。

    #include <iostream>
    using namespace std;
    int main()
    {
      int  k,x,max;
      cin>>x;
      max=______;                 // (1)
      for(k=2;  k<=___ ; k++)       //  (2)
      {
         cin>>x;
         if (_______)  max=x;      //  (3)
      }
      cout<<"Max="<<max<<endl;
      return 0;     
    }


    3.从键盘输入20个整数,输出它们的和。

    #include <iostream>
    using namespace std;
    int main()
    {
       int a,sum=0;
       for (int i=1;i<=20;________)     // (1)
       {
          cin>>a;   
          sum=______;                //  (2)
       }
       cout<<"sum="<<sum<<endl;
       return 0;      
    }


    【项目 6 :穷举法解决组合问题】(自选两题完成,其他的想一想即可。当然,全做完收效更好)

    先阅读例题,领会穷举法(意为“穷尽式列举”,也称枚举)的思想,然后自行选题进行解决,掌握这种程序设计的一般方法。

    例题:小明有五本新书,要借给ABC三位小朋友,若每人每次只能借一本,则可以有多少种不同的借法?

    问题分析与算法设计:本问题实际上是一个排列问题,即求从5个中取3个进行排列的方法的总数。首先对五本书从15进行编号,然后使用穷举的方法。假设三个人分别借这五本书中的一本,当三个人所借的书的编号都不相同时,就是满足题意的一种借阅方法。

    下面是程序及其注释,要注意利用三重循环“穷举”:

    #include <iostream> 
    using namespace std;
    int main()
    {
    	int a,b,c,count=0;
    	cout<<"小明借书给三位小朋友书的方案有:"<<endl;
    	for(a=1;a<=5;a++)			//穷举a借5本书中的1本的全部情况
    		for(b=1;b<=5;b++)		//穷举b借5本书中的一本的全部情况
    			for(c=1;c<=5;c++)	//穷举c借5本书中的1本的全部情况
    				if(a!=b&&c!=a&&c!=b) //判断三个人借的书是否不同,(a-b)*(b-c)*(c-a)!=0更好
    				{
    					++count;
    					cout<<count<<": "<<a<<", "<<b<<", "<<c<<endl;//输出方案
    				}
    	return 0;
    }

    任务:利用穷举的方法解决下面的问题(选做一道即算完成任务,其他可以抽时间自由安排,多做会使你更聪明。)

    1)百钱百鸡问题:中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?

    提示:设鸡翁、鸡母、鸡雏的个数分别为x,y,z,题意给定共100钱要买百鸡,若全买公鸡最多买20只,显然x的值在0~20之间;同理,y的取值范围在0~33之间,可得到下面的不定方程:

    5x+3y+z/3=100

    x+y+z=100

    所以此问题可归结为求这个不定方程的整数解。

    由程序设计实现不定方程的求解与手工计算不同。在分析确定方程中未知数变化范围的前提下,可通过对未知数可变范围的穷举,验证方程在什么情况下成立,从而得到相应的解。

    引申:这类求解不定方程的实现,各层循环的控制变量直接与方程未知数有关,且采用对未知数的取值范围上穷举和组合的方法来复盖可能得到的全部各组解。如果要采取技巧,往往是根据题意,更合理地设置循环控制条件来减少这种穷举和组合的次数,提高程序的执行效率,需要具体问题具体分析。

    2)换分币:用一元人民币兑换成1分、2分和5分硬币,有多少种不同的兑换方法?请输出所有可能的方案。

    提示:根据题意设i,j,k分别为兑换的1分、2分、5分硬币的枚数,则i,j,k的值应满足:i+j*2+k*5=100,根据取值范围构造循环解题即可。

    3)年龄几何:张三、李四、王五、刘六的年龄成一等差数列,他们四人的年龄相加是26,相乘是880,求以他们的年龄为前4项的等差数列的前20项。

    提示:设数列的首项为n,项差为a,则前4项之和为n+(n+a)+(n+a+a)+(n+a+a+a)=4*n+6*a",前4 项之积为n*(n+a)*(n+a+a)*(n+a+a+a)。同时有1<=a<=4和1<=n<=6。可采用穷举法求出此数列。

    3)三色球问题:若一个口袋中放有12个球,其中有3个红的。3个白的和6个黒的,问从中任取8个共有多少种不同的颜色搭配?

    提示:设任取的红球个数为i,白球个数为j,则黒球个数为8-i-j,根据题意红球和白球个数的取值范围是0~3,在红球和白球个数确定的条件下,黒球个数取值应为8-i-j<=6。

    4)委派任务:某侦察队接到一项紧急任务,要求在ABCDEF六个队员中尽可能多地挑若干人,但有以下限制条件:

    l A和B两人中至少去一人;

    l A和D不能一起去;

    l A、E和F三人中要派两人去;

    l B和C都去或都不去;

    l C和D两人中去一个;

    l 若D不去,则E也不去。

    问应当让哪几个人去?

    提示:用a、b、c、d、e、f六个变量表示六个人是否去执行任务的状态,变量的值为1,则表示该人去;变量的值为0,则表示该人不参加执行任务,根据题意可写出表达式:

    l a+b>1     //A和B两人中至少去一人;

    l (a+d)!=2      //A和D不能一起去;

    l a+e+f==2     // A、E、F三人中要派两人去;

    l b+c==0或b+c==2     // B和C都去或都不去;

    l c+d==1      //C和D两人中去一个;

    l d+e==0或d==1       //若D不去,则E也不去(都不去;或D去E随便)。

    上述各表达式之间的关系为“与”关系。穷举每个人去或不去的各种可能情况,代入上述表达式中进行推理运算,使上述表达式均为“真”的情况就是正确的结果。

    5)在下面的加法算式中,不同的符号代表不同的数字,相同的符号代表相同的数字。请设计程序求出"都、要、学、C"4个符号分别代表的数字。

    提示:让计算机解奥数题。穷举"都、要、学、C"4个符号分别代表的数字(从0到9),然后进行组合,如果组合起来符合规则(不同的符号代表不同的数字,相同的符号代表相同的数字,且使等式成立),则为正解。

    6)警察局抓住了ABCD四名盗窃嫌疑犯,其中只有一人是小偷。在审问时,A说:“我不是小偷”;B说:“C是小偷”;C说:“小偷肯定是D”;D说:“C在冤枉好人”。现在已经知道这四人中有三人说的是真话,一人说的是假话。请问到底谁是小偷?

    提示:设4个变量a,b,c,d,为0时表示不是小偷,为1时表示是小偷,用四重循环穷举a,b,c,d可能的取值的组合,对每一种组合判断其是否符合题目中给出的约束。最后结论:C是小偷。

    7)有等式[※×(3+)]^2=8※※9,其中※处为1个数字,滴上了墨水无法辨认。请编程找出※表示哪个数字。

    拓展:有等式[※×(※3○※)]^2=8※※9,其中※处为1个数字,○处为+、-、×、÷四个运算符之一,现滴上了墨水无法辨认。请编程找出※表示哪个数字,○表示哪个运算符。




     

    =================== 迂者 贺利坚 CSDN博客专栏=================
    |== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==|
    |== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==|
    |== 我写的书——《逆袭大学——传给IT学子的正能量》    ==|
    ===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====




    展开全文
  • 回到课程主页,链接:C++程序设计课程主页-2012级 本次上机对应的教学内容:第3章 C++程序设计初步【项目1:学会单步执行和调试程序】 利用你上周编过的求1000以内所有偶数的和的程序,练习:(1)单步执行功能...
  • 第五章 循环 程序设计练习

    千次阅读 2021-01-27 22:09:02
    5.1(统计正数和负数的数目,计算平均值)编写程序,读入整数(数目未定),判定读入的整数中有多少正数,多少负数,并计算这些整数的总和与平均值(0不计算在内)。如果读入0,程序即终止。平均值以浮点数显示。 ...
  • import java.text.SimpleDateFormat; import java.util.Date; public class 求π { public static void main(String[] ... System.out.printf("值为:"+pi+" 循环次数为:"+i); System.out.println(); } }
  • 请编写一个程序实现这个程序。 Input 9位评委给选手找的分,9个0-10之间的小数 Output 选手的最后得分,即9个成绩中去掉一个最高,去掉一个最低后的平均成绩。结果输出中,保留3位小数。 Sample ...
  • c++程序设计基础(第五版)(上) 习题与解答

    万次阅读 多人点赞 2019-09-09 20:06:44
    C++程序设计基础(第5版)(上) 习题与解答 第1章练习题 同步练习1.1 一、选择题 1.一个最简单的C++程序,可以只有一个( )。 (A)库函数 (B)自定义函数 (C)main函数 (D)空函数 2.函数名是( ),用于...
  • asp循环语句总结

    2021-01-02 22:40:15
    For…Next: 指定循环次数,使用计数器重复运行语句。 For Each…Next: 对于集合中的每项或数组中的每个元素,重复执行一组语句。 现在看几个例子: <body> do while....loop <% 'do while....lo
  • 回到课程主页,链接:C++程序设计课程主页-2012级 本次上机对应的教学内容:第4章 递归函数、变量的作用域、存储类型第一部分 练习+上机验证(不必提交上机报告) 阅读下列程序,写出程序的运行结果。上机时运行...
  • 因此编程时,需要控制文件读写的次数,以提高程序执行的效率。以下列代码为例,进行说明。 words = ['a', 'b', 'c', 'd'] for i in range(4): for line in file('file_read.txt'): if(words[i] in line): ...
  • 6.for i in range(2,n):if n%i==0:breakif i==n-1:print('是素数')...8.对于有else子句的for循环和while循环,但循环循环条件不成立而自然结束时__会__(会或不会)执行else中的代码。10.已知x='hello world.',那...
  • 1 在三种选择结构中,能用2个条件,控制从3个操作中选择一个操作执行的选择结构是____选择结构【分析】能用1个条件,控制某个操作做或不...【答案】多分支2 在三种循环结构中,先执行循环操作内容(即循环体),后判断控制
  • 程序优化

    万次阅读 2016-01-17 18:29:48
    程序优化是指利用软件开发工具对程序进行调整和改进,让程序充分利用资源,提高运行效率,缩减代码尺寸的过程。按照优化的侧重点不同,程序优化可分为运行速度优化和代码尺寸优化。 运行速度优化是指在充分掌握软...
  • 1)用A命令键入下列程序: MOV SI,1000 ;源地址寄存器 MOV DI,1500 ;目的地址寄存器 MOV CX,0F ;设置循环次数15次(因为字符串有15个字符) LOP: MOV AL,[SI] ;寄存器间接寻址 MOV [DI],AL ;从si倒腾到di ...
  • 6.for i in range(2,n):if n%i==0:breakif i==n-1:print('是素数')...8.对于有else子句的for循环和while循环,但循环循环条件不成立而自然结束时__会__(会或不会)执行else中的代码。10.已知x='hello world.',那...
  • 程序设计基础-PTA-程序填空题-1

    千次阅读 2020-10-25 10:41:50
    程序填空题一1-1 交换两个整数的值1-2 number是奇数1-3 number是5的倍数1-4 将数字字符转换为对应数字二2-1 判断某一日是这一年的第几天2-2 输出三个数中的最大值三3-1 计算一个非零整数序列中偶数的平均值3-2 求100...
  • C_C++语言程序设计.docx

    2020-09-25 10:28:12
    大连理工大学网络教育学院 2018 年春 C/C++语言程序设计 期末考试复习题 注意事项本复习题满分共 400 分 一单选题 1已知 int x=2,y=8 执行 x*=y+2 后 x 的值是 A 20 B 18 C 16 D 12 2下列 while 循环的执行次数是 ...
  • 沈阳师范大学大一上册C语言PTA题目集以及答案(第三章 循环结构程序设计 选择题篇) 2-1 The following piece of code prints out__. for (a=1,i=-1; -1<=i<1; i++) { a++; printf("%2d", a); } printf("%2d",...
  • C_C++语言程序设计.doc

    2020-06-10 07:36:19
    机 密启用前 理工大学网络教育学院 2018年春C/C++语言程序设计 期末考试复习题 注意事项本复习题满分共400分 一单选题 1已知int x=2,y=8执行 x*=y+2后x的值是 A20 B18 C16 D12 2下列while循环的执行次数是 while(int...
  • 大连理工大学网络教育学院 2017 年秋 C/C++语言程序设计 期末考试复习题 注意事项本复习题满分共 400 分 一单选题 1下列 while 循环的执行次数是 A while(int i=0) i++; A0 B1 C5 D无限 2下列哪个函数不是类的成员...
  • 【汇编程序】实现一维数组的逆置

    千次阅读 2019-04-14 17:00:08
    程序需求:编程写一个完整的程序,将数组array中的元素按逆序存放,要求程序中附加的变量最少。数据段的定义如下: .data array dword 12,4, 168,122...汇编中esi为头指针,edi为尾指针,ecx为循环次数。 开发环境...
  • 一单项选择题 面向对象程序设计数据与_放在一起作为一个相互依存不可分割的整体来处理 A对数据的操作 B信息 C数据隐藏 D数据抽象 已知inta=1,b=2,c=3,d=4则表达式a的值为_ A1 B2 C3 D4 3下列while循环次数是_...
  • 【单选题】13.Python表达式中,可以使用( )控制运算的优先顺序。【多选题】下列属于地铁基建施工准备环节的工作有【其它】完成书上的案例...下列for循环执行后,输出结果的最后一行是( )。 for i in range(1,3): for j...
  • 继上一篇我们学习了脚本语言 VBScript 的函数和条件语句后,今天我们继续来看看... For…Next: 指定循环次数,使用计数器重复运行语句。  For Each…Next: 对于集合中的每项或数组中的每个元素,重复执行一组
  • 下列for循环次数为():for ( i=0,x=0;! x && i<=5;i++) A. 5 B. 6 C. 1 D. 无限 下述关于循环体的描述中,()是错误的。 循环体中可以出现break语句和continue语句;B.循环体中还可...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,526
精华内容 12,210
关键字:

下列程序的循环次数是