triec語言
1. 求一個中級的c語言程序,要有詳細解釋。
這說的什麼啊,建議你提點要求。#include<stdio.h>
#define N 3
void main()
{
int n,a[1000],*p,*ps,i,tuichu=0,num=0;/*數組a用來存放狀態值,只有0和1,當元素為0時說明該人已經退出,為1是說明還在圈內。即對人進行編號,編完號後當每個人對應一個id,故a數組的容量大小為1000,輸入的人數應小於1000*。變數tuichu用來記錄退出的人數,變數num是用來做1到3的計數的,n是總人數*/
p=a; //p指向了數組a的首地址
ps=a; //ps指向了數組a的首地址
printf("請輸入人數<小於1000>:");
scanf("%d",&n);//輸入人數
for(i=0;i<n;i++,p++)//對數組a中的元素循環置1
*p=1;//
p=ps;//讓指針p重新指向數組a的首地址
while(tuichu!=n-1) //當退出人數為總人數-1時退出循環
{
if(*p==1) //如果數組a中的元素為1,即相對應id的人沒有退出,則num計數
num++;
if(num==N) /*如果計數變數的值為N時,則對相應數組的位置置0,對計數變數清零,退出人數加一*/ {
*p=0;
num=0;
tuichu++;
}
p++; //指針p指向當前所指的下一個元素
if(p==(ps+n)) /*當p指向數組的最後一個元素時,讓p重新指向數組a的首地址*/
p=ps;
}
p=ps;//指針p指向數組a的首地址
for(i=0;i<n;i++,p++)//循環找出最後一個數組元素為1的位置並輸出
{
if(*p==1)
{
printf("留下的最後一個人是第%d個\n",p-ps+1);
break;
}
}
}
上面的代碼是我給一個提問題的注釋的,你可以看看。
2. 一道c語言的問題 求大神幫忙 解答一下!!!!!
#include <stdio.h>
#include<math.h>
int main(int argc, const char * argv[])
{
double loan,rate,money;
int i,month;
scanf("%lf%lf",&loan,&rate);
for (i=5; i<=30; i++) {
month=12*i;
money=(loan*rate*(1+rate)*pow(1+rate, month))/(pow(1+rate, month)-1);
printf("還款年限:%d 月還款:%lf\n",i,money);
}
return 0;
}
是這樣么?
輸入10000 0.01
輸出:
還款年限:5 月還款:224.668922
還款年限:6 月還款:197.456944
還款年限:7 月還款:178.292601
……………………
3. 統計文本文件中英文單詞的出現次數用C語言
定義一個結構體數組,結構體裡面兩個元素,一個是該單詞的個數,一個是該單詞的拼寫
然後去讀文章,以非英文字母作判斷,截取單詞,然後和結構體數組比較,如果是新單詞則放入一個新結構體中,個數設為1,如果該單詞已存在,則把該結構體個數+1,最後比較個個結構的個數進行排序即可。
4. 關於C語言的問題:1 3 6 12 9 3 6 12 9 3 6 12 9,怎麼把循環的部分提取出來,並統計個數
需要用到Trie樹,但是我只用C#實現過。
5. c語言中輸入單詞 統計其在文本出現的次數
用string讀入,之後用字典樹trie的數據結構,trie的每個節點數據類型的struct中加一個計數的變數即可統計,之後再按順序輸出即可,時間復雜度理想狀態下是o(n),n是字母個數。=
=實在沒時間寫了,你要是不想自己寫,找個標準的trie一改就好了。。
6. c語言編程 實現ip地址查找 方法用二進制trie
不知道您有沒有學習過計算機網路。如果沒有,下面簡單介紹一下IP地址和掩碼。
IP地址是32位的,也就是4位元組。取值可以任意。
掩碼也是32位的,一般建議前面的位都為1,後面的位都為0。所以本題:
(1)只要是32位的都是有效的。
(2)判斷是否全1後面接全0.
(3)如果掩碼的前n位為1,那麼此IP所在網路全部有效IP地址是此IP地址的前n位不變,後面的位從全0到全1,比如IP地址為1.1.1.1掩碼為FFFF0000,那麼此IP地址所在網路的全部有效IP地址是從1.1.0.0到1.1.255.255。
(4)兩個IP地址都與掩碼進行二進制與,看得到的結果是否相同,如果相同則在同一子網中,否則不在同一子網中。這個用c很容易實現。
7. 求一個實現簡單的英漢詞典(30詞左右)c++的C語言程序
字典最快速的實現方法是trie tree。
這個樹是專門用來實現字典的。但是trie tree的刪除操作比較麻煩。用二叉查找樹可以實現,速度也可以很快。AVL tree只不過是平衡的二叉樹,在字典這個應用上沒有客觀的速度提升,因為字典不會產生極端化的二叉樹(鏈表)。
下面是我的二叉查找樹的代碼。二叉查找樹的優點是實現容易,而且它的inorder traverse既是按照字母順序的輸出。
//binary search tree, not self-balancing
//by Qingxing Zhang, Dec 28,2009. prep for google interview
#include <iostream>
using namespace std;
struct BST
{
int data;
BST *left;
BST *right;
};
//runtime: O(logn) on average, O(n) worst case
bool search(BST *&root, int key)//return false if the key doesn't exist
{
if(root==NULL)
return false;
if(key < root->data)
return search(root->left,key);
else if(key > root->data)
return search(root->right,key);
else
return true;
}
//runtime: O(logn)on average, O(n) worst case
bool insert(BST *&root, int key)//return false if the key already exists
{
if(root==NULL)
{
BST *node = new BST;
node->data = key;
node->left = node->right = NULL;
root = node;
return true;
}
else if(key < root->data)
return insert(root->left,key);
else if(key > root->data)
return insert(root->right,key);
else
return false;
}
//runtime:O(logn) on average, O(n) worst case
bool remove(BST *&root,int key)//return false if the key doesn't exist.
{
if(root==NULL)//no such key
return false;
else if(key < root->data)
return remove(root->left,key);
else if(key > root->data)
return remove(root->right,key);
else//node found
{
if((root->left==NULL)&&(root->right==NULL))//no child(leaf node)
{
BST *tmp = root;
root = NULL;
delete tmp;
}
else if((root->left==NULL)||(root->right==NULL))//one child
{
BST *tmp = root;
if(root->left==NULL)
root = root->right;
else
root = root->left;
delete tmp;
}
else//two children:replace node value with inorder successor and delete that node
{
BST *tmp = root->right;
while(tmp->left!=NULL)
tmp = tmp->left;
int tmpdata = tmp->data;
remove(root,tmpdata);
root->data = tmpdata;
}
return true;
}
}
//runtime:O(n)
void inorder(BST *&node)
{
if(node!=NULL)
{
inorder(node->left);
cout << node->data << " ";
inorder(node->right);
}
}
//runtime:O(n)
void preorder(BST *&node)
{
if(node!=NULL)
{
cout << node->data << " ";
preorder(node->left);
preorder(node->right);
}
}
//runtime:O(n)
void postorder(BST *&node)
{
if(node!=NULL)
{
postorder(node->left);
postorder(node->right);
cout << node->data << " ";
}
}
int main()
{
bool b;
BST *root = NULL;
b = insert(root,1);
b = insert(root,3);
b = insert(root,7);
b = insert(root,5);
b = insert(root,77);
b = insert(root,10);
b = insert(root,4);
b = insert(root,13);
//inorder
cout << "In-order:";
inorder(root);
cout << endl;
//preorder
cout << "Pre-order:";
preorder(root);
cout << endl;
//postorder
cout << "Post-order:";
postorder(root);
cout << endl;
// search for 7
if(search(root,7))
cout << "7 found!" << endl;
else
cout << "7 doesn't exist!" << endl;
b = remove(root,7);
cout << "----------------" << endl;
//inorder
cout << "In-order:";
inorder(root);
cout << endl;
//preorder
cout << "Pre-order:";
preorder(root);
cout << endl;
//postorder
cout << "Post-order:";
postorder(root);
cout << endl;
if(search(root,7))
cout << "7 found!" << endl;
else
cout << "7 doesn't exist!" << endl;
return 0;
}
8. C語言統計數組中比鄰元素小的數組元素的個數
#include <stdio.h>
int main()
{
int n, i;
int r[10];
int count = 0;
scanf("%d", &n);
if (n <= 10) {
for (i = 0; i < n; i++) {
scanf("%d", &r[i]);
}
for (i = 0; i < n; i++) {
if (i == 0 && r[i] < r[i + 1]) {
count++;
}
else if (i == n - 1 && r[i] < r[i - 1]) {
count++;
}
else if (i > 0 && i < n - 1 && r[i] < r[i - 1] && r[i] < r[i + 1]) {
count++;
}
}
}
printf("count=%d", count);
return 0;
}
9. C語言數據類型問題
#include"stdio.h"
#include<string.h>
intmain()
{
chara[10],b[100];
printf("你好!你是? ");
scanf("%s",&a);
printf("你好%s,我是聊天機器人jiy 您想要我為您做些什麼? ",a);
scanf("%s",&b);
//switch('b')
//{
// case'吃':
// printf("飯桶");
// break;
// default:
// printf("大爺,請您不要輸火星上的阿拉伯數字! ");
//}
if(strcmp(b,"吃")==0) //漢字占兩個位元組,沒法作為一個字元用單引號引用,只能雙引號作為一個字元串來看.
printf("飯桶! ");
else
printf("大爺,請您不要輸火星上的阿拉伯數字! ");
return0;
}
10. 錯誤error C2440: 「return」: 無法從「void *」轉換為「trie」
trie* trie_new()
{
return (trie*)calloc(sizeof(trie_t), 1);
}