资源描述
青蓝是06年4月的,深红色是06年9月的,蓝色是07年4月的,罗兰色是07年9月的,
绿色是08年4月,黑色是08年9月的, 浅橙色是09年3月的,深绿色是09年9月的,
粉色是2010年3月的,
表达式
(6)已有定义:char c=' ';int a=1,b;(此处c的初值为空格字符),执行b=!c&&a;后
b的值为【6】。【6】0
(7)改变量已正确定义为整型,则表达式n=i=2,++i,i++的值为【7】。【7】3
(6)设变量a和b已正确定义并赋初值。请写出与a-=a+b等价的赋值表达式【6】。
【6】a=a-(a+b)或(a=-b)
(6)表达式(int)((double)(5/2)+2.5)的值是【6】(6)4
(6)若有定义语句:int a=5;,则表达式:a++的值是 【6】 。(6)5
(7)若有语句double x=17;int y;,当执行y=(int)(x/5)%2;之后y的值为 【7】 。(7)1
(6)设x为int型变量,请写出一个关系表达式 【6】 ,用以判断x同时为3和7的倍数时,关系表达式的值为真。 (x%3==0)&&(x%7==0)
条件表达式
(8)下列程序运行后的输出结果是 【8】。(8)【8】1
main( )
{ int x,a=1,b=2,c=3,d=4;
x=(a<b)?a:b; x=(x<c)?x:c; x=(d>x)?x:d;
printf("%d\n",x);
}
输出
(6)若变量a,b 已定义为int 类型并赋值21 和55,要求用printf 函数以a=21,b=55 的形
式输出,请写出完整的的输出语句 【6】 。(6)【6】printf("a=%d,b=%d",a,b);
(6)设有定义:float x=123.4567;,则执行下列语句后的输出结果是【6】。(6)【6】123.460000
printf("%f\n",(int)(x*100+0.5)/100.0);
(7)下列程序运行后的输出结果是 【7】。(7)【7】10 11
main( )
{ int m=011,n=11;
printf("%d %d\n",+ +m,n+ +);
}
(6)执行下列程序时,输入1234567<CR>,则输出结果是【6】。(6)【6】12 34
#include <stdio.h>
main( )
{ int a=1,b;
scanf("%2d%2d",&a,&b); printf("%d%d\n",a,b);
}
(6)执行下列程序后的输出结果是【6】。【6】a=14
main()
{ int a=10;
a=(3*5,a+4); printf("a=%d\n",a);
}
(7)若整型变量a和b中的值分别为7和9,要求按以下格式输出a和b的值:
a=7
b=9
请完成输出语句:printf("【7】",a,b);。【7】a=%d\nb=%d
(7)若变量x、y已定义为int类型且x的值为99,y的值为9,请将输出语句printf(【7】,x/y);补充完整,使其输出的计算结果形式为:x/y=11 (7)"x/y=%d"
(8)以下程序运行后的输出结果是 【8】 。(8)1 0
#include <stdio.h>
main()
{ int x=20;
printf(“%d”,0<x<20);
printf(“%d\n”,0<x&&x<20); }
If语句
(7)有以下程序 4
#include
main()
{ int a=1,b=2,c=3,d=0;
if(a==1)
if(b!=2)
if(c==3) d=1;
else d=2;
else if(c!=3) d=3;
else d=4;
else d=5;
printf(“%d\n”,d);
}
程序运行后的输出结果是 【7】 。
For循环语句
(10)下列程序的输出结果是【12】 。(10)【12】ACE
#include <stdio.h>
main( )
{ int i;
for(i='a';i<'f';i+ +,i+ +) printf("%c",i-'a'+'A');
printf("\n");
}
(8)若有定义:int k;,以下程序段的输出结果是【8】。【8】##2##4
for(k=2;k<6;k++,k++) printf("##%d",k);
(9)以下程序的定义语句中,x[1]的初值是【9】,程序运行后输出的内容是【10】
【9】2【10】2 4 6 8
#include<stdio.h>
main()
{
int x[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},*p[4],i;
for(i=0;i<4;i++)
{
p[i]=&x[2*i+1];
printf("%d",p[i][0]);
}
printf("\n");
}
(8)以下程序的输出结果是【8】。【8】1
#include<stdio.h>
main()
{ int i,j,sum;
for(i=3;i>=1;i--)
{ sum=0;
for(j=1;j<=i;j++) sum+=i*j;
}
printf("%d\n",sum);
}
(10)有以下程序 (10)0 1 123
#include <stdio.h>
main()
{ int f,f1,f2,i;
f1=0;f2=1;
printf(“%d %d”,f1,f2);
for(i=3;i<=5;i++)
{ f=f1+f2; printf(“%d”,f);
f1=f2; f2=f;
}
printf(“\n”);
}
程序运行后的输出结果是 【10】 。
(11)有以下程序 101418
#include <stdio.h>
main()
{ int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int b[3]={0},i;
for(i=0;i<3;i++) b[i]=a[i][2]+a[2][i];
for(i=0;i<3;i++) printf("%d",b[i]);
printf("\n");
}
程序运行后的输出结果是 【11】 。
While 语句
(9)有下列程序,若运行时从键盘输入:18,11<CR>,则程序的输出结果是 【9】。(9)【9】1 1
main( )
{ int a,b;
printf("Enter a,b: "); scanf("%d,%d",&a,&b);
while(a! =b)
{ while(a>b)a-=b;
while(b>a)b-=a;
}
printf("%3d%3d\n",a,b);
}
(10)下列程序的功能是:将输入的正整数按逆序输出。例如:若输入135 则输出531。请
填空。(10)【10】n/=10 或n=n/10
#include<stdio.h>
main( )
{ int n,s;
printf("Enter a number : "); scanf("%d",&n);
printf("Output: ");
do
{ s=n%10; printf("%d",s); 【10】;}
while(n! =0);
printf("\n");
}
(8)下列程序的输出结果是【9】。(8)【9】54321
#include <stdio.h>
main()
{ int n=12345,d;
while(n! =0) { d=n%10;printf("%d",d);n/=10; }
}
(9)有下列程序段,且变量已正确定义和赋值(9)【10】k<=n 【11】k++
for(s=1.0,k=1;k<=n;k+ +) s=s+1.0/(k*(k+1) );
printf("s=%f\n\n",s);
请填空,使下列程序段的功能与之完全相同
s=1.0;k=1;
while( 【10】){s=s+1.0/(k*(k+1) ); 【11】;}
printf("s=%f\n\n",s);
(7)当执行下列程序时,输入1234567890<CR>,则其中while循环体将执 【7】0
#include<stdio.h>
main()
{ char ch;
while((ch=getchar())=='0') printf("#");
}
(8)有以下程序(8)不能
#include <stdio.h>
main( )
{ char c1,c2;
scanf(“%c”,&c1);
while(c1<65||c1>90) scanf(“&c”,&c1);
c2=c1+32;
printf(“%c, %c\n”,c1,c2);
}
程序运行输入65回车后,能否输出结果、结束运行(请回答能或不能)【8】。
(9)以下程序运行后的输出结果是【9】(9)s=0
#include <stdio.h>
main( )
{ int k=1,s=0;
do{
if((k&2)!=0)continue;
s+=k;k++;
}while(k>10);
printf(“s=&d/n; ”,s)
}
(10)下列程序运行时,若输入labced12df<回车> 输出结果为【10】(10)1AbCeDf2dF
#include <stdio.h>
main( )
{ char a =0,ch;
while((ch=getchar())!=’\n’)
{ if(a%2!=0&&(ch>’a’&&ch<=’z’)) ch=ch-‘a’+’A’;
a++;putchar(ch);
}
printf(“\n”);
}
(9)以下程序运行后的输出结果是 【9】 。(9)5
#include <stdio.h>
main()
{ int a=1,b=7;
do {
b=b/2;a+=b;
} while (b>1);
printf(“%d\n”,a);}
(8)有以下程序 7
#include <stdio.h>
main()
{ int m,n;
scanf("%d%d",&m,&n);
while(m!=n)
{ while(m>n) m=m-n;
while(m<n) n=n-m;
}
printf(“%d\n”,m);
}
程序运行后,当输入14 63 <回车> 时,输出结果是 【8】 。
Switch语句
(9)下列程序的运行结果是【9】。【9】#&
main()
{ int a=2,b=7,c=5;
switch(a>0)
{ case 1:switch(b<0)
{ case 1:printf("@");break;
case 2:printf("!");break;
}
case 0:switch(c==5)
{ case 0:printf("*");break;
case 1:printf("#");break;
case 2:printf("$");break;
}
default: printf("&");
}
printf("\n");
}
(9)以下程序的输出结果是【9】。【9】9911
#include<stdio.h>
main()
{ int j,a[]={1,3,5,7,9,1‘1,13,15},*p=a+5;
for(j=3;j;j--)
{ switch(j)
{ case 1:
case 2: printf("%d",*p++);break;
case 3: printf("%d",*(--p));
}
}
}
函数调用
(8)下列程序的运行结果是【8】。【8】m=4 k=4 i=5 k=5
int k=0;
void fun(int m)
{ m+=k;k+=m; printf("m=%dk=%d",m,k++);}
main()
{ int i=4;
fun(i++); printf("i=%dk=%d\n",i,k);
}9(为什么k=5,调用函数是单向)
(12)请将以下程序中的函数声明语句补充完整 (12)max(int a,int b)
#include <stdio.h>
int ___【12】_____;
main( )
{ int x,y,(*p)();
scanf(“%d%d”,&x,&y);
p=max;
printf(“%d\n”,(*p)(x,y));
}
int max(int a,int b)
{ return (a>b?a:b); }
(11)有以下程序 3025
#include <stdio.h>
int a=5;
void fun(int b)
{ int a=10;
a+=b;printf(“%d”,a);
}
main()
{ int c=20;
fun(c);a+=c;printf(“%d\n”,a);
}
程序运行后的输出结果是 【11】 。
(15)有以下程序 1 3 6
#include <stdio.h>
fun(int x)
{ if(x/2>0) run(x/2);
printf(“%d ”,x);
}
main()
{ fun(6);printf(“\n”); }
程序运行后的输出结果是 【15】 。
一维数组
(10)下列程序的运行结果是: 【10】 。(10)【10】11
fun(int t[ ],int n)
{ int i,m;
if(n= =1)return t[0];
else
if(n>=2){m=fun(t,n-1); return m;}
}
main( )
{ int a[ ]={11,4,6,3,8,2,3,5,9,2};
printf("%d\n",fun(a,10));
}
(14)执行下列程序的输出结果是【18】。(14)【18】3 7 15
#include <stdio.h>
main( )
{ int i,n[4]={1};
for(i=1,i<=3;i+ +)
{ n[i]=n[i-1]*2+1;printf("%d",n[i]);}
}
(16)下列程序的输出结果是【17】。【17】10
int fun(int*x,int n)
{ if(n==0) return x[0];
else return x[0]+fun(x+1,n-1);
}
main()
{ int a[]={1,2,3,4,5,6,7}; printf("%d\n",fun(a,3));}
(11)以下程序的输出结果是【12】。【12】4
#include<stdio.h>
main()
{
int a[5]={2,4,6,8,10},*p;
p=a; p++;
printf("%d",*p);
}
(10)以下程序的输出结果是【10】。【10】3
#include<stdio.h>
#define N 5
int fun(int*s,int a,int n)
{ int j;
*s=a;j=n;
while(a!=s[j])j--;
return j;
}
main()
{ int s[N+1];int k;
for(k=l;k<=N;k++) s[k]=k+l;
printf("%d\n",fun(s,4,N));
}
(11)有以下程序,程序执行后,输出结果是【11】(11)7777654321
#include <stdio.h>
void fun (int *a)
{ a[0]=a[1];}
main()
{ int a[10]={10,9,8,7,6,5,4,3,2,1},i;
for(i=2;i>=0;i--) fun{&a[i]};
for(i=0;i<10;i++) printf(“&d”,a[i]);
printf(“\n”);
}
(10)有以下程序 135
#include <stdio.h>
main()
{ int a[]={1,2,3,4,5,6},*k[3],i=0;
while(i<3)
{ k[i]=&a[2*i];
printf("%d",*k[i]);
i++;
}
}
程序运行后的输出结果是 【10】 。
static
(11)以下程序的输出结果是【11】。【11】15
#include<stdio.h>
int fun(int x)
{ static int t=0;
return(t+=x);
}
main()
{ int s,i;
for(i=l;i<=5;i++)s=fun(i);
printf("%d\n",s);
}
二维数组
(8)下列程序的输出结果是 【8】 。(8)【8】30
main( )
{ int a[3][3]={{1,2,9},{3,4,8},{5,6,7}},i,s=0;
for(i=0;i<3;i+ +) s+ =a[i][i]+a[i][3-i-1];
printf("%d\n",s);
}
(13)设有定义语句:int a[][3]={{0},{1}{2}};,则数组元素a[1][2]的值是【13】。【13】0
(12)以下程序按下面指定的数据给x数组的下三角置数,并按如下形式输出,请填空。
4
3 7
2 6 9
1 5 8 10
#include<stdio.h>
main()
{ int x[4][4],n=0,i,j;
for(j=0;j<4;j++)
for(i=3;i>=j;【12】) {n++;x[i][j]=【13】;}
for(i=0;i<4;i++)
{ for(j=0;j<=i;j++) printf("%3 d",x[i][j]);
printf("\n");
}
}
【12】i—
(9)有以下程序 123569
#include <stdio.h>
main()
{ int i,j,a[][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)
for(j=i;j<3;j++) printf(“%d”,a[i][j]);
printf("\n");
}
程序运行后的输出结果是 【9】 。
字符
(9)当运行下列程序时,输入abcd,程序的输出结果是: 【9】 。(9)【9】a*b*c*d*
insert(char str[ ])
{ int i;
i=strlen(str);
while(i>0)
{ str[2*i]=str[i];str[2*i-1]='*';i--; }
printf("%s\n",str);
}
main( )
{ char str[40];
scanf("%s",str); insert(str);
}
(11)现有两个C 程序文件T18.c 和myfun.c 同在TC 系统目录(文件夹)下,其中T18.c 文件
如下:(11)【11】!knahT
#include <stdio.h>
#include "myfun.c"
main( )
{ fun( );printf("\n");}
myfun.c 文件如下:
void fun( )
{ char s[80],c; int n=0;
while((c=getchar( ))! ='\n') s[n+ +]=c;
n--;
while(n>=0) printf("%c",s[n--]);
}
当编译连接通过后,运行程序T18 时,输入Thank!则输出结果是: 【11】 。
(11)下列程序的输出结果是【13】。(11)【13】efgh
#include <stdio.h>
#include <string.h>
char *fun(char *t)
{ char *p=t;
return (p+strlen(t)/2);
}
main( )
{ char *str="abcdefgh";
str=fun(str);
puts(str);
}
(10)下列程序的输出结果是【10】。【10】9
#include<string.h>
main()
{ printf("%d\n",strlen("IBM\n012\1\\"));}
(11)已定义char ch=‘$’;int i=1,j;,执行j!=ch&&i++以后,i的值为【 】 【11】2
(12)下列程序的输出结果是【12】。【12】5 4
#include<string.h>
main()
{ char a[]={'\1','\2','\3','\4','\0'};
printf("%d%d\n",sizeof(a),strlen(a));
}
(13)以下程序的功能是:通过函数func输入字符并统计输入字符的个数。输入时用字符
@作为输入结束标志。请填空。【13】n
#include<stdio.h>
long【14】;/*函数说明语句*/main()
{ long n;
n=func(); printf("n=%ld\n",n);
}
long func()
{ long m;
for(m=0;getchar()!='@';【15】);
retum m;
}
(12)有以下程序 12 fabc de
#include <stdio.h>
#include <string.h>
void fun(char *str)
{ char temp;int n,i;
n=strlen(str);
temp=str[n-1];
for(i=n-1;i>0;i--) str[i]=str[i-1];
str[0]=temp;
}
main()
{ char s[50];
scanf("%s",s); fun(s); printf("%s\n",s);}
程序运行后输入:abcdef<回车>,则输出结果是 【12】 。
指针
(17)下列程序的输出结果是【18】。【18】40
#include<stdlib.h>
main()
{ char*s1,*s2,m;
s1=s2=(char*) malloc(sizeof(char));
*s1=15;*s2=20; m=*s1+*s2;
printf("%d\n",m);
}
(10)以下程序的输出结果是【11】。【11】3 5
#include<stdio.h>
void swap(int*a,int*b)
{
int*t;
t=a;a=b;b=t;
}
main()
{
int i=3,j=5,*p=&i,*q=&j;
swap(p,q); printf("%d%d\n",*p,*q);
}
递归
(12)以下程序的输出结果是【13】。【13】13
#include<stdio.h>
void fun(int x)
{
if(x/2>0) fun(x/2);
printf("%d",x);
}
main()
{
fun(3); printf("\n");
}
预处理
(15)下列程序的输出结果是【19】。(15)【19】55
#include <stdio.h>
#define M 5
#define N M+M
main()
{ int k;
k=N*N*5; printf("%d\n",k);
}
结构体
(18)设有说明:
struct DATE{int year;int month;int day;};
请写出一条定义语句,该语句定义d为上述结构体类型变量,并同时为其成员year、
month、day依次赋初值2006、10、1:【19】。【19】struct DATE d={2006,10,1};
(13)以下程序中函数fun的功能是:统计person所指结构体数组中所有性别(sex)为
的记录的个数,存入变量n中,并作为函数值返回。请填空。【14】person[i].sex
#include<stdio.h>
#define N 3
typedef struct
{int num; char nam[10]; char sex;} SS;
int fun(SS person[])
{ int i,n=0;
for(i=0;i<N;i++)
if(【14】=='M') n++;
return n;
}
main()
{ SS W[N]={{1,"AA",’F’},{2,"BB",'M'},{3,"CC",'M'}}; int n;
n=fun(W); printf("n=%d\n",n);
}
(14)下列程序的运行结果为【14】 `(14)1001,ChangRong,1098.0
#include <stdio.h>
#include <string.h>
struct A
{ int a;char b[10];double c;};
void f (struct A*t);
main()
{ struct A a={1001,”ZhangDa”,1098.0};
f(&a);printf(“%d,%s,%6.1f\n”,a.a,a.b,a.c);
}
void f(struct A *t)
{ strcpy(t->b,”ChangRong”);}
(12)设有定义: &p.ID
struct person
{ int ID;char name[12];}p;
请将scanf(“%d”, 【12】 );语句补充完整,使其能够为结构体变量p的成员ID正确读入数据。
(14)有以下程序 16
#include <stdio.h>
typedef struct
{ int num;double s}REC;
void fun1( REC x ){x.num=23;x.s=88.5;}
main()
{ REC a={16,90.0 };
fun1(a);
printf(“%d\n”,a.num);
}
程序运行后的输出结果是 【14】 。
字符串
(13)有以下程序 How are you? How
#include <stdio.h>
main()
{ char a[20]=”How are you?”,b[20];
scanf(“%s”,b);printf(“%s %s\n”,a,b);
}
程序运行时从键盘输入:How are you?<回车>
则输出结果为 【13】 。
文件
(19)设有定义:FILE*fw;,请将以下打开文件的语句补充完整,以便可以向文本文件
readme.txt的最后续写内容。【20】"a"
fw=fopen("readme.txt",【20】);
(14)以下程序从名为filea.dat的文本文件中逐个读入字符并显示在屏幕上。请填空。
【15】"filea.dat","r"
#include <stdio.h>
main()
{ FILE*fp; char ch;
fp=fopen(【15】);
ch=fgetc(fp);
while(!feof(fp)) {putchar(ch); ch=fgetc(fp);}
putchar("\n"); fclose(fp);
}
(13)以下程序用来判断指定文件是否能正常打开,请填空 (13)NULL
#include <stdio.h>
main( )
{ FILE *fp;
if (((fp=fopen(“test.txt”,”r”))==______ 【13】_____))
printf(“未能打开文件!\n”);
else
printf(“文件打开成功!\n”);
函数功能
(7)下列程序用于判断a、b、c 能否构成三角形,若能,输出YES,否则输出NO。当给a、
b、c 输入三角形三条边长时,确定a、b、c 能构成三角形的条件是需同时满足三个条
件:a+b>c,a+c>b,b+c>a。请填空。(7)【7】(a+b>c)&&(a+c>b)&&(b+c>a)
main( )
{ float a,b,c;
scanf("%f%f%f",&a,&b,&c);
if( 【7】 ) printf("YES\n"); /*a、b、c 能构成三角形*/
else printf("NO\n"); /*a、b、c 不能构成三角形*/
}
(12)下列函数fun 的功能是返回str 所指字符串中以形参c 中字符开头的后续字符串的首
地址,例如:str 所指字符串为:Hello!,c 中的字符为e,则函数返回字符串:ello!
的首地址。若str 所指字符串为空串或不包含c 中的字符,则函数返回NULL。请填
空。(12)【12】p+n
char *fun(char *str,char c)
{ int n=0; char *p=str;
if(p! =NULL)
while(p[n]! =c&&p[n]! = '\0')n+ +;
if(p[n]= = '\0') return NULL;
return( 【12】 );
}
(13)下列程序的功能是:输出100 以内(不含100)能被3 整除且个位数为6 的所有整数,
请填空。(13)【13】i<10 【14】j%3!=0
main( )
{ int i,j;
for(i=0; 【13】 ;i+ +)
{ j=i*10+6;
if( 【14】 )continue;
printf("%d",j);
}
}
(14)下列isprime 函数的功能是判断形参a 是否为素数,是素数,函数返回1,
否则返回0。请填空(14)【15】return 0 【16】return 1
int isprime(int a)
{ int i;
for(i=2;i<=a/2;i+ +)
if(a%i= =0) 【15】 ;
【16】 ;
}
(15)下列程序的功能是输入任意整数给n 后,输出n 行由大写字母A 开始构成的三角形
字符阵列图形。例如,输入整数5 时(注意:n 不得大于10),程序运行结果如下:
A B C D E
F G H I
J K L
M N
O
请填空完成该程序。(15)【17】ch++ 【18】printf("\n");
main( )
{ int i,j,n; char ch='A';
scanf("%d",&n);
if(n<11)
{ for(i=1;i<=n;i+ +)
{ for(j=1; j<=n-i+1;j+ +)
{ printf("%2c",ch);
【17】 ;
}
【18】 ;
}
}
else printf("n is too large!\n")
printf("\n");
}
(16)下列程序中fun()函数的功能是:构成一个如图所示的带头结点的单向链表,在结点
的数据域中放入了具有两个字符的字符串。Disp()函数的功能是显示输出该单链表中
所有结点中的字符串。请填空完成disp()函数。(16)【19】p!=NULL 【20】p->next
#include <stdio.h>
typedef struct node /*链表结点结构*/
{ char sub[3];
struct node *next;
}Node;
Node fun(char s) /*建立链表*/
{ …… }
void disp(Node *h)
{ Node *p;
p=h− >next;
while( 【19】 )
{ printf("%s\n",P− >sub); p= 【20】 ; }
}
main( )
{ Node *hd;
hd=fun( ); disp(hd); printf("\n");
}
(11)下列程序中,fun()函数的功能是计算x2-2x+6,主函数中将调用fun()函数计算:
y1=(x+8)2-2(x+8)+6
y2=sin2(x)-2sin(x)+6
请填空。(11)【11】x+8 【12】sin(x)
#include "math.h"
double fun(double x){return(x*x-2*x+6);}
main( )
{ double x,y1,y2;
printf("Enter x: "); scanf("%lf",&x);
y1=fun( 【11】);
y2=fun( 【12】);
printf("y1=%lf,y2=%lf\n",y1,y2);
}
(12)下列程序的功能是将N 行N 列二维数组中每一行的元素进行排序,第0 行从小到大
排序,第1 行从大到小排序,第2 行从小到大排序,第3 行从大到小排序,例如:
请填空。(12)【13】j+1 【14】i%2==1
#define N 4
void sort(int a[ ][N])
{ int i,j,k,t;
for(i=0;i<N;i+ +)
for(j=0;j<N-1;j+ +)
for(k= 【13】; k<N;k+ +)
/*判断行下标是否为偶数来确定按升序或降序来排序*/
if( 【14】? a[i][j]<a[i][k]:a[i][j]>a[i][k])
{ t=a[i][j];
a[i][j]=a[i][k];
a[i][k]=t;
}
}
void outarr(int a[N][N])
{ …… }
main( )
{ int aa[N][N]={{2,3,4,1},{8,6,5,7},{11,12,10,9},{15,14,16,13}
展开阅读全文