c语言-求大侠帮忙:C语言程序设计---编程题(以下所有题目程序应是非递归的)

问题描述

求大侠帮忙:C语言程序设计---编程题(以下所有题目程序应是非递归的)
  1. 编写一个函数insert(s1,s2,ch),实现在字符串s1中的指定字符ch位置处插入字符串s2.
  2. 学校工会组织活动,要求有8名教师参加,这8名教师将分别从A学院3名教师、B学院5名教师、C学院6名教师中任意抽取,且其中必须有B学院的教师参加,请编程输出所有可能的方案
  3. 已知在C盘根目录下存有文本文件“file1.txt”,编程统计文件“file1.txt”中每个字母字符和每个数字字符出现的频率,在屏幕上显示统计结果,并将统计结果写入磁盘文件“file2.txt”中
  4. 输入一个字符串,内有数字和非数字字符,如:AS234fgh456d 17968x7654,将其中连续的数字作为一个整体,依次存放到一数组a中,例如234存入a[0],456存入a[1],…,编程统计其共有多少个整数,并输出这些数。要求:
    1) 编写函数完成将字符串中连续的数字作为一个整体,依次存放到一数组a中
    2) 在主函数中完成数据的输入与结果的输出
  5. 按由大到小的顺序对一个含有N个整型数据的数组A[N]进行排序,利用如下改进的选择排序方法:第一次选出最大者存入A[1],第二次选出最小者存入A[N],第三次选出次大者存入A[2],第四次选出次小者存入A[N-1],如此大小交替地选择,直到排序完成。要求:
    1) 编写函数sort完成排序
    2) 在主函数中完成数据的输入与结果的输出
  6. 已知用两个单链表分别存储的两个字符串,均按递增次序排列。编程实现将这两个单链表归并为一个按数据域值递减次序排列的单链表。要求:
    1) 单链表中每个结点只存放一个字符
    2) 利用原链表中的结点空间存储归并后的单链表,不另外生成新链表
    3) 单链表的建立写一函数create实现
    4) 两个链表归并过程写一函数sub实现
    5) 输出结果写一函数output实现
    6) 主函数调用这三个函数完成程序功能

解决方案

#include "string.h"
#include
int main()
{
//VC++
FILE *fp = NULL;
try
{

    fopen_s(&fp,"c:\file1.txt","r");
}
catch (...)
{
    if (NULL != fp)
    {
        fclose(fp);
        printf("打开文件失败!n");
        getchar();
        return -1;
    }
}
if (NULL == fp)
{
    fclose(fp);
    printf("打开文件失败!n");
    getchar();
    return -1;
}

fseek(fp,0,SEEK_END);
long lFileSize = ftell(fp);
fseek(fp,0,SEEK_SET);

unsigned char *pFileBuff = (unsigned char *)malloc(lFileSize + 1);
if (NULL == pFileBuff)
{
    fclose(fp);
    printf("申请内存失败!n");
    getchar();
    return -1;
}

memset(pFileBuff,0x00,lFileSize + 1);
fread(pFileBuff,lFileSize,1,fp);

fclose(fp);

unsigned char arr[256] = {0};
int size = 0;
for (;pFileBuff[size];)
{
    if (('0' <= pFileBuff[size] && pFileBuff[size] <= '9') || ('A' <= pFileBuff[size] && pFileBuff[size] <= 'Z')
        || ('a' <= pFileBuff[size] && pFileBuff[size] <= 'z'))
    {
        arr[pFileBuff[size]]++;
    }
    size++;
}

if (NULL != pFileBuff)
{
    free(pFileBuff);
    pFileBuff = NULL;
}

//创建文件
try
{

    fopen_s(&fp,"c:\file2.txt","w+");
}
catch (...)
{
    if (NULL != fp)
    {
        fclose(fp);
        printf("创建文件失败!n");
        getchar();
        return -1;
    }
}
if (NULL == fp)
{
    fclose(fp);
    printf("创建文件失败!n");
    getchar();
    return -1;
}

char buff[1024];
for (unsigned char c = '0'; c<= '9';c++)
{
    sprintf_s(buff,"%c出现的频率为%d/%d",c,arr[c],size);
    fwrite(buff,strlen(buff),1,fp);
    fwrite("n",1,1,fp);
    fseek(fp,0,SEEK_END);
    printf("%c出现的频率为%d/%dn",c,arr[c],size);
}
for (unsigned char c = 'A'; c<= 'Z';c++)
{
    sprintf_s(buff,"%c出现的频率为%d/%d",c,arr[c],size);
    fwrite(buff,strlen(buff),1,fp);
    fwrite("n",1,1,fp);
    fseek(fp,0,SEEK_END);
    printf("%c出现的频率为%d/%dn",c,arr[c],size);
}
for (unsigned char c = 'a'; c<= 'z';c++)
{
    sprintf_s(buff,"%c出现的频率为%d/%d",c,arr[c],size);
    fwrite(buff,strlen(buff),1,fp);
    fwrite("n",1,1,fp);
    fseek(fp,0,SEEK_END);
    printf("%c出现的频率为%d/%dn",c,arr[c],size);
}

fclose(fp);

getchar();
return 0;

}

解决方案二:

#include
#include "string.h"

bool isNumber(char c)
{
return '0' <= c && c <= '9';
}

int foo(char *pStr,int **pOutput,int &iLen)
{
if (NULL == pStr || NULL == pOutput)
{
return -1;
}

char *pTemp = pStr;
iLen = 0;
while (*pTemp)
{
    while (*pTemp && !isNumber(*pTemp))
    {
        pTemp++;
    }
    iLen++;
    while (*pTemp && isNumber(*pTemp))
    {
        pTemp++;
    }
}

*pOutput = (int *)malloc(iLen * sizeof(int));
int i = 0;
pTemp = pStr;
while (*pTemp)
{
    while (*pTemp && !isNumber(*pTemp))
    {
        pTemp++;
    }
    int n = 0;
    bool bFlag = false;
    while (*pTemp && isNumber(*pTemp))
    {
        n *= 10;
        n += (*pTemp - '0');
        pTemp++;
        bFlag = true;
    }
    if (bFlag)
    {
        (*pOutput)[i++] = n;
    }

}
return 0;

}

int main()
{

int *arr;
int iLen;
if (0 == foo("AS234fgh456d 17968x7654",&arr,iLen))
{
    printf("总共有%d个数n",iLen);
    for (int i = 0;i < iLen;i++)
    {
        printf("第%d个为%dn",i + 1,arr[i]);
    }
    if (iLen > 0)
    {
        free(arr);
        arr = NULL;
    }
}
;

getchar();
return 0;

};

解决方案三:

(1)
#include
#include

#define N 100

char* insert(char* s1,char* s2,int ch){

int a1 = strlen(s1);
int a2 = strlen(s2);
for(int i = ch, j = 0; i< a1+a2-ch; i++,j++){
    s1[i+a2] = s1[i];
    s1[i] = s2[j];
}
return s1;

}
int main(void)
{
char ss1[N*2] = {0};
char ss2[N*2] = {0};

scanf("%s", &ss1);
scanf("%s", &ss2);
insert(ss1, ss2, 5);
printf("%s ", ss1);

return 0;

}

解决方案四:

http://zhidao.baidu.com/link?url=kf1AXVG-lWE6fqYlsv1Glxw6UlbgAAmQHO6NJBU8L2Am89xMJMARkTp3HZIBOsRD03Xn4DShqFLImv4M00ilmn4FehgL2YHsCGf21x9TyPq

解决方案五:

#include "string.h"
#include
/************************************************************************/
/* 函数功能:实现在字符串s1中的指定字符ch位置处插入字符串s2
/* 输入参数:s1 源字符串
/* s2 插入的字符串
/* ch 指定字符
/* 输出参数:无
/* 返回值:新的字符串的地址,外部记得释放
/************************************************************************/
char *insert(const char *s1,const char *s2,char ch)
{
//我的理解是s1是不可变的,因此我申请了一个堆

if (NULL == s1 && NULL == s2)
{
    return NULL;
}

int iCount = 0;//看有多少个ch
int iS1Len = 0;//s1长度
for (;'' != s1[iS1Len];)
{
    if (ch == s1[iS1Len])
    {
        iCount++;
    }
    iS1Len++;
}

if (0 == iCount || 0 == iS1Len)//如果没有ch,或者s1长度为0
{
    return NULL;
}

int iS2Len = strlen(s2);//s2长度
if (0 == iS2Len)
{
    return NULL;
}

char *pRet = (char*)malloc(iS1Len + iCount * (iS2Len - 1) + 1);//开辟一个内存
char *pDst = pRet;

//遍历s1,遇到ch换成s2
while ('' != *s1)
{
    if (ch == *s1)
    {
        for (int i = 0;i < iS2Len;i++)
        {
            *pDst++ = s2[i];
        }
        s1++;
    }
    else
    {
        *pDst++ = *s1++;
    }

}
*pDst = '';
return pRet;

}

int main()
{
char *pRet = insert("a1234a1","bb",'a');
if (NULL != pRet)
{
printf("%s",pRet);
free(pRet);
pRet = NULL;
}

getchar();
return 0;

}

解决方案六:

int main()
{

int i = 0;
int iCount = 1;
for (;i <= 3;i++)
{
    int j = 1;
    for (;j <= 5;j++)
    {
        int k = 0;
        for (;k <= 6;k++)
        {
            if (8 == (i + j + k ))
            {
                printf("第%d种方案:A学院%d名,B学院%d名,C学院%d名n",iCount++,i,j,k);
            }

        }
    }
}
getchar();
return 0;

}

解决方案七:

第五个,网上随便找个排序方法(冒泡,选择,插入,希尔,堆,快排,归并)就行了

解决方案八:

#include
#include "string.h"

struct ListNode
{
ListNode *pNext;
char cValue;
};

int create(ListNode *&pHead,const char *pStr)
{
if (NULL == pStr || '' == *pStr)
{
return -1;
}

pHead = (ListNode *)malloc(sizeof(ListNode));
pHead->pNext = NULL;
pHead->cValue = *pStr;
pStr++;
while (*pStr)
{
    ListNode *pTemp = pHead;
    ListNode *pTemp2 = pHead;
    while (NULL != pTemp)
    {
        if (pTemp->cValue >= *pStr)
        {
            break;
        }
        pTemp2 = pTemp;
        pTemp = pTemp->pNext;
    }
    ListNode *pNew = (ListNode *)malloc(sizeof(ListNode));
    pNew->cValue = *pStr;
    if (pHead == pTemp)
    {
        pNew->pNext = pHead;
        pHead = pNew;
        if (pHead->cValue > pHead->pNext->cValue)
        {
            pHead->cValue = pHead->pNext->cValue;
            pHead->pNext->cValue = *pStr;
        }
    }
    else if (NULL == pTemp2->pNext)
    {
        pTemp2->pNext = pNew;
        pNew->pNext = NULL;
    }
    else
    {
        pNew->pNext = pTemp2->pNext;
        pTemp2->pNext = pNew;
    }
    pStr++;
}

return 0;

}

void output(ListNode *pHead)
{
if (NULL == pHead)
{
return;
}
while (NULL != pHead)
{
printf("%c",pHead->cValue);
pHead = pHead->pNext;
}
printf("n");
}

int sub(ListNode *pHead1,ListNode *pHead2,ListNode *&pHead)
{
if (NULL == pHead1 || NULL == pHead2)
{
return -1;
}
ListNode *pTail = NULL;
if (pHead1->cValue < pHead2->cValue)
{
pHead = pHead1;
pHead1 = pHead1->pNext;
pTail = pHead;
}
else
{
pHead = pHead2;
pHead2 = pHead2->pNext;
pTail = pHead;
}

while (NULL != pHead1 && NULL != pHead2)
{
    if (pHead1->cValue < pHead2->cValue)
    {
        pTail->pNext = pHead1;
        pTail = pHead1;
        pHead1 = pHead1->pNext;
    }
    else
    {
        pTail->pNext = pHead2;
        pTail = pHead2;
        pHead2 = pHead2->pNext;
    }
}

while (NULL != pHead1)
{
    pTail->pNext = pHead1;
    pTail = pHead1;
    pHead1 = pHead1->pNext;
}
while (NULL != pHead2)
{
    pTail->pNext = pHead2;
    pTail = pHead2;
    pHead2 = pHead2->pNext;
}

pHead1 = pHead->pNext;
pHead2 = pHead;

while (NULL != pHead1)
{
    ListNode *pTemp = pHead1->pNext;
    pHead1->pNext = pHead;
    pHead = pHead1;
    pHead1 = pTemp;
}
pHead2->pNext = NULL;
return 0;

}

int main()
{

const int MAX_SIZE = 1024;
printf("请输入链表1(字符串长度不超过%d):n",MAX_SIZE);
char szBuff[MAX_SIZE] = {0};
if (0 == scanf_s("%s",&szBuff,sizeof (szBuff)))
{
    printf("输入的字符串不对n");
    getchar();
    return -1;
}
ListNode *pHead1 = NULL;
create(pHead1,szBuff);
printf("链表1为:");
output(pHead1);

printf("请输入链表2(字符串长度不超过%d):n",MAX_SIZE);
if (0 == scanf_s("%s",&szBuff,sizeof (szBuff)))
{
    printf("输入的字符串不对n");
    getchar();
    return -1;
}
ListNode *pHead2 = NULL;
create(pHead2,szBuff);
printf("链表2为:");
output(pHead2);

ListNode *pHead = NULL;
sub(pHead1,pHead2,pHead);
printf("n新链表为:");
output(pHead);

while (NULL != pHead)
{
    ListNode *pTemp = pHead->pNext;
    free(pHead);
    pHead = pTemp;
}

while (1);
return 0;

};

时间: 2024-09-17 03:58:52

c语言-求大侠帮忙:C语言程序设计---编程题(以下所有题目程序应是非递归的)的相关文章

c语言-C语言题程序第二个输出结果是124还是125呢?求大侠帮忙解释

问题描述 C语言题程序第二个输出结果是124还是125呢?求大侠帮忙解释 #includeint change(int *data){ return (*data)++;}main(){ int data=123; change(&data); printf(""%ddata); data=change(&data); printf(""%d""data); printf(""n"");}V

c语言-C语言将两个递增有序单链表归并为一个降序的单链表,求大侠帮忙看看

问题描述 C语言将两个递增有序单链表归并为一个降序的单链表,求大侠帮忙看看 #include #include #define N 8 typedef struct list { char c; struct list *next; } SLIST; SLIST *creat(char *a) { SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST)); for(i=0; i { q=(SLIST *)malloc(sizeof(SLI

代码-java 难题 求大侠帮忙。小弟谢过了

问题描述 java 难题 求大侠帮忙.小弟谢过了 求大虾帮帮忙. 由于我底子薄,最好能用java 代码帮我解决下. 各组 ,每组有不同月份的业绩. 一共两个for循环, for (i = 0; i<=组 ; i++) { for(j = 0 ;j< = 月份; j++) { 这里是循环到月份 的业绩.取得到当月业绩. } } 例如:一共四个组,四个月份.按月份划分, 我要算出每个月的所有组业绩之和. 一组:一月 100 .二月200 .三月300. 四月.400 二组:100 200 300

c#-C# IF语句求大侠帮忙了

问题描述 C# IF语句求大侠帮忙了 Tb_blacklist是数据库里的一个表然后下面是我写的IF语句这明显是错的,新手求帮忙 解决方案 c#--if语句c#中if语句C# bool true false 操作符重载,用在 if while等语句中 解决方案二: 参考这个: OracleConnection conn = null; try { conn = GetOracleConnection(); conn.Open(); OracleCommand cmd = new OracleCo

sql server创建存储过程初始化失败,不知道为什么,求大侠帮忙看看

问题描述 sql server创建存储过程初始化失败,不知道为什么,求大侠帮忙看看 CREATE PROCEDURE p_getLogFilter @account VARCHAR(20), @split VARCHAR(10) AS BEGIN DECLARE @splitlen INT, @au_id CHAR(50), @s VARCHAR(MAX), @cform VARCHAR(255), @dbname VARCHAR(200), @sqlstr NVARCHAR(MAX) --获取

c语言-求能帮忙改改迷宫的代码

问题描述 求能帮忙改改迷宫的代码 走用链栈走迷宫,我的代码如下.一直调试不成功,希望能求救 #include #include #define M 10 #define N 10 typedef struct stack_type{ struct block_type *top; }stack_type; typedef struct block_type{ int i,j; int di; struct block_type *next; }block_type; int mg[M+1][N+

c语言-求一个关于C语言中有关文件和链表的一个程序

问题描述 求一个关于C语言中有关文件和链表的一个程序 我们老师布置了一道题:有A和B两个文件夹,每个文件夹下面都有若干子目录.但是 不知道目录里面文件的类型和具体的文件数目.现在要创建一个C文件夹,对C文件夹 的要求是:(1)C文件夹下面子目录的文件名和文件长度是A的,打开的内容是B的( 打开之后只要内容是B的,不要求内容完整与否).(2)通过键入命令或是其他方式 C文件夹可以直接恢复到B文件夹.要求使用链表完成. 我们老师只把题目说了这些,他说对A.B文件夹的定义让我们自己讨论吧.能实现他所

c语言-求一道关于C语言概率计算题

问题描述 求一道关于C语言概率计算题 问题描述 生成n个∈[a,b]的随机整数,输出它们的和为x的概率. 输入格式 一行输入四个整数依次为n,a,b,x,用空格分隔. 输出格式 输出一行包含一个小数位和为x的概率,小数点后保留四位小数 样例输入 2 1 3 4 样例输出0.3333 数据规模和约定 对于50%的数据,n≤5. 对于100%的数据,n≤100,b≤100. (最好讲清一下思路) 解决方案 两个思路,一个是对n个[a,b]的数据求全组合,并且看其中和为x的数量,两者相除可以得到精确的

c语言-求问一个C语言字符指针的问题

问题描述 求问一个C语言字符指针的问题 #include void Initialize (char * a, char * b) { a[0] = 'T'; a[1] = 'h'; a[2] = 'i'; a[3] = 's'; a[4] = ' '; a[5] = 'i'; a[6] = 's'; a[7] = ' '; a[8] = 'A'; a[9] = ''; b = a; b[8] = 'B'; } #define ARRAY_SIZE 10 char a[ARRAY_SIZE];