资源描述
二级C语言程序设计期末大作业(3-4-5)
一、单选题
1. C 语言程序中可以对程序进行注释,注释某些必要用符号__C___括起来。
A. { 和 }
B. [ 和 ]
C. /* 和 */
D. */ 和 /*
2. 设要定义n为整型变量,定义x为浮点型变量,对旳语句是:_B____ 。
A. int n,float x,
B. int n,float x;
C. int n;float x,
D. int n;float x;
3. 设有int n;从键盘上输入整数给变量n,对旳语句是:__D___ 。
A. scanf( n );
B. scanf( "n" );
C. scanf( "%d",n );
D. scanf( "%d",&n );
4. 程序段
int x=3,y=2;
printf("%d",x*=y+8/5);
输出成果为__D___ 。
A. 1
B. 5
C. 7
D. 9
5. 要判断char型变量m与否是数字,可以使用体现式_____B_____。
A. 0<=m && m<=9
B. m>='0' && m<='9'
C. "0"<=m && m<="9"
D. '0'<=m <='9'
6. 执行如下代码段后,a值为___A__。
int a=1,b=2,c=3;
if(a>b) a=b;
if(a>c) a=c;
A. 1
B. 2
C. 3
D. 不拟定
7. 下面for 语句执行时,____B___将形成无限循环。
A. for(s=j=0;j<100;j+=1) s+=j;
B. for(s=j=0;j<100;j+1) s+=j;
C. for(s=j=0;j<100;++j) s+=j-1;
D. for(s=j=0;j<100;j++) s+= j;
8. 循环语句中,break作用是____B___。
A. 终结程序运营
B. 结束本次循环
C. 从本循环体内跳出
D. 跳出子函数
9. 如下对旳语句是______D____。
A. int a[1][4] = {1,2,3,4,5};
B. float x[3][ ] = {{1},{2},{3}};
C. long b[2][3] = {{1},{1,2},{1,2,3}};
D. double y[ ][3] = {0};
10. 执行如下程序段后,m值是__C___。
int a[]={2,1,3,5,4};
int m=10,k,*ptr=a;
for(k=0;k<5;k++)
m += *(ptr+k);
A. 23
B. 24
C. 25
D. 26
11. 若有数组定义并初始化语句:char a1[]={’p’,’r’,’o’} ;char a2[]=〝pro〞 ;则下列对旳说法是____D______。
A. a1和a2完全相似
B. a1和a2不同,a1是指针
C. a1和a2存储单元数目相似
D. a1和a2不同,a2存储单元数目多
12. 若有函数调用语句:
func(rec1,rec2+rec3,(rec4,rec5));
则可以判断该函数参数个数是___A____。
A. 3
B. 2
C. 5
D. 有语法错误
13. 若有如下定义:
struct person{
char name[9];
int age;}c[10]={"Wang",19,"Zhang",17,"Li",20,"Zhao",18},*p=&a[0];
则能打印出字母'L'语句是__D___。
A. printf(“%c”,c[3].name);
B. printf(“%c”,c[3].name[1]);
C. printf(“%c”,c[2].name[1]);
D. printf(“%c”,c[2].name[0]);
14. 若要打开A盘根目录下user子目录下名为abc.txt文本文献进行读、写操作,则下面符合此规定函数调用是__B___ 。
A. fopen("A:\user\abc.txt","r");
B. fopen("A:\\user\\abc.txt","r+");
C. fopen("A:\user\abc.txt","rb");
D. fopen("A:\\user\\abc.txt","w");
15. 若建立了如下链表构造,如图6-12所示。指针p指向如图所示结点,t为与data同类型数据变量,则互换p所指向结点数据和该结点下一种结点数据语句为:t=p->data;____B_____。
图6-12 链表构造
A. p->next->data = p->data;p->data =t;
B. p->data = p->next->data;p->next->data =t;
C. p->data = t;p->next->data = p->data;
D. p->next->data = t;p->data = p->next->data;
二、程序填空题
1. 程序运营时,输入整数n(0<n<10)后,输出一种数字金字塔。如输入4,则输出:
1
222
33333
4444444
源程序:
#include <stdio.h>
void main()
{ int i,j,n;
scanf("%d",&n);
for(i=1;____i<=n____;i++)
{
for(j=1;j<=n+1-i;j++)
putchar(' '); /* 输出空格 */
for(j=1;j<=____i*2-1____;j++)
printf("%d",i);
printf("____\n____");
}
getchar(); /*暂停程序,按任意键继续*/
}
2. 输入一行字符,记录并输出其中英文字母、数字和其她字符个数。
运营示例:
输入字符串:ABCabc23+45#
各类字符个数:letter=6,digit=4,other=2
源程序:
#include <stdio.h>
void main( )
{ int digit,letter,other;
char ____ch___;
digit = letter = 0;
other = ___0____;
printf("输入字符串:");
while( (ch = getchar())!= '\n')
if((ch >= 'a' && ch <= 'z') || _______(ch >= 'A' && ch <= 'Z')_____)
letter ++;
else if (ch >= '0' && ch <= '9')
digit ++;
else
____other++____;
printf("各类字符个数:\n ");
printf("letter=%d,digit=%d,other=%d\n",letter,digit,other);
getchar(); /*暂停程序,按任意键继续*/
}
3. 输入一种整数,逆序后输出。函数reverse(int number)功能是返回number逆序数。例如reverse(12345)返回值是54321。
运营示例:
输入整数:-1230
逆序后:-321
源程序:
#include <stdio.h>
int reverse(int);
void main( )
{ int in;
____int m____;
printf("输入整数:");
scanf("%d",&in);
m = ____reverse(in)____;
printf("逆序后:%d\n",m);
getchar();/*暂停程序,按任意键继续*/
}
int reverse(int number)
{ ____int flag____;
int res=0;
flag = number < 0 ?-1 :1; /* flag标志正负数 */
if(number < 0) number = - number;
while(number != 0)
{
res = res*10 + number%10;
____number=number/10____;
}
return ____flag____*res;
}
三、操作题
(一)程序调试题
1. 程序调试题1
调试规定:下列程序涉及2个错误,请按题中功能规定,调试并修改该程序(在所修改语句后加/*******/字样注释),使其运营能得到对旳成果。将成果(波及B_2_1.C文献和B_2_1.EXE文献)保存到指定目录中。
功能阐明:运用格里高利公式π/4=1-1/3+1/5-1/7+......求前n.项π值。
如输入:5 则输出:pi=3.339683
又输入:10000 则输出:pi=3.141498
带错误原程序(见\B_2_1.C):
#include <stdio.h>
main( )
{
float pi=0,n,i;
int sign=1;
scanf("%f",n); /* scanf("%f",&n);*/
for (i=1;i<=n;i++)
{
pi+=sign/(2*i-1);
sign=-sign;
}
pi=4*pi /* pi=4*pi;*/
printf("pi=%f\n",pi);
getchar(); /*本句无错;暂停程序,按任意键继续 */
}
2. 程序调试题2
调试规定:下列程序涉及3个错误,请按题中功能规定,调试并修改该程序(在所修改语句后加/*******/字样注释),使其运营能得到对旳成果。将成果(波及B_2_2.C文献和B_2_2.EXE文献)保存到指定目录中。
功能阐明:从键盘输入一种非负十进制整数n(n<32768),转化成二进制存入数组a,输出二进制成果。
如输入:23 则输出:10111
又输入:1234 则输出:
带错误原程序(见\B_2_2.C):
#include <stdio.h>
main()
{
int a[16],n; /* int a[16],n,i;*/
scanf("%d",&n);
for (i=0;n<0;i++) /* for (i=0;n>0;i++) */
{
a(i)=n%2; /* a[i]=n%2;*/
n/=2;
}
while(i>0)
printf("%d",a[--i]);
getchar(); /*本句无错;暂停程序,按任意键继续 */
}
3. 程序调试题3
调试规定:下列程序涉及3个错误,请按题中功能规定,调试并修改该程序(在所修改语句后加/*******/字样注释),使其运营能得到对旳成果。将成果(波及B_2_3.C文献和B_2_3.EXE文献)保存到指定目录中。
功能阐明:程序从键盘输入一行字符串,所有字符依次向右循环移动m个位置并输出,移出字符循环到最左边。
如输入:
3
则输出:
带错误原程序(见\B_2_3.C):
#include <stdio.h>
#include <string.h>
void shift_s(char a[],int n,int m) /*a数组n个字符右移m个位置*/
{
int i,j,t;
for(i=1;i<m;i++) /* for(i=1;i<=m;i++) */
{
for (j=n;j>0;j--)
a[j] = a[j+1]; /*移位并复制*/ /* a[j]=a[j-1];*/
a[0]=a[n];
}
a[n]='\0';
}
main()
{
char stra[80];
int i,n,m;
gets(stra);
n = strlen(stra);
scanf("%d",&m);
shift_s(stra,n,m); /*函数调用参数*/
puts(*stra); /* puts(stra);*/
getchar(); /*本句无错;暂停程序,按任意键继续 */
}
(二)编程题(2小题,共35分)
1.编程题1
编程规定:
请按题中功能规定,编写程序并能得到对旳成果。将成果(波及B_4_1.C文献和B_4_1.EXE文献)保存到指定目录中。
功能阐明:编写程序,实现如下成绩解决功能(输出格式参见示例):
(1)输入10个成绩(整数类型,数组名记为a);
(2)计算并输出最高分(记为max)、最低分(记为min)与成绩中值(记为midd),其中成绩中值为最高分与最低分平均值(保存一位小数输出);
(3)将midd及以上成绩归为A档,midd如下成绩归为B档,记录并输出A、B两档人数。
运营示例:
输入:88 59 50 74 60 99 75 90 68 70
输出:Max=99,Min=50,Midd=74.5,A=4,B=6
程序如下:
#include <stdio.h>
main()
{
int a[10],i,sum=0;
int Max,Min,A=0,B=0;
float Midd;
printf("输入:");
for(i=0;i<10;i++) scanf("%d",&a[i]);
Max=a[0];
for(i=1;i<10;i++)
if(Max<a[i]) Max=a[i]; Min=a[0];
for(i=1;i<10;i++)
if(Min>a[i]) Min=a[i];
Midd=(Max+Min)/2.0;
for(i=0;i<10;i++)
{ if(a[i]>Midd) A++;
if(a[i]<Midd) B++; }
printf("输出:Max=%d,Min=%d,Midd=%.1f,A=%d,B=%d\n",Max,Min,Midd,A,B);
}
2.编程题2
编程规定:
请按题中功能规定,编写程序并能得到对旳成果。将成果(波及B_4_2.C文献和B_4_2.EXE文献)保存到指定目录中。
功能阐明:编写程序,通过如下环节验证一种正整数与否符合特定规则:
(1)输入一种4位正整数n,将n分拆为a与b两某些:a为n高3位,b为n最低位;
(2)计算a所有因子之和,记为s(当1≤i<a时,如果a是i倍数,则i是a因子);
(3)如果s个位数等于b,则输出"Pass",否则输出"Fail";
(4)将a,b,s值保存到文本文献"B42.TXT"中。
输出格式参见如下示例。
运营示例:
输入:1164
输出:116:1+2+4+29+58=94,Pass
运营后文献内容:116 4 94
阐明:输入数为1164(相应n),分拆为116(相应a)和4(相应b),116因子为1、2、4、29和58,累加和为94(相应s),s个位数等于b(4),输出"Pass",a,b,s保存在文献中。
#include<stdio.h>
void main()
{
int a,b,i,n,s=0;
printf("输入一种四位数:");
scanf("%d",&n);
a=n/10;
b=n%10;
printf("%d:",a);
for(i=1;i<a;i++)
{if(a%i==0)
{
if(i==1)
printf("%d",i);
else
printf("+%d",i);
s+=i;
}
}
printf("=%d,",s);
if(s==94)
printf("pass\n");
else
printf("fail\n");
}
展开阅读全文