请各位懂C语言程序设计的人帮帮忙 做这些程序设计题(急用)
一、 单项选择题1、一个正确的C源程序中, 是不能缺少的。
A、#include<stdio.h> B、main函数的定义 C、注释 D、全局变量声明
2、以下关于main函数的叙述中正确的是 。
A、一个C语言源程序中只能有一个main函数
B、main函数只能放在程序开始位置
C、main函数中必须至少有一条执行语句
D、main函数不能有任何形式参数
3、可以用signed和unsigned 修饰的类型标识符是 。
①int ②float ③double ④char
A、①④ B、②③ C、①② D、①②③④
4、以下叙述中正确的是 ____。
A、可在C源程序中任何地方插入注释
B、一个C源程序可以任意分成若干部分,分别保存在多个文件中。
C、一个C源程序的语句可以任意跨行书写。
D、一个C程序的main函数运行结束,整个C程序运行即结束。
5、设有定义和声明如下:
#define d 2
int x=5; float y=3.83; char c='d';
以下表达式中有语法错误的是 。
A、x++ B、y++ C、c++ D、d++
6、以下定义和声明中,语法均有错误的是 。
① int _f(int x){ } ② int f(int f){ } ③ int 2x=1;
④ struct for{int x;};
A、②③ B、③④ C、①④ D、①②③④
7、以下局部变量声明中,正确的是 。
A、int 2x=1, 2y=0;
B、float x=2, y=sqrt(x)*x;
C、char do =1;
D、double f1=f*sin(f), f=2.0;
8、以下C语言常量中,正确的是 _。
① 0218 ② ’\0x1a’ ③ E-9 ④ 3.5f
⑤ (1/2)e-2 ⑥ 3L ⑦ 0xFF
A、①②③ B、③⑤ C、②④⑦ D、④⑥⑦
9、下列C语言表达式中,错误的是 。
① ++a+++b ② “ABC” “abc” ③ -a++
④ -++a ⑤ ++-a ⑥ int(x) ⑦ x>y=2
A、①②③⑦ B、 ②③④⑤ C、①⑤⑥⑦ D、 ②④⑥⑦
10、以下常量中, 是符合语法要求的。
①0258 ②’\0xaa’ ③1E-9 ④3.5f ⑤(1/2)e-2 ⑥3L ⑦0xFF
A、①②③ B、③⑤ C、②③④⑦ D、③④⑥⑦
11、以下函数定义中正确的是 。
A、double fun(double x,double y){ …… }
B、double fun(double x;double y){ …… }
C、double fun(double x,double y);{ …… }
D、double fun(double x,y){ …… }
12、若需要通过调用f函数得到一个数的平方值,以下f函数定义中不能实现该功能的是
。
A、void f(double *a){ *a=(*a)*(*a);}
B、void f(double a,double *b){ *b=a*a; }
C、void f(double a,double b){ b=a*a;}
D、double f(double a){ return a*a; }
13、以下局部变量声明中,正确的是 。
A、int x=0, if=1; B、int 2x=1,2y=0;
C、int x=2,y=sqrt(x); D、int x=sqrt(y),y=4;
14、在一个函数被调用执行过程中,当执行到函数体中 语句后立即无条件返回主调函数。
A、return B、break C、continue D、goto
15、C语言表示逻辑假的值是 。
A、非零整数值 B、0 C、1 D、FALSE
16、在现有编译系统中表达式sizeof(10.1)的值是 。
A、1 B、2 C、4 D、8
17、若有声明“long a,b;”且变量a和b都需要通过键盘输入获得初值,则下列语句中正确的是 。
A、scanf("%ld%ld,&a,&b"); B、scanf("%d%d",a,b);
C、scanf("%d%d",&a,&b); D、scanf("%ld%ld",&a,&b);
18、若在一个C语言源程序中“e1”和“e3”是表达式,“s;”是语句,则下列选项中与语句“for(e1; ;e3)s;”功能等同的语句是 。
A、e1;while(10)s;e3; B、e1;while(10){s;e3;}
C、e1;while(10){e3;s;} D、while(10){e1;s;e3;}
19、已知有声明:int x=1,y=2,z=3;以下表达式中,表达式的值为0的是 。
①x/y ②!!x ③x==2 ④x=2 ⑤y--,y-- ⑥z>y>x
A、①③⑥ B、②④⑤ C、①③⑤ D、②③⑥
20、以下表达式中,可以正确地用于if(e)/else语句中的条件表达式e是 。
A、++(x+1)==x+2
B、t=!(y%4)&&y%100||!(y%400)
C、x+1=z
D、x%2.0==0
21、以下关于main函数定义的叙述中,正确的是 。
A、main函数是系统函数,因此函数体不能为空
B、main函数定义时不能有形式参数
C、main函数定义必须出现在一个源程序的起始位置
D、在一个源程序中只能有一个main函数定义
22、以下一维数组声明中,正确的是 。
A、int a[ ]; B、int b[10],a[b];
C、int a[4]={1,2,3,4,5}; D、int a[sizeof('a')]={'a'};
23、以下二维数组声明中,正确的是 。
A、char b[2][3]={“a”.”b”.”c”}; B、char b[][3]={0};
C、char b[2][]={0}; D、char b[][]={0};
24、若x为long int型变量,则以下表达式中能正确求出x绝对值的表达式是_ 。
A、x?x:-x B、fabs(x)
C、abs(x) D、floor(x)
25、以下常量中, 是符合语法要求的。
①0258 ②’\0xaa’ ③1E-9 ④3.5f ⑤(1/2)e-2 ⑥3L ⑦0xFF
A、①②③ B、③⑤ C、②③④⑦ D、③④⑥⑦
26、下列C语言表达式中,能正确表达数学计算式1÷ × 2x y 的表达式是 。
A、1/sqrt(2*3.14)*2*pow(x,y) B、1.0/sqrt(2)*2*x**y
C、1.0/sqrt(6.28)*2x^y D、1/6.28^0.5*2*pow(x,y)
27、以下对于continue语句使用的正确描述是 。
A、可以出现在函数中任何位置
B、只能出现在循环结构中
C、只能出现在循环结构或switch结构中
D、continue语句一旦被执行将使程序执行流程从所在结构中跳出
28、以下表达式中,可以正确地用于if(e)/else语句中的条件表达式e是 。
A、++(x+1)==x+2
B、!(y%4)&&y%100||!(y%400)
C、x+1=z
D、x%2.0==0
二、填空
1、一个C语言源程序由若干个函数定义、若干个外部对象声明及若干个 组成。
2、若声明 int a=-30,b=-7; ,则表达式 a%b 的值为 。
3、C语言中,既无值也无类型且不需要声明便可直接使用的标识符是 。
4、在一个C语言源程序中,必不可少的是 。
5、若有声明“int x;”且sizeof(x)的值为2,则当x值为 时“x+1>x”为假。
6、若声明int x=1,z=1,y=1,k;则计算表达式k=x++||++y&&++z后,变量k,x,y,z的值分别为 。
7、用C语言的八进制常量表示signed int型常量(16位二进制)的可表示数值范围为____。
8、在实现循环结构的语句中,其循环体至少无条件执行一次的语句是 。
9、当程序中需要调用库函数strcmp时,应当包含头文件 。
10、执行以下程序段中的语句“k=M*M+1;”后k的值是 。
#define N 2
#define M N+1
k=M*M+1;
11、若已声明 float a=3.14; ,则表达式36/printf(“%f\n”,a) 的值为 。
12、若已声明 int a=1,b=2,c=3; ,则表达式a++, c*a*b的值为 。
13、在C语言源程序中需要建立或更新数据文件时,都要声明和使用FILE结构类型的指针变量,因此在源程序中必须包含头文件 。
14、当定义一个无返回值函数时,函数的返回值类型标应为 。
15、若已有二维数组声明“int a[][3]={{1},{2},3,4,5,6};”,则该数组共有 个数组元素。
16、已知有声明int x=1, y=2, z=3;则执行语句x>y?( z -=--x):(z+=++y);后,x, y, z的值为 。
三、阅读程序题
1、以下程序段执行后,将输出 。
unsigned char x, a, b;
x=0;
a=x-1;b=x;
if(a<b)printf(“ok”);
else printf(“no”);
2、以下程序段执行后,变量t,x,y,z的值是 。
int t,x,y,z;
x=y=z=0;
t=(x+1,x++)&&(y+=1)||z++;
3、以下程序执行时输出结果为 。
int min(int x,int y)
{ if(x<y) return x;
else return y;
}
main( )
{ int ix;
float fx=2.5,fy=3,fz;
double dz;
ix=2.5;
fz=min(fx,fy) ;
dz=3/ix;
printf("\n%.2f,%.2f",fz,dz);
}
4、以下程序运行时输出结果是 。
#include <stdio.h>
void main()
{ int k=5,n=0;
while(k>0)
{ switch(k)
{ case 1:
case 3: n+=1;k--;break;
default: n=0;k--;
case 2:
case 4: n+=2; k--; break;
}
printf("%3d",n);
}
}
5、以下程序执行时输出结果的第一个数为 ,最后一个数为 。
#define P1 1
#define P2 2
main( )
{ int x;
for(x=1;x<=3;)
{ switch(x){
case P1: x++;
case P2: x++;break;
case P1+P2: x++;
}
printf("%d\n",x);
}
}
6、以下程序执行时输出结果的第一行为 ,第二行为 。
main( )
{ int a=1,b,c;
a*=6+4;
b=a>10?a:a-1;
c=a,b;
printf("%d \n %x",b,c);
}
7、以下程序运行时输出结果是 。
#include<stdio.h>
int f(int x,int y)
{ return x+y; }
void main()
{ double a=5.5,b=2.5;
printf("%d",f(a,b));
}
8、以下程序运行时输出结果中第一行是 。
#include<stdio.h>
void fun(int x,int p[],int *n)
{ int i,j=0;
for(i=1;i<=x/2;i++)
if(x%i==0)p[j++]=i;
*n=j;
}
void main()
{ int x,a[10],n,i;
fun(27,a,&n);
for(i=0;i<n;i++)
printf("%5d",a[i]);
printf("\n%5d",n);
}
9、若运行下面的程序时从键盘上输入How are you?#[enter] (注:[enter]表示回车键),则程序的输出结果的第一行为 ,第二行为 。
#include<stdio.h>
void main( )
{ int v1=0,v2=0;
char ch;
while((ch=getchar())!=’#’)
switch(ch)
{ case ‘o’ : v2++; /* case后面的常量为字母o*/
default: v1++;
}
printf(“%d , %d\n”, v1,v2); printf(“%o , %o”, v1,v2);
}
10、以下程序的输出结果第一行是 ,第二行是 。
main( )
{ int a, b, k=4, m=6, *p1=&k, *p2=&m;
a=p1= =&m;
b=(*p1)/(*p2)+7;
printf(“%d\n”, a);
printf(“%d\n”, b);
}
11、以下程序执行后,输出结果是 。
#define N 100
main()
{ int i=0,sum=0;
do
{ if(i==(i/2)*2) continue;
sum++;
if(sum>40) break;
}while(++i<N);
printf(“%d\n”, sum);
}
12、以下程序的输出结果第一行是 ,第二行是 。
#include<stdio.h>
main( )
{ char a[]=”student”, t;
int I,j=0;
for(i=1; i<7; i++)
if(a[j]<a[i]) j=I;
t=a[j]; a[j]=a[7];
a[7]=t;
puts(a);
puts(a+3);
}
四、完善程序
2、以下程序中函数long fun(char *str)的功能是:自左至右取出非空字符串str中的所有数字字符,将这些数字字符组成一个不超过8位的十进制整数并输出。
例如,字符串str为“efg32gh76.jbejing08t5y4u2”,程序输出:32760854。
#include <stdio.h>
long fun(char *str)
{ int i=0; long k=0;
char *p=str;
while(*p!='\0'&& )
{ if(*p>='0'&&*p<='9')
{ k= +*p-'0'; ++i; }
;
}
return k;
}
void main( )
{ char x[]="efg32gh76.jbejing08t5y4u2";
printf("%ld\n", fun(x));
}
3、以下程序根据公式计算 sin x 的近似值,请完善之。sin x=x-x3/3!+x5/5!-x7/7!+……
#include <stdio.h>
#include <math.h>
#define eps 1.0e-5
main()
{ float x,x1,y1,y2;
int i=0;
scanf(“%f”,&x);
y2=x;
;
do
{ i++;
y1=y2;
x1=x1* ;
y2=y2+x1;
}while(fabs(y2-y1)>eps);
printf(“%f\n”,y2);
}
4、已知方程x3+3x2–2x–1=0在[0,1]内有一实根,以下程序采用二分法(半分区间法)求出该实根并输出。请完善程序。
#include<stdio.h>
#include<math.h>
float f(float x)
{ return -1-x*(2-x*(3+x));}
main( )
{ float a=0,b=1,x,eps=1e-8;
if(fabs(f(a)*f(b))<eps)
{ if(fabs( )<eps)x=a;
else x=b;
}
else
{ x=(a+b)/2;
while(fabs( )>eps&&fabs(b-a)>eps)
{ if( *f(x)>0)
b=x;
else
a=x;
;
}
}
printf("x=%f",x);
}
5、下列程序把一个int型数转换成对应的字符串并打印出来。请完善之。
#include <stdio.h>
main()
{ int t,k,n;
scanf("%d",&n);
k=n;
if(n<0)
{ putchar( );
k=-n;
}
for(t=1;n>10;t*=10,n/=10);
for(;t>1; )
{ putchar(k/t+ );
k%=t;
}
putchar(k+'0');
}
6、find函数功能:在x指向的一个有序二维数组的前n行中查找值为key的数组元素,若找到则将该数组元素在二维数组中的行、列下标值分别保存到row和col指向的变量中且函数返回1,若未找到则函数返回0。已知x指向的二维数组的每一行中元素的值均从小到大顺序存储,第i行中所有元素的值均小于第i+1行中所有元素的值(i=0,1,2,3…n-1)。算法:用折半查找法定位值为key的数组元素所在行,用线性查找法在已经定位的行中查找值为key的数组元素。
#include<stdio.h>
int find(int x[][5],int n,int key,int *row,int *col)
{ int i,low=0,high=n-1,mid;
while(low<=high)
{ mid= ;
if(key>=x[mid][0]&& key<=x[mid][4])break;
if(key<x[mid][0])
;
else if(key>x[mid][4])
low=mid+1;
}
for(i=0;i<5;i++)
if( )
{ *row=mid; *col=i; return 1;}
return 0;
}
main()
{ int a[5][5]={{1,3,4,6,9},{12,14,15,17,19},{22,23,24,26,28},
{31,33,34,36,37},{42,44,46,47,48}},m,n,key;
puts("input key:"); scanf("%d",&key);
if(find(a,5,key,&m,&n))printf("%d is stored at a[%d][%d]",key,m,n);
else printf("\n %d not found!",key);
}
附件是这个题目的原文 这里有些题目是看不了的
程序设计基础.rar
(23.55 KB)
[ 本帖最后由 夏相国 于 2009-10-22 12:47 编辑 ]