C语言.docx

上传人:b****5 文档编号:8005018 上传时间:2023-01-27 格式:DOCX 页数:12 大小:92.97KB
下载 相关 举报
C语言.docx_第1页
第1页 / 共12页
C语言.docx_第2页
第2页 / 共12页
C语言.docx_第3页
第3页 / 共12页
C语言.docx_第4页
第4页 / 共12页
C语言.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

C语言.docx

《C语言.docx》由会员分享,可在线阅读,更多相关《C语言.docx(12页珍藏版)》请在冰豆网上搜索。

C语言.docx

C语言

 

C

 

学院:

建筑与土木工程学院

专业:

土木工程

姓名:

谢强

学号:

1104050712

 

函数和数组

一、实验目的:

(1)掌握一维数组和二维数组的定义、赋值和输入输出方法。

(2)掌握与数组有关的算法(特别是排序算法)。

(3)掌握字符数组和字符串的使用方法。

(4)能正确定义数组的指针,熟练使用指针访问数组元素。

(5)学会使用字符串的指针和指向字符串的指针变量。

(6)学会使用指针数组处理多个字符串数据。

(7)了解函数的基本结构。

(8)理解函数参数传递的机制,理解过程程序设计的思想。

(9)理解函数调用的过程。

(10)理解函数的嵌套调用和递归调用。

(11)了解局部变量和全局变量的使用方法和作用范围。

二、实验内容:

1.

(1)补全下面的程序,程序的功能是求一位数组的中最小元素的值及其所在的下标号。

#include"stdio.h"

main()

{

inti,a[10],min,index;

for(i=0;i<10;i++)/*利用一充循环给数组a赋值*/

scanf(“%d”,&a[i]);

for(i=0,min=a[0],index=1;i<10;i++)/*求数组a中的最小值mim及其对应的下标index*/

if(min>a[i]){min=a[i];index=i+1;}

printf("MIN=%d,index=%d\n",min,index);

}

(2)模仿1

(1)对一个3行4列的矩阵b[3][4],求出其中最大的元素的值及其所在的行号和列号。

提示:

二维数组有两个下标,极值所在的行标和列表可以使用两个变量(row和col)来表示,先将它们初始化为0,最大值用max表示,先初始化为b[0][0],然后利用双重循环遍历二维数组元素,如果有比最大值大的元素,就用max记录下它的值,用row和col分别记录最新的最大值所在的行号和列号,循环结束后max记录下所出现过的最大值,row和col分别记录最大值所在的行号和列号,最后输出max、row和col的值就完成要求。

#include

voidmain()

{

inti,j,row,col,max,b[3][4];

printf("请输入一个3行4列的矩阵\n");

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

for(j=0;j<4;j++)

scanf("%d",&b[i][j]);

max=b[0][0];row=0;col=0;

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

for(j=0;j<4;j++)

if(b[i][j]>max)

{

max=b[i][j];

row=i+1;

col=j+1;

}

printf("max=%d,row=%d,col=%d\n",max,row,col);

}

2.有下面一个矩阵:

101541

231387

2481

22965

编写程序,要求完成以下功能:

(1)分别求该矩阵的主次对角线元素之和。

(2)求该矩阵的周边元素之和。

(3)求该矩阵主对角线及其上方元素之和。

i<=g

#include

voidmain()

{

inta[4][4]={{10,15,4,1},{23,13,8,7},{2,4,8,1},{22,9,6,5}};

inti,j;

intsum1=0;//主次对角线之和

intsum2=0;

intsum3=0;//周边元素之和

intsum4=0;//主对角线及其上方的元素之和。

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

{for(j=0;j<4;j++)

printf("%4d",a[i][j]);

printf("\n");

}

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

for(j=0;j<4;j++)

if(i==j||i+j==3)

sum1+=a[i][j];

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

for(j=0;j<4;j++)

sum2+=a[i][j];

sum3+=sum2-a[1][1]-a[1][2]-a[2][1]-a[2][2];

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

for(j=0;j<4;j++)

if(i<=j)

sum4+=a[i][j];

printf("此矩阵主次对角线之和为%d周边元素之和为%d主对角线及其上方的元素之和为%d\n",sum1,sum3,sum4);

}

3.有两个字符串S1和S2,编程将S1串中出现的和S2串中相同的字符删掉,输出新的字符串S1。

#include

#include

voidmain(intargc,char*argv[])

{

inti,j,k=0;

chars1[20],s2[20],s3[20];

printf("请输入字符串s1和s2:

\n");

gets(s1);

gets(s2);

for(i=0;s1[i]!

='\0';i++)

{

for(j=0;s2[j]!

='\0';j++)

{

if(s1[i]==s2[j])//如果相等则代表匹配了字符,则退出内层循环,并且此时s2[j]!

='\0'

break;

}

if(s2[j]=='\0')//如果s2[j]=='\0'则代码未发生匹配,则存入s3

s3[k++]=s1[i];

}

s3[k]='\0';//此处应用单个=,为赋值,设置字符串结束

printf("新的字符串为:

%s\n",s3);

}

4.将字符串S1和S2中的字符按照字符ASCⅡ码由小到大的顺序连接在一起形成S3,输出S1和S2和S3。

#include

#include

#defineN8

voidmain()

{

inti,j;

chars1[]="hqwt",s2[]="alpb",s3[8],s;

printf("s1=%s\ns2=%s\n",s1,s2);

strcat(s1,s2);

for(i=1;i

for(j=0;j

if(s1[j]>s1[j+1])

{s=s1[j];s1[j]=s1[j+1];s1[j+1]=s;

}

strcpy(s3,s1);

{printf("s3=%s\n",s3);}

}

5.编写一个函数intisaprime(intx),函数功能是判断参数n是不是素数,是素数返回1,不是返回0.

#include

intisaprime(intx)

{

intn;

if(x<=1)

return0;

if(x==2)

return1;

for(n=2;n

{

if(x%n==0)return0;

}

return1;

}

intmain(intargc,char*argv[])

{

intn,i;

printf("请输入一个数:

");

scanf("%d",&n);

i=isaprime(n);

if(i==1)

printf("%d是素数\n",n);

else

printf("%d不是素数\n",n);

return0;

}

6.在第2题基础上,编写程序判断给定的数组中含有的素数的个数。

源程序如下:

补全程序并上机验证。

(提示:

判读素数的功能可以用第2题编写的函数完成)

#include"stdio.h"

intisaprime(intn)

{

inti;

if(n<=1)

return0;

if(n==2)

return1;

for(i=2;i<=n/2;i++)

if(n%i==0)return0;

return1;

}

intisprime(intx[],intn)

{intj,total=0;

for(j=0;j

if(isaprime(x[j])==1)total++;

returntotal;

}

main()

{

intx[10],i;

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

scanf("%d",&x[i]);

printf("数组中含有%d个素数",isprime(x,10));

}

7.下面程序使用递归函数实现将一个整数转化成2进制数输出。

(给程序填空并添加注释)

#include"stdio.h"

voidchange(inti)

{if(i<0){i=-i;putchar('-');}//将负数转化成正数

if(i/2>=1)change(i/2);/*递归调用*///正数除以2取商

printf("%d",i%2);//正数除以2取余数

}

main()

{

inti;charch;

do{

printf("\nPleaseinputaninterger!

\n");

scanf("%d",&i);//输入的整数

getchar();

change(i);//调用change()函数

printf("\nDoyouwanttocontinue?

YorN?

");

ch=getchar();

}while(ch=='y'||ch=='Y');

}

8.分析下面两个程序的异同,哪一个能改变a和b的值,为什么?

#include"stdio.h"

voidswap(intx,inty)

{intz;

z=x;

x=y;

y=z;

}

main()

{

inta,b;

a=3;

b=5;

printf("a=%d,b=%d\n",a,b);

swap(a,b);

printf("a=%d,b=%d\n",a,b);

}

#include"stdio.h"

voidswap(int*x,int*y)

{intz;

z=*x;

*x=*y;

*y=z;

}

main()

{

inta,b;

a=3;

b=5;

printf("a=%d,b=%d\n",a,b);

swap(&a,&b);

printf("a=%d,b=%d\n",a,b);

}

 

答:

第二个程序改变a和b的值。

因为第二个程序中形参和实参是指针变量,属于参数中的按地址传递,即实参的值能够传递给形参,而形参的改变也会影响到实参。

三、实验心得:

回想学习C语言的过程中,我遇到很多困难。

《C语言程序设计》到底事有什么用。

这门课程是用来做什么的。

这些我都不知道,我感觉自己学c语言就是一张白纸。

后来慢慢的接触多了,渐渐的有了点认识。

说实在的,我对这门课程是充满了好奇心的,可惜我知道的不多,真的。

当上机操作程序,经过编译,调试和运行后,出现界面,这些我都不懂,不过我还是想真正的学好这门课程的。

通过半个学期的学习,我掌握了基本知识。

只是基本而已,但对于好奇的东西我勇于去学习,我觉得我对自己很满意的了。

最难的就是修改和删除这两个模块,这也是我们在最后几周要解决的重点问题。

在编写程序中,真的是细节决定成败,因为不管程序的语句是多是少,但是只要有一条语句或语法不正确,就不能使程序得到所需要的结果。

没能够使自己编写出来的程序等到想要的结果,意味着这是一个不理想的程序,对于本次编写来说则是失败的。

开始编写修改和删除时,很头疼,去向其他人寻求帮助,在别人的帮助和提示下,我编完了修改程序,但编译时老出错,修改后的内容将文本内的信息全部覆盖了。

困难之时,老师和同学帮助了我,完成了修改和删除。

这样以来,整个程序基本上全部完成了,就剩下完善工作了。

课程设计结束了,但是这段时间里,我又学到了更多C知识,同时我也被提醒以后办事的时候要认真,仔细,考虑周全。

也看到了团队精神和互帮互助的重要性。

现在我觉得学习c语言不乏味了,而且我觉得学好c语言说不定哪天能发大财,所以我现在对c语言越来越有兴趣了,我想我会在课外更多的跟c语言接触,希望学到更多的东西,同时能够更多的学习到c语言。

了解c语言。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1