第五章-----------------------------------------
一、选择题
2.C语言中规定:在一个源程序中main函数的位置(C)
A.必须在最开始 B.必须在系统调用的库函数的后面 C.可以任意 D.必须在最后
4.有以下程序:
char fun (char x, char y)
{
if(x<y) return x ;
return y ;
}
main ()
{
int a='9' , b='8' , c='7' ;
printf ("%c\n",fun(fun(a,b),fun(b,c))) ;
}
程序的执行结果是(D)
A.函数调用出错 B.8 C.9 D.7
7.在函数调用语句f(g(x,y),z=x+y,(x,y));中,实参的个数是(A)
A.3 B.4 C.5 D.7
9.下面的函数定义正确的是(D)
A.float fun (float x; float y) {return x*y;}B.float fun(float x,y){return x*y;}C.float fun(x,y){int x,y;return x*y;}D.float fun(int x,int y){return x*y ;}
10.C语言中形参的默认存储类别是(A)
A.自动(auto)B.静态(static)C.寄存器(register)D.外部(extern)
二、程序分析题
1.求出程序运行结果
#include <stdio.h>
int m=10;
void f(int n)
{
n=9/n;m=m/2;
}
main()
{
int n=3;
f(n);
printf(“m=%d,n=%d\n”,m,n);
}
运行结果m=5,n=3
3.求出程序运行结果
#include <stdio.h>
int m=1;
int fun(int m)
{
int n=1;
static int i=1;
n++;
i++;
return m+n+i;
}
main();
{
int i;
for(i=1;i<3;i++)
printf(“%4d”,fun(m++));
print(“\n”);
}
运行结果为: 5 7
三、编程题
2.编写一个函数,求出3个数中的最大数。
double max_three(double x,double y,double z)
{
double max=x;
if(max<y)
max=y;
if(max<z)
max=z;
return max;
}
4.编写一个函数fun(n),求任意整数的逆序数。例如当n=1234时,函数值为4321
#include <stdio.h>
int fun(int n)
{
int digit,data=0;
do
{
digit=n%10;
n/=10;
data=data*10+digit;
}while(n>0);
return data;
}
main()
{
int n;
printf(“Please enter the data:”);
scanf(“%d”,&n);
printf(“the result is:%d\n”,fun(n));
}
第六章----------------------------------------
一、选择题
2.下面不正确的一维数组定义是(A)
A.int n=5;int a[n]; B.int a[5]; C.int a[]={1,2,3,4}; D.int a[2*3];
3.下面正确的二维数组定义是(B)
A.int a[2][]={{1,2},{2,4}};B.int a[][2]={1,2,3,4};C.int a[2][2]={{1},{2},{3}};D.int a[2][]={{1,2},{3,4}};
5.下列选项中正确的是(C)
A.char str[12];str="xuesheng";B.char str[12];str{"xuesheng"};C.char str[12]="xuesheng";D.char str[12]="xuesheng";
6.若有char a[]="china";则(D)不可输出该字符串。
A.puts(a);B.printf("%s",a);C.int i;for(i=0;i<5;i++)printf("%c",a[i]);D.putchar(a);
二、程序分析题
2.下列程序的作用是将一个数组中的数据逆序输出。
#include <stdio.h>
main()
{
int n[10];
int i,j,tmp;
printf("please 10 numbers:\n");
for(i=0;i<10;i++) scanf("%d",&n[i]);
printf("Origin numbers:\n");
for(i=0;i<10;i++)
printf(" %d",n[i]);
i=0;j=9;
while(i<=j)
{
tmp=n[i];
n[i]=n[j];
n[j]=tmp;
i++;
j--;
}
printf("Revresing number:\n");
i=0;
while(i<10)
{
printf(" %d",n[i]);
i++;
}
}
3.下列程序是求矩阵m[5][5]两条对角线元素的和。
#include <stdio.h>
main()
{
int m[5][5],sum1,sum2,i,j;
printf("Please elements:\n");
for(i=0;i<5;i++)
scanf("%d%d%d%d%d",&m[i][0],&m[i][1],&m[i][2],&m[i][3],&m[i][4]);
printf("Enter:\n");
for(i=0;i<5;i++){
for(j=0;j<5;j++)
printf("%d".m[i][j]);
printf("\n");}
sum1=m[0][0]+m[1][1]+m[2][2]+m[3][3]+m[4][4];
sun2=m[0][4]+m[1][3]+m[2][2]+m[3][1]+m[4][0];
printf("The result:\n%d %d\n",sum1,sum2);
}
4.下列程序的作用是任意输入一个字符串,将其中的字符按ASCII码值从小到大重新排序并输出。
#include <stdio.h>
#include <string.h>
main()
{
char input[30],temp;
int length,i,j;
printf("Enter a string:\n");
gets(input);
length=strlen(input);
for(i=0;i<length;i++)
for(j=i+1;j<length;j++)
if(input[i]>input[j])
{
temp=input[i];
input[i]=input[j];
input[j]=temp;
}
printf("After sorting:\n%s\n",input);
}
三、编程题
1.有一个数组,内放10个整数,要求找出最大数及它的下标。
#include <stdio.h>
main()
{
int num[10],m,mx,i;
for(i=0;i<10;i++)
scanf("%d",&num[i]);
m=num[0];
mx=0;
for(i=0;i<10;i++)
if(num[i]>m)
{m=num[i];mx=i;}
printf("the max num %d is at %d",m,mx);
}
3.有n个学生每人考m门课,请编程计算每个学生的平均成绩,并统计输出不及格科目的学生。
#include <stdio.h>
#define N 2
#define M 3
main()
{
int sco[N][M],i,j,av[N];
for(i=0;i<N;i++)
{
av[i]=0;
for(j=0;j<M;j++)
{
scanf("%d",&sco[i][j]);
av[i]+=sco[i][j];
}
}
printf("Student sco:\n");
for(i<0;i<N;i++)
{
for(j<0;j<M;j++)
printf("%5d",sco[i][j]);
printf("\n");
}
for(i=0;i<N;i++)
{
printf("\n%d student's average score:%d\n",i,av[i]/M);
for(j=0;j<M;j++)
if(sco[i][j]<60)
printf("%d student's %d subject is failed.\n",i,j);
}
}
第七章-------------------------------------
一、选择题
1.有以下程序段:int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];b中的值是(D)
A.5 B.6 C.8 D.9
3.有以下程序:main() {char*p[10]={"abc","aabdfg","dcdbe","abbd","cd"};printf("%d\n",strlen(p[4]));}执行后输出结果是(A)
A.2 B.3 C.4 D.5
7.若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是(C)
A.p+1 B.a+1 C.a++ D.++p
8.以下程序的输出结果为(C)
main()
{
char *alpha[6]={"ABCD","EFGH","IJKL","MNOP","QRST","UVWX"};
char **P;
int i;
p=alpha;
for(i=0;i<4;i++)
printf("%s",p[i]);
printf("\n")
}
A.ABCDEFGHIJKL B.ABCD C.ABCDEFGHIJKLMNOP D.AEIM
10.若有以下定义和语句:
#include <string.h>
main()
{
char *sl="12345",*s2="1234";
printf("%d\n",strlen(strcpy(s1,s2)));
}
则输出结果是(A)
A.4 B.5 C.9 D.10
二、程序分析题
2.分析下列程序,并给出执行结果。
#include <stdio.h>
void padd(int *p,int n)
{
int i;
for(i=0;i<;i++)
{
(*p)++;
p++;
}
}
main()
{
static int a[]={0,1,2,3,4,5,6,7,8,9};
int i;
for(i=0;i<10;i++);
printf("%4d",a[i]);
printf("\n");
padd(a,10);
for(i=0;i<10,i++);
printf("%4d",a[i]);
printf("\n");
}
运行结果 0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 10
3.分析下列程序,并给出执行结果。
#include <stdio.h>
void invert(int *a,int n)
{
int *p,*pi,*pj;
int temp,m;
m=(n-1)/2;
pi=a;
pj=a+n-1;
p=a+m;
while(pi<=p)
{
temp=*pi;
*pi=*pj;
*pj=temp;
++pi;
--pj;
}
}
main()
{
int i;
static int arr[]={1,2,3,4,5,6,7,8,9,10};
for(i=0;i<10;i++)
printf("%4d",arr[i]);
printf("\n");
intvert(arr,10);
for(i=0;i<10;i++)
printf("%4d",arr[i]);
printf("\n");
}
执行结果为 1 2 3 4 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1
三、编程题
1.从键盘上输入3个数,按从小到大的顺序显示。要求利用函数和指针完成。
#include <stdio.h>
void sort_three(int*x,int*y,int*z)
{
int t;
if(*x>*y){t=*x,*x=*y,*y=t;}
if(*x>*z){t=*x,*x=*z,*z=t;}
if(*y>*z){t=*x,*y=*z,*z=t;}
}
main()
{
int a,b,c;
printf("Enter 3 numbers:(a,b,c)");
scanf("%d,%d,%d",&a,&b,&c);
printf("Origin:%d,%d,%d\n",a,b,c);
sort_three(&a,&b,&c);
printf("Sort:%d,%d,%d\n",a,b,c);
}
2.在main函数中输入一个字符串,在pcopy函数中将此字符串从第n个字符开始到第m个字符为止的所有字符显示出来
#include<stdio.h>
char sl[10];
main()
{
int m,n;
void pcopy(char*s,int m,int n);
char s[]="this is a test!";
printf("Enter m,n");
scanf("%d,%d",&m,&n);
pcopy(s,m-1,n-1);
printf("%s\n",s1);
}
void pcopy(char*s,int m,int n)
{
int i,j;
for(j=0,i=m;i<=n;i++,j--)
s1[j]=s[i];
}
3.利用指针编写求字符串长度的函数strlen()。
int strlen(char*s,int m,int n)
{
int i=0;
while(*s!='\0')
{
s++;
i++;
}
return i;
}
第八章---------------------------------------
一、选择题
1.设有如下定义:
struct sk
{
int a;
float b;
}data;
int *p;
若要使p指向data中的a域,正确的赋值语句是(C)
A.p=&a;B.p=data.aC.p=&data.aD.*p=data.a
3.有以下程序:
struct s
{
int x;
int y;
}data[2]={10,100,20,200};
main()
{
struct s *p=data;
printf("%d\n",++(p->x));
}
程序运行后的输出结果是(B)
A.10 B.11 C.20 D.21
4.以下程序的输出结果是(C)
struct st
{
int x;
int *y;
}*p;
int dt[4]={10,20,30,40};
struct st aa[4]={50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0]};
main()
{
p=aa;
printf("%d\n",++(p-x));
}
A.10 B.11 C.51 D.60
7.设有如下枚举类型定义: