C语言 C++
解答如下
1.
1.
#include <stdio.h>
#define n 255
int main()
{
int flag=0;
char t[n][n]={' '};
int a=n,b,d;
char c;
do
{
scanf("%d",&a);
if(a==0) break;
scanf("%d %c %d",&b,&c,&d);
printf("%d %d %c %d\n",a,b,c,d);
for(int i=0;i<a ;i++ )
{
for(int j=0;j<b ;j++ )
{
t[i][j]=c;
}
}
if(!d)
{
for(int i=1;i<a-1 ;i++ )
{
for(int j=1;j<b-1 ;j++ )
{
t[i][j]=' ';
}
}
}
for(int i=0;i<a ;i++ )
{
for(int j=0;j<b ;j++ )
{
printf("%c",t[i][j]);
}
printf("\n");
}
}while(a!=0);
return 0;
}
2.
#include <stdio.h>
#include <string.h>
void addBinary(char * a, char * b, char * c)
{
int len1 = strlen(a), len2 = strlen(b), carry = 0, k = 0;
int i, j;
char cc;
int x, y, sum;
//核心代码,从右往左进行运算
for (i = len1 - 1, j = len2 - 1; i >= 0 || j >= 0 || carry; --i, --j){
//很可能有a, b数组长等的时候,所以会有i, j小于0的情况,这时直接把该位置为0即可
x = i < 0 ? 0 : a[i] - '0';
y = j < 0 ? 0 : b[j] - '0';
sum = (x + y + carry) % 2; //存入数组中的值
carry = (x + y + carry) / 2; //进位
c[k++] = sum + '0';
}
c[k] = '\0'; //结束字符
//翻转字符串
for (i = 0, j = k - 1; i < j; i++, j--)
{
cc = c[i];
c[i] = c[j];
c[j] = cc;
}
}
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
char a[255];
char b[255];
char c[255];
fflush(stdin);
scanf("%s",a);
fflush(stdin);
scanf("%s",b);
addBinary(a,b,c);
printf("%s\n",c);
}
return 0;
}
第一题
#include <stdio.h>
int main()
{
int h,w,n,i,j;
char ch[2];
while(1) {
scanf("%d", &h);
if(h == 0) {
break;
}
scanf("%d", &w);
scanf("%s", ch);
scanf("%d", &n);
for(i=0; i<h; i++) {
for(j=0; j<w; j++) {
if(i==0 || i==h-1) {
printf("%c", ch[0]);
}
else {
if(n == 0) {
if(j==0 || j==w-1) {
printf("%c", ch[0]);
}
else {
printf(" ");
}
}
else {
printf("%c", ch[0]);
}
}
}
printf("\n");
}
}
return 0;
}
第二题
#include <stdio.h>
int main()
{
char a[101], b[101];
int count, c, m, n, i, j, k;
scanf("%d", &count);
for(c=0; c<count; c++) {
scanf("%s", a);
scanf("%s", b);
m = strlen(a);
k = n = strlen(b);
if(m > k) {
k = m;
}
a[k+1] = 0;
for(i=0; i<k; i++) {
a[k-i] = a[m-i-1];
}
for(i=0; i<=k-m; i++) {
a[i] = '0';
}
for(i=0; i<=k; i++) {
b[k-i] = b[n-i-1];
}
for(i=0; i<=k-n; i++) {
b[i] = '0';
}
j=0;
for(i=0; i<k; i++) {
j = (a[k-i] + b[k-i] + j - 96);
a[k-i] = j % 2 + 48;
j = j / 2;
}
a[0] = j + 48;
if(a[0] == '0') {
printf("%s\n", a+1);
}
else {
printf("%s\n", a);
}
}
return 0;
}
第二小题:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
void add(char s1[],char s2[]){
int k[100];//存放计算后的二进制数
int sum,sum1=0,sum2=0;
int len1,len2;//两个字符数组的长度
int i=0;
len1 = strlen(s1);
len2 = strlen(s2);
while(s1[i]!='\0')//第一个二进制数转化为十进制数
{
sum1+= pow(2,len1-1)*(s1[i]-48);
len1--;
i++;
}
i=0;
while(s2[i]!='\0')//第二个二进制数转化为十进制数
{
sum2+= pow(2,len2-1)*(s2[i]-48);
len2--;
i++;
}
i=0;
sum = sum1+sum2;//两数和
while(sum)//和转化为二进制
{
k[i] = sum%2;
sum/=2;
i++;
}
i=i-1;
while(i>=0)//输出
{
printf("%d",k[i]);
i--;
}
}
int main()
{
char s1[100][100],s2[100][100];//输入的两个二进制数
int n,i;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%s",s1[i]);
scanf("%s",s2[i]);
}
for(i=0;i<n;i++){
add(s1[i],s2[i]);
printf("\n");
}
return 0;
}
第一题:
#include<iostream>
using namespace std;
int main()
{
int a,b,d;
char c;
while(1)
{
cin>>a;
if(a==0)
{
break;
}
cin>>b>>c>>d;
if(d==0) //空心
{
for(int i=1;i<=a;i++) //判断行数
{
for(int j=1;j<=b;j++) //判断列数
{
if(i==1 || i==a) //如果是上下边界,就输满
cout<<c;
else
{
if(j==1 || j==b) //如果是左右边界,输一个
cout<<c;
else //否则输出空格
cout<<" ";
}
}
cout<<endl; //换行
}
}
else //实心
{
for(int i=1;i<=a;i++) //行数
{
for(int j=1;j<=b;j++) //列数
cout<<c; //一直输出
cout<<endl; //换行
}
}
}
return 0;
}
第二题:
第二题,借助字符数组进行处理,借助字符数组存储二进制数,再将二进制数转化为十进制数,最后将十进制的数求和,之后再转化为二进制就可以了。
如有帮助,还请采纳!谢谢!
第一题
#include<stdio.h>
int main(){
int a,b,d;
char c;
int i,r;
scanf("%d %d %c %d",&a,&b,&c,&d);
if(d){ //如果d==1,则每行输出b个字符即可
for(i=1;i<=a;i++){
for(r=1;r<=b;r++){
printf("%c",c);
}
printf("\n");
}
}
else { //d==0,画实心
for(i=1;i<=a;i++){
for(r=1;r<=b;r++){
if(r==1||r==b||i==1||i==a) printf("%c",c); //横竖等于1的时候输出字符c
else printf("%c",' '); //否则输出空格
}
printf("\n");
}
}
return 0;
}
求一下第二题
看他们都解决了,我就不写了。加油