C语言/C++常见习题问答集锦(七)

C语言/C++常见习题问答集锦(七)

程序之美

在这里插入图片描述

1、c语言:定义两个长度相同的整型数组,通过键盘输入给这两个数组赋值。编写程序交换这两个数组对应位置的数值,如数组a[] ={1,2,3,4,5},数组b[] = {6,7,8,9,10},交换后,数组b[] ={1,2,3,4,5},数组a[] = {6,7,8,9,10},输出交换前后数组a、b的值。

#include <stdio.h>
void swap(int *x,int *y)
{
    int tmp=*x;
    *x=*y;
    *y=tmp;
}
 
void swap_array(int *a,int *b,int n)
{
    int i;
    for(i=0;i<n;++i)
        swap(a+i,b+i);
}
 
int main()
{
int n,i;
printf("请输入数组长度");
scanf("%d", &n);
int *a = (int*)malloc(n*sizeof(int));
if (a== NULL);
{
free(a) ;
a= NULL ;
return 1;
}
int *b = (int*)malloc(n*sizeof(int));
if (b== NULL);
{
free(b) ;
b= NULL ;
return 1;
}
printf("请为第一个数组赋值");
for ( i = 0; i < n; ++ i)
{
scanf("%d", &a[i]);
}  
printf("请为第二个数组赋值");
for ( i = 0; i < n; ++ i)
{
scanf("%d", &b[i]);
}  
    swap_array(a,b,n);
     
    printf("after swap b is:\n");
    for(i=0;i<n;++i)
        printf("%d ",b[i]);
    printf("after swap a is:\n");
    for(i=0;i<n;++i)
        printf("%d ",a[i]);
    printf("\n");
}

在这里插入图片描述

2、对某整型二维数组a[4][6],初始化填入一些浮点数,分别求其各行、各列以及所有数之乘积, 并显示数组的数据与计算结果

#include<stdio.h>
int main(){
float a[4][6]={(3.5,2.6,3.9,4.5,4.8,5.7),(2.9,3.5,4.4,5.9,4.9,5.8),(3.5,4.8,5.3,6.5,4.3,5.6),(4.5,5.6,6.3,7.7)};
float b[4];//存储每行乘积
float c[6];//存储每列乘积
float s = 1.0;
//计算乘积
for(int i=0;i<4;i++)
{
b[i]=1;
c[i]=1;
for(int j=0;j<6;j++){
b[i]=a[i][j];
c[i]=a[j][i];
s*=a[i][j];
}
}
 
for(int i=0;i<4;i++){
printf("第%d行乘积:%f\n", i, b[i]);
}
 
for(int i=0;i<6;i++){
printf("第%d列乘积:%f\n", i, c[i]);
}
printf("全部乘积:%f\n", s);
return 0;
}

在这里插入图片描述

3、编写一个程序,要求用户输入两个整数,获取用户输入的数,然后打印出较大 的数,如果这两个数相等,则打印信息:“These numbers are equal.”。
输入第一行有一个整数n,表示下面有n组数据,下面的n行,每行有两个用空格隔开的int 类型整数。
输出有n行,每行输出对应的结果。

样例输入:
2
14 14
13 12

样例输出:
These numbers are equal.
13

解法一:

#include<stdio.h>
 
int max(int a, int b){
    return a>b ? a : b;
}
 
int main()
{
int n,i;
printf("请输入数组组数:");
scanf("%d", &n);
int *a = (int*)malloc(n*sizeof(int));
if (a== NULL);
{
free(a) ;
a= NULL ;
return 1;
}
int *b = (int*)malloc(n*sizeof(int));
if (b== NULL);
{
free(b) ;
b= NULL ;
return 1;
}
printf("请为数组赋值:\n");
for ( i = 0; i < n; ++ i)
{
scanf("%d %d", &a[i], &b[i]);
}  
 
for(i=0;i<n;++i){
    if(a[i] == b[i]){
        printf("These numbers are equal.\n");
 }
 else{
            printf("%d\n",max(a[i], b[i]));
    }
 }
    printf("\n");
}

还有一位朋友的解法更加巧妙:

#include<stdio.h>
int main()
{
int n,i=0,m1,m2;
    printf("请输入一个整数:");
    scanf("%d", &n);
    printf("\n");
    while(i!=n)
    {
        printf("请输入2个整数:");
        scanf("%d %d",&m1,&m2);
        if (m1 > m2) { printf("%d\n", m1); }
        else if (m1 < m2) { printf("%d\n", m2); }
        else if (m1 = m2) { printf("These numbers are equal.\n"); }
        i++;
        printf("\n");
    }
return 0;
}

在这里插入图片描述

4、从键盘输入一串字符以及一个字符,找到这个字符在字符串中出现的第一次的位置和最后一次的位置的间距是多少。
输入:abcdefdef d
输出:字符d第一次出现在第4个
最后一次出现在第7个
第一次的位置和最后一次的位置间距为:3

解法一:

#include <iostream>
 
using namespace std;
 
int main()
{
    int min,max;
    string s;
    char c;
    cin >> s;
    cin >> c;
    for(int i = 0;i < s.length();i++){
        if(s.at(i) == c){
            min = i;
            break;
        }
    }
    for(int i = s.length() - 1;i >= 0;i--){
        if(s.at(i) == c){
            max = i;
            break;
        }
    }
    printf("字符%c第一次出现在第%d个\n最后一次出现在第%d个\n第一次的位置和最后一次的位置间距为: %d",c,min+1,max+1,max-min);
    return 0;
}

解法二:

#include <stdio.h>
int main(){
char a[1024];
char p;
int s = -1, e = 0, i = 0;
printf("请输入字符串:\n");
scanf("%s", a);
printf("请输入字符:\n");
scanf("%c", &p);
char* q = a;
while(*q){
if(*q == p){
if(s == -1){
s = i;
}
e = i;
}
i ++;
}
printf("字符%c第一次出现的位置为%d\n", s);
printf("字符%c最后一次出现的位置为%d\n", e);
printf("第一次的位置和最后一次的位置间隔:%d\n",  e - s);
 
return 0;
 
}

在这里插入图片描述

5、用while语句、do-while语句或for循环语句编写程序,计算e约等于1+1/1!+1/2!+…+1/n!
其中在1/n!小于等于10^(-5)时结束.
用C写.单循环.使误差小于给定的值
除了输出e以外,还要输出总项数n。

解法一:

#include<stdio.h>
void main()
{
float e,a; int i,n=0; /*涉及到小数运算要用浮点型变量*/
e=1,a=1; /*a=1在后面有乘积运算*/
for(i=1;1/a>1e-5;i++) /*条件循环语句*/
{
a*=i; /*级乘的算法*/
e+=1/a ; /*e的运算方法*/
n++;
}
printf("%f,n=%d\n",e,n);
}

解法二:

#include<stdio.h>
int main( )
{
float s = 1,n = 1;int t = 1;
while ( 1 / n >= 0.00001 )
{
s+=1/n;
t++;
n=n*t;
}
printf("%f,n=%d\n",s,t);
return 0;
}

解法三:

#include<stdio.h>
void main()
{
int i=1,j=1;
float e=1.0,k;
do{
j=i*j;
k=1.0/j;
e=e+k;
i++;
}while(k>1e-5);/*判断误差是否小于给定的误差限E=0.00001 */
printf("%f,n=%d\n",e,i);
}
  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C/C++期末复习资料大汇总 一、内容概述 在本次上传中,我们为您精心整理了关于C/C++的期末复习资料。这些资料涵盖了从基础知识到进阶概念,旨在帮助您全面复习C/C++的相关内容。无论是准备期末考试还是为大作业做准备,这份资料都将为您的学习提供有力的支持。 、资料详解 基础知识篇:针对C/C++的语法、数据类型、运算符等内容进行了详细的梳理,帮助您打好扎实的基础。 进阶概念篇:深入探讨了指针、函数、文件操作等进阶知识点,为您进一步提升编程能力提供指导。 期末复习题及答案:包含各类期末考试的经典目及详细答案,让您熟悉考试型,把握考试重点。 期末大作业指南:针对C/C++的期末大作业,提供了从选到实现的全程指导,帮助您顺利完成作业。 实战案例集锦:收录了一些经典案例,让您在实践中掌握C/C++的应用技巧。 三、适用人群 这份复习资料适用于学习C/C++的各类人群,无论是初学者还是有一定编程基础的学生,都能从中获得收益。 四、使用建议 我们建议您先从基础知识开始复习,逐步深入到进阶概念。在掌握基本知识点后,结合复习题进行巩固练习,最后通过大作业和实战案例进一步提升自己的编程能力。 五、特别提示 为了更好地掌握C/C++的知识点,除了复习资料外,实际操作和练习也是非常关键的。希望这份资料能帮助您取得优异的成绩,也欢迎您在学习过程中提出宝贵的意见和建议。 最后,感谢您选择我们的复习资料,祝您学习顺利!
C/C++期末复习资料大汇总 一、内容概述 在本次上传中,我们为您精心整理了关于C/C++的期末复习资料。这些资料涵盖了从基础知识到进阶概念,旨在帮助您全面复习C/C++的相关内容。无论是准备期末考试还是为大作业做准备,这份资料都将为您的学习提供有力的支持。 、资料详解 基础知识篇:针对C/C++的语法、数据类型、运算符等内容进行了详细的梳理,帮助您打好扎实的基础。 进阶概念篇:深入探讨了指针、函数、文件操作等进阶知识点,为您进一步提升编程能力提供指导。 期末复习题及答案:包含各类期末考试的经典目及详细答案,让您熟悉考试型,把握考试重点。 期末大作业指南:针对C/C++的期末大作业,提供了从选到实现的全程指导,帮助您顺利完成作业。 实战案例集锦:收录了一些经典案例,让您在实践中掌握C/C++的应用技巧。 三、适用人群 这份复习资料适用于学习C/C++的各类人群,无论是初学者还是有一定编程基础的学生,都能从中获得收益。 四、使用建议 我们建议您先从基础知识开始复习,逐步深入到进阶概念。在掌握基本知识点后,结合复习题进行巩固练习,最后通过大作业和实战案例进一步提升自己的编程能力。 五、特别提示 为了更好地掌握C/C++的知识点,除了复习资料外,实际操作和练习也是非常关键的。希望这份资料能帮助您取得优异的成绩,也欢迎您在学习过程中提出宝贵的意见和建议。 最后,感谢您选择我们的复习资料,祝您学习顺利!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五一编程

程序之路有我与你同行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值