上机作业-1.2 do -- while 语句 main() { int n , i=1 , s=0; scanf("%d",&n); do {s = s + i ; i++ ;} while(i<=n); printf("s = %d",s); } 上传程序截图

题目

上机作业-1.2 do -- while 语句 main() { int n , i=1 , s=0; scanf("%d",&n); do {s = s + i ; i++ ;} while(i<=n); printf("s = %d",s); } 上传程序截图


相似考题
更多“上机作业-1.2 do -- while 语句 main() { int n , i=1 , s=0; scanf("%d",&n); do {s = s + i ; i++ ;} while(i<=n); printf("s = %d",s); } 上传程序截图”相关问题
  • 第1题:

    有以下程序 main( ) { int i=0,s=0; do{ if(i%2){i++;continue;} i++; s+=i; } while(i<7); printf("%d\n",s); } 执行后输出的结果是

    A.16

    B.12

    C.28

    D.21


    正确答案:A
    解析:本题的功能是计算0~7之间所有奇数的和(包括7)。

  • 第2题:

    程序段s=i=0;do{i=i+1;s=s+i;}while(i=n);的时间复杂度为()。

    A、O(n)

    B、O(nlog2n)

    C、O(n)

    D、O(n/2)


    参考答案:A

  • 第3题:

    下列给定程序中,函数fun()的功能是:在字符串的最前端加入n个*号,形成新串,并且覆盖原串。

    注意:字符串的长度最长允许79。

    请改正函数fun()中的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

    试题程序;

    include <stdio.h>

    include <strzng.h>

    include <conio.h>

    /*****************found***************/

    void fun(char s[], int n)

    {

    char a[80],*p;

    int i;

    /*****************found***************/

    s=p;

    for(i=0; i<n; i++) a[i]='*';

    do

    {a[i]=*p;

    /*****************found***************/

    i++;

    }while(*p);

    a[i]=0;

    strcpy(s,a);

    }

    main()

    { int n;char s[80];

    clrscr();

    printf("\nEnter a string:");gets(s);

    printf("\nThe string\%s\n",s);

    printf("\nEnter n(number of*):");scanf ("%d",&n);

    fun(s,n);

    printf("\nThe string after inster: \%s\n",s);

    }


    正确答案:(1)错误:void fun(char s[]int n) 正确:void fun(char *s int n) (2)错误:s=p; 正确:p=s; (3)错误:i++; 正确:i++;p++; (4)错误:a[i]=0; 正确:a[i]='\0';
    (1)错误:void fun(char s[],int n) 正确:void fun(char *s, int n) (2)错误:s=p; 正确:p=s; (3)错误:i++; 正确:i++;p++; (4)错误:a[i]=0; 正确:a[i]='\0'; 解析:在本题中,s是数组名,代表数组首地址,在编译时对s数组分配了一段内存单元,因此在程序运行期间s是一个常量,不能再被赋值。因此s=p是错误的,如果把“chars[];”改成“char*s;”,则程序正确。此时s是指向字符数组的指针变量,p=s是合法的,它将字符串的首地址赋给指针变量p,然后在printf函数语句中输出字符串s。因此,应当弄清楚字符数组与字符指针变量用法的区别。

  • 第4题:

    已知C源程序如下: include include void reverse(char S[]){ int C,i,J; f

    已知C源程序如下:

    include<stdio. h>

    include<string. h>

    void reverse(char S[]){

    int C,i,J;

    for(i=0,j=strlen(s)-1;i<j;i++,j++){

    c=s[i];

    s[i]=s[j];

    s[j]=c;

    }

    }

    void getHex(int number,char s[]){

    int I;

    i=0;

    while(number>0){

    if(number%16<10)

    s[i++]=number%16+'0';

    else

    switch(number%16){

    case 10:s[i++]='A';break;

    case 11:s[i++]='B';break;

    case 12:s[i++]='C';break;

    case 13:s[i++]='D';break;

    case 14:s[i++]='E';break;

    case 15:s[i++]='F';break;

    default:printf("Error");break;

    }

    number/=16;

    }

    s[i]:'\o';

    reverse(s);

    }

    int main(){

    unsigned int number;

    int i=0:

    char s[50];

    printf("%s","please input number;\n");

    scanf("%d",&number):

    getHex(number,s);

    i=0;

    while(s[i])

    printf("%c",s[i++]);

    return 0;

    }

    画出程序中所有函数的控制流程图。


    正确答案:流程图
    流程图

  • 第5题:

    下列程序的运行结果是______。

    main()

    { int s=0,i=1;

    while(s<= 10)

    { s=s+i*i;

    i++;

    }

    printf("%d",-i);

    }


    正确答案:3
    3 解析:分析程序运行过程,第1次循环:s=s+i*i=0+1*1=1,i=2;第2次循环:s=s+i*i=1+2*2=5,i=3;第3次循环:s=s+i*i=5+3*3=14, i=4;循环条件不成立输出i,--i使i的值减1,轴出结果为3。

  • 第6题:

    阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。

    【程序2.1说明】

    求所有满足如下条件的三位数:它除以11得的商等于它各位数字的平方和。例如 550,除以11商为50,50=52+52+02。

    【程序2.1】

    void main()

    {

    int i, j,n,s;

    for(i=100;i<=999;i++)

    {

    n=i;

    j=n/11;

    s=0;

    while((1))

    {

    (2)

    n/=10;

    }

    if((3))

    printf("%d\t",i);

    }

    }

    【程序2.2说明】

    本程序输入一字符串,将其中的大写字母改变成小写字母。

    【程序2.2】

    void main()

    {

    int i=0;

    char s[120];

    scanf("%s",s);

    while((4))

    {

    if((5))

    s[i]=s[i]- 'A'+'a';

    i++;

    }

    printf("%s\n",s);

    }


    正确答案:(1)n (2)s=s+(n%10)*(n%10); (3)j==s (4)s[i] (5)s[i]>='A'&&s[i]='Z'
    (1)n (2)s=s+(n%10)*(n%10); (3)j==s (4)s[i] (5)s[i]>='A'&&s[i]='Z' 解析:本题考查C语言中一些运算的实现。
    在程序2.1中要求求出满足如下条件的所有三位数:它除以11得的商等于它各位数字的平方和。要想求出所有结果,我们应该对每个三位数进行计算来判断它是否符合题目中的要求,只有在除以11的商等于各位数字的平方和时,才是我们要求的数。
    有了上述分析后,我们再来看程序2.1的代码,代码中首先声明了几个临时变量 i,j,n,s。接下来是一个循环,其目的是对从100到999的所有三位数来进行运算。再接下来的代码是将当前的这个三位数存放在变量n中,将除以11得到的商存放在i中。
    第(1)空所在的位置是循环的判断条件,根据我们上面的分析和整个程序代码来看,这个循环应该是用来计算三位数中各位数字的平方和用的,再看循环中语句n/=10,其作用是将n的值除以10,因为n是整型变量,保存数据时是直接去除小数点后面的数而只保留前面的整数部分,这个操作其本质是对数字降位,去除最低位(个位)。在对其进行此操作前应该对数字中的最低位进行求平方计算,这也应该是第(2)空的任务,要求个位数的方法是n%10,因此,第(2)空答案应该是“s=s+(n%10)*(n%10)”。第(1)空用来判断数n在变化后是否还有值,答案为n。
    第(3)空所在的位置是条件选择语句的条件,如果此条件成立,就输出变量i的值, i中存放的是当前参与计算的三位数,只有满足除以11得的商等于它各位数字的平方和的三位数才能被输出,那么条件选择语句中的条件应该是判断除以11得的商是否等于它各位数字的平方和。因此,第(3)空的答案为i==s。
    在程序2.2中要求将输入的一字符串中的大写字母改变成小写字母,那么我们首先要了解C语言中大小写字母的转换规则。在C语言中字母的运算其实是字母对应的 ASCII码码值的运算,其中小写字母a对应的ASCII码值为97,a后面的小写字母的ASCII码值依次增加1,而大写字母A的ASCII码值为65,A后面的大写ASCII码值也依次增加。这样,我们就知道了小写字母比对应的大写字母的ASCII码值大32,在将小写字母转化为大写字母时,我们只要相应地将小写字母的ASCII码值减去32或加上32的相反数即可。
    下面,我们来看程序2.2的代码,在代码中,声明了一个长度为120的字符型数组 S存放输入的字符串,下面有一个循环语句,第(4)空是循环语句的循环条件,结合整个程序,我们可以知道,循环语句要实现字符串中大写字母改变成小写字母的功能,所以循环的条件应该是判断在操作时是否取到了字符,而字符是存放在数组中的,因此,此空答案应该是“s[i]”。第(5)空是一个条件选择语句的条件,如果条件成立就执行将大写字母改变成小写字母操作,因此,是判断取到的字符是否为大写字母,所以此空答案为s[i]>='A'&&s[i]='Z'。

  • 第7题:

    设有定义:char s[10];int i=0;,以下不能将一行(不超过100个字符)带有空格的字符串正确读入的语句或语句组是( )。

    A.gets(s);

    B.scanf("%s",s);

    C.while((s[i++]=getchar())!='\n');s[i]='\0';

    D.do{scanf("%c",&s[i]);}while(s[i++]!='\n');s[i]='\0';


    正确答案:B
    解析:本题考查标准输入输出函数和循环语句。gets(s)函数的作用是将输入的字符读入字符串s,直到遇到回车。而scanf()数接收字符串时的结束标志为回车或者空格。因此选巧

  • 第8题:

    设有定义“chars[8];inti=0;”,下列不能将一行(不超过80个字符)带有空格的字符国正确读入的语句或语句组是( )。

    A.gets(s);

    B.while((s[i++]=getchar( ))!=\n);s[i]=\0;

    C.seanf("%S",s);

    D.do{scanf("%C",&s[i]);}while(s[i++]!=\n);s[i]=\0;


    正确答案:C
    C。【解析】在scanf输入函数中,格式字符s的作用是输入一个字符串,直到遇到空格结束。所以选项C不能输入包含空格的字符串。正确答案为选项C。

  • 第9题:

    有以下程序 main(int argc,char *argv[]) { int n,i=0; while(argv[1][i]!='\0') { n=fun();i++;} printf("%d\n",n*argc) ; } int fun() { static int s=0; s=-1; return s; } 假设程序经编译、连接后生成可执行文件exam.exe,若键入以下命令行 cxam123<回车> 则运行结果为

    A.6

    B.8

    C.3

    D.4


    正确答案:A
    解析:主函数的第一个参数argc为整型参数,记下从命令行输入的参数的个数:第二个参数argv是一个字符型的指针数组,它的每一个元素指向命令行输入的参数字符数。在本例中argc的值为2,argv[0]指向字符串“exam”,argv[1]指向参数字符串“123”。在main()函数中,while循环执行了3次,调用了3次fun()函数:第一次调用fun()函数时,定义了一个静态变量s并赋初值0,加1后作为函数值返回,n伪值为1;第二次调用fun()函数时,静态变量s的值将保留上一次退出时的值1,再加1为2,作为函数值返回,n的值为2;同理第三次调用返回后,n的值为3。输出n*argc的值为6。

  • 第10题:

    有以下程序:includemain(){int s=0,a=1,n; scanf("%d",&n); do {s+=1;a=a-2;} whi

    有以下程序: #include <stdio.h> main() { int s=0,a=1,n; scanf("%d",&n); do {s+=1;a=a-2;} while(a!=n); printf("%d\n",s); } 若要使程序的输出值为2,则应该从键盘给n输入的值是( )。

    A.-1

    B.-3

    C.-5

    D.0


    正确答案:B
    解析:本题考查do-while语句。当n=-1时,s+=1,s=1;a=a-2=-1;a!=n不成立,结束循环,此时s值为1,不符合题意;当n=-3时,s+=1,s=1;a=a-2=-1;a!=n成立,继续循环,s=s+1=2,a=a-2=-3;a!=n不成立,此时s值为2,符合题意。

  • 第11题:

    有以下程序includevoidfun(int*s,intn1,intn2){inti,j,t; i=n1j=n2; while(i

    有以下程序 #include <stdio.h> void fun(int *s,int n1,int n2) { int i,j,t; i=n1 j=n2; while(i<j) {t=s[i];s[i]=s[j];s[j]=t;i++;j--;} } main() { int a[10]={1,2,3,4,5,6,7,8,9,0},k; fun(a,0,3); fun(a,4,9); fun(a,0,9); for(k=0;k<10;k++)printf("%d",a[k]); printf("\n"); } 程序的运行结果是

    A.987654321

    B.4321098765

    C.5678901234

    D.987651234


    正确答案:C
    解析:函数fun(int *s,int n1,int n2)的功能是对数组s中的元素进行首尾互相调换。所以在主函数中,当 fun(a,0,3)执行完后,数组a[12]={4,3,2,1,5.6,7,8,9,01;再执行fun(a,4,9),数组a[12]={4,3,2,1,0,9,8,7,6,5};再执行fun(a,0,9)后,数组a[12]={5,6,7,8,9,0,1,2,3,4}。

  • 第12题:

    以下能正确计算1×2×3×…×10的程序段是()。

    • A、do{i=1;s=1;
    • B、do{i=1;s=0;s=s*i;s=s*i;i++;i++;}while(i<=10);}while(i<=10);
    • C、i=1;s=1;
    • D、i=1;s=0;do{s=s*i;do{s=s*i;i++;i++;}while(i<=10);}while(i<=10);

    正确答案:C

  • 第13题:

    有以下程序main(int argc,char *argv[]){ int n,i=0;while(argv[1][i]!='\0'){ n=fun(); i++;}printf("%d\n",n*argc);}int fun(){ static int s=0;s+=1;return s;}假设程序编译、连接后生成可执行文件exam.exe,若键入以下命令exam 123〈回车〉则运行结果为

    A.6

    B.8

    C.3

    D.4


    正确答案:A
    解析:本题中主函数带有两个参数,DOS下执行命令examl23后,argc为2,argv[1]为“exam”,argv [2]为“123”,且变量s由static定义后,每次调用fun()函数,s保留上一次的值,所以表达式n*argc最终值为3X2=6。

  • 第14题:

    请补充函数fun(),该函数的功能是:计算N×N维矩阵元素的方差,结果由函数返回。维数N在主函数中输入。例如:

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

    试题程序:

    include <stdio.h>

    include <conio.h>

    include <stdlib.h>

    include <math.h>

    define N 20

    double fun(【 】,int n)

    {

    int i,j;

    int k;

    double s=0.0;

    double f=0.0;

    double aver=0.0;

    double sd=0.0;

    for(i=0;i<n;i++)

    for(j=0;j<n;j++)

    s+=a[i][j];

    aver=【 】;

    for(i=0;i<n;i++)

    for(j=0;i<n;j++)

    f+=(a[i][j]-aver)*(a[i][j]-aver);

    f/(n*n);

    sd=【 】;

    return sd;

    }

    main()

    {

    int a[N][N];

    int n;

    int i,j;

    double s;

    clrscr();

    printf("***+Input the dimension of

    array N*****\n");

    scanf("%d",&n);

    printf("***** The array *****\n");

    for(i=0;i<n;i++)

    {

    for(j=0;j<n;j++)

    {

    a[i][j]=rand()%50;

    while(a[i][j]=0)

    a[i][j]=rand()%60;

    printf("%4d",a[i][j]);

    }

    printf("\n\n");

    }

    s=fun(a,n);

    printf("******* THE RESULT *******\n");

    printf("%4.3f\n",s);

    }


    正确答案:int a[][N] s/(n*n) sqrt(f)
    int a[][N] s/(n*n) sqrt(f) 解析:第一空;由主函数main()中对函数fun()的调用格式,可以知道,函数fun()的第一个参数是N×N的二维整型数组。第二空:平均值等于所有元素的累加和除以个数。第三空;根据公式,方差sd等于对变量f开平方,这里注意对数学库函数的调用。

  • 第15题:

    有以下程序

    main( )

    { int s=0,a=1,n;

    scanf("%d",&n);

    do

    { s+=1; a=a-2; }

    while(a!=n);

    printf("%d\n",s);

    }

    若要使程序的输出值为2,则应该从键盘给n输入的值是

    A.-1

    B.-3

    C.-5

    D.0


    正确答案:B
    解析:本题考查了循环的执行,因s在程序中起一个计数变量的作用,即记录循环执行的次数,若循环执行  两次,a的值等于n时退出循环,即a减两次2后应等于n,可推算出n的值为-3。

  • 第16题:

    有如下程序: main() { int s=0, a=1,n; scanf("% d", &n); do { s+=1; a=a-2;} while(a!=n) printf("% d\n", s); } 若要使程序输出2,则应该从键盘输入的值是______。

    A.-1

    B.-3

    C.-5

    D.0


    正确答案:B
    解析:本题中如果printf函数输出为2,需要执行两次s+=1语句,第一次执行完循环语句后得s=1、a=1-2=-1,第二次执行完循环语句后得s=1+1=2、a=-1-2=-3,所以正确答案为-3。

  • 第17题:

    设有定义:char s[8];int i=O;,以下不能将—行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是______。

    A.gets(s);

    B.white((s[i++]=getchar())!='\n');s[i]=\0;

    C.scanf("%s",s);

    D.d0{scanf("%c",&s[i]);}while(s[i++]!='\n';s[i]='\0';


    正确答案:C
    解析:本题考查的是scanf函数格式的说明,s代表输入一个字符数组,而不是地址,因此,选项C不符合题意。

  • 第18题:

    以下程序运行后输入:3,abcde<回车>,则输出结果是【 】include move(char *str,

    以下程序运行后输入:3,abcde<回车>,则输出结果是【 】

    include <string.h>

    move(char *str, int n)

    { char temp; int i;

    temp=str[n-1];

    for(i=n-1;i>0;i--) str[i]=str[i-1];

    str[0]=temp;

    }

    main( )

    { char s[50]; int n, i, z;

    scanf("%d,%s",&n,s);

    z=strlen(s);

    for(i=1; i<=n; i++) move(s, z);

    printf("%s\n",s);

    }


    正确答案:cdeab
    cdeab 解析:本题主要考查函数move()的功能。经过分析可知,每次调用该函数时,都是把最后一个字符移到串的最前端,而原先的第一个字符至倒数第二个字符顺次后移。

  • 第19题:

    有下列程序: include void fun(int * s,int n1,int n2) { int i,j,

    有下列程序: #include <stdio.h> void fun(int * s,int n1,int n2) { int i,j,t; i=n1;j=n2; while(i<j){t=s[i];s[i]=s[j];s[j]=t;i++;j--;} } main() { int a[10]={1,2,3,4,5,6,7,8,9,0},k; fun(a,0,3); fun(a,4,9);fun(a,0,9); for(k=0;k<10;k++)printf("%d",a[k]);printf("\n"); } 程序的运行结果是( )。

    A.987654321

    B.4321098765

    C.5678901234

    D.987651234


    正确答案:C
    解析:从题目的主函数入手,定义了一个一维数组并赋韧值,接着调用函数fun(),fun()函数的功能为使数组中的元素逆序,当调用 fun(a,0,3),将实参传递给形参实现数组a中a[0]-a[3]这4个元素逆序;同理调用fun(a,4,9)是将上步排列好的a数组中a[4]-a[9]这6个元素逆序;调用fun(a,0,9)是将数组中a[0]-a[9]这10个元素在逆序,再用printf()函数输出结果为5678901234,故选项C)正确。

  • 第20题:

    有以下程序includevoid main(){char s[]={"01aXy"};int i,n=0;for(i=0;s[i]!=0;i++)if

    有以下程序 #include<stdio.h> void main() { char s[]={"01aXy"};int i,n=0; for(i=0;s[i]!=0;i++) if(s[i]<='a'&&s[i]>='z')n++; printf("%d\n",n); } 程序运行后的输出结果是( )。

    A.0

    B.2

    C.3

    D.5


    正确答案:A

  • 第21题:

    有以下程序

    #include <stdio.h>

    void fun(int *s,int n1,int n2)

    { int i,j,t;

    i=n1; j=n2;

    while(i<j) {t=s[i];s[i]=s[j];s[j]=t;i++;j--;}

    }

    main()

    { int a[10]={1,2,3,4,5,6,7,8,9,0},k;

    fun(a,0,3); fun(a,4,9); fun(a,0,9);

    for(k=0;k<l0;k++)printf("%d",a[k]); printf("\n");

    }

    程序的运行结果是

    A.0987654321

    B.4321098765

    C.5678901234

    D.0987651234


    正确答案:C
    解析:函数fun(int *s,int n1,int n2)的功能是对数组s中的元素进行首尾互相调换。所以在主函数中,当fun(a,0,3)执行完后,数组a[12]={4,3,2,1,5,6,7,8,9,0};再执行fun(a,4,9),数组a[12]={4,3,2,1,0,9,8,7,6,5};再执行fun(a,0,9)后,数组a[12]={5,6,7,8,9,0,1,2,3,4}。

  • 第22题:

    有以下程序 main() { int i=0,s=0; do{ if(i%2){i++;continue;} i++; s+=i; }while(i<7); printf("%d\n",s); } 执行后输出结果是

    A.16

    B.12

    C.28

    D.21


    正确答案:A
    解析:do循环与continue语句,在循环体中有一条if语句,其后面表达式为“i%2”,当i的值为奇数时,其值为真,执行其后面的语句,i的值加1,重新开始循环,当i的值为偶数时,“i%2”为假,执行“i++;s+=i”。在循环中i为偶数时的值分别为0、2、4、6,加1过后的值分别为1、3、5、7,s中存放的是它们的和,值为16。

  • 第23题:

    以下程序的输出结果为( )。

    main( )

    { char s1[40]="country",s2[20]="side";

    int i=0,j=0;

    while(s1[i]!='\0') i++;

    while(s2[j]!='\0') s1[i++]=s2[j++];

    s1[i]=0;

    printf("%s\n",s1);

    }

    A side

    B country

    C sidetry

    D countryside


    正确答案:D

  • 第24题:

    若变量已正确定义,以下不能正确计算1+2+3+4+5的程序段是()。

    • A、i=1;s=1;do{s=s+i;i++;}while(i<5);
    • B、i=0;s=0;do{i++;s=s+i;}while(i<5);
    • C、i=1;s=0;do{s=s+i;i++;}while(i<6);
    • D、i=1;s=0;do{s=s+i;i++;}while(i<=5);

    正确答案:B