邱日整理C语言实验大全

更新时间:2023-12-08 12:39:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2016.8.6 邱日 整理 C语言上机实验大全

实验三 选择结构程序设计

一、实验目的

(一)掌握C语言关系表达式和逻辑表达式的运算和使用;

(二)正确使用条件控制语句(if语句和switch)进行选择结构程序设计。

二、预习要求

(一)关系运算符和关系表达式、逻辑运算符和逻辑表达式;

(二)if语句的三种形式(单分支、双分支、多分支),以及if语句的嵌套; (三)switch语句。

三、实验内容

(一)完善程序,从键盘上输入x的值,按下式计算y的值。

?x x<1?y??2x?1 1?x<10

?3x?11 x?10?编程提示:注意逻辑表达式的正确表达方法,数学中的1≤x<10应使用C语言的逻辑表

达式(x>=1 && x<10)来表示。

下面是用多分支选择结构实现本题的程序结构: /* c3-4.c if 语句实现的多分支结构 */

#include \ void main() { 定义变量; 输入x;

if ( _______________ ) //按y=x为变量y赋值; else if( _______________ ) //按y=2x-1为变量y赋值; else

_______________ //按y=3x-11为变量y赋值; printf(\}

注意:在赋值语句中2x应该写成2*x。

(二)编写程序,给出一个百分制成绩,要求输出相应的等级A、B、C、D、E。90分以上为'A',80~89分为'B',70~79分为'C',60~69分为'D',60分以下为'E'。

编程提示: 1.先定义一个整型变量存放百分制成绩、定义一个字符型变量存放相应的等级成绩; 2.输入百分制成绩;

(三)下面程序运行时从键盘上分别输入(20,15),(15,20),写出运行结果。

/* c3-5.c 分支结构中的复合语句*/

#include \ void main() {int a,b,t; t = 0;

scanf(\ if (a>b) { t = a ; a = b ; b = t ;

}

printf(\ }

(四)编写程序,给出一个不多于3位的正整数n,要求:(1)求出它是几位数;(2)分别打印出每一位数字(数字之间加一个空格);(3)按逆序打印出各位数字(数字之间加一个空格)。

编程提示: 1.定义变量(考虑需要几个变量)并输入一个3位以下的正整数n 2.将n拆分成三个一位数:

表达式:n 可将一个三位数n拆分出三位数中的个位数; 表达式:n/100 可将一个三位数n拆分出三位数中的百位数;

表达式:((n0))/10 或(n-(n/100)*100)/10 可将一个三位数n拆分出三位数中的十位数。

3.用一个嵌套的选择结构,按照百位数、十位数是否为0决定n为几位数。 4.按相反的顺序输出n。

思考:如果是对一个5位的正整数进行上述处理,程序应如何改动?

(五)写出与表达式z =( x>=y ? x : y )等价的if语句,并上机验证。

(六)企业发放的奖金根据利润提成。利润I低于或等于100000元的,奖金可提10%;利

润高于100000元,低于200000元(100000

元时,高于400000元的部分按3%提成;6000001000000时,超过1000000的部分按1%提成。从键盘输入当月利润I,求应发奖金总数。

要求:分别用if语句和switch语句编程序。

四、实验注意事项

(一)C程序中表示比较运算的等号用“==”表示,赋值运算符用“=”表示,不能将赋值号“=”用于比较运算。

(二)控制表达式是指任何合法的C语言表达式(不只限于关系或逻辑表达式),只要表达式的值为“非零”,则为“真”,“零”则为“假”

(三)在if语句的嵌套结构中,else与if的配对原则是:每个else总是与同一个程序中、在前面出现的、而且距它最近的一个尚未配对的if构成配对关系。

实验四 循环结构程序设计(二)

1. 实验目的

? 熟练掌握循环结构(while、do-while、for),以及continue、break等控制语句。 ? 掌握一些采用选择结构和循环结构的常用算法。

2. 实验内容

(1) 常用算法之一:穷举法

i. 穷举法时在若干个可能的解当中,进行逐一枚举和筛选,找出符合要求的解。 ii. 编写程序,求100~200间的全部素数。 (2) 常用算法之二:迭代法

i. 迭代法一般用于求解方程的根或近似解。设方程f(x)=0,用某种数学方法导出等价的形式x=g(x),然后按以下步骤进行:

a. 选一个方程的近似根,赋给变量x0; b. 将x0的值保存为x1,然后计算g(x1);

c. 当x0与x1差的绝对值不小于某个精度要求时,重复步骤b的计算。

ii. 用π/4≈1-1/3+1/5-1/7+…公式求π的近似值,直到某一项的绝对值小于10-6为止。 (3) 常用算法之三:递推法

i. 递推法是利用问题本身所具备的某种递推关系求解的一种方法。假设问题的规模为N,要求N为1时,能够较快地得到解,而递推性质则要求当已得到问题规模为i-1的解之后,能够从已知问题规模为1,2,3,. . . ,i-1的一系列解,构造出问题规模为i的解。这样,程序可以从i=0或i=1出发,通过递推的方式,得到问题规模为N的解。 ii. 编写程序,用递推法计算Fibonacci数列的前40个值。Fibonacci数列具有以下特点:第1、2个数为1、1,从第3个数开始,该数为前两个数之和。即: F1=1 F2=1

(n=1) (n=2)

(n>=3)

Fn=Fn-1+Fn-2

提示:求出一个新数F3之后,则将原来的F2看作F1,F3看作F2,循环实现递推。

(4) 编写程序,求解以下问题;

i. 打印出所有的“水仙花数”。“水仙花数”指一个三位数,其各位数字立方和等于数本身。例如,153是一个水仙花数,因为153=13+53+33。(提示:对于任意一个100到999之间的三位数x,先求出各位数字a、b、c,然后判断x和a3+b3+c3是否相等。用穷举法)

ii.百钱买百鸡问题。公鸡每只5元,母鸡每只3元,小鸡3只一元,问一百元买一百只鸡有几种解法。提示:设x,y,z为三种鸡的只数,按题目写出代数方程为:x+y+z=100,5x+3y+z/3=100,用穷举法列举出x、y、z的值 iii. 用二分法求解方程f(x)=3x3+4x2-2x+5。(用迭代法)

IV. 猴子吃桃问题。猴子有N个桃子,每天吃掉一半,还不过瘾,又吃了一个。到第10

天,发现只剩下一个桃子了。求最初的桃子数目。(1534个。若第i天为x个桃子,则第i-1天为2(x+1)个桃子。用递推法。)

V. 编写一个程序,验证“谷角猜想”,即由键盘输入一个自然数n,把n经过有限次

运算后,最终得到自然数1的全过程打印出来。(日本数学家谷角静夫在研究自然数时发现了一个奇怪的现象--对于任意一个自然数n,若n为偶数,则将其除以2;若n为奇数,则将其乘以3,然后再加1。如此经过有限次运算后,总可以得到自然数1。人们把谷角静夫的这一发现叫做“谷角猜想”。)(递推法)

VI. 某处发生一起案件,侦察得知如下可靠线索:ABCD四人都有作案可能,AB中至少

一人参与作案,BC中至少一人参与作案,CD中至少一人参与作案,AC中至少一人未参与作案。请分析谁最有可能作案。(穷举法)

///徐友万

/*#include void main() { int a,i; for(a=100;a<=200;a++) { for(i=2;i<=a;i++) { if(a%i==0) break; } if(a==i) printf(\ } }*/

/*#include #include void main() { int i=1,n=2; double pi=0; while(1.0/i>=0.000006) { pi=pi+1.0/(pow(-1,n)*i); i+=2; n++; } printf(\}*/

/*#include void main() { int a=1,b=1,c,i,t; printf(\ for(i=1;i<=38;i++) { c=a+b; a=b; t=c; b=t; printf(\ }

}*/

/*#include void main() { int a,b,c; for(a=1;a<=20;a++) { for(b=1;b<=33;b++) { c=100-a*5-b*3; if(a+b+3*c==100) printf(\ } } }*/

/*#include void main() { int a,b,c,x; for(x=100;x<=999;x++) { a=x/100; b=x/10; c=x; if(a*a*a+b*b*b+c*c*c==x) printf(\ } }*/

/*#include void main() { double x1=-2.0,x2=-3.0,x; while(x1-x2>=0.000001) { x=(x1+x2)/2; if(3*x*x*x+4*x*x-2*x+5>0) x1=x; else x2=x; } printf(\}*/

/*#include

void main() { int N=1,days; for(days=9;days>0;days--) { N=2*(N+1); } printf(\}*/

/*#include void main() { int n; scanf(\ while(n!=1) { if(n%2!=0) n=n*3+1; if(n%2==0) n=n/2; } printf(\}*/

#include void main() { int A,B,C,D,a=0,b=0,c=0,d=0; for(A=0;A<=1;A++) { for(B=0;B<=1;B++) { for(C=0;C<=1;C++) { for(D=0;D<=1;D++) { if(A*B>=0&&B*C>=0&&C*D>=0&&A*C==0) printf(\ } } } } }

实验6字符数组

实验目的

(一)掌握字符数组的定义、初始化和应用; (二)掌握字符串处理函数的使用。

实验内容

(一)输入下面的程序并运行,观察程序运行的结果,并分析原因(注意程序第2行中有些单引号之间是空格)。

/* 字符数组的输出*/

#include \void main( )

{char a[10]={ ’I’, ’’, ’a’, ’m’, ’’, ’a’, ’’, ’b’, ’o’, ’y’}; printf(\}

将字符数组a的大小改为11,再运行程序,并将结果与修改前的结果进行比较,分析原因。

(二)按照要求编写程序:有一行文字,不超过80个字符,分别统计出其中英文大写字母、小写字母、数字、空格、及其它字符的个数。

编程提示: 1.定义一个一维字符数组。

2.定义5个整型变量分别统计大写字母、小写字母、数字、空格和其它字符的个数(即作为5个计数器使用),并为这5个变量赋初值。

3.用scanf函数或gets函数为字符数组赋一个字符串。

4.在循环中对字符数组的每个元素进行判断,相应的计数器加1。注意循环控制的条件和进行判断的条件怎样设置。

5.循环结束后输出各计数器的值。

思考:如果是对一篇英文文章进行统计,又该怎么编程呢?文章的行数和每行字数可以自己来设。提示:对文章的内容要用二维字符数组来存储。 /* 统计字符个数 */

#include \ void main( ) { }

(三)下面程序的功能是实现将两个字符串连接起来并输出结果,注意不使用strcat函数。

编程提示:

1.定义两个一维字符型数组str1、str2和两个循环变量。

2.为两个字符数组输入两个字符串(可使用scanf函数或gets函数整体赋值,要注意scanf和gets函数的区别,在对字符串赋值时,scanf函数不能出现空格)。

3.确定字符数组str1结束的位置。

4.再将字符数组str2中的内容连接到字符数组str1的后面。 5.为字符数组str1赋字符串结束的标志’\\0’。 6.输出连接后的字符数组str1。

/* 字符串连接*/ #include \void main( )

{char str1[100],str2[100]; int i=0,j=0;

printf(\

_______________;

printf(\ _______________;

printf(\}

(四)下面程序的功能是用strcat函数实现将字符串2连接到字符串1的后面并输出,请补充完整。

/* 字符串连接*/

#include \void main( )

{char str1[80]=\printf(\printf(\

_______________; /*使用strcat函数实现,注意其格式*/ printf(\}

(五)实现将一个字符串中的所有大写字母转换为小写字母并输出。 例如:当字符串为\ 输出:\

/* 字符串中的大写字母转为小写字母*/ #include \void main( )

{ }

思考:如果将字符串中的所有小写字母转换为大写字母,又将如何修改程序?

(六)编写程序实现在一个字符串中查找指定的字符,并输出指定的字符在字符串中出现的次数及位置,如果该字符串中不包含指定的字符,请输出提示信息。

编程提示:

1.定义两个一维数组,a字符数组用来存放字符串,b整数数组用来存放指定的字符在字符串中出现的位置(即对应的下标)。

2.定义一个标志变量flag,并初始化flag的值为0。 3.用scanf或者gets函数为字符数组赋一个字符串。

4.在循环中对字符数组的每个元素和指定字符ch进行匹配判断,如果相同,就把其下标依次存放在数组b中,并置flag的值为1。

5.循环退出后判断标志变量flag的值,如果仍为0,说明字符串中没出现指定的字符,否则,就输出该字符在字符串中出现的次数和位置。

实验注意事项

(一)注意C语言中字符串是作为一维数组存放在内存中的,并且系统对字符串常量自动加上一个‘\\0’作为结束符,所以在定义一个字符数组并初始化时要注意数组的长度。 (二)注意用scanf函数对字符数组整体赋值的形式。

////林柳吟

/*#include void main() {

char string[81]; char c; int i; gets(string);

for(i=0;(c=string[i])!='\\0';i++) { }

printf(\}*/

//字符组的输出 /*#include\void main() {

char a[11]={ 'I', ' ', 'a', 'm', ' ', 'a', ' ', 'b', 'o', 'y'}; printf(\}*/

//a[10]:I am a boy烫?. a[11]:I am a boy烫?. //统计字符个数

if(c>='A'&&c<='Z')

c=155-c; c=219-c;

if(c>='a'&&c<='z') printf(\

/*#include void main() {

char string[81];

int up=0,low=0,num=0,spa=0,oth=0,i; char c; gets(string);

for(i=0;(c=string[i])!='\\0';i++)

if(c>='A'&&c<='Z')

up++; low++; num++; spa++; oth++;

else if(c>='a'&&c<='z') else if(c>='0'&&c<='9') else if(c==' ') else

printf(\大写字母有%d个\\n\ printf(\小写字母有%d个\\n\ printf(\数字有%d个\\n\ printf(\空格有%d个\\n\ printf(\其他字符有%d个\\n\}*/

//统计文章字符个数 /*#include void main() {

char text[100][100],c;

int up=0,low=0,num=0,spa=0,oth=0; int i,j,line;

printf(\请输入文章的行数\\n\ scanf(\ printf(\请输入每一行\\n\ for(i=0;i

gets(text[i]);

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

c=text[i][j]; if(c>='A'&&c<='Z') up++;

else if(c>='a'&&c<='z')

}

}

low++;

else if(c>='0'&&c<='9') num++;

else if(c==' ') spa++; else oth++;

printf(\大写字母有%d个\\n\ printf(\小写字母有%d个\\n\ printf(\数字有%d个\\n\ printf(\空格有%d个\\n\ printf(\其他字符有%d个\\n\}*/

//字符串连接 /*#include void main() {

char str1[100],str2[100]; int i=0,j=0;

printf(\ gets(str1);

printf(\ gets(str2);

while(str1[i]!='\\0')

i++;

str1[i++]=str2[j++]; //拼接

//空语句

while(str2[j]!='\\0') str1[i]='\\0'; }*/

//字符串连接(strcat) /*#include #include void main() {

char str1[80]={\ printf(\ printf(\ strcat(str1,str2);

printf(\}*/

//计算s1的长度

printf(\

//字符串中的大写字母转为小写字母 /*#include #include void main() {

char str[100];

printf(\请输入一行字母\\n\ gets(str); strlwr(str); printf(\

}*/ //strupr(str):将小写转化为大写 //查找字符

/*#include void main() {

char str[100],ch,c; int a[100],flag=0,i,j=0; printf(\请输入一行字符\\n\ gets(str);

printf(\请输入要查找的字符\\n\ scanf(\

for(i=0;(c=str[i])!='\\0';i++) }*/

if(c==ch) { }

printf(\不含指定字符\\n\

printf(\出现%d次,位置分别为:\\n\for(i=0;i

printf(\a[j]=i; j++; flag=1;

if(flag==0) if(flag==1)

实验六 二维数组程序设计

一、实验目的

(一)掌握二维数组的定义、赋值及输入输出的方法; (二)掌握与二维数组有关的算法如查找、矩阵转置等;

(三)掌握在程序设计中使用数组的方法。数组是非常重要的数据类型,循环中使用数组能更好地发挥循环的作用,有些问题不使用数组难以实现。

(四)掌握在VC++环境下上机调试二维数组程序的方法,并对结果进行分析。

二、预习要求

熟悉二维数组的定义、引用和相关算法(求最大值、最小值)的程序设计,同时要掌握在程序设计中利用双重循环来实现二维数组的输入和输出。

三、实验内容

(一)二维数组的初始化,即给二维数组的各个元素赋初值。下面的几个程序都能为数组元素赋值,请输入程序并运行,比较这些赋值方法有何异同。

1.在定义数组的同时对数组元素分行初始化。 /* 二维数组的初始化(分行)*/ #include \void main( )

{int i,j,a[2][3]={{1,2,3},{4,5,6}}; for(i=0; i<2; i++) { for(j=0; j<3; j++) printf(\printf(\} }

2.不分行的初始化。把{ }中的数据依次赋值给数组的各个元素。 /* 二维数组的初始化(不分行)*/ #include \void main( )

{int i,j,a[2][3]={1,2,3,4,5,6}; for(i=0;i<2;i++)

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

printf(\printf(\} }

3.为部分数组元素初始化。

如:数组定义语句为:int i,j,a[2][3]={{1,2},{4}};

4.可以省略第一维的定义,但不能省略第二维的定义。 如:int a[ ][3]={1,2,3,4,5,6};

依次运行以上程序,比较这四种定义方式的不同之处。

(二)求一个4×4矩阵的主对角线元素之和,填空并运行程序。

编程提示: 1.定义一个4行4列的二维数组a。

2.可利用双重循环的嵌套为该二维数组的各个数组元素赋值;

3.用循环求和,并注意矩阵对角上线元素的特征是:行下标和列下标相同。 4.输出对角线元素之和。

(三)统计3个学生,每个学生4门课程的考试成绩,要求输出每个学生的总成绩,每个学生的平均成绩,3个学生的总平均成绩。填空并运行程序。

(四)已知二维数组a中的元素为: 4 4 34 37 3 12 5 6 5

求二维数组a中的最大值和最小值。程序的输出应为:The max is: 37 The min is: 3

(五)以下程序是查找二维数组a的最大元素及其下标。

(六)下面的程序是自动形成并输出如下矩阵,填空并运行程序。 1 2 3 4 5 1 1 6 7 8 1 1 1 9 10 1 1 1 1 11 1 1 1 1 1

(七)求4*5的矩阵中的鞍点(元素在本行值最大但在所在列是最小的),若矩阵不存在鞍点则输出“不存在鞍点”。

四、实验注意事项

(一)C规定,二维数组的行和列的下标都是从0开始的。

例如,有定义:int b[3][[5]; 则数组b的第一维下标的上界为2,第二维下标的上界为4。说明定义了一个整型二维数组b,它有3行5列共3*5=15个数组元素,行下标为0,1,2,列下标为0,1,2,3,4,则数组b的各个数组元素是:

b[0][0],b[0][1],b[0][2],b[0][3],b[0][4] b[1][0],b[1][1],b[1][2],b[1][3],b[1][4] b[2][0],b[2][1],b[2][2],b[2][3],b[2][4]

(二)要对二维数组的多个数组元素赋值,应当使用循环语句并在循环过程中,使数组元素的下标变化。可用下面的方法为所有数组元素赋值:

int i,j,a[3][3]; for(i=0;i<3;i++)

} } } printf(\ }*/

/*(六)下面的程序是自动形成并输出如下矩阵,填空并运行程序。 1 2 3 4 5 1 1 6 7 8 1 1 1 9 10 1 1 1 1 11 1 1 1 1 1 */

/*#include void main() { int a[5][5]; int i=0,j=0,k=2; for(i=0;i<5;i++) { for(j=0;j<5;) { if(j<=i) j++; else { a[i][j]=k; k+=1; j++; } } } for(i=0;i<5;i++) { for(j=0;j<=i;j++) a[i][j]=1; } for(i=0;i<5;i++) { for(j=0;j<5;j++) printf(\ printf(\

} }*/

/*七)求4*5的矩阵中的鞍点(元素在本行值最大但在所在列是最小的),若矩阵不存在鞍点则输出\不存在鞍点\。*/

/*#include void main() { int a[4][5]; int b[4][5],c[4][5]; int i,j,max,min,flag,k=0,l=0,m=0,n=0; printf(\ for(i=0;i<4;i++) for(j=0;j<5;j++) scanf(\ for(i=0;i<4;i++) { for(j=0;j<5;j++) printf(\ printf(\ } for(i=0;i<4;i++) { max=a[i][0]; for(j=0;j<5;j++) { if(a[i][j]>max); max=a[i][j]; } b[i][j]=max; } for(j=0;j<5;j++) { min=a[0][j]; for(i=0;i<4;i++) { if(a[i][j]

}

for(i=0,flag=0;(flag==0)&&i<4;i++) { for(j=0;j<5;j++) { if(b[i][j]==c[i][j]) { printf(\鞍点:%d\ flag=1; } } }

if(flag==0)

printf(\不存在鞍点\\n\ }*/ /*(一)定义一个5行5列的二维数组a,使下三角的所有元素初始化为1,在划线处填空。 int i,j,a[5][5]; for(i=0; i<5; i++) for(j=0; j<5; j++)

if( ) a[i][j]=1; */

/*#include void main() { int i,j,a[5][5]; for(i=0; i<5; i++) for(j=0; j<5; j++) scanf(\ for(i=0; i<5; i++) for(j=0; j<5; j++) if(j<=i) a[i][j]=1; for(i=0; i<5; i++) { for(j=0; j<5; j++) printf(\ printf(\ } }*/

/*(二)找出5×5矩阵中的升序数,并输出。*/ /*#include

void main { int a[5][5]; int i,j,m,n; printf(\ for(i=0;i<5;i++) for(j=0;j<5;j++) scanf(\ }*/

实验八 函数1

实验目的

⒈ 掌握函数的定义、函数类型、函数参数、函数调用的基本概念; ⒉ 掌握变量名作函数参数的程序设计方法; ⒊ 掌握函数的嵌套调用的方法和递归调用的方法;

知识回顾

1、被调函数在主调函数后面定义,需先在主调函数中声明; 2、函数调用时,实参与形参的类型要匹配,个数、顺序要一致;

3、函数的形参也是变量。 4、函数定义 无参函数: 有参函数: 空函数: 函数类型 函数名() 函数类型 函数名(形参函数类型 函数名() { { 表) { 声明部分 } 语句 声明部分 } 语句 }

5、函数的形式参数

在定义时,函数名后括号中的参数叫“形式参数”。在主调函数中调用一个函数时,函数名后括号中的参数叫“实际参数”

6、 函数返回值:return语句,用法如:return z ;或 return (z); 7、 函数调用的一般形式:

? 函数语句:如 printstar(); 无返回值,仅完成一定功能; ? 函数表达式:如:m=4+min(a,b); 函数在表达式中出现; ? 函数参数: 如:m=max(a,min(c,d));函数返回值作为参数;

实验内容

⒈下面程序的功能是:根据输入的整数x和n,利用函数fact实现求x。

n

例如:输入:2,3 输出23=8,请在程序中的横线上填入正确的内容,将程序补充完整。 #include \void main( )

{ long int fact(long x,long n) ; /*声明fact函数*/

long int x ; long int n;

printf(\scanf(\

printf(\调用fact函数 */ }

long int fact(long int x, long int n) /*定义fact函数求xn */ { long int i,s;

; /*求累积变量的初始化*/ if (n= =0) return 0;

for(i=1; i<=n; i++) /*用循环实现x*/ s=s*x;

; /*返回结果x*/

}

⒉下面程序的功能是:计算Cm?nn

n

m!的值。请在程序中的横线上填入适当的内容,

n!*(m?n)!n将程序补充完整。例如:输入:5,3 输出:Cm?10

编程提示:(1)定义求阶乘函数,在此基础上定义求组合数函数。

(2)主函数调用求组合数函数,求组合数函数再三次调用求阶乘函数。

#include \

long int jf(int n) /*定义求阶乘函数jf*/ { int i; long int t=1; for(i=1; i<=n; i++) t*=i; ; }

long int cmn(int m, int n) /*定义求组合数函数cmn*/ { } /*用return语句返回结果*/

void main( ) { int m,n;

printf(\scanf(\,%d\;

sum=sum+fact(i); printf(“1!+2!+…+10!=%f \\n”,sum); return 0; }

double fact(int n) { int i; double result; for(i=1;i<=n;i++) fact(n) = fact(n) * i; return result; }

2. 已有变量定义和函数语句“int a=1,b=-5,c;c=fun(a,b);”,fun函数的作用是计算两个数之差的绝对值,并将差值返回给调用函数,请编写fun函数,并调试。

3. 下面程序的功能是:求二维数组a中的上三角元素之和。

例如:a中的元素为:

4 4 34 37 7 3 12 8 5 6 5 52 24 23 2 10 程序的输出应为:The sum is:147。

请将程序补充完整。

/* 通过函数调用求二维数组中的上三角元素之和*/ #include \ #include \int arrsum( int arr[4][4]) { int i,j,sum; }

void main()

{ int a[4][4]={4,4,34,37,7,3,12,8,5,6,5,52,24,23,2,10},i,j; printf(\

4. 将字符串1的第1,3,5,7,9,......位置的字符复制到字符串2并输出。要求此功能封装在自定义函数中.

例如:当字符串1为\,则字符串2为\。

编程提示:

子函数:(1). 函数的类型为void,函数中不使用return语句;

(2). 函数的形参应为两个字符型一维数组;

(3). 函数体中使用循环结构,将字符串1中相应位置上的字符逐一复制到字

符串2中,注意循环变量每次递增的数目。 main函数:(1). 定义一个一维字符型数组;

(2). 为字符数组赋一个字符串;

(3). 调用转换函数,以两个数组名作实参;

(4). 输出转换后的字符数组的内容。

/* 通过函数调用实现对字符串的处理*/ #include \ #include \ #include \

void fun(char str1[],char str2[]) { } void main()

{ char str1[80]=\ printf(\ _______________;

printf(\

}

5. 用递归法将一个整数n转换成字符串。例如,输入483,应输出字符串“483”。n的位数不确定,可以是任意位数的整数。

编程提示:分解出每一位数字输出. #include void convert(int m) { if(m >10) { ;

printf(\

}else printf(\

}

void main() { int n; printf(\ scanf(\ ; }

6. 编制函数del_char,函数原型为void del_char(char a[],char ch),函数的功能是删除a数组中值为ch的字符。例如,从字符串“DDdidS”中删除’d’后,字符串为“DDiS”。从主函数

中输入字符串,指定要删除的字符,并输出结果。 7. 编写一个函数,利用参数传入一个3位数number,找出101~number之间所有满足下列2个条件的数:它是完全平方数(平方根为整数的数),又有2位数字相同,如144、676等,函数返回满足条件的数据个数。请同时编写main函数进行测试。 8. 在以下程序中,main()函数调用了4个函数swap1()、swap2()、swap3()和swap4(),还定义了变量a和b,程序设计的目的是要求通过函数调用,交换main()中变量a和b的值。请分析在swap1()、swap2()、swap3()和swap4()这4个函数中,哪个函数可以实现这样的功能。 #include void main() { void swap1(int x,int y),swap2(int *px,int *py),swap3(int *px,int *py); int a=1,b=2,*pa=&a,*pb=&b; swap1(a,b); printf(\ a=1;b=2; swap2(pa,pb); printf(\ a=1;b=2; swap3(pa,pb); printf(\

swap4(pa,pb); printf(\}

void swap1(int a,int b) { int t; t=a; a=b; b=t; }

void swap2(int *pa,int *pb) { int t; t=*pa; *pa=*pb; *pb=t; }

void swap3(int *pa,int *pb) {

int *pt; pt=pa; pa=pb; pb=pt; }

void swap4(int *pa,int *pb) { int *pt; *pt=*pa; *pa=*pb; *pb=*pt; }

///侯靖秋

//改正下列程序中的错误,计算1!+2!+?+10!的值,

//要求定义并调用函数fact(n)计算n!,函数类型是double。 /*#include int main() { double fact(int n); int i; double sum=0; for(i=1;i<10;i++) sum=sum+fact(i);

printf(\?+10!=%f\\n\ return 0; }

double fact(int n) { int i; double result=1; for(i=1;i<=n;i++) result*=i; return result; } */

//已有变量定义和函数语句\;c=fun(a,b);\,fun函数的作用是计算两个数之差的绝对值,

//并将差值返回给调用函数,请编写fun函数,并调试。 /*#include void main() {

int fun(int a,int b); int a=1,b=-5,c; c=fun(a,b); printf(\}

int fun(int a,int b) { int c; c=a-b; if(c<0) c*=-1; return c; } */

//下面程序的功能是:求二维数组a中的上三角元素之和。 /*#include \#include \

int arrsum(int arr[4][4]) { int i,j,sum=0; for(i=0;i<4;i++) for(j=i+1;j<4;j++) sum+=arr[i][j]; return sum; }

void main() { int a[4][4]={4,4,34,37,7,3,12,8,5,6,5,52,24,23,2,10}; printf(\} */

//将字符串1的第1,3,5,7,9,......位置的字符复制到字符串2并输出。 //要求此功能封装在自定义函数中. /*#include \#include \#include \

void fun(char str1[],char str2[]) { int i,l,n=0; l=strlen(str1); for(i=0;i<=l;i+=2) { str2[n]=str1[i]; n++;

} str2[n]='\\0'; }

void main() { char str1[80]=\ printf(\ fun(str1,str2); printf(\} */

//用递归法将一个整数n转换成字符串。例如,输入483,应输出字符串\。 //n的位数不确定,可以是任意位数的整数。 /*#include void convert(int m) { if(m>10) { convert(m/10); printf(\ } else printf(\}

void main() { int n; printf(\ scanf(\ convert(n); } */

//编制函数del_char,函数原型为void del_char(char a[],char ch),

//函数的功能是删除a数组中值为ch的字符。例如,从字符串\中删除'd'后, //字符串为\。从主函数中输入字符串,指定要删除的字符,并输出结果。 /*#include

void del_char(char a[],char ch) { int i,j=0; for(i=0;a[i]!='\\0';i++) { if(a[i]!=ch) {

a[j]=a[i]; j++; } } a[j]='\\0'; }

void main() { char a[81],b; printf(\ gets(a); printf(\ scanf(\ del_char(a,b); printf(\}*/

//编写一个函数,利用参数传入一个3位数number,找出101~number之间所有满足下列2个条件的数:

//它是完全平方数(平方根为整数的数),又有2位数字相同,如144、676等, //函数返回满足条件的数据个数。请同时编写main函数进行测试。 /*#include #include int find(int a) { int i,m=0,d,b,c,t=0; for(i=101;i<=a;i++) { m=(int)sqrt(i); if(i==m*m) { d=i; b=i/100; c=i/10; if(d==b||b==c||d==c) t++; } } return t; }

void main() { int i; printf(\ scanf(\

printf(\有%d个\}*/

//在以下程序中,main()函数调用了4个函数swap1()、swap2()、swap3()和swap4(), //还定义了变量a和b,程序设计的目的是要求通过函数调用,交换main()中变量a和b的值。

//请分析在swap1()、swap2()、swap3()和swap4()这4个函数中,哪个函数可以实现这样的功能。 /*#include void main() { void swap1(int x,int y),swap2(int *px,int *py),swap3(int *px,int *py),swap4(int *pa,int *pb); int a=1,b=2,*pa=&a,*pb=&b; swap1(a,b); printf(\ a=1;b=2; swap2(pa,pb); printf(\ a=1;b=2; swap3(pa,pb); printf(\ a=1;b=2; swap4(pa,pb); printf(\}

void swap1(int a,int b) { int t; t=a; a=b; b=t; }

void swap2(int *pa,int *pb) { int t; t=*pa; *pa=*pb; *pb=t; }

void swap3(int *pa,int *pb) {

int *pt; pt=pa; pa=pb; pb=pt; }

void swap4(int *pa,int *pb) { int c; int *pt=&c; *pt=*pa; *pa=*pb; *pb=*pt; } */

本文来源:https://www.bwwdw.com/article/l83t.html

Top