首页 > 编程语言 >程序修改题(11-20)

程序修改题(11-20)

时间:2024-09-14 20:50:45浏览次数:9  
标签:11 20 int ++ 程序修改 printf fun found include

第十一题

题目

给定程序MODI1. C中,函数fun的功能是:找出n的所有因子,统计因子的个数,并判断n

是否是”完数”。当一个数的因子之和恰好等于这个数本身时,就称这个数为”完数”。

例如: 6的因子包括1、2、3,而6=1+2+3,所以6是完数。

如果是完数,函数返回值为1,否则函数返回值为0。

数组a中存放的是找到的因子,变量k中存放的是因子的个数。

#include <stdio.h>
int  fun(int  n, int  a[], int  *k)
{   int  m=0, i, t;
    t = n;
/**********found**********/
    for( i=0; i<n; i++ )
       if(n%i==0)
       {  a[m]=i;  m++;  t=t - i;  }
/**********found**********/
    k=m;
/**********found**********/
    if ( t=0 )  return  1;
    else  return  0; 
}
main()
{  int  n , a[10], flag, i, k;
   printf("请输入一个整数:    ");  scanf("%d",&n);
   flag = fun( n, a, &k );
   if(flag)
   {  printf(" %d 是完数,其因子是:  ", n);
      for(i=0;i<k;i++)   printf("  %d ", a[i]);
      printf("\n");
   }
   else    printf(" %d 不是完数.\n ", n );
   getchar();
}

解析

for( i=1; i<n; i++ )

k=&m;

if ( t==0 )  return  1;

第十二题

题目

给定程序modi1.c中函数fun的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。

#include <stdio.h>
#include <string.h>
#define    N     80
int  fun(char  *s,  char  *t)
{  int  n;
   char  *p , *r;
   n=0;
   while ( *s )
   {  p=s;
/*********found**********/
      r=p;
      while(*r)
        if(*r==*p) {  r++;  p++;  }
        else  break;
/*********found**********/
      if(*r= 0)
        n++;
      s++;
   }
   return  n;
}
main()
{  char  a[N],b[N];    int   m;
   printf("\nPlease enter string a : "); gets(a);
   printf("\nPlease enter substring b : "); gets( b );
   m=fun(a, b);
   printf("\nThe result is :  m = %d\n",m);
  getchar();
}

解析

r=t;

if(*r== 0)

第十三题

题目

给定程序modi1.c中,函数fun的功能是:将一个由八进制数字组成的字符串转换为与其面值相等的十进制整数。规定输入的字符串最多只能包含5位8进制数字。

例如,若输入77777,则输出将是32767。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma warning (disable:4996)
int  fun( char *p )
{   int   n;
/**********found**********/
    n= *P-'o';
    p++;
    while( *p!=0 ) {
/**********found**********/
     	n=n*8+*P-'o';
	p++;
    }
    return  n;
}
main()
{   char   s[6];     int  i;   int   n;
    printf("Enter a string (Ocatal digits):  "); gets(s);
    if(strlen(s)>5){ printf("Error: String too longer !\n\n");exit(0); }
    for(i=0; s[i]; i++)
       if(s[i]<'0'||s[i]>'7')
       {  printf("Error: %c not is ocatal digits!\n\n",s[i]);exit(0); }
    printf("The original string:  "); puts(s);
    n=fun(s);
    printf("\n%s is convered to integer number: %d\n\n",s,n);
    getchar();
}

解析

n= *p-'0';

n=n*8+*p-'0';

第十四题

题目

#include <stdio.h>

double fun ( int m )
{  double   y = 1.0 ;
   int  i ;
/**************found**************/
   for(i = 2 ; i < m ; i++)
/**************found**************/
      y -= 1 /(i * i) ;
   return( y ) ;
}

main( )
{  int n = 5 ;

   printf( "\nThe result is %lf\n", fun ( n ) ) ;
  getchar();
}

解析

for(i = 2 ; i <= m ; i++)

y -= 1.0 /(i * i) ;

第十五题

题目

给定程序MODI1. C中函数fun的功能是:从低位开始依次取长整型变量s中奇数位上的数,构成一个新数放在t中(注意:位置从0开始计算)。

例如:输入: 12345678, 则输出: 1357

输入: 123456789, 则输出: 2468

#include <stdio.h>
#pragma warning (disable:4996)
void fun (long s, long *t)
{   long sl = 10;
    s /= 10;
/**********found**********/
    *t = s / 10;
    while(s > 0) {
        s = s / 100;
/**********found**********/
        t = s % 10 * sl + t;
/**********found**********/
        sl /= 10;
    }
}

main()
{   long s, t;
    printf("\nPlease enter long number:");
    scanf("%ld", &s); fun(s, &t);
    printf("The result is: %ld\n", t);
}

解析

*t = s % 10;

*t = s % 10 * sl + *t;

sl *= 10;

第十六题

题目

给定程序modi1.c中的函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域赋0到m-1的值。

#include <stdio.h>
#include <stdlib.h>
typedef  struct  aa
{  int  data;
   struct  aa  *next;
} NODE;
NODE *Creatlink(int  n, int  m)
{  NODE  *h=NULL, *p, *s;
   int  i;
/**********found***********/
   p=(NODE )malloc(sizeof(NODE));
   h=p;
   p->next=NULL;
   for(i=1; i<=n; i++)
   {  s=(NODE *)malloc(sizeof(NODE));
      s->data=rand()%m;      s->next=p->next;
      p->next=s;             p=p->next;
   }
/**********found***********/
   return  p;
}
outlink(NODE  *h)
{  NODE  *p;
   p=h->next;
   printf("\n\nTHE  LIST :\n\n  HEAD ");
   while(p)
   {  printf("->%d ",p->data);
      p=p->next;
   }
   printf("\n");
}
main()
{  NODE  *head;
   head=Creatlink(8,22);
   outlink(head);
  getchar();
}

解析

p=(NODE *)malloc(sizeof(NODE));

void outlink(NODE  *h)

第十七题

题目

给定程序modi1.c中函数fun的功能是:将s所指字符串中的字母转换为按字母序列的后续字母(但Z转换为A,z转换为a),其它字符不变。

#include <stdio.h>
#include <ctype.h>
void  fun (char  *s)
{
/**********found***********/
  while(*s!='@')
  {  if(*s>='A' && *s<='Z' || *s>='a' && *s<='z')
     {  if(*s=='Z')  *s='A';
        else if(*s=='z')  *s='a';
        else              *s += 1;
     }
/**********found***********/
     (*s)++;
  }
}
main()
{  char  s[80];
   printf("\n  Enter a string with length < 80.  :\n\n  "); gets(s);
   printf("\n  The  string :  \n\n  ");  puts(s);
   fun ( s );
   printf ("\n\n  The  Cords :\n\n  ");  puts(s);
   getchar();
}

解析

while(*s!='\0')

*s++;

分析

在C语言中,`s++`、`(*s)++`、`*(s++)` 这些表达式涉及到指针和递增运算符的使用,它们的行为略有不同。为了解释它们的区别,我们先假设有一个指针 `s` 指向一个整数数组。下面是这些表达式的含义:

1. `s++`:这是后缀递增运算符。它首先返回指针 `s` 当前的值(即它指向的地址),然后 `s` 的值增加一个元素的大小。这意味着指针 `s` 会移动到下一个元素的位置。例如,如果 `s` 指向数组的第一个元素,`s++` 之后 `s` 将指向数组的第二个元素。

2. `(*s)++`:这里首先对 `s` 进行解引用,得到 `s` 指向的值,然后对这个值使用前缀递增运算符。这意味着 `s` 指向的当前元素的值会增加1。`s` 指针本身的位置不会改变。

3. `*(s++)`:这是前缀递增运算符与解引用的组合。首先,`s++` 会返回 `s` 当前的值(即它指向的地址),然后 `s` 的值增加一个元素的大小。但是,由于这里使用了 `*` 操作符,它会对返回的地址进行解引用,即返回 `s` 指向的当前元素的值。所以,这个表达式会返回 `s` 递增前的当前元素的值,而 `s` 指针本身会移动到下一个元素。

举个例子,假设有一个整数数组 `int arr[] = {1, 2, 3, 4};` 和一个指针 `int *s = arr;`,那么:

- `s++` 后,`s` 指向 `arr[1]`(即值2),表达式的值是 `arr[0]` 的地址。
- `(*s)++` 后,`s` 仍然指向 `arr[0]`,但是 `arr[0]` 的值变为2。
- `*(s++)` 后,表达式的值是 `arr[0]` 的值(即1),而 `s` 指向 `arr[1]`。

这些表达式在实际编程中可能会导致混淆,因此使用时需要格外小心。

第十八题

题目

给定程序MODI1. C中,函数fun的功能是:在有n名学生,2门课成绩的结构体数组std中,计算出第1门课程的平均分,作为函数值返回。

例如:主函数中给出了4名学生的数据,

则程序运行的结果为:第1门课程的平均分是: 76. 125000

#include  <stdio.h>
typedef  struct
{  char  num[8];
  double  score[2];
}STU ;
double fun(STU  std[], int  n)
{  int   i;
/**********found**********/
   double  sum ;
/**********found**********/
   for(i=0; i<2 ; i++)
/**********found**********/
      sum += std[i].score[1]; 
   return  sum/n;
}
main()
{  STU  std[ ]={ "N1001", 76.5,82.0 ,"N1002", 66.5,73.0, 
              "N1005", 80.5,66.0,"N1006", 81.0,56.0 };
   printf("第1门课程的平均分是:%lf\n", fun(std,4) );
   getchar();
}

解析

   double  sum = 0.0;
   for(i=0; i<n ; i++)
   sum += std[i].score[0];

第十九题

题目

给定程序MODI1. C中,函数fun将字符串s1和s2交叉合并形成新字符串s3,合并方法为:先取s1的第1个字符存入s3,再取s2的第1个字符存入s3,以后依次类推;若s1和s2的长度不等时,较长字符串多出的字符顺序放在新生成的s3后。

例如:当s1为: "123456789",s2为: " abcdefghijk”时,

输出结果应该是: 1a2b3c4d5e6f7g8h9ijk

#include <stdio.h> 
#include <string.h> 
#pragma warning (disable:4996)
void fun( char *s1, char *s2, char *s3)
{   int i,j;
/**********************found***********************/
	for(i = 0, j = 0; (s1[i] != '\0') && (s2[i] != '\0'); i++, j = j + 1)  
	{   	s3[j] = s1[i];   
		s3[j+1] = s2[i];   
	}    
	if (s2[i] != '\0')  
	{   	for(; s2[i] != '\0'; i++, j++)   
/**********************found***********************/
		     s3[i] = s2[j];  
	}   
	else if (s1[i] != '\0')  
	{   for(; s1[i] != '\0'; i++, j++)       
			s3[j] = s1[i];
	}
/**********************found***********************/
	s3[j-1] = '\0';
}
void main() 
{  	char s1[128], s2[128], s3[255];  
	printf("Please input string1:"); 
	gets(s1);   
	printf("Please input string2:");  
	gets(s2);    
	fun(s1,s2,s3);
	printf("string:%s\n", s3);   
} 

解析

s3[++j] = s2[i];

s3[j] = s2[i]; 

s3[++j] = '\0';

第二十题

题目

给定程序MODI1. C中,调用fun函数输出字符串,当奇数次调用时要求把字符串中的小写字母转换成大写字母,偶数次调用时按输入字符串的逆序输出字符串。

#include   <stdio.h>
#include   <string.h>
#include   <ctype.h>
#pragma warning (disable:4996)
void fun( char  *s )
{  int  i;
/**********************found***********************/
   Static  int  n = 1;   
   if ( n++ %2 )
/**********************found***********************/
      for(i=0;i<=strlen(s);i++)    
         printf("%c", islower(s[i]) ? toupper(s[i]) : s[i]);
   else
/**********************found***********************/
      for (i = strlen(s)-1; i>0; i--)   
         printf("%c", s[i]);
}
main( )
{  int  i;
   char s[] = "Hello, C Programmer";
   for (i=0; i<5; i++) {  fun(s);    printf("\n");   }
}

解析

static  int  n = 1;

for(i=0;i<strlen(s);i++)

for (i = strlen(s)-1; i>=0; i--)

标签:11,20,int,++,程序修改,printf,fun,found,include
From: https://blog.csdn.net/2401_82772407/article/details/142258688

相关文章

  • [BJDCTF2020]Cookie is so stable
    首先这题flag模块有个登录页面抓包可以看到user=123,最后会返回hello123,这里就很像ssti注入,输入user={{2*3}}最后也是返回成功了,而且处理器是php,常见模块有:twig,smarty,blade输入user={{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}}......
  • 高级java每日一道面试题-2024年9月09日-数据库篇-事务提交后数据仍然没有持久化,可能的
    如果有遗漏,评论区告诉我进行补充面试官:事务提交后数据仍然没有持久化,可能的原因是什么?我回答:在Java高级面试中,讨论事务提交后数据仍然没有持久化的问题是一个很好的切入点,可以帮助考察候选人对事务管理、持久化机制以及潜在的编程和配置错误的理解。下面详细解释可能......
  • 高级java每日一道面试题-2024年9月08日-前端篇-JS的执行顺序是什么样的?
    如果有遗漏,评论区告诉我进行补充面试官:JS的执行顺序是什么样的?我回答:JavaScript的执行顺序是由其特殊的执行环境所决定的。JS的执行环境包括全局执行环境、函数执行环境和eval执行环境。在这些环境中,变量和函数声明会被提升(hoisting),而变量赋值和函数调用则按照......
  • 2024-09-14:用go语言,给定一个正整数数组 nums,定义一个加密函数 encrypt(x),其将一个整数
    2024-09-14:用go语言,给定一个正整数数组nums,定义一个加密函数encrypt(x),其将一个整数x的每一位数字都替换为x中的最大数字,然后返回加密后的数字。例如,encrypt(523)会返回555,encrypt(213)会返回333。现在需要计算数组中所有元素加密后的和,然后返回这个和。输入:nums=[10,2......
  • 「数学::质数」埃氏筛|欧拉筛(埃拉托斯特尼筛法|线性筛法)/ LeetCode 204(C++)
    目录概述1.埃氏筛思路复杂度Code2.欧拉筛(线性筛)思路复杂度Code总结概述上一节我们介绍了对判断一个数是否为质数的方法:「数学::质数」试除法/LuoguP5736(C++)那如果我们期望输出一个范围内的所有质数,使用试除法的时间复杂度是n√n,怎么办呢?LeetCode204:给定整......
  • [BJDCTF2020]Mark loves cat
    这题进去是一个网页,最后发现没有什么东西,最后查看源码发现,在源码的最后输出了一个dog这里就断定肯定存在一些隐藏的文件,最后通过kali扫描也是发现了一些.git文件,然后就想到了git源码泄露,但是不知道为什么我的扫描不出,就只好在网上找了大佬的代码了index.php<?phpinclude'......
  • 2024年开发工具推荐(全网最全)
    为大家整理了些一些可以方便大家开发或者工作使用的工具。1.VisualStudio官网链接:https://visualstudio.microsoft.com/zh-hans/建议使用专业版VisualStudio作为一个全功能的集成开发环境,提供了强大的代码编写、调试、测试、版本控制等一体化支持,特别适合大型项目和......
  • 203 Introducing Getters - A Better Way of Getting Data
    示例1、main.js中添加gettersimport{createApp}from'vue';import{createStore}from'vuex';importAppfrom'./App.vue';conststore=createStore({state(){return{counter:0,};},mutations:{......
  • 201 Introducing Mutations - A Better Way of Changing Data
    在Vue中,Mutations是Vuex状态管理模式中的重要组成部分。Mutations主要用于更改Vuex中的状态。它提供了一种集中且规范的方式来修改应用的全局状态数据。每个Mutation都是一个函数,函数接收当前的状态作为第一个参数,通过对状态的直接修改来实现状态的变更。Mutatio......
  • 最新! Sagemath Windows 平台最新安装教程 2024
    SageMath安装指南:Windows平台最新安装方法(Sage版本为最新10.4)本文虽然为AI写的(还只有文字),但是截止发文的日期,本人并未在中文互联网上搜索到如何安装sagemath的最新版10.4。所有的方法中,需要Cygwin的exe直装的Sagemath9.3版的;而ubuntu直接apt安装的Sagemath版本为9.5(如果是20.......