C语言第四次作业.docx
- 文档编号:6423056
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:17
- 大小:170.59KB
C语言第四次作业.docx
《C语言第四次作业.docx》由会员分享,可在线阅读,更多相关《C语言第四次作业.docx(17页珍藏版)》请在冰豆网上搜索。
C语言第四次作业
第四次作业:
数组
1.字符筛选
编写一个程序,先输入一个字符串str1(长度不超过20),再输入一个单独的字符ch,然后程序会把字符串str当中出现的所有的ch字符都删掉,从而得到一个新的字符串str2,然后把这个字符串打印出来。
例如:
●输入:
字符串str1为:
-010-********
字符ch为:
-
●输出:
字符串str2为:
861062785001
程序代码:
#include
#include
voidmain()
{
inti,j=0,length;
charstr1[21],str2[21],ch;
printf("字符串str1为:
");
gets(str1);
printf("字符ch为:
");
scanf("%c",&ch);
length=strlen(str1);
for(i=0;i<=length;i++)
{
if(str1[i]!
=ch)
{
str2[j]=str1[i];
j++;
}
elsecontinue;
}
puts(str2);
}
2.数据合并
编写一个程序,能够输入两个预先从小到大排列的整数型数组(假设数组长度最大为20,数组输入时遇到数字0结束);要求将这两个数组的数字能够合并成为一个新的从小到大顺序排列的整数型数据,并将新数组输出。
例如:
●输入:
请输入第一个数组:
1,2,3,12,16,20,25,40,0
请输入第二个数组:
4,5,6,15,18,20,21,22,25,38,45,0
●输出:
合并后的数组为:
1,2,3,4,5,6,12,15,16,18,20,20,21,22,25,25,38,40,45
/*编写一个程序,能够输入两个预先从小到大排列的整数型数组(假设数组长度最大为20,数组输入时遇到数字0结束);
要求将这两个数组的数字能够合并成为一个新的从小到大顺序排列的整数型数据,并将新数组输出。
例如:
输入:
请输入第一个数组:
1,2,3,12,16,20,25,40,0
请输入第二个数组:
4,5,6,15,18,20,21,22,25,38,45,0
输出:
合并后的数组为:
1,2,3,4,5,6,12,15,16,18,20,20,21,22,25,25,38,40,45*/
程序代码:
#include
#include
voidmain()
{
inti,j,t,k,m,n,r;
inta[20],b[20],c[40];
printf("请输入第一个数组:
");
for(i=0;;i++)
{
scanf("%d",&a[i]);
m=i-1;
if(a[i]==0)break;
}
printf("请输入第二个数组:
");
for(j=0;;j++)
{
scanf("%d",&b[j]);
n=j-1;
if(b[j]==0)break;
}
for(i=0;i<=m;k++,i++)
c[k]=a[i];
for(j=0;j<=n;k++,j++)
c[k]=b[j];
for(r=0;r<=m+n;r++)
{
for(k=0;k<=m+n;k++)
if(c[k]>c[k+1])
{
t=c[k];
c[k]=c[k+1];
c[k+1]=t;
}
}
for(k=0;k<=m+n;k++)
printf("%d",c[k]);
}
3.数制转换
请使用数组编写一个程序,输入一个二进制的字符串(长度不超过32),然后计算出相应的十进制整数,并把它打印出来。
例如,
●输入:
请输入二进制数字符串:
111011*********011101110
●输出:
对应的十进制数:
15658734
程序代码:
#include
#include
#include
voidmain()
{
charstr[32];
inti,j=0,k=0;
longintt=0;
printf("请输入二进制字符串:
");
gets(str);
j=strlen(str);
for(i=j-1;i>=0;i--)
{
t+=(str[i]-48)*pow(2,k);
k++;
}
printf("对应的十进制数:
%d\n",t);
}
4.对称数字
一辆汽车在开始出发前其里程表上的读数是一个对称数 95859,后匀速行驶两个小时后,发现里程表上是一个新的对称数。
问该新的对称数是多少?
汽车的速度是多少?
注:
所谓对称数是指从左向右读与从右向左读完全一样的数字。
请在合理的范围内(提示,车速别太快也不能太慢,假设介于30~120公里/小时),编程解决上述问题。
程序代码:
#include
#include
voidmain()
{
inta[5];
intm=95859,i,s,v,t=2;
for(v=30;v<=120;v++)
{
s=m+v*t;
for(i=0;i<=4;i++)
{
a[i]=fmod((floor(s/(pow(10,i)))),10);
}
if(a[0]==a[4]&&a[1]==a[3])
printf("新的对称数为:
%d,速度为:
%d\n",s,v);
}
}
5.矩阵元素的运算
读入1个正整数n(1≤n≤10),再读入n*n阶方阵a,计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。
(副对角线为从矩阵的右上角至左下角的连线)
例:
括号内是说明,可以不输入、不输出。
●输入:
4(n=4)
2341
5611
7181
1111
●输出:
sum=35
程序代码:
#include
voidmain()
{
intn,i,j,sum=0;
inta[10][10];
printf("请输入n的值:
");
scanf("%d",&n);
printf("请输入n*n矩阵a:
\n");
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
{
scanf("%d",&a[i][j]);
if(i+j!
=n-1&&i!
=n-1&&j!
=n-1)
sum+=a[i][j];
}
}
printf("sum=%d\n",sum);
}
6.加法口诀表
要求使用二维数组求解下列问题。
(提示:
将加数、被加数、和放入一个二维数组中,再输出该数组)。
输入1个正整数n(1≤n≤10),输出一张20以内的加法口诀表.要求,该口诀表中的加数与被加数都不大于n,分别存放在该表格中的第一行和第一列. 样式例如下:
括号内是说明
●输入:
6(n=6)
●输出:
+123456
12
234
3456
45678
5678910
6789101112
#include
voidmain()
{
inta[11][11];
inti,j,n;
printf("请输入n的值:
");
scanf("%d",&n);
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
{
if(i==0&&j!
=0)
a[i][j]=j;
if(i!
=0&&j==0)
a[i][j]=i;
if(i!
=0&&j!
=0)
a[i][j]=i+j;
if(i==0&&j==0)
a[i][j]=43;
}
}
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
{
if((i!
=0&&j==0)||(j!
=0&&i==0)||(i!
=0&&j!
=0&&j<=i))
{
printf("%4d",a[i][j]);
}
if(i==0&&j==0)
printf("%4c",a[i][j]);
}
printf("\n");
}
}
7.字符与字母(综合题)
用户通过键盘输入一行文档(假设最大长度不超过100个字符),直到按句号“.”键时,输入结束。
请编程实现以下的功能:
(1)字母的转换:
在用户敲键盘的时候,输入的字符,如果它是大写字母,则回显相应的小写字母;如果它是小写字母,则回显相应的大写字母;其他字符,原样回显输出。
(2)字符的统计:
分别统计出其中的英文字母、空格、数字和其他字符的个数。
例如:
●输入:
(输入时回显)a19-YEAR-OLDSAYSHE’SREADYTOMAKEADIFFERENCE.
(用户实际输入为:
A19-year-oldsayshe’sreadytomakeadifference.)
●输出:
(用户按句号“.”后输出,按照规则19-year-old以及he’s都被认为是一个词)
英文字母个数:
37
空格个数为:
8
数字个数为:
2
其他字符个数:
4
(提示,可以使用#include
程序代码:
#include
#include
#include
#include
voidmain()
{
intletter=0,space=0,figure=0,other=0,i;
charstr[100];
printf("请输入字符串:
\n");
for(i=0;i<=100;i++)
{
if((str[i]=getch())!
='.')
{
if(isupper(str[i]))
{
printf("%c",str[i]+32);
letter++;
}
elseif(islower(str[i]))
{
printf("%c",str[i]-32);
letter++;
}
else
{
printf("%c",str[i]);
if(str[i]=='')
space++;
elseif(str[i]>='0'&&str[i]<='9')
figure++;
else
other++;
}
i++;
}
elsebreak;
}
printf(".");
other++;
printf("\n字符%d个,\n空格%d个,\n数字%d个,\n其它字符%d个\n",letter,space,figure,other);
}
8.矩阵的初始化
已知,在C语言中,函数srand()与rand()配合使用,可以生成一系列的随机数。
例如,运行下面的程序,可以生成10个0到99之间的随机数。
对于一个m*n阶的整数型矩阵进行初始化。
要求:
●用户键盘输入矩阵的阶,m与n(m,n在0~15之间 如输入m=12,n=8);
●请使用上面样例提供的随机数生成函数,用0~m*n之间的随机数分别初始化该矩阵元素;
在屏幕上输出该矩阵。
程序代码:
#include
#include
#include
voidmain()
{
inta[15][15];
inti,j,m,n;
printf("请输入m,n的值:
");
scanf("%d,%d",&m,&n);
srand(time(NULL));
for(i=0;i { for(j=0;j { a[i][j]=rand()%m*n; } } printf("输出一个随机的m*n矩阵: \n"); for(i=0;i { for(j=0;j { printf("%4d",a[i][j]); } printf("\n"); } } 9.大数求和(选作) 如你所知,在C语言中,基本数据类型中数的表示范围有限(如整数范围不很大)。 如何求两个很大的整数(假设整数为50位)之和,需要采取其他方法。 请编程实现两个大数求和的功能。 例如: ●输入: 数1: 112233445566778899 数2: 998877665544332211 ●输出: 和为: 111111*********1110 程序代码: #include #include intmain() { chara[50],b[50]; intc[50],d[50],e[51],m,n,i,j,k=0,f,max; printf("请输入两行数字: \n"); gets(a); gets(b); m=strlen(a); n=strlen(b); for(i=0,j=m-1;j>=0;i++,j--) c[i]=a[j]-'0'; for(i=0,j=n-1;j>=0;i++,j--) d[i]=b[j]-'0'; if(n>=m) for(i=m;i c[i]=0; else for(i=n;i d[i]=0; if(m>=n) max=m; else max=n; for(i=0;i e[i]=c[i]+d[i]; e[max]=0; for(i=0;i<=max-1;i++) if(e[i]>9) { e[i]=e[i]-10; e[i+1]++; } for(i=0;i { f=e[i]; e[i]=e[max-i]; e[max-i]=f; } for(i=0;i if(0! =e[0]||0! =i) printf("%d",e[i]); printf("\n"); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 第四 作业