第一章 C语言简介
测验1
1、编写C程序时,main函数必不可少。
2、printf("\n"); 可实现换行
3、C的每条语句结束处必须用分号。
4、注释语句不影响程序的运行。
5、若使用printf输出结果,则必须在程序前添加#include
6、C程序中的标点符号(如分号;)必须用英文的标点符号。
第2章 C语言基础语法
测验2
1、合法的C语言标识符是( )
A、2a
B、sum
C、int
D、a*b
2、不合法的C语言标识符是 ( )。
A、_8_
B、j2_KEY
C、4d
D、Double
3、下列定义变量的语句中错误的是( )。
A、int x1;
B、float y1;
C、double z1;
D、Double a1;
4、在C语言中,要求运算数必须是整型的运算符是( )。
A、%
B、/
C、+
D、-
5、下面( )语句正确地描述了计算公式
A、y = ax*x*x/x – b;
B、y = ax*x*x/(x – b);
C、y = (a*x*x*x)/(x – b);
D、y = a*x*x*x/x – b;
6、下面( )是合法的赋值语句 .
A、i=1;
B、i+1=5;
C、5=i;
D、i *3=i+1;
7、78%10的结果是( )。
A、78
B、8
C、7
D、10
8、i=1; 执行( )语句后,变量i的值不会发生变化。
A、i+5;
B、--i;
C、i=2*i;
D、i=6;
9、语句float x=3.0 ,y=4.0;下列表达式中y的值为9.0的是( )。
A、y/=x*27/4
B、y+=x+2.0
C、y-=x+0.8
D、y*=x-3.0
10、有关运算符的正确描述是( )
A、单目运算符优先级高于双目运算符
B、赋值运算符是左结合的
C、所有运算符都是左结合的
D、赋值号的运算优先级是最低的
11、下面( )语句正确地描述了方程
A、y = a * x * x * x + c;
B、y = a * x * x * (x + c);
C、y = (a * x * x * x) + c;
D、y = (a * x) * x * (x + c);
12、下面( )能完成变量a,b的值的交换。
A、t=a; a=b; b=t;
B、a=b; b=a;
C、a=b;
D、a=a+b; b=a-b; a=a-b;
13、( )可以使整型变量i的值加1 。
A、i++;
B、++i;
C、i=i+1;
D、i+=1;
第3章 格式化输入输出及简单的选择结构
测试3
1、能正确表示逻辑关系x<=y<=z的C语言表达式为( )
A、(x<=y)&&(y<=z)
B、(x<=y)AND(y<=z)
C、(x<=y<=z)
D、(x<=y)&(y<=z)
2、能正确表示逻辑关系“a大于等于10或a小于等于0”的C语言表达式是 ( )
A、a>=10 or a<=0
B、a>=0|a<=10
C、a>=10&& a<=0
D、a>=10‖a<=0
3、能正确表示逻辑关系“79
A、( X>79 ) && ( X<90 )
B、( X>79 )!=( X<90 )
C、79
D、(X>79 )||( X<90)
4、设a为整型变量,不能正确表达数学关系10<a<15的C语言表达式是( )
A、10
B、a==11||a==12||a==13||a==14
C、a>10&&a<15
D、!(a<=10)&&!(a>=15)
5、设x,t均为int型变量,则执行语句“x=10; t=x&&x>10;”后,t的值为( )
A、值不确定
B、10
C、1
D、0
6、下面程序,运行后的输出结果是( ) #include int main() { int a=1, b = 3, c = 4; if(a
A、4,4,3
B、4,3,4
C、3,4,3
D、1,3,4
7、语法不正确的语句是( )
A、if (x>y);
B、if (x=y) {x++;y++;}
C、if (x==y) && (x!=0) x++;
D、if (x!=y) scanf ("%d", &x);
8、如果整型变量a,b,c的值分别为5,4,3,则语句if(a>b>c) c++; 执行后c的值是( )
A、5
B、4
C、3
D、2
9、如果整型变量a,b,c的值分别为3,4,5,则语句 if(a
A、3
B、4
C、5
D、6
10、运行以下程序,如果从键盘上输入5,则输出结果是( ) #include int main() { int x; scanf("%d", &x); if (x--< 5) printf("%d", x); }
A、3
B、4
C、5
D、无输出
11、C语言语句中,可以用来决定分支流程的表达式是( )
A、任意表达式
B、只能用逻辑表达式或关系表达式
C、只能用逻辑表达式
D、只能用关系表达式
12、int x=102,y=12; printf("%2d,%3d\n",x,y); 执行后输出结果是( )
A、10,012
B、02, 12
C、102, 12
D、102,120
13、设i是 int 型变量 ,j是 float 型变量 , 用下面的语句给这两个变量输入值: scanf("i=%d, j=%f",&i,&j); 为了把 10 和 2.5分别赋给 i 和 j, 则正确的输入为( )
A、10 2.5< 回车 >
B、i=10,j=2.5< 回车 >
C、10 < 回车 > 2.5< 回车 >
D、x=10 < 回车 > ,y=2.5< 回车 >
14、执行下面语句, int a =1,b=2,c=3; if(a>c) b =c; a=c; c=b; a,b,c的值分别为( )(用逗号分隔)
A、3,2,2
B、1,2,3
C、3,3,2
D、3,3,3
15、请选出正确的输入语句( )。
A、double f; scanf("%lf",&f);
B、float x,y; scanf("%f%f",x,y);
C、float x; scanf("%f\n",x);
D、double x; scanf("%f",&x);
16、在printf函数中,浮点型数据输出的格式控制符有( )。
A、%e
B、%d
C、%f
D、%g
17、下面程序中,( )可以输出变量a,b,c的最大值。
A、if(a>=b && a>=c ) printf( "最大值为%d\n",a); if(b>=a && b>=c) printf( "最大值为%d\n",b); if(c>=a && c>=b) printf( "最大值为%d\n",c);
B、max=a; if(b>max) max=b; if(c>max) max=c; printf( "最大值为%d\n",max);
C、if(a>b>c ) printf( "最大值为%d\n",a); if(b>a>c) printf( "最大值为%d\n",b); if(c>a>b) printf( "最大值为%d\n",c);
D、if(a>b) max=a; if(c>max) max=c; printf( "最大值为%d\n",max);
18、设a=1, b=2, c=3,关系表达式a+b>=c 的值是( )。
19、设a=1, b=2, c=3,逻辑表达式a && b && c的值是( )。
20、设a=1, b=2, c=3,逻辑表达式a || !b || !c的值是( )。
21、输入一个考试分数(0至100范围内),如果分数小于60分,则输出“不及格”;大于90分输出“优秀”;大于等于60并且小于等于90,则输出“合格”。(有1个空,答案一行写一个,不要添加多余的空格) #include int main() { int x; printf("请输入分数(0-100): "); scanf("%d",&x); if(x<60) printf( "不及格\n"); if(x>90) printf( "优秀\n"); printf( "合格\n"); //注意分数在一个区间内,C语言中该如何描述 return 0; }
22、我国的邮政编码由六位阿拉伯数字组成,前第三位代表邮区,厦门市的邮政编码前三位为361 。 下面的程序功能:如果输入的邮政编码前3位是361,则输出“厦门市的邮件”;如果不是361,则输出“不是厦门市的邮件”。 请完善程序(有2个空,答案一行写一个,不要添加多余的空格). #include int main() { int code; printf("请输入邮政编码: "); scanf(" %*3d",&code); //用scanf函数截取输入邮政编码的前3位 if(361 code ) printf( "厦门市的邮件\n"); if (361!=code) printf( "不是厦门市的邮件\n"); return 0; }
作业2:单分支编程题 .
1、1、按公告中说明注册(/), 并绑定MOOC帐号 。第二周已绑定的同学不用重复此操作。 (目前用 Chrome 浏览器或火狐浏览器浏览效果最佳;IE 浏览器以及使用 IE 内核的 360 浏览器等存在由缓存引起的显示问题) 2、登入“拼题A”(PTA),“题目集”------第三周 单分支编程题(MOOC计分) •答案在“拼题A”上提交,如果测试不能通过,可在讨论区寻求帮助。注意输入、输出格式必须符合题目要求。
第4章 选择结构
测验4
1、分析以下程序, 下列说法正确的是( ) #include main() { int x=5,a=0,b=0; if(x=a+b) printf("* * * *\n"); else printf("# # # #\n"); }
A、有语法错,不能通过编译
B、通过编译,但不能连接
C、输出* * * *
D、输出# # # #
2、分析以下程序, 下列说法正确的是( ) #include main() { int x=6,a=8,b=3; if(x=a+b) printf("* * * *\n"); else printf("# # # #\n"); }
A、有语法错,不能通过编译
B、通过编译,但不能连接
C、输出* * * *
D、输出# # # #
3、分析以下程序, 下列说法正确的是( ) #include main() { int x=0,a=0,b=0; if(x==a+b) printf("* * * *\n"); else printf("# # # #\n"); }
A、有语法错,不能通过编译
B、通过编译,但不能连接
C、输出* * * *
D、输出# # # #
4、运行以下程序,如果从键盘上输入5,则输出结果是( ) #include int main() { int x; scanf("%d", &x); if ( x--< 5) printf("%d", x); else printf("%d",x++); }
A、3
B、4
C、5
D、6
5、运行以下程序,如果从键盘上输入5,则输出结果是( ) #include int main() { int x; scanf("%d", &x); if ( x--< 5) printf("%d", x); else printf("%d",++x); }
A、3
B、4
C、5
D、6
6、运行以下程序,如果从键盘上输入9,则输出结果是( ) #include int main() { int x; scanf("%d", &x); if ( ++x< 10) printf("%d", x); else printf("%d",--x); }
A、11
B、10
C、9
D、8
7、以下程序的输出是( ) #include int main() { float x=2.0,y; if (x<0.0) y=0.0; else if (x<10.0) y=1.0/x; else y= 1.0; printf("%f\n", y); }
A、0.000000
B、0.250000
C、0.500000
D、1.000000
8、下面程序的运行结果是( )。 #include main() { int a=12, b= -34, c=56, min=0; min=a; if(min>b) min=b; if(min>c) min=c; printf("%d", min); }
A、12
B、-34
C、56
D、0
9、分析以下程序, 输出结果是( ) #include int main() { int x=5; if(x) printf("* * * *\n"); printf("# # # #\n"); }
A、* * * * # # # #
B、# # # #
C、* * * *
D、无输出
10、分析以下程序, 输出结果是( ) #include int main() { int x=5; if(x) x=6; x=7; printf("%d\n",x); }
A、7
B、5
C、6
D、x
11、按功能键F5进入调试状态后,可以( )。
A、查出所有的语法错误
B、设置断点
C、控制程序一步一步地执行,每执行一步,都可以暂停
D、观察变量或表达式值的变化
12、下面( )是正确的符号函数程序。 当x>0时,y=1 当x=0时,y=0 当x<0时,y=-1 (提示:按if-else配对规则分析程序,y值的运算结果与符号函数一致,才是正确的程序)
A、if(x>0) y=1; else if(x==0) y=0; else y=-1;
B、y=0; if(x!=0) if(x>0) y=1; else y=-1;
C、y=0; if(x>=0) if(x>0) y=1; else y=-1;
D、if(x>=0) if(x>0) y=1;else y=0; else y=1;
13、程序功能:输入一个整数,当它是偶数时,输出“该数是偶数”,否则,输出“该数是奇数”。 请完善程序,空格处应填( )。 #include int main() { int x; printf("请输入x: "); scanf("%d",&x); if(x%2==0) printf( "该数是偶数\n"); //偶数除以2的余数为0 printf( "该数是奇数\n"); return 0; }
A、else
B、if(x%2!=0)
C、if(x/2!=0)
D、else if(x%2!=0)
14、输入一个考试分数(0至100范围内),如果分数小于60分,则输出“不及格”;否则输出“及格”。(程序有1个空,请选择正确的答案) #include int main() { int x; printf("请输入分数(0-100): "); scanf("%d",&x); if(x<60) printf( "不及格\n"); printf( "及格\n"); return 0; }
A、else
B、if(x>=60)
C、else if(x>=60)
D、x>=60
15、读程序,写出运行结果。 #include main() { int a=1,b=3,c=5; if (c==a+b) printf("yes\n"); else printf("no\n"); }
16、读程序,写出运行结果。 #include int main() { int x=2, y=-1, z=5; if(x
17、读程序,写出运行结果。 #include main() { float a,b,c,t; a=3; b=7; c=1; if(a>b) {t=a;a=b;b=t;} if(a>c) {t=a;a=c;c=t;} if(b>c) {t=b;b=c;c=t;} printf("%5.2f,%5.2f,%5.2f",a,b,c); //注意%5.2f 的输出格式与逗号 }
18、下面是一个旅游自助程序。程序先输出选择菜单,
如果用户输入1,则提示输入租车数量,用变量i保存,然后计算需支付的金额,并输出。 如果用户输入2,则提示输入购票数量,用变量j保存,然后计算需支付的金额,并输出。 如果用户输入其它数,则提示选择错误。 费用计算方法: 租一辆车需支付150元。 门票一张60元,如果购票数>=10,则每张50元。 请完善程序。(程序有2个空,答案一行写一个,不要添加多余的空格) #include int main() { int choose,i,j,money; printf("\n\t\t旅游自助服务\n"); printf("\t1---租车\t2---购买门票\n\n"); printf("请选择您需要的服务:"); scanf("%d",&choose); if( ) { printf("请输入租车数量"); scanf("%d",&i); money=150*i; printf("\n您需支付:%d元\n",money); } (choose==2) { printf("请输入购票数量"); scanf("%d",&j); if(j>=10) money=50*j; else money=60*j; printf("\n您需支付:%d元\n",money); } else { printf("选择错误"); } return 0; }
作业3:多分支编程题.
1、1、请按公告中说明注册(/), 并绑定MOOC帐号 。已绑定的同学不用重复此操作。 (目前用 Chrome 浏览器或火狐浏览器浏览效果最佳;IE 浏览器以及使用 IE 内核的 360 浏览器等存在由缓存引起的显示问题) 2、登入“拼题A”(PTA),“题目集”------第四周 多分支练习(MOOC---计分) •答案在“拼题A”上提交,如果测试不能通过,可在讨论区寻求帮助。 注意输入、输出格式必须符合题目要求,输出结果必须完全一样,不能增减空格。
第5章 循环基础
测验5
1、设有如下程序段,则输出结果为() int k=0,a; for (a=1;a<=1000;a++) k=k+1; printf("k=%d",k); 提示:可参考课件“附加例题解析”文档中的例题
A、k=1
B、k=1001
C、k=1000
D、溢出
2、设有如下程序段,则最后一次输出的是() int a; for (a=1;a<=1000;a++) printf("a=%d",a); 提示:可参考课件“附加例题解析”文档中的例题
A、a=1
B、a=1000
C、a=1001
D、溢出
3、设有如下程序段,则输出结果是() int a; for (a=1;a<=1000;a++) ; printf("a=%d",a); 提示:可参考课件“附加例题解析”文档中的例题
A、a=a=aaa a= 1 a= 1a=1
B、a=1000
C、a=1001
D、溢出
4、设有如下程序段,则输出结果为() int k=0,a; for (a=1;a<=1000;a++) {a=a+1;k=k+1;} printf("k=%d",k);
A、k=1000
B、k=499
C、k=500
D、k=501
5、int i,j=10; for( i=1; i==j; i++); 的循环次数是() 提示:可参考课件“附加例题解析”文档中的例题
A、0
B、5
C、10
D、无限
6、int i, j; j=10; for(i=1; i<=j; i++) j--; 程序的循环次数是()
A、0
B、5
C、10
D、无限
7、语句for(x=0,y=0; y!=1&&x<4; x++); 是()
A、无限循环
B、循环次数不定
C、循环4次
D、循环3次
8、设有程序段: int k=10; while(k=0)k = k- 1; 则下面叙述正确的是()
A、while循环执行10次
B、是无限循环
C、循环体语句执行一次
D、循环体语句一次也不执行
9、设有程序段: int k=10; while(k==0)k = k- 1; 则下面叙述正确的是()
A、while循环执行10次
B、无限循环
C、循环体语句执行一次
D、循环体语句一次也不执行
10、设有程序段: int k=10; while(k!=0) k = k- 1; 则下面叙述正确的是()
A、while循环重复执行10次
B、是无限循环
C、循环体语句执行一次
D、循环体语句一次也不执行
11、与语句while(!x);等价的语句是()
A、while(x= =0);
B、while(x!=1);
C、while(x!=0);
D、while(x==1);
12、int i=0, j; for( j=10; i
A、0
B、5语法错误 5
C、语法错误
D、无穷多次
13、设有程序段,以下说法正确的是() x = -1; do { x = x*x; } while( !x);
A、循环体将执行一次
B、循环体将执行两次
C、循环体将执行无限次
D、系统将提示有语法错误
14、C语言中while 和do-while 循环的主要区别是()
A、do-while的循环体至少无条件执行一次
B、while 的循环控制条件比do-while 的循环控制条件严格
C、do-while的循环体比while的循环体少执行1次
D、do-while 的循环体不能是复合语句
15、下列语句不是死循环的是()
A、int i = 1; while(1) i++;
B、int i =1; for(;;) i++;
C、int i =1; do i++; while(1);
D、int i =10; while(i) i--;
16、下面程序的功能是:计算1~10之间的奇数之和及偶数之和,空白处应填 () #include int main() { int a, b, c, i; a = c = 0; for(i=0; i<=10; i+=2) { a += i; } printf("偶数之和=%d!\n", a); printf("奇数之和=%d!\n", c-11); }
A、c+=i;
B、c+=i+1;
C、b+=i;
D、b+=i+1;
17、下面程序的功能是() #include int main() { int x,s=0,i; for(i=1; i<=5; i++) { scanf("%d",&x); s=s+x; } printf("s=%d\n", s); return 0; }
A、输入任意5个整数,输出这5个数的和
B、输入任意5个整数,输出这5个数
C、求1+2+3+4+5的和
D、输入语句scanf("%d",&x);不能放在循环中,程序出错
18、下面程序的功能是() #include int main() { int x,s=0,i; scanf("%d",&x); while(x!=0) { s=s+x; scanf("%d",&x); } printf("s=%d\n", s); return 0; }
A、输入一组整数,以输入0作为结束,求所有数的和并输出
B、输入一组整数,输出不为0的数
C、输入一组整数,并输出这些数
D、程序只输入了一个整数,输出0
19、编程:输入一个整数,计算该整数的位数,并输出位数。 输入样例:12345 输出样例:输入的是5位数 请完善程序。(程序有1个空,答案一行写一个,不要添加多余的空格) #include int main( ) { int i=0,k,j; scanf("%d",&k); do { k= k/10; i++; }while( ); printf("输入的是%d位数\n", i); } 提示:第二周讨论题-----讨论一类赋值语句的特点,在置顶贴的回复中,有本题的相关内容。这一类赋值语句常用于循环中。
20、编程:输入一个整数,计算该整数的位数,并输出位数。 输入样例:12345 输出样例:输入的是5位数 请完善程序。(程序有1个空,答案一行写一个,不要添加多余的空格) #include int main( ) { int i=0,k,j; scanf("%d",&k); do { i++; }while(k!=0); printf("输入的是%d位数\n", i); } 提示:第二周讨论题-----讨论一类赋值语句的特点,在置顶贴的回复中,有本题的相关内容。这一类赋值语句常用于循环中。
作业4:单循环综合编程题
1、1、请按公告中说明注册(/), 并绑定MOOC帐号 。已绑定的同学不用重复此操作。 2、登入“拼题A”(PTA),“题目集”------第五周 单循环综合编程题(MOOC---计分) •答案在“拼题A”上提交,如果测试不能通过,可在讨论区寻求帮助。 注意输入、输出格式必须符合题目要求,输出结果必须完全一样,不能增减空格或空行。
第6章 循环进阶
循环进阶选择、填空题
1、运行下面的程序,得到的输出是() #include int main() { int i, j; for(i=1;i<=2;i++) for(j=1;j<=2;j++) printf("i=%d, j=%d\n",i,j); }
A、i=1, j=1 i=1 , j=2 i=2 , j=1 i=2 , j=2
B、i=1, j=1 i=2 , j=1 i=1 , j=2 i=2 , j=2
C、i=1, j=1 i=2 , j=2 i=1 , j=1 i=2 , j=2
D、i=1, j=1 i=1 , j=1 i=2 , j=2 i=2 , j=2
2、运行下面的程序,输出的星号个数一共是() #include int main() { int i,j; for(i=1;i<=4;i++) { for(j=1;j<=i;j++) putchar(' '); putchar('*'); putchar('\n'); } }
A、4
B、10
C、12
D、16
3、运行下面的程序,输出的星号个数一共是() #include int main() { int i,j; for(i=1;i<=4;i++) for(j=1;j<=i;j++) putchar(' '); putchar('*'); putchar('\n'); }
A、4
B、1
C、10
D、0
4、执行下面的程序片段,k的值是() int k=0,i,j; for(i=0;i<5;i++) for(j=0;j<3;j++) k=k+1 ;
A、3
B、5
C、15
D、8
5、若变量已正确定义,要求程序段完成求5!的计算,不能完成此操作的程序段是
A、for( i=1; i<=5; i++ ) { p=1; p*=i; }
B、i=1; p=1; do { p*=i; i++; } while ( i<=5 );
C、i=1; p=1; while ( i<=5 ) { p*=i; i++; }
D、for(i=1,p=1;i<=5;i++) p*=i;
6、下面程序的功能是输出以下形式的图案,则在下划线处应填入的是 * *** ***** ******* #include int main() { int i, j; for( i=1; i<=4; i++) { for( j =1; j<= ; j++) putchar('*'); putchar('\n'); } return 0; }
A、i
B、2*i-1
C、2*i+1
D、i+2
7、下面程序的功能是输出以下形式的图案,则在下划线处应填入的是( ) ******* ***** *** * #include int main() { int i, j; for( i=1; i<=4; i++) { for( j =1; j<= ; j++) putchar('*'); putchar('\n'); } return 0; }
A、2*i-1
B、2*i+1
C、2*(5-i)-1
D、2*(5-i)+1
8、鸡兔同笼,共有98个头,386只脚,编程求鸡、兔各多少只。 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int main() { int x, y; for (x=1; x<98; x++) { _____(1)____ if ( __ (2) ___ ) { printf("x = %d, y = %d", x, y); } } return 0; }
A、(1) y = 98 - x; (2) 2*x+4*y == 386;
B、(1) y = 98 - x; (2) 2*x+4*y <= 386;
C、(1) x = 98 - y; (2) 2*x+4*y == 386;
D、(1) x = 98 - y; (2) 2*x+4*y <= 386;
9、打印所有的“水仙花数”。 所谓“水仙花数”,是指一个三位数,其各位数字的立方和等于该数本身。例如,153是“水仙花数”,因为
。 代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include int main() { int i, j, k, n; printf("result is:"); for (n=100; ___(1)____ ; n++) { i = n / 100; //得到百位 j = ____(2)______ ; k = n % 10; //得到个位 if ( ______(3)______) { printf("%d\t ",n); //输出结果 } } printf("\n"); return 0; }
A、(1) n<=1000 (2) n / 10 (3) i*100+j*10+k = i*i*i+j*j*j+k*k*k
B、(1) n<=1000 (2) (n - i * 100) / 10 (3) i*100+j*10+k == i*i*i+j*j*j+k*k*k
C、(1) n<1000 (2) n / 10 (3) i*100+j*10+k == i*i*i+j*j*j+k*k*k
D、(1) n<1000 (2) (n - i * 100) / 10 (3) i*100+j*10+k == i*i*i+j*j*j+k*k*k
10、下面程序的功能是() #include int main() { int x,s,i; scanf("%d",&x); s=x; for(i=1; i<=6; i++) { scanf("%d",&x); if(s
A、输入6个整数,输出这些数的和
B、输入7个整数,输出其中的最小数
C、输入7个整数,输出其中的最大数
D、输入6个整数,输出第1个数
11、阅读下面的程序,该程序完成的功能有( ) #include int main() { int number,min; int i,n=1; printf("请输入第1个数"); scanf("%d",&number); min=number; //只有1个数时,最小数就是这个数,设min初值为第1个数 for(i=2;i<=8;i++) { printf("请输入第%d个数",i); scanf("%d",&number); if(min>number) //min与新输入的数比,如果更大,则 { min=number; // min更新为较小的数 n=i; // n更新为较小数的位置 } } printf("第%d个数最小,为%d\n",n,min); //输出最小数的位置与最小数 return 0; } 提示:可参考课件“附加例题解析”中文档“求最值及其位置”,帮助理解。
A、输出8个数中的最小数
B、输出最小数的位置
C、求7个数最小数
D、将输入的8个数由大至小排序
12、程序功能:输入n的值(n<11),计算1!+2!+3!+......+n!,并输出计算结果。 请完善程序。(程序有1个空,答案一行写一个,不要添加多余的空格) #include int main() { int i, n; long sum=0,fac=1; //fac存储每个加项(阶乘)的值 printf("请输入n的值:"); scanf("%d",&n); for( i=1; i<=n; i++) { //后一加项与前一加项的关系 sum=sum+fac; } printf("和为%ld\n",sum); return 0; } 提示:可以参考“累加和”中讲解的最后一个例题
第7章 函数
测验7
1、C语言程序由函数组成。正确的说法是( )
A、主函数必须写在其他函数之前,函数内可以嵌套定义函数
B、主函数必须在写其他函数之后,函数内可以嵌套定义函数
C、主函数必须写在其他函数之前,函数内不可以嵌套定义函数
D、主函数可以写在其他函数之后,函数内不可以嵌套定义函数
2、以下说法正确的是( )
A、C语言程序总是从第一个定义的函数开始执行
B、C语言程序中,被调用的函数必须在main()函数中定义
C、C语言程序总是从主函数main()开始执行。
D、C程序中的main()函数必须放在程序的开始处
3、已知函数fun类型为void,则void的含义是( )
A、执行函数fun后,函数没有返回值
B、执行函数fun后,可以返回任意类型的值
C、执行函数fun后,程序结束,不再返回主调函数
D、以上三个答案都是错误的
4、若有返回值的函数类型和return语句中的表达式类型不一致,则( )
A、运行时出现不确定结果
B、返回值的类型以函数类型为准
C、编译时出错
D、返回值的类型以return语句中表达式的类型为准
5、下面函数定义正确的是( )。
A、double fun(double u,v) {return u+v;}
B、double fun(double u;double v) {return u+v;}
C、double fun(float u,float v) {return u+v;}
D、double fun( u,v) { float u,v ;return u+v;}
6、以下函数fun的返回值类型为( )。 fun(double x){ ……}
A、double
B、void
C、int
D、无法确定类型
7、一个C语言程序的基本组成单位是( )。
A、主程序
B、子程序
C、函数
D、过程
8、C语言中函数返回值类型由( )决定。
A、调用该函数的主调函数类型
B、函数参数类型
C、return语句中的表达式类型
D、定义函数时指定的函数类型
9、编写函数计算下面多项式的值,并返回值
编写main,输入x,调用该函数计算多项式的值并显示结果。 请完善下面的程序:(有2个空,答案一行写一个,不要添加多余的空格) #include double f(double x) { 2*x*x+3*x+1; } int main() { double x; printf("请输入x:"); scanf("%lf",&x); printf("f(%.2f)的值是%.2f",x, ); return 0; }
10、一个正整数如果恰好等于它的除自身外的因数之和,这个数称为“完数”。例如,6的因数有1、2、3,且6=1+2+3,因此6是“完数”。 编写判别完数的函数wanshu(int x):功能判断x是否为完数,如果是,则返回1,不是,则返回0。 编写main()中让x从1循环至1000,并调wanshu函数,如果返回值为1,则输出该数。 请完善下面的程序:(有3个空,答案一行写一个,不要添加多余的空格) #include int wanshu(int x) { int i,r=0; for(i=1;i
11、编写最小值函数,功能求x,y的最小值,并返回最小值。 main()中输入x,y的值,并调用min函数,输出返回值。 请填空完善程序。(有3个空,答案一行写一个,不要添加多余的空格) #include int (int x, ) { if(x
12、编写求最大公约数函数gcd:功能是求两数的最大公约数,并返回该数。 main函数中调用该函数,并输出最大公约数。 请填空完善程序。(有2个空,答案一行写一个,不要添加多余的空格) #include int gcd(int m,int n) //求m,n的公约数的函数 { int r; r=m; // r 是公约数,初值为 m while((m%r!=0)||(n%r!=0)) //当 r 不是公约数时,循环直至找到公约数 ; // r 减小1 return r; } int main() { int m,n; printf("请输入两个数"); scanf("%d%d",&m,&n); printf("最大公约数%d\n", ); //调用gcd函数 return 0; }
13、编写求最小公倍数函数sct:功能是求两数的最小公倍数,并返回该数。 main函数中调用该函数,并输出最小公倍数。 请填空完善程序。(有2个空,答案一行写一个,不要添加多余的空格) #include int sct(int m,int n) //求m,n的公倍数的函数 { int r; r=m; // r 是公倍数,初值为 m while((r%m!=0)||(r%n!=0)) //当 r 不是公倍数时,循环直至找到公约数 ; // r 增加1,用于下次循环测试下一个数 return ; // 返回得到的公倍数 } int main() { int m,n; printf("请输入两个数"); scanf("%d%d",&m,&n); printf("最小公倍数是%d\n",sct(m,n)); return 0; }
第8章 函数与变量
测验 8
1、以下叙述中错误的是( )。
A、函数形参是存储类型为自动类型的局部变量
B、全局变量的存储类别是auto型的。
C、static int x; 则x会被初始化为0
D、函数中定义的变量默认是自动变量
2、当全局变量与函数内部的局部变量同名时,则在函数内部( )。
A、全局变量有效
B、局部变量有效
C、全局变量与局部变量都有效
D、全局变量与局部变量都无效
3、以下说法中正确的是( )
A、形参是全局变量,其作用范围仅限于函数内部。
B、形参是全局变量,其作用范围从定义之处到文件结束。
C、形参是局部变量,其作用范围仅限于函数内部。
D、形参是局部变量,其作用范围从定义之处到文件结束。
4、在一个源文件中定义的全局变量的作用域为( )
A、本文件的全部范围
B、本程序的全部范围
C、本函数的全部范围
D、从定义该变量的位置开始至本文件结束
5、下面程序中,x被分配---释放存储空间,总共有( )次这样的过程。 #include void proc (int a); int x; int main ( ) { proc(2); proc(3); } void proc (int a) { x=2; ....; }
A、1
B、2
C、3
D、0
6、程序输出结果为( ) #include void proc (); int main ( ) { int x=1; //定义局部变量x,局部变量只在本函数中有效 proc( ); printf("%d\n",x); } void proc ( ) { int x; //定义局部变量x,局部变量只在本函数中有效 x=2; }
A、1
B、2
C、main,proc函数中都定义了变量x,程序错误
D、0
7、程序输出结果为( )。 #include int x=0; //x定义在所有函数之外,为全局变量 void proc (); int main ( ) { x=1; proc( ); printf("%d\n",x); } void proc ( ) { x=2; }
A、2
B、0
C、1
D、程序错误
8、下面程序的执行结果为( )。 #include void proc (); int main ( ) { int x=8; //定义局部变量x,局部变量只在本函数中有效 proc( ); printf("%d\n",x); return 0; } void proc ( ) { x=100; }
A、编译不能通过
B、8
C、100
D、随机数
第10章 一维数组
测验 10
1、以下数组定义中,错误的是( )。
A、int a[]={1,2,3};
B、int a[5]={1,2,3};
C、int a[3]={1,2,3,4};
D、int a[5],b;
2、设有定义 int a[10]={0};则说法正确的是( )。
A、数组a有10个元素,各元素的值为0
B、数组a有10个元素,其中a[0]的值为0,其他元素的值不确定
C、数组a有1个元素,其值为0
D、数组初始化错误,初值个数少于数组元素个数
3、在以下字符串String的赋值运算中,错误的是( )。
A、char str[10]= { 'S' ,'t', 'r' ,'i','n', 'g','\0'};
B、char str[10]= "String";
C、char str[6]= { 'S' ,'t', 'r' ,'i','n', 'g'};
D、char str[]= { 'S' ,'t', 'r' ,'i','n', 'g',0};
4、设有以下字符串定义,则数组s1和s2( )。 char s1[]={ 'S' ,'t', 'r' ,'i','n', 'g'}; char s2[]= "String";
A、长度相同,内容也相同
B、长度不同,但内容相同
C、长度相同,但内容不同
D、长度不同,内容也不同
5、引用数组元素时,数组元素下标不可以是( )。
A、字符常量
B、整型变量
C、字符串
D、算术表达式
6、int a[10]={1,2,3}; 则a[2]的值为( )。
A、2
B、3
C、1
D、0
7、int a[5]={1,2,3}; 则a[4]的值为( )。
A、0
B、3
C、没有确定的值
D、2
8、下面( )是字符串结束符。
A、'\0'
B、end
C、'\t'
D、enter
9、下面( )是错误的数组定义。
A、int a[2*i];
B、int a[10];
C、int b[10+10];
D、float x[15-5];
10、设有定义 int a[3]; 下面数组元素的赋值中,错误的是( )。
A、a[1]=1;
B、a[0]=2;
C、a[3]=3;
D、a[2]=100;
11、定义int a[5]; 下面( )不可以给5个数组元素赋值。
A、a={1,2,3,4,5};
B、for(i=0;i<5;i++) a[i]=i;
C、for(i=0;i<5;i++) scanf("%d",&a[i]);
D、a[0]=1;a[1]=1;a[2]=2;a[3]=3;a[4]=4;
12、定义int b[6]; 下面( )可以输出数组的所有元素的值。
A、for(i=0;i<6;i++) printf("%d",b[i]);
B、for(i=1;i<=6;i++) printf("%d",b[i]);
C、printf("%d",b);
D、while(b[i]!='\0') printf("%d",b[i]);
13、/*------------------------------------------------------------------------------------------------ 程序功能:统计出若干个学生的平均成绩,最低分以及得最低分的人数。例如:输入10名学生的成绩分别为92,87,68,56,92,84,67,75,92,66,则输出平均成绩为77.9,最低高分为56,得最低分的人数为1人。 ----------------------------------------------------------------------------------------------*/ #include float Min=0; int J=0; float fun(float array[],int n) { int i;float sum=0,ave; Min=array[0]; for(i=0;iarray [i]) Min=array [i]; ____________; } ave=sum\n; for(i=0;i
第9章 基本数据类型
测验 9
1、下列( )是合法的字符常量。
A、"c"
B、c
C、'char'
D、'\n'
2、下列合法的字符串常量是( )。
A、56
B、'56'
C、"56"
D、'\t'
3、已知字母A的ASCII码为十进制的65,下面程序的输出是( )。 int main() { char ch1,ch2; ch1='A'+'5'-'3'; ch2='A'+'6'-'3'; printf("%d,%c",ch1,ch2); }
A、67,D
B、B,C
C、C,D
D、不确定的值
4、设有以下程序段,则输出结果是( )。 char c1='b', c2='e'; printf("%d,%c\n",c2-c1,c2-'a'+'A');
A、2, M
B、3,E
C、2, E
D、输出结果不确定
5、若变量c为char类型,能正确判断出c为小写字母的表达式是( )。
A、'a'<=c<='z'
B、(c>='a') || (c<='z')
C、('a'<=c) and ('z'>=c)
D、(c>='a') && (c<='z')
6、有如下程序段,执行该程序段后,x的值为( )。 int a=14,b=15,x; char c='A'; x=(a && b) && (c
A、14
B、false
C、0
D、1
7、若有下列类型说明语句: char w; int x ; float y ; double z ; 则表达式w*x+z-y值的正确数据类型为( )。
A、float
B、char
C、int
D、double
8、若有下列类型说明语句: int x ; double y ; 则表达式x-y值的正确数据类型为( )。
A、char
B、int
C、double
D、float
9、double x; 正确的输入语句是( )。
A、scanf("%lf",&x);
B、scanf("%hf",&x);
C、scanf("%f",&x);
D、scanf("%ld",&x);
10、下面( )将十进制数转为八进制数输出。
A、printf("%o",50);
B、printf("%d",50);
C、printf("%x",50);
D、printf("%c",50);
11、下面( )将十进制转为十六进制输出。
A、printf("%o",50);
B、printf("%x",50);
C、printf("%c",50);
D、printf("%d",50);
12、下面( )将十六进制数转为八进制输出。
A、printf("%o",050);
B、printf("%o",0x50);
C、printf("%d",050);
D、printf("%x",50);
13、下面( )类型的取值范围没有负数 。
A、int
B、float
C、double
D、unsigned
14、用for循环语句编程输出A~Z之间的所有大写字母,字母之间以空格分隔,要求一行输出8个字符。下面的程序有一个空,请选择恰当的循环语句完善程序。 #include int main() { char c; int count=0; { printf("%c ", c); count++; if(count%8==0) //每8个字符换行 printf("\n"); } return 0; }
A、for(c='A'; c<='Z'; c++)
B、for(c=65; c<=90; c++)
C、for(c=1; c<=26; c++)
D、for(c='a'; c<='z'; c++)
第12 章 指针
测验12
1、设已定义 int a, *p; 下列赋值表达式中正确的是 。
A、*p=a
B、p=*a
C、p=&a
D、*p=&a
2、若已定义 int a=1,*b=&a; , 则printf("%d\n",*b);的输出结果为 。
A、a的值
B、a的地址
C、b的值
D、b的地址
3、设已定义 int x, *p ,*p1=&x , *p2=&x ; 则下列表达式中错误的是 。
A、x=*p1+*p2
B、p=p1
C、x =p1+p2
D、p1=0
4、若已定义 int a[]={1,2,3,4},*p=a; 则下面表达式中值不等于2的是 。
A、*(a+1)
B、*(p+1)
C、*(++a)
D、*(++p)
5、若已定义 int a[]={1,2,3,4},*p; p=a+1; 则p[2]的值是 。
A、2
B、3
C、4
D、无意义
6、定义:int x;float y;int *p; 下面对指针变量p赋值正确的是( )。
A、p=1000;
B、p=&y;
C、p=&x;
D、p=x;
7、int x=1,y=2; int *p1,*p2; p1=&x;p2=&y; 下面与x=y;不等价的语句是( )
A、*p1=*p2;
B、*p1=y;
C、x=*p2;
D、p1=p2;
8、int n; int *p1; p1=&n; 下面与n=3;等价的语句是( )
A、*p1=3;
B、p1=3;
C、&p1=3;
D、3=n;