习题 7
哈尔滨工业大学计算机科学与技术学院苏小红
sxh@hit.edu.cn
2009-7-29 C语言大学实用教程课件 制作人 苏小红 2
习题 7.1
1下列对字符串的定义中,错误的是,。
–A) char str[7] = "FORTRAN";
–B) char str[] = "FORTRAN";
–C) char *str = "FORTRAN";
–D) char str[] =
{'F','O','R','T','R','A','N',’0’};
2以下程序段的输出结果是,___________ 。
– char a[] = "ABCDE" ;
– char *p = NULL;
– for (p=a; p<a+5; p++)
– {
– printf("%s\n",p);
– }
A) ABCDE B) A C) E D)
ABCDE
B D BCDE
C C CDE
D B D
E A
E
2009-7-29 C语言大学实用教程课件 制作人 苏小红 3
习题 7.1
4函数功能为 ________
– void Exchange(int *p1,int *p2)
– {
– int p;
– p = *p1;
– *p1 = *p2;
– *p2 = p;
– }
A)交换 *p1和 *p2的值
B)正确,但无法改变 *p1和 *p2的值
C)交换 *p1和 *p2的地址
D)可能造成系统故障
2009-7-29 C语言大学实用教程课件 制作人 苏小红 4
习题 7.1
5设有语句,int array[3][4]; 则在下面几种引用下标为 i和 j的数组元素的方法中,不正确的引用方式是,_______
–A) array[i][j]
–B) *(*(array + i) + j)
–C) *(array[i] + j)
–D) *(array + i*4 + j)
2009-7-29 C语言大学实用教程课件 制作人 苏小红 5
习题 7.2
阅读下列程序,写出运行结果。
#include <stdio.h>
main()
{
static int x[] = {1,2,3};
int s,i,*p = NULL;
s = 1;
p = x;
for (i=0; i<3; i++)
{
s* = *(p + i);
}
printf("%d\n",s);
}
6
2009-7-29 C语言大学实用教程课件 制作人 苏小红 6
习题 7.2
#include <stdio.h>
main()
{
int a[] = {1,2,3,4,5};
int *p = NULL;
p = a;
printf("%d,",*p);
printf("%d,",*(++p));
printf("%d,",*++p);
printf("%d,",*(p--));
printf("%d,",*p++);
printf("%d,",*p);
printf("%d,",++(*p));
printf("%d,",*p);
}
1,2,3,3,2,3,4,4
2009-7-29 C语言大学实用教程课件 制作人 苏小红 7
习题 7.2
#include <stdio.h>
char b[] = "program";
char *a = "PROGRAM";
main()
{
int i = 0;
printf("%c%s\n",*a,b + 1);
while (putchar (*(a + i)))
{
i++;
}
printf("i = %d\n",i);
while ( -- i)
{
putchar (*(b + i));
}
printf("\n%s\n",&b[3]);
}
Program
PROGRAM
Margor
gram
2009-7-29 C语言大学实用教程课件 制作人 苏小红 8
习题 7.2
/* 源文件名为 demo.c */
main(int argc,char *argv[])
{
int i;
for (i=0; i<argc; i++)
{
printf("%s\n",argv[i]);
}
}
假设该文件 demo.c及其可执行程序 demo.exe位于 E
盘的 TC目录下,则当命令行参数为 demo.exe This
is a program,则运行结果应为什么?
demo.exe
This
is
a
program
2009-7-29 C语言大学实用教程课件 制作人 苏小红 9
习题 6.3
下面的函数用于计算两个整数之和,并通过指针形参 z得到 x和 y相加后的结果。
void Add(int x,int y,z)
{
= x+y;
}
int *
*z
2009-7-29 C语言大学实用教程课件 制作人 苏小红 10
习题 7.3
下面函数实现 strlen函数的功能,即计算指针 p所指向的字符串中的实际字符个数。
unsigned int MyStrlen(char *p)
{
int len;
len = 0;
for (; *p != ; p++)
{
len ;
}
return ;
}
’\0’
++
len
2009-7-29 C语言大学实用教程课件 制作人 苏小红 11
习题 7.3
下面函数也是实现 strlen函数功能的,但计算字符串 s中的实际字符个数的方法与上一道题有所不同。
unsigned int MyStrlen(char s[])
{
char *p = s;
while (*p != )
{
p++;
}
return ;
}
’\0’
p-s
2009-7-29 C语言大学实用教程课件 制作人 苏小红 12
习题 6.3
int MyStrcmp(char s[],char t[])
{
int i;
for (i=0; s[i] == t[i]; i++ )
{
if (s[i] == )
return 0 ;
}
return ( );
}
‘ \0’
s[i]-t[i]
2009-7-29 C语言大学实用教程课件 制作人 苏小红 13
习题 7.3
下面函数实现 strcmp函数的功能,即比较两个字符串的大小,将两个字符串中第一个出现的不相同字符的 ASII码值之差作为比较的结果返回,返回值大于 0表示第一个字符串大于第二个字符串,返回值小于 0表示,表示第一个字符串小于第二个字符串,当两个字符串完全一样时,返回值为 0。
int MyStrcmp(char *p1,char *p2)
{
for (; *p1 == *p2; p1++,p2++)
{
if (*p1 == '\0') return ;
}
return ;
}
0
*p1-*p2
2009-7-29 C语言大学实用教程课件 制作人 苏小红 14
习题 7.4
在下面使用指针数组的程序中,存在一个错误,试分析这个程序,并上机运行,观察运行结果,找到这个错误,并分析错误的原因。
2009-7-29 C语言大学实用教程课件 制作人 苏小红 15
#include <stdio.h>
void Print(char *arr[],int len);
void main()
{
char *pArray[] = {"Fred","Barrey",
"Wilma","Betty"};
int num = sizeof(pArray) / sizeof(char);
printf("Total string numbers=%d\n",num);
Print(pArray,num);
}
void Print(char *arr[],int len)
{
int i;
for (i=0; i<len; i++)
printf("%s\n",arr[i]);
}
习题 7.4
程序希望得到的运行结果如下:
Total string numbers = 4
Fred
Barrey
Wilma
Betty
2009-7-29 C语言大学实用教程课件 制作人 苏小红 16
#include <stdio.h>
void Print(char *arr[],int len);
void main()
{
char *pArray[] = {"Fred","Barrey",
"Wilma","Betty"};
int num = sizeof(pArray) / sizeof(char*);
printf("Total string numbers=%d\n",num);
Print(pArray,num);
}
void Print(char *arr[],int len)
{
int i;
for (i=0; i<len; i++)
printf("%s\n",arr[i]);
}
习题 7.4
程序希望得到的运行结果如下:
Total string numbers = 4
Fred
Barrey
Wilma
Betty
哈尔滨工业大学计算机科学与技术学院苏小红
sxh@hit.edu.cn
2009-7-29 C语言大学实用教程课件 制作人 苏小红 2
习题 7.1
1下列对字符串的定义中,错误的是,。
–A) char str[7] = "FORTRAN";
–B) char str[] = "FORTRAN";
–C) char *str = "FORTRAN";
–D) char str[] =
{'F','O','R','T','R','A','N',’0’};
2以下程序段的输出结果是,___________ 。
– char a[] = "ABCDE" ;
– char *p = NULL;
– for (p=a; p<a+5; p++)
– {
– printf("%s\n",p);
– }
A) ABCDE B) A C) E D)
ABCDE
B D BCDE
C C CDE
D B D
E A
E
2009-7-29 C语言大学实用教程课件 制作人 苏小红 3
习题 7.1
4函数功能为 ________
– void Exchange(int *p1,int *p2)
– {
– int p;
– p = *p1;
– *p1 = *p2;
– *p2 = p;
– }
A)交换 *p1和 *p2的值
B)正确,但无法改变 *p1和 *p2的值
C)交换 *p1和 *p2的地址
D)可能造成系统故障
2009-7-29 C语言大学实用教程课件 制作人 苏小红 4
习题 7.1
5设有语句,int array[3][4]; 则在下面几种引用下标为 i和 j的数组元素的方法中,不正确的引用方式是,_______
–A) array[i][j]
–B) *(*(array + i) + j)
–C) *(array[i] + j)
–D) *(array + i*4 + j)
2009-7-29 C语言大学实用教程课件 制作人 苏小红 5
习题 7.2
阅读下列程序,写出运行结果。
#include <stdio.h>
main()
{
static int x[] = {1,2,3};
int s,i,*p = NULL;
s = 1;
p = x;
for (i=0; i<3; i++)
{
s* = *(p + i);
}
printf("%d\n",s);
}
6
2009-7-29 C语言大学实用教程课件 制作人 苏小红 6
习题 7.2
#include <stdio.h>
main()
{
int a[] = {1,2,3,4,5};
int *p = NULL;
p = a;
printf("%d,",*p);
printf("%d,",*(++p));
printf("%d,",*++p);
printf("%d,",*(p--));
printf("%d,",*p++);
printf("%d,",*p);
printf("%d,",++(*p));
printf("%d,",*p);
}
1,2,3,3,2,3,4,4
2009-7-29 C语言大学实用教程课件 制作人 苏小红 7
习题 7.2
#include <stdio.h>
char b[] = "program";
char *a = "PROGRAM";
main()
{
int i = 0;
printf("%c%s\n",*a,b + 1);
while (putchar (*(a + i)))
{
i++;
}
printf("i = %d\n",i);
while ( -- i)
{
putchar (*(b + i));
}
printf("\n%s\n",&b[3]);
}
Program
PROGRAM
Margor
gram
2009-7-29 C语言大学实用教程课件 制作人 苏小红 8
习题 7.2
/* 源文件名为 demo.c */
main(int argc,char *argv[])
{
int i;
for (i=0; i<argc; i++)
{
printf("%s\n",argv[i]);
}
}
假设该文件 demo.c及其可执行程序 demo.exe位于 E
盘的 TC目录下,则当命令行参数为 demo.exe This
is a program,则运行结果应为什么?
demo.exe
This
is
a
program
2009-7-29 C语言大学实用教程课件 制作人 苏小红 9
习题 6.3
下面的函数用于计算两个整数之和,并通过指针形参 z得到 x和 y相加后的结果。
void Add(int x,int y,z)
{
= x+y;
}
int *
*z
2009-7-29 C语言大学实用教程课件 制作人 苏小红 10
习题 7.3
下面函数实现 strlen函数的功能,即计算指针 p所指向的字符串中的实际字符个数。
unsigned int MyStrlen(char *p)
{
int len;
len = 0;
for (; *p != ; p++)
{
len ;
}
return ;
}
’\0’
++
len
2009-7-29 C语言大学实用教程课件 制作人 苏小红 11
习题 7.3
下面函数也是实现 strlen函数功能的,但计算字符串 s中的实际字符个数的方法与上一道题有所不同。
unsigned int MyStrlen(char s[])
{
char *p = s;
while (*p != )
{
p++;
}
return ;
}
’\0’
p-s
2009-7-29 C语言大学实用教程课件 制作人 苏小红 12
习题 6.3
int MyStrcmp(char s[],char t[])
{
int i;
for (i=0; s[i] == t[i]; i++ )
{
if (s[i] == )
return 0 ;
}
return ( );
}
‘ \0’
s[i]-t[i]
2009-7-29 C语言大学实用教程课件 制作人 苏小红 13
习题 7.3
下面函数实现 strcmp函数的功能,即比较两个字符串的大小,将两个字符串中第一个出现的不相同字符的 ASII码值之差作为比较的结果返回,返回值大于 0表示第一个字符串大于第二个字符串,返回值小于 0表示,表示第一个字符串小于第二个字符串,当两个字符串完全一样时,返回值为 0。
int MyStrcmp(char *p1,char *p2)
{
for (; *p1 == *p2; p1++,p2++)
{
if (*p1 == '\0') return ;
}
return ;
}
0
*p1-*p2
2009-7-29 C语言大学实用教程课件 制作人 苏小红 14
习题 7.4
在下面使用指针数组的程序中,存在一个错误,试分析这个程序,并上机运行,观察运行结果,找到这个错误,并分析错误的原因。
2009-7-29 C语言大学实用教程课件 制作人 苏小红 15
#include <stdio.h>
void Print(char *arr[],int len);
void main()
{
char *pArray[] = {"Fred","Barrey",
"Wilma","Betty"};
int num = sizeof(pArray) / sizeof(char);
printf("Total string numbers=%d\n",num);
Print(pArray,num);
}
void Print(char *arr[],int len)
{
int i;
for (i=0; i<len; i++)
printf("%s\n",arr[i]);
}
习题 7.4
程序希望得到的运行结果如下:
Total string numbers = 4
Fred
Barrey
Wilma
Betty
2009-7-29 C语言大学实用教程课件 制作人 苏小红 16
#include <stdio.h>
void Print(char *arr[],int len);
void main()
{
char *pArray[] = {"Fred","Barrey",
"Wilma","Betty"};
int num = sizeof(pArray) / sizeof(char*);
printf("Total string numbers=%d\n",num);
Print(pArray,num);
}
void Print(char *arr[],int len)
{
int i;
for (i=0; i<len; i++)
printf("%s\n",arr[i]);
}
习题 7.4
程序希望得到的运行结果如下:
Total string numbers = 4
Fred
Barrey
Wilma
Betty