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