3.建立一个链表,每个结点包括:学号、姓名、年龄。数据从键盘上输入, 输入的学号为0时结束输入。链表建立后,将该链表中数据输出到屏幕上并存放到文件student.dat中。
答案是:#include "stdio.h"
#define LEN sizeof(struct student)
struct student
{
long num;
char name[8];
int age;
struct student *next;
};
struct student *creat(void)
{
struct student *p1,*p2,*head;
int n=0;
p1=p2=(struct student *)malloc(LEN);
printf("请输入学号:");
scanf("%ld",&p1->num);
head=NULL;
while(p1->num!=0)
{
printf("请输入姓名:");
scanf("%s",p1->name);
printf("请输入年龄:");
scanf("%d",&p1->age);
n++;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(struct student *)malloc(LEN);
printf("请输入学号:");
scanf("%ld",&p1->num);
}
free(p1);
if(head)
p2->next=NULL;
return head;
}
void print(struct student *head)
{
struct student *p=head;
while(p)
{
printf("\n姓名:%s,学号:%ld,年龄:%d",p->name,p->num,p->age);
p=p->next;
}
}
void save(struct student *head)
{
struct student *p=head;
FILE *fp;
fp=fopen("stud","wb");
for(;p;)
{
if(fwrite(p,sizeof(struct student),1,fp)!=1)
printf("File write error\n");
p=p->next;
}
fclose(fp);
}
struct student *access(void)
{
struct student *p1,*p2,*head=NULL;
FILE *fp;
fp=fopen("stud","rb");
int n=0;
p1=p2=(struct student *)malloc(LEN);
while(1)
{
if(fread(p1,sizeof(struct student),1,fp)!=1)
printf("File read error\n");
n++;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
if(p1->next==NULL)
break;
p1=(struct student *)malloc(LEN);
}
if(head)
p2->next=NULL;
return head;
}
void main(void)
{
struct student *head;
printf("请输入各结点数据:\n");
head=creat();
if(head)
{
print(head);
save(head);
free(head);
head=access();
print(head);
}
}
2.用选择法或冒泡法对输入的十个字符(按ASCII码由小到大)进行排序。
答案是:#include "stdio.h"
#define N 100
void sort(char str[],int len)
{
int i,j;
char t;
for(j=1;jstr[i+1])
{
t=str[i];
str[i]=str[i+1];
str[i+1]=t;
}
}
void sort(char str[],int len)
{
int i,j,k;
char t;
for(j=0;jN)
printf("字符串太长,请重输,不要超过%d个字符\n",N);
else
flag=0;
}
sort(str,len);
printf("排序的结果为:\n");
for(i=0;i
1.用递归方法将一个整数N转换成字符串。例如,输入483,应输出字符串“483”。N的位数不确定,可以是任意位数的整数。
答案是:#include "stdio.h"
void convert(long n)
{
long i;
if((i=n/10)!=0)
convert(i);
putchar(n%10+'0');
}
void main(void)
{
long n;
printf("\n请输入一个整数:");
scanf("%ld",&n);
printf("转换成字符串为:");
if(n<0)
{
putchar('-');
n=-n;
}
convert(n);
}
下列程序用来创建一个学生数据的单向链表。创建中如输入的学号为零,则创建结束。#define LEN sizeof (struct student)
struct student
{
long num;
float
答案是:head=p1
p2->next=p1
(struct student*)malloc(LEN)
NULL
下列程序将两个升序数组a、b合并到数组c中后,c仍为升序数组。
main()
{
int a[10]={1,2,5,8,9,10}, int b[10]={1,3,4,8,12,18};
int j,k,l,c[2
答案是:答案:a[j] j++ b[k] k++
判断m是不是素数。算法:如m能被2~m-1中的任何一个数整除,则不是素数。
main( )
{
int m,i;
scanf("%d",&m);
if(m<=2)
{printf(“\n%d是素数
答案是:break i>=m
在数组a中查找用户输入的某个数x。
#define N 10
main()
{
int a[N] = {23,56,11,87,91,35,41,44,60,6};
int p,x;
printf ( "\
答案是:scanf(“%d”,&x); x!=a[p]&&p
int a;
main()
{
int i;
i=a=1;
sub();
printf("a=%d i=%d\n",a,i);
}
sub()
{
int i;
i=a=
答案是:答案:a=2 i=1
main( )
{
int s[6][6],j,k;
for(j=0;j<6;j++)
for(k=0;k<6;k++)
*(*(s+j)+k)=j-k;
for(
答案是:答案:0 -1 -2 -3 -4 -5
1 0 -1 -2 -3 -4
2 1 0 -1 -2 -3
3 2 1 0 -1 -2
4 3 2 1 0 -1
5 4 3 2 1 0
main()
{
int a[]={1,2,3,4,5};
int x,y,*p;
p=&a[0];
x=*(p+2);y=*(p+4);
printf("*p=%d,x=%d,y=%
答案是:答案:*p=1,x=3,y=5
main()
{
int m=37,n=13;
while(m!=n)
{
while(m>n)
m=m-n;
while(n>m)
n
答案是:答案:m=1
{
int a,b,c;
a=2;b=7;c=5;
switch(a>0)
{
case 1:
switch(b<10)
答案是:答案:^#&
如:char a[]=”\t\r\\\0will\n”;则sizeof(a)的结果为10。 ( )
答案是:对
有定义:int a[][2]={1,2,3,4},*pa;若要使*pa的值为a[0][0],则令pa=a即可。( )
答案是:错
当说明一个共用体变量时系统分配给它的内存是各成员所需内存量的总和。( )
答案是:错
C语言的编译预处理就是对源程序进行初步的语法检查。( )
答案是:错
在C语言程序中,函数的调用可以嵌套,但函数的定义不可以嵌套。( )
答案是:对
在不同函数中可以使用相同名字的变量。( )
答案是:对
C语言规定:函数返回值类型由调用该函数时的主调函数类型所决定。( )
答案是:错
字符数组的字符串可以整体输入、输出。( )
答案是:对
从多层循环嵌套中退出时,只能使用goto语句。( )
答案是:对
C语言中,while和do-while循环的主要区别是:do-while的循环体至少无条件的执行一次。( )
答案是:√
在循环语句的循环体中执行break语句,其作用是( )。
A)跳出该循环体,提前结束循环
B)继续执行break语句之后的循环体各语句
C)结束本次循环,进行下次循环
D)终止程序运行
答案是:A)跳出该循环体,提前结束循环
设prt1和prt2均为指向同一个int型一维数组的指针变量,k为int型变量,则下面不
能正确执行的赋值语句是( )。
A)k=*ptr1+*ptr2; B)
答案是:B)ptr2=k;
在下面四种字符串说明或赋值中,不正确的是( )。
A)char *p;p=“computer”; B)char *p={‘c’,’o’,’m’,’p’,’u’,’t’,’e’,’r’};
C)char p[20];p
答案是:C)char p[20];p=”computer”;
在对typedef的叙述中错误的是( )。
A)用typedef 可以定义各种类型名,但不能用来定义变量;
B)用typedef可以增加新类型;
C)用typedef只是将已存在的类型用一个新的标识符来代
答案是:B)用typedef可以增加新类型;
当说明一个结构体类型变量时系统分配给它的内存是( )。
A)各成员所需内存容量的总和; B)结构体中第一个成员所需内存数;
C)成员中占内存量最大者所需的容量; D)结构中最后—个成员所占内存量
答案是:A)各成员所需内存容量的总和;
语句while(!x)中的表达式!x等价于( )。
A)x= =0 B)x!=0 C)x!=1 D)x= =1
答案是:A)x= =0
若执行fopen函数时发生错误,则函数返回值是( )。
A)0 B)1 C)EOF D)地址值
答案是:A)0
判断字符串a和b是否相等,应当使用( )。
A)if(a= =b) B)if(a=b) C)if(strcpy(a,b)) D)if(strcmp(a,b))
答案是:D)if(strcmp(a,b))
凡是函数中未指定存储类别的局部变量,其隐含的存储类别为( )。
A)auto B)static C)extern D)register
答案是:A)auto
C语言规定,基本数据类型的变量做实参时,它和对应形参之间的数据传递方式是( )。
A)地址传递 B)单向的值传递
C)由实参传递给形参,再由形参传递回实参 D)由用户指定传递方式
答案是:B)单向的值传递
在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是( )。
A)auto B)static C)extern D)register
答案是:B)static
在宏定义:#define PI 3.1415926中,用宏名PI代替一个( )。
A)常量 B)双精度数 C)单精度数 D)字符串
答案是:D)字符串
C语言中的文件类型划分为( )
A) 索引文件和文本文件两种 B) ASCII文件和二进制文件两种
C) 只有文本文件一种 D) 只有二进制文件一种
答案是:B) ASCII文件和二进制文件两种
设有变量说明:int a[ ][2]={1,2,3,4}; int*pa, (*pb)[2]; 则执行语句“pa=&a[0][0]; pb=a” 后,(*(pb+1))的值为:( )
A) 3 B)
答案是:B) &a[1][0]
设有变量说明:int a[ ][2]={1,2,3,4}; int *pa, (*pb)[2]; 则执行语句“pa= &a[0][0]; pb=a” 后,(*(pa+1))的值为:( )
A) 3
答案是:C) 2
有如下程序,程序的运行结果为:( )
main( )
{
int i,x[3][3]={9,8,7,6,5,4,3,2,1},*p=&x[1][1];
答案是:C)5 3
C语言规定,程序中各函数之间( )
A)既允许直接递归调用也允许间接递归调用;
B)不允许直接递归调用也不允许间接递归调用;
C)允许直接递归调用不允许间接递归调用;
D)不允许直接递归调用允许间接递归调用。
答案是:A)既允许直接递归调用也允许间接递归调用;
设有如下枚类型定义:enum color{red=3,yellow,blue=9,white,black};请问枚举变量black的值是( )
A)1 ; B)11; C)12; D)2。
答案是:B)11;
若fp是指向某文件的指针,且已读到该文件的末尾,则C语言函数feof(fp)的返回值是( )
A)EOF; B)非零值; C)-1; D)0
答案是:B)非零值;
若i为整型变量,i=0;则以下循环while(i=0)i++;( )
A)执行10次; B)执行1次; C)一次也不执行; D)无限循环。
答案是:c)一次也不执行;
编写程序,打印杨辉三角形(10行)
答案是:1
1 2
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
………………...
#include
#define N 10
main()
{
int a[N][N],i,j;
for(i=0;i
2.求100——200之间的所有素数,并且把这些数保存到文件中。
答案是:#include
#include
#include
void main(){
int m,k,i,n=0;
FILE *fp;
if((fp=fopen("c:\\aa.txt","w"))==NULL)
{
printf("不能打开文件");
exit(1);
}
for (m=101;m<=200;m=m+2)
{k=sqrt(m);
for (i=2;i<=k;i++)
if(m%i==0) break;
if(i>=k+1) {fprintf(fp,"%d\t", m);n=n+1;}
if(n%10==0) fprintf(fp,"\n");
}
printf("\n");
}
1.编制求满足条件e = 1 + 1/(1!)+ 1/(2!)+ 1/(3!) + 1/(4!) + …….求e的值(最后一项小于10-6)
答案是:#include
void main()
{
int i,k,pro;
float sum=0;
for(i=0;i<=10;i++)
{
pro=1;
for(k=1;k<=i;k++)
pro*=k;
sum+=1/(float)pro;
}
printf("%f",sum);
}
3.选择法排序
void sort(int array[],n)用来对长度为n的数组array由小到大进行排序。
void sort(int array[], n)
{
int i, j, k, t;
for(
答案是:k=i ;
k=j ;
sort(a,10) ;
2.下面程序的功能是计算正整数2345的各位数字平方和,请选择填空。
#include
main()
{int n, sum;
;
n=2345
答案是:sum=0 4;
(n%10)*(n%10 );
n/10;
n!=0 ;
1. 1 n=0;
Hn(x) = 2*x n=1
2*x-Hn-1(x)-2(n-1)*Hn-2(x) n>1;
float x;
H (
答案是:float x ,int n;
n==1;
return 2*x*H(x,n-1)-2*(n-1)*H(x,n-2)
4、main()
{
int a[] = {1,2,3,4,5};
int x, y, *p;
p = &a[0];
x = *(p+2);
y = *p++;
printf(“%d,%d,%d\n”,
答案是:答案:
2,3,1
main()
{int a=2,i;
for(i=0;i<3;i++)printf("%4d",f(i));}
f(int a)
{int b=3;
static int c=0;
b++;c++;return(a+b+c);
答案是:答案:
5 7 9
2.#include ·
main()
{
int a[10],i,j,t;
for(i=0;i<10;i++)
a[i]=i;
for(j=1;j<=3;j++)
{
t=a[
答案是:答案:
3 4 5 6 7 8 9 0 1 2
1.main()
{ int a=1,b=3,c=5,d=4 ,x;
if(a
答案是:答案:
x=2
若w=1,x=2,y=3,z=4,则条件表达式w
答案是:D)1
为了避免在嵌套的条件语句If一else中产生二义性,C语言规定else子句总是与( )配对。
A)缩排位置相同的if B)其之前最近的if
C) 之后最近的if D)同一行上的if
答案是:B)其之前最近的if
若希望当A的值为奇数时,表达式的值为"真",A的值为偶数时,表达式的值为"假"。则以下不能满足要求的表达式是( ):
A) A%2= =1 B)!(A%2 = =0) C)!(A%2) D) A%2
答案是:D) A%2
下列运算符中优先级最高的是( )
A)< B)+ C)&& D)!=
答案是:B)+
下面对typedef的叙述中不正确的是 (B )
A)用typedef可以定义各种类型名,但不能用来定义变量
B)用typedef可以增加新类型
C)用typedef只是将已存在的类型用一个新的标识符来代表
D)使用tvpedef有
答案是:B)用typedef可以增加新类型
当说明一个共用体变量时系统分配给它的内存是( )
A)各成员所需内存量的总和
B)结构中第一个成员所需内存量
C)成员中占内存量最大者所需的容量
D)结构中最后一个成员所需内存量
答案是:C)成员中占内存量最大者所需的容量
若有以下定义和语句:
struct student
{int age;int num;};
struct student stu[3]={{1001,20},{1002,19},{1003,21}};
main()
{st
答案是:D)p=&stu.age
根据下面的走义,能打印出字母M的语句是( )
struct person
{char name[9];
int age;
}
struct person class[10]={"John",17,"Paul",19,
答案是:D)printf("%c\n",class[2].name[0]);
阅读 下程序,若运行结果为如下形式 ,输入输出语句的正确内容是():
main()
{int x; float y; printf("enter x,y:")
输入语句 输出语句
}
输入形式 ente
答案是:B)scanf("%d%f",&x,&y );printf("\nx+y=%4.2f",x+y);
设有说明:char w; int x; f1oat y; double z;
则表达式w* x+z-y值的数据类型为( ):
A)float B)char C)int D)double
答案是:D)double
sizeof(float)是( ):
A)一个双精度型表达式 B) 一个整型表达式
C) 一种函数调用 D) 一个不合法的表达式
答案是:B) 一个整型表达式
下面四个选项中,均是不合法的用户标识符的选项是( )
A) A P_0 do
B)float a0 _A
C)b-a goto
答案是:C.b-a goto int
假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值为( ):
A)7 B)8 C)6 D)2
答案是:B)8
若有说明:char *language[]={"FORTRAN","BASIC","PASCAL", "JAVA","C"};则以下不正确的叙述是( )。
A)language+2表示字符串"PASCAL"的首地址
B)*langua
答案是:D)每个元素都是一个指向字符串变量的指针
C程序的执行是从( )
A)本程序的main函数开始,到main函数结束
B)本程序文件的第-个函数开始,到本程序文件的最后-个函数结束
C)本程序的main函数开始,到本程序文件的最后-个函数结束
D)本程序文件的第-个函数开始,
答案是:A)本程序的main函数开始,到main函数结束
若 a=1;b= 2;c=2; if(a
答案是:2,1,1
判断char型变量ch是否为大写字母的正确表达式是:
答案是:ch>=’A’&&ch<=’z’
5.int a = 2 ,b ,c ; b = ++a ; c = (a++)+(b++) ; 则c = ,a = ,b =
答案是:6,4,4
4.nt a = 6 ; 若a *= 2+3,则a = ;又若a /= a+a,则a = ;又若a+=a-= a*=a,则a = ;
答案是:30;0;0
设a = 3 , b = 2 , c = 1 , 则!(a+b)+c-6&&c+b%2的值为
答案是:1
结构化程序设计的三种基本结构是
答案是:顺序结构,选择结构 ,循环结构
设int a = 2,b = 3;float x = 3.5,y = 2.5;表达式(float)(a+b)/2+(int)x%(int)y的值为
答案是:答案:3.5
目前为:
1/1
页
首页 上页 下页 尾页