大学一年级下学期C语言程序设计实验报告答案完整版

优秀学习资料 欢迎下载

}

while(t) {

m=m*10+t; t/=10; }

return m==n;

(5)在n个已排好序(设为从小到大)的数据(数或字符串)中查找某一个数据,如果找到了,就指出其在n个数中的位置;否则给出无该数据的信息。请用递归的方法实现二分查找来实现这一查找过程。

提示:采用二分法求解本问题的基本思路是:设数列为a1,a2,…,an,被查找的数为x,则查找首先对am(m = ( n + 1 ) / 2)进行,于是得到三种情形。

若x > am,则x只可能在区间[am + 1 , an] 若x < am,则x只可能在区间[a1 , am - 1] 若x = am,则am即为查找的数,求解结束。

从上面的分析发现,这个过程很适合用递归来实现。

#include\

void found(int s[],int max,int min,int l) {

int mid;

mid=(max+min)/2; if(mid>max||mid

printf(\此数不存在于此数列中!\else {

if(s[mid]==l) {

printf(\该数在10个数中的位置是%d\}

else if(s[mid]>l) {

max--;

found(s,max,min,l);

优秀学习资料 欢迎下载

} else {

min++;

found(s,max,min,l); } }

getchar(); }

int main() {

int a[10],i,n;

for(i=0;i<10;i++)

scanf(\ scanf(\ found(a,9,0,n); }

实验六 指针 实验

( 验证性 综合性 实验 4学时)

1、目的要求:

(1)用指针作为函数参数完成字符串的传递。 (2)掌握函数中参数传递的两种方式。 (3)编写实验报告。

2、实验内容(参考实验指导书):

(1)编写一个函数char *delk( char *sp),把sp所指向的字符串中所有的“$”字符删除,并把处理后的字符串指针返回。

#include

void delk(char *s,char c) {

char s2[50]; int i,j;

for(i=0,j=0;s[i]!='\\0';i++) {

if(s[i]!=c) {

s2[j]=s[i]; j++; } }

优秀学习资料 欢迎下载

s2[j]='\\0';

for(i=0;s2[i]!='\\0';i++) {

s[i]=s2[i]; }

s[i]='\\0'; }

int main() {

char str[20],c;

printf(\请输入串字符\\n\gets(str);

printf(\请输入要删去的字符\\n\

scanf(\ delk (str,c); puts(str); }

(2)写一个函数int find( char *s1, char *s2),函数find的功能是查找串s1中是否包含指定的词(s2指向),如果存在则返回第1次出现的位置,否则返回-1.约定串中的词由1个或1个以上的空格符分隔。

#include

int find(char *s1,char *s2) {

int i=0,j=0; char *p=s2;

for(;s1!='\\0';s1++,i++) {

if(*s1!=*s2) {

s2=p; j=0; }

if(*s1==*s2) {

j++; s2++;

if(*s2=='\\0')

优秀学习资料 欢迎下载

{

return i-j+2; } } }

return -1; }

void main() {

char s1[30],s2[10];

printf(\请输入一句话:\\n\gets(s1);

printf(\请输入一个词:\\n\

gets(s2);

printf(\}

(3)编程实现将输入的十进制整数n通过函数DtoH转换为十六进制数,并将转换结果以字符形式输出。例如:输入十进制数79,将输出十六进制数4f。

#include int DtoH(int n,int a[]) {

int i=0; while(n!=0) {

int bit=n; a[i]=bit; i++; n=n/16; }

return i; }

int main() {

int x;

printf(\请输入一个十进制整数\\n\ scanf(\

优秀学习资料 欢迎下载

int a[10]={0};

int nbits=DtoH(x,a); int i;

printf(\转换成十六进制后的数为\\n\ for(i=nbits-1;i>=0;i--){ if(a[i]>9)

printf(\ else

printf(\ }

printf(\}

(4)定义函数void Merge(int a[], int n, int b[], int m),参数a、b为一维数组,数组中的数据为升序排列,n和m分别为它们的元素个数。函数的功能为:将数组a和b合并为一个数组,合并后的结果存放于数组a中,要求合并后的数组a仍旧为升序排列。请编程实现,并编写main函数对其测试。

#include

void Merge(int a[],int n,int b[],int m) {

int *p,*q,i,j,k; p=a; q=b;

for(i=0;i<10;i++) {

if(i>0&&*(p+i)<*(p+i-1)) {

*(p+i)=*q; q++; } }

for(i=0;i<10;i++)

for(j=i+1;j<10;j++) if(*(p+i)>*(p+j)) {

k=*(p+i); *(p+i)=*(p+j); *(p+j)=k; }

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4