11、f("Not found!\n");
}
2. 折半查找法编写的程序如下,请完善程序,并以7_4_2.c命名本程序。
#include
#define N 10
void main( )
{int a[N]={1,2,3,4,6,7,9,10,11,15};
int low, high, mid, i, x;
scanf("%d", &x );
for(low=0,high=N-1;; )
{mid =_________ ;
if(a[mid]==x)
{printf("the number's position is %d\n
12、",mid+1);
break;
}
if( _________ ) { printf("Not found\n"); _________ ; }
if (a[mid]< x ) low=mid+1;
if (a[mid]> x ) _________ ;
}
}
【讨论与思考】
比较一下两种两种查找方法的优缺点。
实验五 统计指定字符个数
【实验目的】
熟悉字符串的存取和结束标记。
【实验内容】
编写程序从键盘上输入一个字符串和一个字符,统计所指定字符的个数。
例如:从键盘输入字符串为"abaaAAbcaaaca",指定字符
13、为'a',则在屏幕上输出结果是7。以7_5.c命名本程序并上交。
下面给出程序的部分代码。
#include
void main( )
{char a[200], b;
int num;
puts("Please input a string:");
gets(a);
puts("Please enter a character:");
b=getchar( );
………… /* 编写程序,实现功能 */
pirntf(“The result is %d\n”, num);
}
实验六 从字符串
14、中删字符
【实验目的】
熟悉字符串的存取和结束标记。并掌握从一维数组中删除元素的方法。
【实验内容】
编写程序从键盘上输入一个字符串和一个字符,实现从字符串中删除该字符。
例如:从键盘输入字符串为"abaaAAbcaaaca",要删除的字符为'a',则在屏幕上输出"bAAbcc"。
下面给出程序的部分代码。请完善程序,并以7_6.c命名本程序。
void main( )
{char s[20], ch;
int i,j;
printf("Please input a string:\n");
gets(s);
printf("Please input a cha
15、racter:\n");
ch=getchar();
for( i=0; _________; i++ )
{ ………… /* 编写程序,实现功能 */
}
puts(s);
}
【实验提示】
要考虑被删除的字符在字符串出现多次,而且连续排列的情况。
实验七 数据加密
【实验目的】
学习通过字符数据的ASCII值进行加密的方法。
【实验内容】
某个单位要传递机密数据,数据是10位以内的整数(从键盘输入)。在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用该和除以10的余数代替该数字。在屏幕
16、上显示加密后的数字。以7_7.c命名本程序并上交。
例如:输入数据 327895123,
显示结果为 : 872340678。
【实验提示】
1.应用字符数组来解决该问题。
2.主程序中将各位数字以字符的形式存放,在加密的过程中应该注意‘0’跟 0 的区别。
实验八 将数字字符串转换为相应实数
【实验目的】
学习数字字符串与数值之间的转换问题。
【实验内容】
将键盘上输入的一个数字字符串转换为相应的实数,在屏幕上输出。转换时遇到第一个非数字字符时停止(不包含第一个小数点和起始的负号-)。例如:
若输入字符串“123a45”,得到实数 x=123.0;
若输入字符串
17、123.45.765”,得到实数x=-123.45;
若输入字符串“123-56.78”,得到实数 x=123.0;
若输入字符串“-.123”,得到实数 x=-0.123。
下面给出不考虑负数的程序,请在下述程序的基础上补充完善为也能考虑负数的程序,并以7_8.c命名本程序。
#include
void main()
{char str[100];
int i,sign;double x,k;
gets(str); /* str中存放的是一个数字字符串 */
sign=1;k=0.1; /* sign是一个标志,标识是否出现了第一个
18、小数点 */
x=0;
for(i=0;str[i];i++)
{if(sign==1)
if(str[i]>='0'&&str[i]<='9')
x=x*10+(str[i]-48);
else if(str[i]=='.')
sign=0;
else break;
else if(str[i]>='0'&&str[i]<='9')
{x+=(str[i]-48)*k;
k*=0.1;
}
else break;
}
printf("x=%lf\n",x);
19、 /* x中记录的是转换后得到的数值 */
}
【实验提示】
只有起始的负号-才能作为负数标志,中间的-只能被看做非法字符,使转换结束。
实验九 万年历问题
【实验目的】
学会使用二维数组解决万年历问题。
【实验内容】
已知1900年12月31号是星期一,编写程序,键盘输入1901 ~2300年内任意一个日期,程序输出这一天是星期几。以7_9.c命名本程序。
【实验提示】
1.第四章中有一个实验要求是给出当前日期,求出该日期是本年度中的第几天的程序。大家可以回想以下那个程序中的case语句对应的每一个天数是如何得到的,我们将这个问题用数组来解决。
2.假设我们要求x 年
20、y 月 z日是星期几,必须知道两个日期相间隔的天数。
3.使用二维数组来存放每月的天数,第一行存放平年的每月天数;第二行存放闰年的各月天数。
3.普通年份有365天,365%7=1;所以求总天数时可以不必将年份差×365天。
【讨论与思考】
既然是万年历问题,就应能测任一日期。如果要求能够测任何一日期(1900年之前和之后的任何一天)为周几,本题应如何处理?注意前推和后推的方法有所不同。
习题
1. 定义如下变量和数组 :
int k ;
int a[3][3]={ 1, 2, 3, 4, 5, 6, 7, 8, 9 } ;
则下面语句的输出结果是( )
for
21、k=0;k<3;k++) printf("%d",a[k][2-k]);
A、357 B、369 C、 159 D、 147
2. 执行下面的程序段后,变量k中的值为( )
int k=3,s[2];
s[0]=k;k=s[1]*10;
A、不定值 B、33 C、30 D、10
3. 设有数组定义:char array [ ]="China"; 则数组 array所占的空间为( )
A、4个字节 B、5个字节 C、6个字节 D、7个字节
4. 如下程序的输出结果是( )
main( )
{ int n[5]={0,
22、0,0},i,k=2;
for(i=0;i23、)
{ int i,x[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++) printf("%d,",x[i][2-i]);
}
A、1,5,9, B、1,4,7, C、3,5,7, D、3,6,9,
7. 当执行下面的程序时,如果输入ABC,则输出结果是( )
#include "stdio.h"
#include "string.h"
main( )
{ char ss[10]="1,2,3,4,5";
gets(ss);
strcat(ss,"6789");
printf("%s\n",ss);
}
A、ABC678
24、9 B、ABC67 C、12345ABC6 D、ABC456789
8.以下程序段的输出结果是( )
char s[ ]= "\\141\141abc\t";
printf("%d\n",strlen(s));
A、9 B、12 C、13 D、14
9. 下面是对s的初始化,其中不正确的是( )
A、char s[5]={“abc” }; B、char s[5]={‘a’,’b’,’c’};
C、char s[5]=“”; D、char s[5]=”abcde”
10. 以下程序的输出结果是____________
25、
main( )
{char s[ ]="abcdef";
s[3]= '\0';
printf("%s\n",s);
}
11. 下列程序段的输出结果是_____________
main( )
{ char b[]="Hello,you";
b[5]=0;
printf("%s \n", b );
}
12. 在C语言中,二维数组元素在内存中的存放顺序是_____________
13. 设有定义语句 “ int a[3][4]={{1},{2},{3}} ” ,则a[1][1]值为_____________,a[2][1]的值为________
26、
14. 若在程序中用到 “ putchar() ” 函数时,应在程序开头写上包含命令_____________ ,若在程序中用到 “ strlen() ” 函数时,应在程序开头写上包含命令_____________
15. 下面程序的功能是输出数组s中最大元素的下标,请填空。
main()
{ int k,p;
int s[]={1,-9,7,2,-10,3};
for(p=0,k=p;p<6;p++)
if (s[p]>s[k]) _____________ ;
printf("%d\n",k);
}
16. 以下程序执行时输入La
27、nguage Programming的结果是_____________
#include
main()
{ char str[30];
scanf("%s",str);
printf("str=%s\n",str); }
17. 以下程序可把输入的十进制长整型数以十六进制数的形式输出,请填空。
main()
{ char b[17]={"0123456789ABCDEF"};
int c[64],d,i=0,base=16;
long n;
printf("Enter a number:\n");
28、 scanf("%1d",&n);
do{c[i]= _____________;
i++;
n=n/base;
}while(n!=0);
printf("Transmite new base:\n");
for (--i;i>=0;--i)
{d=c[i];
printf("%c",b[ ____________ ];
}
}
18. 以下数组定义中,错误的是( )
A、 int a[]={1,2,3}; B、 int a[5]={1,2,3};
C、 int a[3]={1,2,3,4}; D
29、 int a[5],b;
19.以下数组定义中,正确的是( )
A、 int n=4,a[n]={1,2,3,4}; B、 int a[][2]={1,2,3,4};
C、 int a[2][]={1,2,3,4}; D、 int a[][]={{1,2},{3,4}};
20.设有如下定义:int a[8][10];在C中一个整数占用4字节,设a的起始地址为1000,则a[1][1]的地址是( )
A、 1000 B、 1004 C、 1036 D、 1044
21. 有数组定义:int a[ ][3]={1,2,3,4,5
30、6,7,8,9},则a[1][2]的值是( )
A、 2 B、 5 C、 6 D、 8
22.设已定义 char str[6]={'a','b','\0','c','d','\0'}; 执行语句 printf(("%s",str) 后,输出结果为( )
A、 a B、 ab C、 abcd D、 ab\0cd\0
23.引用数组元素时,数组元素下标不可以是( )
A、 字符常量 B、 整型变量 C、 字符串 D、 算术表达式
24.下面程序段的运行结果是( )
void main()
{char a[]="abcd",b[]="123";
strcpy(a,b);
printf("%s\n",a);
}
A、 123 B、 123d C、 abcd D、 abcd123
25.下面程序段的运行结果是( )
void main()
{char a[]="123",b[]="abcd";
if(a>b) printf("%s\n",a);
else printf("%s\n",b);
}
A、 123 B、 编译时出错 C、 abcd D、 运行时出错