for(i=0;i
{ strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);} }
void main()
{char p[][10]={\ f(p,5); printf(\}
A)6 B)4 C)5 D)3
7.2 填空题
7.2.1 在C语言中,除主函数外,其子函数分为 标准库函数、自定义函数 两类。 7.2.2 变量在程序使用中,其作用域可分为 全局 变量和 局部 变量。 7.2.3 以下函数用以求x的y次方,请补充填空。
double fun ( double x , int y ) { int i; double z;
for ( i=1 ; i <=y ; i + + ) z= z*x ; return z; }
7.2.4 以下程序的功能是计算 s?long f(int n)
{ int i; long s; s= 1 ; for(i=1; i<=n; i++) s= s*i ; return s; main()
{ long s; int k,n; scanf(\s= 0 ;
for(k=0; k<=n; k++) s=s+ f(k) ; printf(\ }
7.3 编程题
7.3.1 编写一个函数,其功能是判断一个是否是素数,是返回为1,不是返回为0。 int isprime(int x) { int i;
for(i=2;i<=x/2;i + + )
if(x%i = = 0) return (0);
?k!,请补充填空。
k?0n
return 1 ;
}
7.3.2 编写一个函数,其功能是计算二维数组每行之和以及每列之和。 void fun(int a[][4],int n,int row[],int col[]) { int i,j;
for (i=0;i
for (i=0;i<4;i++) col[i]=0;
for (i=0;i
row[i]+=a[i][j]; col[j]+= a[i][j]; } }
7.3.3 编一子函数,在100~999中打印出所有的\水仙花数\。所谓\水仙花数\指一个
三位数,其各位数字立方和等于该数本身。例如:153是一\水仙花数\,因为153=13+53+33
void fun()
{int I,j,k,n;
for (n=100;n<1000;n++) {i=n/100; j=n/10-i*10; k=n;
if(n==i*i*i+j*j*j+k*k*k) printf(“%d”,n); }
printf(“\\n”); }
7.3.4 从键盘上输入多个单词,输入时各单词用空格隔开,用'#'结束输入。现编写一
个子函数把每个单词的第一个字母转换为大写字母,其主函数实现单词的输入。
void fun(char str[]) {
int i=0,j=0;
while (str[i]!='#') { if (str[i++]==' ') { if (str[j]>='a'&&str[j]<='z') str[j]-=32; j=i;
} }
}
7.3.5 编写函数fun(char str[20], int num[10]),它的功能是:分别找出字符串中每个
数字字符(0,1,2,3,4,5,6,7,8,9)的个数,用num[0]来统计字符0的个数,用num[1]来统计字符1的个数,用num[9]来统计字符9的个数。字符串由主函数从键盘读入。
fun(char str[20], int num[10]) {int i;
for (i=0;i<10;i++) num[i]=0
for (i=0;str[i]!=?\\0?;i++) num[str[i]-?0?]++; }
习题八
8.1 选择题 8.4.1 下面各语句行中,能正确进行赋字符串操作的语句行是 ( C)
A) char s[4][5]={ \ B) char s[5]={?a?,?b?,?c?,?e?,?f?}; C) char *s; s=\ D) char *s=; scanf(“%s”,s); 8.4.2 正确的数组定义语句为 (D )
A) int A[“a”]; B) int A[3,5]; C) int A[ ][ ]; D) int *A[3]; 8.4.3 若有以下说明和语句,对c数组元素的正确引用是(D)
int c[4][5], (*cp)[5]; cp=c;
A) cp+1 B) *(cp+3) C) *(cp+1)+3 D) *(*cp+2) 8.4.4 执行下列语句后,其输出结果为 (B )
#include
{ int **k, *j, i=100; j=&i; k=&j;
printf(\}
A) 运行错误 B) 100 C) i的地址 D) j的地址 8.4.5 设有如下的程序段:
char str[ ]=\char *ptr;ptr=str;
执行上面的程序段后,*(ptr+5)的值为( B )
A) 'o' B) '\\0' C) 不确定的值 D) 'o'的地址 8.4.6 若有说明:long *p,a;
则不能通过scanf语句正确给输入项读入数据的程序段是(A)。
A)*p=&a;scanf(\ B)p=(long *)malloc(8);scanf(\ C)scanf(\ D)scanf(\8.4.7 下面函数的功能是(B )
sss(s, t) char *s, *t;
{ while((*s)&&(*t)&&(*t++==*s++)); return(*s-*t);}
A) 求字符串的长度 B) 比较两个字符串的大小
C) 将字符串s复制到字符串t中 D) 将字符串s接续到字符串t中 8.4.8 请选出以下程序的输出结果(B )
#include
sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf(\}
A) 5,2,3 B) -5,-12,-7 C) -5,-12,-17 D) 5,-2,-7 8.4.9 下面函数的功能是(A)
int fun1(char*x) { char *y=x; while(*y++); return(y-x-1); }
A)求字符串的长度 B)比较两个字符串的大小 C)将字符串x复制到字符串y D)将字符串x连接到字符串y后面 8.2 填空题
8.2.1 在指针的概念中,“*”表示的含义是所指对象的内容,而“&”表示的含义是 取变量的地址 。
8.2.2 如果p是一个指针,那么*&p表示的含义是 P ,而&*p表示的含义是
P 。
8.2.3 统计从终端输入的字符中每个大写字母的个数。用#号作为输入结束标志,请
填空。
#include
for(i=0; i<26; i++) num[i]=0;
while( (c(或者*pc)=getchar()) !='#') /*统计从终端输入的大写字母个数*/
if( isupper(*pc)) num[*p-65]+=1;
for(i=0; i<26; i++) /*输出大写字母和该字母的个数*/