A. c語言怎麼提取文本文件中我想要的一些信息
使用文件操作函數fscanf即可提取文本當中特定的信息。例如要提取一個整數,可以用fscanf(fp,"%d",&n);要提取一個字元串可以用fscanf(fp,"%s",s),其中fp為文件指針。
1、C語言標准庫提供了一系列文件操作函數。文件操作函數一般以f+單詞的形式來命名(f是file的簡寫),其聲明位於stdio.h頭文件當中。例如:fopen、fclose函數用於文件打開與關閉;fscanf、fgets函數用於文件讀取;fprintf、fputs函數用於文件寫入;ftell、fseek函數用於文件操作位置的獲取與設置。
2、常式:
#include<stdio.h>
inta;
charb,c[100];
intmain(){
FILE*fp1=fopen("input.txt","r");//打開輸入文件
FILE*fp2=fopen("output.txt","w");//打開輸出文件
if(fp1==NULL||fp2==NULL){//若打開文件失敗則退出
puts("不能打開文件!");
return0;
}
fscanf(fp1,"%d",&a);//從輸入文件讀取一個整數
b=fgetc(fp1);//從輸入文件讀取一個字元
fgets(c,100,fp1);//從輸入文件讀取一行字元串
printf("%ld",ftell(fp1));//輸出fp1指針當前位置相對於文件首的偏移位元組數
fputs(c,fp2);//向輸出文件寫入一行字元串
fputc(b,fp2);//向輸出文件寫入一個字元
fprintf(fp2,"%d",a);//向輸出文件寫入一個整數
fclose(fp1);//關閉輸入文件
fclose(fp2);//關閉輸出文件,相當於保存
return0;
}
B. C語言中怎樣用給定字元補空
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
string A;
cout<<"請輸入數字";
cin>>A;
cout<<setfill('0')<<setw(6)<<A<<endl;
return 0;
}
其中setfill用來填充字元,setw用來設置寬度,即為不足6為則用字元填充
C. 將c語言程序補充完整
#include <stdlib.h>
#include <stdio.h>
typedef char datatype; /*單鏈表的類型定義*/
typedef struct node {
datatype data;
struct node *next;
} linklist;
linklist *creatlink() { /*建立一個單鏈表,返回單鏈表的頭指針*/
char ch;
linklist *p,*head,*r;
ch = getchar();
head = p = (linklist *)malloc(sizeof(linklist));
r = head;
while(ch != '$') {
p->next = (linklist *)malloc(sizeof(linklist));
p->next->data = ch;
p = p->next;
ch = getchar();
}
p->next = NULL;
return head;
}
void printList(linklist *head) {/*遍歷單鏈表,並輸出每個結點的數據*/
linklist *p = head->next;
printf("\t\t");
while(p) {
printf("%c ",p->data);
p = p->next;
}
printf("\n\n");
}
void insert(linklist *p,datatype x) {/*一個數值為x的新結點插入到*p結點之後*/
/*請將函數體的代碼補充完整*/
linklist *newnode = (linklist *)malloc(sizeof(linklist));
newnode->data = x;
newnode->next = p->next;
p->next = newnode;
}
void deleteNode(linklist *head,linklist *p) {/*刪除頭指針為head的單鏈表上的*p結點*/
/*請將函數體的代碼補充完整*/
linklist *q = head;
while(q->next != p && q) q = q->next;
if(q) {
q->next = p->next;
free(p);
}
else printf("沒有找到指定的結點p,操作失敗!!!\n");
}
linklist *get(linklist *head, int i) {/*查找單鏈表中的第i個結點,並返回其地址*/
linklist *p = head;
int k = 0;
while(k < i && p) {
p = p->next;
k++;
}
return p;
}
void main() {/*主函數*/
linklist *head,*f;
head = creatlink();/*建立一個單鏈表,head存儲表頭指針*/
printList(head); /*遍歷輸出該單鏈表*/
f = get(head, 2); /*查找單鏈表中的第2個結點,將其地址存儲在變數f中*/
if(f) printf("\nthis is 2 node:%c\n", f->data); /*輸出第2個結點的值*/
/*在第2個結點後面插入一個新結點,其值為』w』*/
insert(head,'w');//這個函數的功能沒有構思好,因為所給的參數的限制
printf("\n after insert a new node:");
printList(head); /*遍歷輸出該單鏈表*/
f= get(head,5);/*查找單鏈表中的第5個結點,將其地址存儲在變數f中*/
if(f) printf("\nthis is 5 node:%c" ); /*輸出第5個結點的值*/
/*刪除第5個結點*/
deleteNode(head,f);
printf("\n after delete a node:");
printList(head); /*遍歷輸出該單鏈表*/
}
D. C語言!! 關於求補運算符(~)的問題
我對這種問題時深惡痛絕的。
c語言規范規定,不允許在相鄰兩次運算中多次改變同一變數的值。
這種寫法違反此規定,故結果不唯一,具體輸出結果取決於編譯器的編譯邏輯,也沒有所謂的標准答案。
參考c89,c99標准。
E. 怎樣用C語言編寫一個實現求任意整數X的補碼
正整數的補碼就是它本身
負整數的補碼就是它在內存中的存儲值
#include
void
main()
{
int
n;
scanf("%d",
&n);
printf("n的補碼:%x\n",
n);/*
16進制和2進制等價
*/
}
如果你的任意整數要求1000位數或者更大,那就要用數組來存儲,並按照補碼規則來計算:負數的補碼就是對反碼加一,而正數不變。
F. 用c語言如何在數字前自動補0
#include<iostream>
usingnamespacestd;
voidmain()
{
inthour=9;
characHour[8]={0};
sprintf(acHour,"%02d",hour);
cout<<acHour;
}
(6)c語言中如何將內容取補擴展閱讀
C語言基本語法
在C程序中,分號是語句終止符,也就是說,每個單獨的語句必須以分號結束。它表示一個邏輯實體的結束。以下是兩個不同的陳述printf("Hello,World! ");return0;
注釋就像幫助C程序中的文本一樣,編譯器會忽略它們。它們以/*開頭並以字元*/結尾,如下所示/*myfirstprograminC*/,不能在注釋中添加註釋,也不會在字元串或字元文字中出現。
G. c語言中補碼怎麼算的
首先建議樓主去惡補一下「原碼」、「反碼」以及「補碼」的相關知識。
以下我就先來分析一下(假設你已經了解了這些知識):
首先我們以無符號的視點來看待題目中的數據:
n = 0x7FFF
m = 0x8000
可知對於n來說,他的二進制模式為:0111 1111 1111 1111
對於m來說,他的二進制模式為: 1000 0000 0000 0000
可以看到,最高位符號位n為0,而m為1
所以用帶符號數的視角來看待m、n的這串二進制數據,我們知道n符號位(最高位)為零,所以n是正數,而m符號位為1,因而是負數。
對於補碼,正數好計算,就是他的值,也就是0111 1111 1111 1111 = 0x7FFF = 32767
對於負數m,為了知道他的值我們可以這么干:
假設m的絕對值|m| = x,則我們對m就可以得到x
m = 1000 0000 0000 0000
取反:
~m = 0111 1111 1111 1111
加1
~m + 1 = 1000 0000 0000 0000
(這道題數據比較特殊,所以你看到m和~m+1結果貌似一樣,事實上你可以列舉其他值算算,一般這兩個位模式是不同的)
可知x = 32768
則可知m = -x = -32768
以上
H. C語言的補碼是怎樣求出來的
正數是取原碼,負數是對應正數逐位取反再加一
比如19,原碼用8位二進制是00010011,那麼它的補碼、反碼都是00010011。
而對於-19,因為19的8 位原碼是00010011,逐位取反得
11101100,再加1,11101101
所以-19的原碼是10010011,反碼是11101100,補碼是11101101
I. C語言怎麼實現移位補1的操作
這個左右移位置添1或者0都是有函數的,添0就是熟悉的「<<」,添1就是「_ctrl_l」函數(好像叫這名字,教材上寫了)。或者你添1寫一個與,比如你給的例子:temp = 0B0000 0001
result = (temp << 1) & temp;盡量不要寫成result = (temp << 1)+ temp;或者result = (temp << 1) + 1;編程少用數學運算,盡量用邏輯運算,減少計算機的負擔。以後程序復雜了用邏輯運算會顯得你很會編程。hah
對了,剛剛你要實現連續移位加1,就不要用result來存值了,直接用temp存。連續移位加一,改成temp = (temp << 1)& 0x01;外面嵌套你想要循環的次數就可。
J. C語言中,如何求一個數的二進制補碼舉個例子,謝謝!
正數的補碼是其原值
例如佔一個位元組的10,二進制為0 000 1010, 第一位0表示+,
補碼也是0 000 1010
負數的話-10, 二進制為1 000 1010, 第一位1 表示-,
補碼求法為 :符號位不變,其餘取反再加1
1 000 1010 取反 1 111 0101
再加1: 1 111 0110