1.輸入整型數(shù)組求數(shù)組的最小數(shù)和最大數(shù)之和,例如輸入1,2,3,4則輸出為5,當(dāng)輸入只有一個(gè)數(shù)的時(shí)候,則最小數(shù)和最大數(shù)都是該數(shù),例如只輸入1,則輸出為2;另外數(shù)組的長度不超過50
參考代碼:
#include
main()
{
int num[50]={0};
int i,n;
printf(“請(qǐng)輸入整型數(shù)組的長度(1~50):”);
scanf(“%d”,&n);
printf(“請(qǐng)輸入整型數(shù)組的元素:”);
for (i=0;i
{
scanf(“%d”,&num[i]);
}
int min_num=num[0];
int max_num=num[0];
for(int j=0;j
{
if(max_num
max_num=num[j];
else if(min_num>num[j])
min_num=num[j];
}
int sum=min_num+max_num;
printf(“數(shù)組中最大與最小值之和:%d\n”,sum);
return 0;
}
2.求兩個(gè)長長整型的數(shù)據(jù)的和并輸出,例如輸入1233333333333333 。。。 3111111111111111111111111.。。。,則輸出。。。。
#include
#include
#include
main()
{
char *num1,*num2; //兩個(gè)長長整型數(shù)據(jù)
char *sum;
// int temp;
int len_num1,len_num2; // 兩個(gè)長長整型數(shù)據(jù)的長度
int len_max,len_min;
num1=(char*)malloc(sizeof(char));
num2=(char*)malloc(sizeof(char));
printf(“輸入兩個(gè)長長整型數(shù)據(jù):”);
scanf(“%s”,num1);
printf(“輸入兩個(gè)長長整型數(shù)據(jù):”);
scanf(“%s”,num2);
len_num1=strlen(num1);
len_num2=strlen(num2);
len_max=(len_num1>=len_num2)? len_num1:len_num2;
len_min=(len_num1<=len_num2)? len_num1:len_num2;
int len_max1=len_max;
sum=(char*)malloc(sizeof(char)*len_max);
memset(sum,0×00,len_max+1);//切忌初始化
for(;len_num1>0&&len_num2>0;len_num1–,len_num2–)
{
sum[len_max--]=((num1[len_num1-1]-’0′)+(num2[len_num2-1]-’0′));
}
if(len_num1>0)
{
sum[len_max--]=num1[len_num1 - 1 ]-’0′;
len_num1–;
}
if(len_num2>0)
{
sum[len_max--]=num1[len_num2 - 1]-’0′;
len_num2–;
}
for(int j=len_max1;j>=0;j–) //實(shí)現(xiàn)進(jìn)位操作
{
// temp=sum[j]-’0′;
if(sum[j]>=10)
{
sum[j-1]+=sum[j]/10;
sum[j]%=10;
}
}
char *outsum=(char*)malloc(sizeof(char)*len_max1);
j=0;
while(sum[j]==0) //跳出頭部0元素
j++;
for(int m=0;m
outsum[m]=sum[j]+’0′;
outsum[m]=’\0′;
printf(“輸出兩長長整型數(shù)據(jù)之和:%s\n”,outsum);
return 0;
}
3.通過鍵盤輸入一串小寫字母(a~z)組成的字符串。請(qǐng)編寫一個(gè)字符串過濾程序,若字符串中出現(xiàn)多個(gè)相同的字符,將非首次出現(xiàn)的字符過濾掉。
比如字符串”abacacde”過濾結(jié)果為”abcde”。
要求實(shí)現(xiàn)函數(shù):
void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);
【輸入】 pInputStr:輸入字符串
lInputLen:輸入字符串長度
【輸出】 pOutputStr:輸出字符串,空間已經(jīng)開辟好,與輸入字符串等長;
參考代碼:
#include
#include
#include
void stringFilter(const char *p_str, long len, char *p_outstr)
{
int array[256]={0};
const char *tmp = p_str;
for(int j=0;j
{
if(array[tmp[j]]==0)
*p_outstr++= tmp[j];
array[tmp[j]]++;
}
*p_outstr = ‘\0′;
}
void main()
{
char *str = “cccddecc”;
int len = strlen(str);
char * outstr = (char *)malloc(len*sizeof(char));
stringFilter(str,len,outstr);
printf(“%s\n”,outstr);
free(outstr);
outstr = NULL;
}
5.通過鍵盤輸入100以內(nèi)正整數(shù)的加、減運(yùn)算式,請(qǐng)編寫一個(gè)程序輸出運(yùn)算結(jié)果字符串。
輸入字符串的格式為:”操作數(shù)1 運(yùn)算符 操作數(shù)2″,”操作數(shù)”與”運(yùn)算符”之間以一個(gè)空格隔開。
補(bǔ)充說明:
1. 操作數(shù)為正整數(shù),不需要考慮計(jì)算結(jié)果溢出的情況。
2. 若輸入算式格式錯(cuò)誤,輸出結(jié)果為”0″。
要求實(shí)現(xiàn)函數(shù):
void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);
【輸入】 pInputStr: 輸入字符串
lInputLen: 輸入字符串長度
【輸出】 pOutputStr: 輸出字符串,空間已經(jīng)開辟好,與輸入字符串等長;
#include
#include
#include
void arithmetic(const char *input, long len, char *output)
{
char s1[10];
char s2[10];
char s3[10];
int cnt = 0;
int len_input=strlen(input);
for(int i=0;i
{
if(input[i]==’ ‘)
cnt++;
}
if(cnt!=2)
{
*output++ = ’0′;
*output = ‘\0′;
return;
}
sscanf(input,”%s %s %s”,s1,s2,s3);
if(strlen(s2)!=1||(s2[0]!=’+'&&s2[0]!=’-'))
{
*output++ = ’0′;
*output = ‘\0′;
return;
}
int len_s1=strlen(s1);
for(i=0;i
{
if(s1[i]<’0′||s1[i]>’9′)
{
*output++ = ’0′;
*output = ‘\0′;
return;
}
}
int len_s3=strlen(s3);
for(i=0;i
{
if(s3[i]<’0′||s3[i]>’9′)
{
*output++ = ’0′;
*output = ‘\0′;
return;
}
}
int x = atoi(s1);
int y = atoi(s3);
if(s2[0]==’+')
{
int result = x+y;
itoa(result,output,10);
}
else if(s2[0]==’-')
{
int result = x-y;
itoa(result,output,10);
}
else
{
*output++ = ’0′;
*output = ‘\0′;
return;
}
}
void main()
{
char str[] = {“10 – 23″};
char outstr[10];
int len = strlen(str);
arithmetic(str,len,outstr);
printf(“%s\n”,str);
printf(“%s\n”,outstr);
}
6.一組人(n個(gè)),圍成一圈,從某人開始數(shù)到第三個(gè)的人出列,再接著從下一個(gè)人開始數(shù),最終輸出最終出列的人
(約瑟夫環(huán)是一個(gè)數(shù)學(xué)的應(yīng)用問題:已知n個(gè)人(以編號(hào)1,2,3…n分別表示)圍坐在一張圓桌周圍。從編號(hào)為k的人開始報(bào)數(shù),數(shù)到m的那個(gè)人出列;他的下一個(gè)人又從1開始報(bào)數(shù),數(shù)到m的那個(gè)人又出列;依此規(guī)律重復(fù)下去,直到圓桌周圍的人全部出列。)
#include
#include
#include
#include
typedef struct Node
{
int data;
struct Node *next;
}LinkList;
LinkList *create(int n)
{
LinkList *p,*q,*head;
int i=1;
p=(LinkList*)malloc(sizeof(LinkList));
p->data=i;
head=p;
for(i=1;i<=n;i++)
{
q=(LinkList*)malloc(sizeof(LinkList));
q->data=i+1;
p->next=q;
p=q;
}
p->next=head; //使鏈表尾連接鏈表頭,形成循環(huán)鏈表
return head;
free(p);
p=NULL;
free(q);
q=NULL;
}
void deletefun(LinkList *L,int m)
{
LinkList *p,*q,*temp;
int i;
p=L;
while(p->next!=p)
{
for(i=1;i
{
q=p;
p=p->next;
}
printf(“%5d”,p->data);
temp=p;
q->next=p->next;
p=p->next;
free(temp);
}
printf(“%5d\n”,p->data);
}
int main()
{
int n=7,m=3;
LinkList *head1;
head1=create(n);
deletefun(head1,m);
return 0;
}
7..輸入一串字符,只包含”0-10″和”,”找出其中最小的數(shù)字和最大的數(shù)字(可能不止一個(gè)),輸出最后剩余數(shù)字個(gè)數(shù)。如輸入 “3,3,4,5,6,7,7″
#include
#include
#include
void main()
{
char str[100];
printf(“輸入一組字符串:\n”);
scanf(“%s”,&str);
int len=strlen(str);
int array[100];
int count=0;
for(int i=0;i
{
if(str[i]>=’0′&&str[i]<=’9′)
array[count++]=str[i]-’0′;
}
array[count]=’\0′;
int result=count;
int min=array[0];
int max=array[0];
for(int j=0;j
{
if(max
max=array[j];
else if(min>array[j])
min=array[j];
}
for(int k=0;k
{
if(array[k]==min)
result–;
if(array[k]==max)
result–;
}
printf(“%d\n”,result);
}